Name: series-workflows5ftk Phase: Succeeded StartedAt: 2026-09-07 21:28:22 +0000 UTC FinishedAt: 2026-09-08 01:11:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[0] Phase: Succeeded StartedAt: 2026-09-07 21:28:22 +0000 UTC FinishedAt: 2026-09-07 21:31:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 21:28:22 +0000 UTC FinishedAt: 2026-09-07 21:31:02 +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": "d50cd8bd-d121-431f-9ee1-572e89648ab8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "cfg80211_nan_set_local_schedule", "nl80211_nan_set_local_sched", "cfg80211_stop_nan" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfc3RvcF9uYW4mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSgpYCB0byBwcmUtYWxsb2NhdGUgYW5kIHBvcHVsYXRlIHRoZSBuZXcgTkFOIGNoYW5uZWwgZGVmaW5pdGlvbnMgYXJyYXkgKGBjaGFuZGVmc2ApIHVzaW5nIGBrY2FsbG9jKClgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2sgYHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZCgpYC4gSWYgdGhlIGRyaXZlciBjYWxsYmFjayBmYWlscywgdGhlIHByZXZpb3VzIHNjaGVkdWxlIChgb2xkX2NoYW5kZWZzYCwgYG9sZF9uX2NoYW5uZWxzYCkgaXMgcmVzdG9yZWQgYW5kIHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkOyBvbiBzdWNjZXNzLCB0aGUgb2xkIGFycmF5IGlzIGZyZWVkLlxuXG5LQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gQWxsIGFsbG9jYXRpb25zIGluIHRoaXMgcGF0Y2ggdXNlIGBrY2FsbG9jKClgICh6ZXJvLWluaXRpYWxpemVkKSwgaW5wdXQgc2NoZWR1bGVzIGFyZSB6ZXJvLWluaXRpYWxpemVkIChga3phbGxvYygpYCBvciBzdHJ1Y3QgaW5pdGlhbGl6ZXIgYHt9YCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB3aGlsZSB1bmluaXRpYWxpemVkLlxuLSBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxlYWsgZHVyaW5nIHN0YXRlIHJvbGxiYWNrLCBmYWxsIHN0cmljdGx5IHVuZGVyIHRoZSBkb21haW4gb2Ygc3RhbmRhcmQgS0FTQU4gYW5kIFNMVUIgZGVidWdnZXJzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlIGluIG5ldC93aXJlbGVzcy9jb3JlLmMsIGFsdGVyaW5nIG1lbW9yeSBtYW5hZ2VtZW50LCBjaGFubmVsIGRlZmluaXRpb24gc3dhcHBpbmcsIGFuZCBlcnJvciByb2xsYmFjayBoYW5kbGluZyBmb3IgTkFOIChOZWlnaGJvciBBd2FyZW5lc3MgTmV0d29ya2luZykgbG9jYWwgc2NoZWR1bGVzLiBUaGlzIHBhdGggaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSB0aGUgbmw4MDIxMSBnZW5lcmljIG5ldGxpbmsgaW50ZXJmYWNlIChOTDgwMjExX0NNRF9OQU5fU0VUX0xPQ0FMX1NDSEVEKSBhbmQgdmlydHVhbCBtYWM4MDIxMSBkZXZpY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMToyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGExZWMyNDE0MzNiNDM0OTg0ZWFiODE1YjFlYTI1NzdkZGY5ZjBiZTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDIxOjI5OjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5pbmRleCBkMTMzMTBmZWY2OTFhLi41YjQyZDZlYzFhZDY2IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xuQEAgLTI4OCw2ICYjNDM7Mjg4LDggQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpXG4ge1xuJiM0MztcdHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZnMgPSBOVUxMLCAqb2xkX2NoYW5kZWZzO1xuJiM0MztcdHU4IG9sZF9uX2NoYW5uZWxzO1xuIFx0aW50IHJldDtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5tdHgpO1xuQEAgLTI5OCwyOSAmIzQzOzMwMCw0MiBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRpZiAod2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZylcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbi1cdHJldCA9IHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChyZGV2LCB3ZGV2LCBzY2hlZCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0d2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IHNjaGVkLVx1MDAzZWRlZmVycmVkO1xuLVxuLVx0a2ZyZWUod2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyk7XG4tXHR3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzID0gTlVMTDtcbi1cdHdkZXYtXHUwMDNldS5uYW4ubl9jaGFubmVscyA9IDA7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcmUtYWxsb2NhdGUgY2hhbmRlZnMsIHNvIHdlIGRvbiYjMzk7dCBydWluIHRoZSBjdXJyZW50XG4mIzQzO1x0ICogc2NoZWR1bGUgb24gYWxsb2NhdGlvbiBmYWlsdXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzY2hlZC1cdTAwM2VuX2NoYW5uZWxzKSB7XG4mIzQzO1x0XHRjaGFuZGVmcyA9IGtjYWxsb2Moc2NoZWQtXHUwMDNlbl9jaGFubmVscywgc2l6ZW9mKCpjaGFuZGVmcyksXG4mIzQzO1x0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIWNoYW5kZWZzKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGlmICghc2NoZWQtXHUwMDNlbl9jaGFubmVscylcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2NoZWQtXHUwMDNlbl9jaGFubmVsczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGNoYW5kZWZzW2ldID0gc2NoZWQtXHUwMDNlbmFuX2NoYW5uZWxzW2ldLmNoYW5kZWY7XG4mIzQzO1x0fVxuIFxuLVx0d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyA9IGtjYWxsb2Moc2NoZWQtXHUwMDNlbl9jaGFubmVscyxcbi1cdFx0XHRcdCAgICAgICBzaXplb2YoKndkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnMpLFxuLVx0XHRcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuLVx0aWYgKCF3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFN3YXAgaW4gdGhlIG5ldyBjaGFuZGVmcyBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyIGFuZCBzZXQgdGhlXG4mIzQzO1x0ICogZGVmZXJyZWQgZmxhZywgc28gaWYgdGhlIGRyaXZlciBjb21wbGV0ZXMgdGhlIHVwZGF0ZSBzeW5jaHJvbm91c2x5XG4mIzQzO1x0ICogdGhlIG5ldyBzY2hlZHVsZSB3aWxsIGJlIGFscmVhZHkgaW4gcGxhY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0b2xkX2NoYW5kZWZzID0gd2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcztcbiYjNDM7XHRvbGRfbl9jaGFubmVscyA9IHdkZXYtXHUwMDNldS5uYW4ubl9jaGFubmVscztcbiYjNDM7XHR3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzID0gY2hhbmRlZnM7XG4mIzQzO1x0d2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gc2NoZWQtXHUwMDNlbl9jaGFubmVscztcbiYjNDM7XHR3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nID0gc2NoZWQtXHUwMDNlZGVmZXJyZWQ7XG4gXG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2NoZWQtXHUwMDNlbl9jaGFubmVsczsgaSYjNDM7JiM0MzspXG4tXHRcdHdkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnNbaV0gPSBzY2hlZC1cdTAwM2VuYW5fY2hhbm5lbHNbaV0uY2hhbmRlZjtcbiYjNDM7XHRyZXQgPSByZGV2X25hbl9zZXRfbG9jYWxfc2NoZWQocmRldiwgd2Rldiwgc2NoZWQpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdC8qIFJlc3RvcmUgdGhlIHByZXZpb3VzIHNjaGVkdWxlIG9uIGZhaWx1cmUgKi9cbiYjNDM7XHRcdHdkZXYtXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdHdkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBvbGRfY2hhbmRlZnM7XG4mIzQzO1x0XHR3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBvbGRfbl9jaGFubmVscztcbiYjNDM7XHRcdGtmcmVlKGNoYW5kZWZzKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuLVx0d2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gc2NoZWQtXHUwMDNlbl9jaGFubmVscztcbiYjNDM7XHRrZnJlZShvbGRfY2hhbmRlZnMpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfc3RvcF9uYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSBpbiBuZXQvd2lyZWxlc3MvY29yZS5jLCBhbHRlcmluZyBtZW1vcnkgbWFuYWdlbWVudCwgY2hhbm5lbCBkZWZpbml0aW9uIHN3YXBwaW5nLCBhbmQgZXJyb3Igcm9sbGJhY2sgaGFuZGxpbmcgZm9yIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpIGxvY2FsIHNjaGVkdWxlcy4gVGhpcyBwYXRoIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIG5sODAyMTEgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSAoTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCkgYW5kIHZpcnR1YWwgbWFjODAyMTEgZGV2aWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMWVjMjQxNDMzYjQzNDk4NGVhYjgxNWIxZWEyNTc3ZGRmOWYwYmU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAyMToyOTo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IGQxMzMxMGZlZjY5MWEuLjViNDJkNmVjMWFkNjYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuYwpAQCAtMjg4LDYgJiM0MzsyODgsOCBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAJCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKQogewomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWZzID0gTlVMTCwgKm9sZF9jaGFuZGVmczsKJiM0MzsJdTggb2xkX25fY2hhbm5lbHM7CiAJaW50IHJldDsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtyZGV2LSZndDt3aXBoeS5tdHgpOwpAQCAtMjk4LDI5ICYjNDM7MzAwLDQyIEBAIGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAlpZiAod2Rldi0mZ3Q7dS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlyZXQgPSByZGV2X25hbl9zZXRfbG9jYWxfc2NoZWQocmRldiwgd2Rldiwgc2NoZWQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQl3ZGV2LSZndDt1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IHNjaGVkLSZndDtkZWZlcnJlZDsKLQotCWtmcmVlKHdkZXYtJmd0O3UubmFuLmNoYW5kZWZzKTsKLQl3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmcyA9IE5VTEw7Ci0Jd2Rldi0mZ3Q7dS5uYW4ubl9jaGFubmVscyA9IDA7CiYjNDM7CS8qCiYjNDM7CSAqIFByZS1hbGxvY2F0ZSBjaGFuZGVmcywgc28gd2UgZG9uJiMzOTt0IHJ1aW4gdGhlIGN1cnJlbnQKJiM0MzsJICogc2NoZWR1bGUgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNjaGVkLSZndDtuX2NoYW5uZWxzKSB7CiYjNDM7CQljaGFuZGVmcyA9IGtjYWxsb2Moc2NoZWQtJmd0O25fY2hhbm5lbHMsIHNpemVvZigqY2hhbmRlZnMpLAomIzQzOwkJCQkgICBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghY2hhbmRlZnMpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoIXNjaGVkLSZndDtuX2NoYW5uZWxzKQotCQlyZXR1cm4gMDsKJiM0MzsJCWZvciAoaW50IGkgPSAwOyBpICZsdDsgc2NoZWQtJmd0O25fY2hhbm5lbHM7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWNoYW5kZWZzW2ldID0gc2NoZWQtJmd0O25hbl9jaGFubmVsc1tpXS5jaGFuZGVmOwomIzQzOwl9CiAKLQl3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmcyA9IGtjYWxsb2Moc2NoZWQtJmd0O25fY2hhbm5lbHMsCi0JCQkJICAgICAgIHNpemVvZigqd2Rldi0mZ3Q7dS5uYW4uY2hhbmRlZnMpLAotCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIXdkZXYtJmd0O3UubmFuLmNoYW5kZWZzKQotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJLyoKJiM0MzsJICogU3dhcCBpbiB0aGUgbmV3IGNoYW5kZWZzIGJlZm9yZSBjYWxsaW5nIHRoZSBkcml2ZXIgYW5kIHNldCB0aGUKJiM0MzsJICogZGVmZXJyZWQgZmxhZywgc28gaWYgdGhlIGRyaXZlciBjb21wbGV0ZXMgdGhlIHVwZGF0ZSBzeW5jaHJvbm91c2x5CiYjNDM7CSAqIHRoZSBuZXcgc2NoZWR1bGUgd2lsbCBiZSBhbHJlYWR5IGluIHBsYWNlLgomIzQzOwkgKi8KJiM0MzsJb2xkX2NoYW5kZWZzID0gd2Rldi0mZ3Q7dS5uYW4uY2hhbmRlZnM7CiYjNDM7CW9sZF9uX2NoYW5uZWxzID0gd2Rldi0mZ3Q7dS5uYW4ubl9jaGFubmVsczsKJiM0MzsJd2Rldi0mZ3Q7dS5uYW4uY2hhbmRlZnMgPSBjaGFuZGVmczsKJiM0MzsJd2Rldi0mZ3Q7dS5uYW4ubl9jaGFubmVscyA9IHNjaGVkLSZndDtuX2NoYW5uZWxzOwomIzQzOwl3ZGV2LSZndDt1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IHNjaGVkLSZndDtkZWZlcnJlZDsKIAotCWZvciAoaW50IGkgPSAwOyBpICZsdDsgc2NoZWQtJmd0O25fY2hhbm5lbHM7IGkmIzQzOyYjNDM7KQotCQl3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmc1tpXSA9IHNjaGVkLSZndDtuYW5fY2hhbm5lbHNbaV0uY2hhbmRlZjsKJiM0MzsJcmV0ID0gcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKHJkZXYsIHdkZXYsIHNjaGVkKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJLyogUmVzdG9yZSB0aGUgcHJldmlvdXMgc2NoZWR1bGUgb24gZmFpbHVyZSAqLwomIzQzOwkJd2Rldi0mZ3Q7dS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBmYWxzZTsKJiM0MzsJCXdkZXYtJmd0O3UubmFuLmNoYW5kZWZzID0gb2xkX2NoYW5kZWZzOwomIzQzOwkJd2Rldi0mZ3Q7dS5uYW4ubl9jaGFubmVscyA9IG9sZF9uX2NoYW5uZWxzOwomIzQzOwkJa2ZyZWUoY2hhbmRlZnMpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQogCi0Jd2Rldi0mZ3Q7dS5uYW4ubl9jaGFubmVscyA9IHNjaGVkLSZndDtuX2NoYW5uZWxzOwomIzQzOwlrZnJlZShvbGRfY2hhbmRlZnMpOwogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaDogQSBEZWVwIERpdmUqKgoKT2theSwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbmV0L3dpcmVsZXNzL2NvcmUuY2AgZmlsZSBhbmQsIG1vcmUgcHJlY2lzZWx5LCB0aGUgYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGVgIGZ1bmN0aW9uLiBUaGlzIHJlcXVpcmVzIGEgbWV0aG9kaWNhbCBhcHByb2FjaCwgbmF0dXJhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIOKAkyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbi4gVGhpcyBtZWFucyBJJiMzOTtsbCBkZWx2ZSBpbnRvIHRoZSBjb250ZXh0LCB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBpbXBhY3RlZCwgYW5kIHRoZSBzcGVjaWZpYyBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24uIEkgbXVzdCBhc2NlcnRhaW4gaXRzIHJlYWNoYWJpbGl0eSBmcm9tIHZhcmlvdXMgcG9pbnRzIGluIHRoZSB3aXJlbGVzcyBzdGFjay4KClRvIGdldCBhIHF1aWNrIGFuZCBkZWVwIHZpZXcsIEkmIzM5O2xsIGxldmVyYWdlIG15IGV4aXN0aW5nIHRvb2xraXQuIEkmIzM5O2xsIHJlYWNoIGZvciBlaXRoZXIgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGV4YW1pbmUgYm90aCB0aGUgYG5ldC93aXJlbGVzcy9jb3JlLmNgIGZpbGUgYW5kIHRoZSBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAgZnVuY3Rpb24gaW4gZGV0YWlsLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gcXVpY2tseSBwaW5wb2ludCBleGFjdGx5IHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgdW5kZXJzdGFuZCB0aGUgbG9jYWwgZnVuY3Rpb24sIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBNeSBnb2FsIGlzIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NvcmUuYz0yNTU9dm9pZCBjZmc4MDIxMV9zdG9wX25hbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNzYtXHQvKiBVbnNjaGVkdWxlIGFsbCAqL1xubmV0L3dpcmVsZXNzL2NvcmUuYzoyNzc6XHRjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIFx1MDAyNmVtcHR5X3NjaGVkKTtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjc4LVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMjg2LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyODc6aW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yODgtXHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oPTU2MT12b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmgtNTYzLVxubmV0L3dpcmVsZXNzL2NvcmUuaDo1NjQ6aW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuaC01NjUtXHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE3Njg1PXN0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzc2Mi1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc3NjM6XHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShyZGV2LCB3ZGV2LCBzY2hlZCk7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3NzY0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDk1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBjZmc4MDIxMSBCdWlsZCBQcm9jZXNzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gaG93IGBjZmc4MDIxMWAgZ2V0cyBidWlsdCBhbmQgY29uZmlndXJlZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBjb3JlIGJ1aWxkIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIGBjZmc4MDIxMWAsIGFuZCB0aGVuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgbmV0L3dpcmVsZXNzL01ha2VmaWxlYCB0byBzZWUgaG93IHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB1bHRpbWF0ZWx5IHRyYW5zbGF0ZSBpbnRvIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgYW5kIG9iamVjdCBmaWxlIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGludGVncmF0aW9uIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjayBhbmQgYW55IHBvdGVudGlhbCBidWlsZC10aW1lIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGFwcHJvYWNoLCBLY29uZmlnIGZvciB0aGUgJiMzNDt3aGF0JiMzNDsgYW5kIE1ha2VmaWxlIGZvciB0aGUgJiMzNDtob3cmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotLipjb3JlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvTWFrZWZpbGU9Mz1vYmoteSAmIzQzOz0gdGVzdHMvXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtNC1cbm5ldC93aXJlbGVzcy9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19XRVhUX0NPUkUpICYjNDM7PSB3ZXh0LWNvcmUub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX1dFWFRfUFJPQykgJiM0Mzs9IHdleHQtcHJvYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgwMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBXaXJlbGVzcyBNYWtlZmlsZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHRyb3VibGVzaG9vdCB0aGlzIGlzc3VlIGlzIHRvIGV4YW1pbmUgdGhlIGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSB3aXJlbGVzcyBuZXR3b3JraW5nIGNvbXBvbmVudHMgaXMgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaW5ncyBhcmUgYmVpbmcgY29tcGlsZWQsIGxpbmtlZCwgYW5kIHBvdGVudGlhbGx5IHdoZXJlIHNwZWNpZmljIG1vZHVsZSBkZXBlbmRlbmNpZXMgYXJlIHNldC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHVudXN1YWwgb3IgdW5leHBlY3RlZCBpbiB0aGUgYnVpbGQgZmxhZ3MsIGluY2x1ZGUgcGF0aHMsIG9yIG1vZHVsZSBkZWNsYXJhdGlvbnMuIE1heWJlIHRoZXJlJiMzOTtzIGEgbWlzY29uZmlndXJhdGlvbiBpbiBob3cgYSBkcml2ZXIgaXMgYmVpbmcgYnVpbHQsIGEgZGVwZW5kZW5jeSB0aGF0JiMzOTtzIG5vdCBiZWluZyBtZXQsIG9yIGEgY29uZmxpY3Rpbmcgc2V0dGluZy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHN0YXJ0IHBhcnNpbmcgdGhpcyBNYWtlZmlsZSBmb3IgY2x1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0b2JqLSQoQ09ORklHX0NGRzgwMjExKSAmIzQzOz0gY2ZnODAyMTEub1xuICAgMzpcdG9iai15ICYjNDM7PSB0ZXN0cy9cbiAgIDQ6XHRcbiAgIDU6XHRvYmotJChDT05GSUdfV0VYVF9DT1JFKSAmIzQzOz0gd2V4dC1jb3JlLm9cbiAgIDY6XHRvYmotJChDT05GSUdfV0VYVF9QUk9DKSAmIzQzOz0gd2V4dC1wcm9jLm9cbiAgIDc6XHRvYmotJChDT05GSUdfV0VYVF9QUklWKSAmIzQzOz0gd2V4dC1wcml2Lm9cbiAgIDg6XHRcbiAgIDk6XHRjZmc4MDIxMS15ICYjNDM7PSBjb3JlLm8gc3lzZnMubyByYWRpb3RhcC5vIHV0aWwubyByZWcubyBzY2FuLm8gbmw4MDIxMS5vXG4gIDEwOlx0Y2ZnODAyMTEteSAmIzQzOz0gbWxtZS5vIGlic3MubyBzbWUubyBjaGFuLm8gZXRodG9vbC5vIG1lc2gubyBhcC5vIHRyYWNlLm8gb2NiLm9cbiAgMTE6XHRjZmc4MDIxMS15ICYjNDM7PSBtaWNoYWVsLW1pYy5vIHBtc3Iub1xuICAxMjpcdGNmZzgwMjExLSQoQ09ORklHX09GKSAmIzQzOz0gb2Yub1xuICAxMzpcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICYjNDM7PSBkZWJ1Z2ZzLm9cbiAgMTQ6XHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9XRVhUKSAmIzQzOz0gd2V4dC1jb21wYXQubyB3ZXh0LXNtZS5vXG4gIDE1Olx0XG4gIDE2Olx0Q0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcbiAgMTc6XHRcbiAgMTg6XHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVMpICYjNDM7PSBzaGlwcGVkLWNlcnRzLm9cbiAgMTk6XHRpZm5lcSAoJChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSKSwpXG4gIDIwOlx0Y2ZnODAyMTEteSAmIzQzOz0gZXh0cmEtY2VydHMub1xuICAyMTpcdGVuZGlmXG4gIDIyOlx0XG4gIDIzOlx0JChvYmopL3NoaXBwZWQtY2VydHMuYzogJChzb3J0ICQod2lsZGNhcmQgJChzcmMpL2NlcnRzLyouaGV4KSlcbiAgMjQ6XHRcdEAkKGtlY2hvKSBcJiMzNDsgIEdFTiAgICAgJEBcJiMzNDtcbiAgMjU6XHRcdCQoUSkoZWNobyAmIzM5OyNpbmNsdWRlIFwmIzM0O3JlZy5oXCYjMzQ7JiMzOTs7IFxcXG4gIDI2Olx0XHQgIGVjaG8gJiMzOTtjb25zdCB1OCBzaGlwcGVkX3JlZ2RiX2NlcnRzW10gPSB7JiMzOTs7IFxcXG4gIDI3Olx0XHQgIGVjaG8gfCBjYXQgLSAkXiA7IFxcXG4gIDI4Olx0XHQgIGVjaG8gJiMzOTt9OyYjMzk7OyBcXFxuICAyOTpcdFx0ICBlY2hvICYjMzk7dW5zaWduZWQgaW50IHNoaXBwZWRfcmVnZGJfY2VydHNfbGVuID0gc2l6ZW9mKHNoaXBwZWRfcmVnZGJfY2VydHMpOyYjMzk7OyBcXFxuICAzMDpcdFx0ICkgXHUwMDNlICRAXG4gIDMxOlx0XG4gIDMyOlx0JChvYmopL2V4dHJhLWNlcnRzLmM6ICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikgXFxcbiAgMzM6XHRcdFx0ICAgICAgJChzb3J0ICQod2lsZGNhcmQgJChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSKS8qLng1MDkpKVxuICAzNDpcdFx0QCQoa2VjaG8pIFwmIzM0OyAgR0VOICAgICAkQFwmIzM0O1xuICAzNTpcdFx0JChRKShzZXQgLWU7IFxcXG4gIDM2Olx0XHQgIGFsbGY9XCYjMzQ7XCYjMzQ7OyBcXFxuICAzNzpcdFx0ICBmb3IgZiBpbiAkXiA7IGRvIFxcXG4gIDM4Olx0XHQgICAgICB0ZXN0IC1mICQkZiB8fCBjb250aW51ZTtcXFxuICAzOTpcdFx0ICAgICAgIyBzaW1pbGFyIHRvIGhleGR1bXAgLXYgLWUgJiMzOTsxLzEgXCYjMzQ7MHglLjJ4LFwmIzM0OyBcJiMzNDtcXG5cJiMzNDsmIzM5OyBcXFxuICA0MDpcdFx0ICAgICAgdGhpc2Y9JCQob2QgLUFuIC12IC10eDEgXHUwMDNjICQkZiB8IFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg0MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgV2lyZWxlc3MgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENGRzgwMjExYC4gVGltZSB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBrZXJuZWwgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgYENGRzgwMjExYCBpcyBvYnZpb3VzbHkgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoYXQgZmlsZSB0byB1bmRlcnN0YW5kIHdoaWNoIG90aGVyIG9wdGlvbnMsIGZlYXR1cmVzLCBvciBtb2R1bGVzIHJlbHkgb24gb3IgYXJlIGxpbmtlZCB0byBgQ0ZHODAyMTFgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWVwZXIgYW5hbHlzaXMgSSYjMzk7bSBwbGFubmluZy4gSSBuZWVkIHRvIGVuc3VyZSBub3RoaW5nIGJyZWFrcyB1bmV4cGVjdGVkbHkgbGF0ZXIgb24gZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENGRzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7YWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTY4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRXhhbWluaW5nIHRoZSBDb3JlIFdpcmVsZXNzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgd2lyZWxlc3MgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC93aXJlbGVzcy9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGUgbGluZXMgcmVsYXRlZCB0byBgQ09ORklHX0NGRzgwMjExYC4gVGhhdCYjMzk7cyB0aGUgZm91bmRhdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBtYWM4MDIxMSwgdGhlIGNvcmUgd2lyZWxlc3Mgc3RhY2suIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgbG9naWMgYXJvdW5kIGl0IHRoYXQmIzM5O3MgY2F1c2luZyB0aGUgaXNzdWUsIHNvIEkmIzM5O2xsIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGRlcGVuZGVuY2llcyBvbiBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzLCBtYXliZSBzb21lIHBsYXRmb3JtLXNwZWNpZmljIHNlbGVjdGlvbnMsIGFuZCwgaG9wZWZ1bGx5LCBhIGNsdWUgYXMgdG8gd2h5IHRoaW5ncyBhcmUgYmVoYXZpbmcgdGhlIHdheSB0aGV5IGFyZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGluIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTU6XHRcdGJvb2xcbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgQ0ZHODAyMTFcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgMjA6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjE6XHRcdHNlbGVjdCBDUkMzMlxuICAyMjpcdFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXG4gIDIzOlx0XHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4mIzM5O3RcbiAgMjQ6XHRcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxuICAyODpcdFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcbiAgMzE6XHRcbiAgMzI6XHRcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXG4gIDM1Olx0XG4gIDM2Olx0aWYgQ0ZHODAyMTFcbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgTkw4MDIxMV9URVNUTU9ERVxuICAzOTpcdFx0Ym9vbCBcJiMzNDtubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmRcJiMzNDtcbiAgNDA6XHRcdGhlbHBcbiAgNDE6XHRcdCAgVGhlIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZCBoZWxwcyBpbXBsZW1lbnRpbmcgdGhpbmdzIGxpa2VcbiAgNDI6XHRcdCAgZmFjdG9yeSBjYWxpYnJhdGlvbiBvciB2YWxpZGF0aW9uIHRvb2xzIGZvciB3aXJlbGVzcyBjaGlwcy5cbiAgNDM6XHRcbiAgNDQ6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIE9OTFkgZm9yIGtlcm5lbHMgdGhhdCBhcmUgc3BlY2lmaWNhbGx5XG4gIDQ1Olx0XHQgIGJ1aWx0IGZvciBzdWNoIHB1cnBvc2VzLlxuICA0NjpcdFxuICA0NzpcdFx0ICBEZWJ1Z2dpbmcgdG9vbHMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gZW5kIHVwIGluIHRoZSBoYW5kcyBvZlxuICA0ODpcdFx0ICB1c2VycyBzaG91bGQgYmV0dGVyIGJlIGltcGxlbWVudGVkIHdpdGggZGVidWdmcy5cbiAgNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIE5BTiBTY2hlZHVsZXIqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkYC4gSXQmIzM5O3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgZHVnIGludG8gdGhlIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpIGNvZGUuIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgaXMgdHJhY2luZyB0aGUgbmV0bGluayBjb21tYW5kcyB0aGF0IGV2ZW50dWFsbHkgaW52b2tlIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHNwZWNpZmljYWxseSB0aGUgbmV0bGluayBtZXNzYWdlIHR5cGUsIGF0dHJpYnV0ZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBjb250ZXh0IHRoYXQgZ2V0cyBwYXNzZWQgYWxvbmcuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBzb21lIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nIGFuZCBlbnN1cmluZyB0aGUgc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGFyZSBiZWluZyBzZXQgYW5kIGludGVycHJldGVkIGNvcnJlY3RseS4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBlbnRyeSBwb2ludCBhbmQgdW5kZXJzdGFuZCB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IG9wZXJhdGlvbi4gVGltZSB0byBmaXJlIHVwIHRoZSBkZWJ1Z2dlciBhbmQgc3RhcnQgdHJhY2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmM9MTc2NzI9c3RhdGljIGJvb2wgbmw4MDIxMV9uYW5faXNfc2NoZWRfZW1wdHkoc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzY4NC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc2ODU6c3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc2ODYtXHRcdFx0XHQgICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NzQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNjExLVx0XHQuY21kID0gTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjA2MTI6XHRcdC5kb2l0ID0gbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDYxMy1cdFx0LmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjkzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgbmw4MDIxMSBSZWFjaGFiaWxpdHkgYW5kIE5BTiBTdXBwb3J0KioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlIGNhbiBhY3R1YWxseSByZWFjaCBubDgwMjExIGZyb20gc3l6a2FsbGVyLiBJIGtub3cgc3l6a2FsbGVyJiMzOTtzIHByZXR0eSBzb2xpZCB3aXRoIGl0cyBuZXRsaW5rIGFuZCBubDgwMjExIHN0dWZmLCBsZXZlcmFnaW5nIGVpdGhlciBtYWM4MDIxMV9od3NpbSBvciB0aG9zZSB2aXJ0dWFsIGRldmljZXMgbGlrZSB2aXJ0X3dpZmkuIFNvLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGFjY2Vzcy4gTm93LCBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgYE1BQzgwMjExX0hXU0lNYCBhbmQgYENGRzgwMjExYCBhcmUgY29ycmVjdGx5IGNvbmZpZ3VyZWQuIFRoYXQgd291bGQgYmUgdGhlIGZpcnN0IHN0ZXAuIFRoZW4gdGhlIGtleSBxdWVzdGlvbiBpcywgZG9lcyBtYWM4MDIxMV9od3NpbSAqYWN0dWFsbHkqIHN1cHBvcnQgTkFOPyBJIGNhbiYjMzk7dCBhc3N1bWUgYW55dGhpbmcuIFRvIGJlIHN1cmUsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBNQUM4MDIxMV9IV1NJTWAgY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBkZWZpbml0aXZlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFuX3NldF9sb2NhbF9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9jZmc4MDIxMS5oPTQ4NDM9c3RydWN0IG1nbXRfZnJhbWVfcmVncyB7XG4tLVxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC01MTkyLSAqXHRBbGwgb3RoZXIgcGFyYW1ldGVycyBtdXN0IGJlIGlnbm9yZWQuXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oOjUxOTM6ICogQG5hbl9zZXRfbG9jYWxfc2NoZWQ6IGNvbmZpZ3VyZSB0aGUgbG9jYWwgc2NoZWR1bGUgZm9yIE5BTi4gVGhlIHNjaGVkdWxlXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTUxOTQtICpcdGNvbnNpc3RzIG9mIGFuIGFycmF5IG9mICVjZmc4MDIxMV9uYW5fY2hhbm5lbCBhbmQgdGhlIHNjaGVkdWxlIGl0c2VsZixcbi0tXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oPTUyODA9c3RydWN0IGNmZzgwMjExX29wcyB7XG4tLVxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC01NTg2LVx0XHRcdFx0ICAgdTMyIGNoYW5nZXMpO1xuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaDo1NTg3Olx0aW50XHQoKm5hbl9zZXRfbG9jYWxfc2NoZWQpKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTU1ODgtXHRcdFx0XHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTk1Mz1pZWVlODAyMTFfc2V0X2xvY2FsX25hbl9zY2hlZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy01OTYwLVxubmV0L21hYzgwMjExL2NmZy5jOjU5NjE6XHRyZXR1cm4gaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc2RhdGEsIHNjaGVkKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTYyLX1cbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTk3Nj1jb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTYwOTEtXHQuc2V0X2VwY3MgPSBpZWVlODAyMTFfc2V0X2VwY3MsXG5uZXQvbWFjODAyMTEvY2ZnLmM6NjA5MjpcdC5uYW5fc2V0X2xvY2FsX3NjaGVkID0gaWVlZTgwMjExX3NldF9sb2NhbF9uYW5fc2NoZWQsXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjA5My1cdC5uYW5fc2V0X3BlZXJfc2NoZWQgPSBpZWVlODAyMTFfc2V0X3BlZXJfbmFuX3NjaGVkLFxuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmM9MTA1MD1pZWVlODAyMTFfbmV3X2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL2NoYW4uYy0xMDcxLVx0ICogV2UgaWdub3JlZCBhIGRyaXZlciBlcnJvciwgc2VlIF9pZWVlODAyMTFfc2V0X2FjdGl2ZV9saW5rcyBhbmQvb3Jcbm5ldC9tYWM4MDIxMS9jaGFuLmM6MTA3MjpcdCAqIGllZWU4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkXG5uZXQvbWFjODAyMTEvY2hhbi5jLTEwNzMtXHQgKi9cbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMDgyPWludCBpZWVlODAyMTFfbWVzaF9maW5pc2hfY3NhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIwODUtLyogTkFOIGNvZGUgKi9cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIwODY6aW50IGllZWU4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjA4Ny1cdFx0XHRcdCAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpO1xuLS1cbm5ldC9tYWM4MDIxMS9uYW4uYz0yNDE9aWVlZTgwMjExX25hbl9maW5kX2ZyZWVfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKnNjaGVkX2NmZylcbi0tXG5uZXQvbWFjODAyMTEvbmFuLmMtMjUwLVxubmV0L21hYzgwMjExL25hbi5jOjI1MTppbnQgaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvbmFuLmMtMjUyLVx0XHRcdFx0ICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jPTI1NT12b2lkIGNmZzgwMjExX3N0b3BfbmFuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI3Ni1cdC8qIFVuc2NoZWR1bGUgYWxsICovXG5uZXQvd2lyZWxlc3MvY29yZS5jOjI3NzpcdGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2RldiwgXHUwMDI2ZW1wdHlfc2NoZWQpO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0yNzgtXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yODYtXG5uZXQvd2lyZWxlc3MvY29yZS5jOjI4NzppbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI4OC1cdFx0XHRcdCAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMzI3LVxubmV0L3dpcmVsZXNzL2NvcmUuYzozMjg6XHRyZXQgPSByZGV2X25hbl9zZXRfbG9jYWxfc2NoZWQocmRldiwgd2Rldiwgc2NoZWQpO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0zMjktXHRpZiAocmV0KSB7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaD01NjE9dm9pZCBjZmc4MDIxMV9zdG9wX3BkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU2My1cbm5ldC93aXJlbGVzcy9jb3JlLmg6NTY0OmludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTY1LVx0XHRcdFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNzY3Mj1zdGF0aWMgYm9vbCBubDgwMjExX25hbl9pc19zY2hlZF9lbXB0eShzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3Njg0LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNzY4NTpzdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzY4Ni1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc3NjItXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3NzYzOlx0cmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2Rldiwgc2NoZWQpO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzc2NC19XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTc0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDYxMS1cdFx0LmNtZCA9IE5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIwNjEyOlx0XHQuZG9pdCA9IG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZCxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjA2MTMtXHRcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcbi0tXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaD0xMDY0PXN0YXRpYyBpbmxpbmUgaW50XG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxMDY1OnJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaC0xMDY2LVx0XHRcdCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oLTEwNzAtXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxMDcxOlx0dHJhY2VfcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIHNjaGVkKTtcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oOjEwNzI6XHRpZiAocmRldi1cdTAwM2VvcHMtXHUwMDNlbmFuX3NldF9sb2NhbF9zY2hlZClcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oOjEwNzM6XHRcdHJldCA9IHJkZXYtXHUwMDNlb3BzLVx1MDAzZW5hbl9zZXRfbG9jYWxfc2NoZWQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2Rldiwgc2NoZWQpO1xubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTA3NC1cdGVsc2Vcbi0tXG5uZXQvd2lyZWxlc3MvdHJhY2UuaD0yNDE5PVRSQUNFX0VWRU5UKHJkZXZfZGVsX25hbl9mdW5jLFxuLS1cbm5ldC93aXJlbGVzcy90cmFjZS5oLTI0MzYtXG5uZXQvd2lyZWxlc3MvdHJhY2UuaDoyNDM3OlRSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZCxcbm5ldC93aXJlbGVzcy90cmFjZS5oLTI0MzgtXHRUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkxMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTkFOIGFuZCBtYWM4MDIxMV9od3NpbSoqCgpPa2F5LCBzbyBgbWFjODAyMTFgIGhhcyBzdXBwb3J0IGZvciBOQU4sIHRoYXQmIzM5O3MgZ29vZCBuZXdzLiBBbmQgaWYgYG1hYzgwMjExX2h3c2ltYCBzdXBwb3J0cyBgbWFjODAyMTFgLCB0aGVuIEkgaGF2ZSBhIHBvdGVudGlhbCB0ZXN0YmVkLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIHRob3VnaCwgbGV0JiMzOTtzIHZlcmlmeSBgTUFDODAyMTFgJiMzOTtzIGNvbmZpZ3VyYXRpb24gaW4gdGhlIEtjb25maWcgZmlsZXMuIFRpbWUgdG8gY2hlY2sgYG5ldC9tYWM4MDIxMS9LY29uZmlnYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBiZWZvcmUgSSBzdGFydCBsb29raW5nIGF0IHRoZSBkZXRhaWxzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiB0byB3b3JrIGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMzNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgTkFOIFNjaGVkdWxlcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgTkFOIHNjaGVkdWxpbmcgaXNzdWUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIGBuZXQvd2lyZWxlc3MvY29yZS5jYC4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgYXJvdW5kIHRoZSBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAgZnVuY3Rpb24uIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdGhlIGNvcmUgbG9naWMgZm9yIHNldHRpbmcgdXAgbG9jYWwgc2NoZWR1bGVzIGluIHRoZSBOQU4gc3lzdGVtIHRvIHJlc2lkZS4gSSYjMzk7bSBhaW1pbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCB0aGUgcG90ZW50aWFsIHNwb3RzIHdoZXJlIGEgYnVnIG1pZ2h0IGJlIGx1cmtpbmcuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFx0d2Rldi1cdTAwM2Vpc19ydW5uaW5nID0gZmFsc2U7XG4gMjgxOlx0XG4gMjgyOlx0XHRldGhfemVyb19hZGRyKHdkZXYtXHUwMDNldS5uYW4uY2x1c3Rlcl9pZCk7XG4gMjgzOlx0XG4gMjg0Olx0XHRyZGV2LVx1MDAzZW9wZW5jb3VudC0tO1xuIDI4NTpcdH1cbiAyODY6XHRcbiAyODc6XHRpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gMjg4Olx0XHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiAyODk6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcbiAyOTA6XHR7XG4gMjkxOlx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWZzID0gTlVMTCwgKm9sZF9jaGFuZGVmcztcbiAyOTI6XHRcdHU4IG9sZF9uX2NoYW5uZWxzO1xuIDI5MzpcdFx0aW50IHJldDtcbiAyOTQ6XHRcbiAyOTU6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5tdHgpO1xuIDI5NjpcdFxuIDI5NzpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTiB8fCAhd2Rldl9ydW5uaW5nKHdkZXYpKVxuIDI5ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyOTk6XHRcbiAzMDA6XHRcdGlmICh3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nKVxuIDMwMTpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDMwMjpcdFxuIDMwMzpcdFx0LypcbiAzMDQ6XHRcdCAqIFByZS1hbGxvY2F0ZSBjaGFuZGVmcywgc28gd2UgZG9uJiMzOTt0IHJ1aW4gdGhlIGN1cnJlbnRcbiAzMDU6XHRcdCAqIHNjaGVkdWxlIG9uIGFsbG9jYXRpb24gZmFpbHVyZS5cbiAzMDY6XHRcdCAqL1xuIDMwNzpcdFx0aWYgKHNjaGVkLVx1MDAzZW5fY2hhbm5lbHMpIHtcbiAzMDg6XHRcdFx0Y2hhbmRlZnMgPSBrY2FsbG9jKHNjaGVkLVx1MDAzZW5fY2hhbm5lbHMsIHNpemVvZigqY2hhbmRlZnMpLFxuIDMwOTpcdFx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4gMzEwOlx0XHRcdGlmICghY2hhbmRlZnMpXG4gMzExOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzEyOlx0XG4gMzEzOlx0XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzY2hlZC1cdTAwM2VuX2NoYW5uZWxzOyBpJiM0MzsmIzQzOylcbiAzMTQ6XHRcdFx0XHRjaGFuZGVmc1tpXSA9IHNjaGVkLVx1MDAzZW5hbl9jaGFubmVsc1tpXS5jaGFuZGVmO1xuIDMxNTpcdFx0fVxuIDMxNjpcdFxuIDMxNzpcdFx0LypcbiAzMTg6XHRcdCAqIFN3YXAgaW4gdGhlIG5ldyBjaGFuZGVmcyBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyIGFuZCBzZXQgdGhlXG4gMzE5Olx0XHQgKiBkZWZlcnJlZCBmbGFnLCBzbyBpZiB0aGUgZHJpdmVyIGNvbXBsZXRlcyB0aGUgdXBkYXRlIHN5bmNocm9ub3VzbHlcbiAzMjA6XHRcdCAqIHRoZSBuZXcgc2NoZWR1bGUgd2lsbCBiZSBhbHJlYWR5IGluIHBsYWNlLlxuIDMyMTpcdFx0ICovXG4gMzIyOlx0XHRvbGRfY2hhbmRlZnMgPSB3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzO1xuIDMyMzpcdFx0b2xkX25fY2hhbm5lbHMgPSB3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHM7XG4gMzI0Olx0XHR3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzID0gY2hhbmRlZnM7XG4gMzI1Olx0XHR3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBzY2hlZC1cdTAwM2VuX2NoYW5uZWxzO1xuIDMyNjpcdFx0d2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IHNjaGVkLVx1MDAzZWRlZmVycmVkO1xuIDMyNzpcdFxuIDMyODpcdFx0cmV0ID0gcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKHJkZXYsIHdkZXYsIHNjaGVkKTtcbiAzMjk6XHRcdGlmIChyZXQpIHtcbiAzMzA6XHRcdFx0LyogUmVzdG9yZSB0aGUgcHJldmlvdXMgc2NoZWR1bGUgb24gZmFpbHVyZSAqL1xuIDMzMTpcdFx0XHR3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nID0gZmFsc2U7XG4gMzMyOlx0XHRcdHdkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBvbGRfY2hhbmRlZnM7XG4gMzMzOlx0XHRcdHdkZXYtXHUwMDNldS5uYW4ubl9jaGFubmVscyA9IG9sZF9uX2NoYW5uZWxzO1xuIDMzNDpcdFx0XHRrZnJlZShjaGFuZGVmcyk7XG4gMzM1Olx0XHRcdHJldHVybiByZXQ7XG4gMzM2Olx0XHR9XG4gMzM3Olx0XG4gMzM4Olx0XHRrZnJlZShvbGRfY2hhbmRlZnMpO1xuIDMzOTpcdFxuIDM0MDpcdFx0cmV0dXJuIDA7XG4gMzQxOlx0fVxuIDM0MjpcdFxuIDM0MzpcdHZvaWQgY2ZnODAyMTFfc3RvcF9wZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gMzQ0Olx0XHRcdCAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4gMzQ1Olx0e1xuIDM0NjpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5Lm10eCk7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRpZiAoV0FSTl9PTih3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QRCkpXG4gMzQ5Olx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NjQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlYCBQYXRjaCBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaW4gYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGVgIHNlZW1zIHRvIGJlIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgaG93IGNoYW5uZWwgZGVmaW5pdGlvbnMgYXJlIGhhbmRsZWQuIFByZXZpb3VzbHksIGl0IGFsbG9jYXRlZCBgY2hhbmRlZnNgICphZnRlciogdGhlIGluaXRpYWwgY2FsbCBhbmQgdGhlbiBjb25kaXRpb25hbGx5IGZyZWVkIGFuZCByZWFsbG9jYXRlZCBiYXNlZCBvbiB0aGUgaW5pdGlhbCBjYWxsJiMzOTtzIHJldHVybi4gTm93LCBpdCYjMzk7cyBjaGFuZ2VkIHRvIHByZS1hbGxvY2F0ZSwgc2V0IHRoZSB2YXJpYWJsZXMgKmJlZm9yZSogdGhlIGNyaXRpY2FsIGNhbGwgYHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZGAsIGFuZCB0aGVuIGltcGxlbWVudCBhIHByb3BlciByb2xsYmFjayBtZWNoYW5pc20gb24gZmFpbHVyZSwgcmVzdG9yaW5nIHRoZSBvbGQgc3RhdGUuICBJZiB0aGUgY2FsbCAqc3VjY2VlZHMqLCBpdCByZWxlYXNlcyB0aGUgKm9sZCogZGF0YS4KCk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmUgYXJvdW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW50cm9kdWNlZCBieSB0aGUgbmV3IG9yZGVyIG9mIG9wZXJhdGlvbnMgYW5kIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzLiBQcmUtYWxsb2NhdGlvbiBjb21iaW5lZCB3aXRoIHBvaW50ZXIgc3dhcHBpbmcgYW5kIGNhbGxiYWNrIGJlaGF2aW9yIGNhbiBpbnRyb2R1Y2Ugc3VidGxlIGVycm9ycywgZXNwZWNpYWxseSBnaXZlbiB0aGUgJiMzNDtkZWZlcnJlZCYjMzQ7IG5hdHVyZSBvZiB0aGUgc2NoZWR1bGUgdXBkYXRlLiBUaGlzIHJldmlzZWQgc3RydWN0dXJlLCB3aXRoIGl0cyBwcmUtYWxsb2NhdGlvbiwgcG9pbnRlciBtYW5pcHVsYXRpb24sIGFuZCBjb25kaXRpb25hbCByb2xsYmFjaywgc2NyZWFtcyAmIzM0O2Z1enogbWUhJiMzNDsgVGhlc2Uga2luZHMgb2YgY2hhbmdlcyBhcmUgdGhlIHByaW1lIHRhcmdldHMgZm9yIHVuY292ZXJpbmcgbWVtb3J5IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBhbmQgb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzLgoKUmVhY2hhYmlsaXR5IGlzIGRlZmluaXRlbHkgaGlnaC4gSSBjYW4gaGl0IHRoaXMgZnVuY3Rpb24gZWFzaWx5IHVzaW5nIHRoZSBgTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRGAgTmV0bGluayBjb21tYW5kLiBUaGF04oCZcyBhIHN0cmFpZ2h0Zm9yd2FyZCBpbnRlcmZhY2UgZm9yIGFueSB3aXJlbGVzcyBuZXR3b3JrIChzaW11bGF0ZWQgb3IgcmVhbCkuIFRoZSBmYWN0IHRoYXQgaXQgbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgYW5kIHN0YXRlIHdpdGhpbiBhIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnQsIGFzIHBlciBndWlkZWxpbmVzLCBjb25maXJtcyB0aGUgZnV6emluZyB2YWx1ZS4KCkZyb20gYSBmb2N1cyBzeW1ib2wgcGVyc3BlY3RpdmUsIEkmIzM5O20gY29uZmlkZW50IGluIGluY2x1ZGluZzoKCiogICBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAgKHRoZSBtb2RpZmllZCBmdW5jdGlvbikKKiAgIGBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWRgICh0aGUgZW50cnkgcG9pbnQpCiogICBgY2ZnODAyMTFfc3RvcF9uYW5gIChhIGNhbGxlcikKCkkmIzM5O2xsIGJlIHNldHRpbmcgdXAgYSB0ZXN0IGVudmlyb25tZW50LCBsaWtlbHkgd2l0aCBgTUFDODAyMTFfSFdTSU1gIHJ1bm5pbmcgd2l0aGluIFFFTVUgd2l0aCBzeXprYWxsZXIuIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBDRkc4MDIxMWAsIGBOTDgwMjExX1RFU1RNT0RFYCAoanVzdCB0byBiZSBzYWZlKSwgYW5kLCBvZiBjb3Vyc2UsIGBNQUM4MDIxMWAgYW5kIGBNQUM4MDIxMV9IV1NJTWAgZm9yIHRoZSBlbXVsYXRlZCBkZXZpY2UuIFRoZXNlIHNldHRpbmdzIGdpdmUgbWUgZ29vZCBjb3ZlcmFnZS4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gdHJpZ2dlciBzb21lIGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9IV1NJTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBWaXJ0dWFsIFdpcmVsZXNzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgdmlydHVhbCB3aXJlbGVzcyBuZXR3b3JrIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGRyaXZlci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBqdWljeSBkZXRhaWxzIGFib3V0IGZlYXR1cmUgZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGtlcHQuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0b3AgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIHdpcmVsZXNzIGxhbmRzY2FwZSBhbmQgd2hhdCYjMzk7cyBjb25maWd1cmFibGUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjb25maWcgTUFDODAyMTFfSFdTSU1cbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4gICAzOlx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gICA0Olx0XHRoZWxwXG4gICA1Olx0XHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3RcbiAgIDY6XHRcdCAgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjayAobWFjODAyMTEpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgbm90XG4gICA3Olx0XHQgIG5lZWRlZCBmb3Igbm9ybWFsIHdpcmVsZXNzIExBTiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy4gU2VlXG4gICA4Olx0XHQgIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9tYWM4MDIxMV9od3NpbSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3dcbiAgIDk6XHRcdCAgdG8gdXNlIHRoaXMgdG9vbC5cbiAgMTA6XHRcbiAgMTE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG4gIDEyOlx0XHQgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFZJUlRfV0lGSVxuICAxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7V2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXCYjMzQ7XG4gIDE2Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZXRoZXJuZXQgY29ubmVjdGlvbnMgdG8gYXBwZWFyIGFzIGlmIHRoZXlcbiAgMTk6XHRcdCAgYXJlIHdpZmkgY29ubmVjdGlvbnMgdGhyb3VnaCBhIHNwZWNpYWwgcnRuZXRsaW5rIGRldmljZS5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGBNQUM4MDIxMWAgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqQW5hbHl6aW5nIGBNQUM4MDIxMWAgRGVwZW5kZW5jaWVzIGluIHRoZSBLZXJuZWwqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGBNQUM4MDIxMWAgaXMgY29ubmVjdGVkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0sIHBhcnRpY3VsYXJseSBgQ0ZHODAyMTFgLiBJIGtub3cgaXQmIzM5O3MgYSBjcml0aWNhbCByZWxhdGlvbnNoaXAsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBpdCBzcGVjaWZpY2FsbHkgYnkgZXhhbWluaW5nIHRoZSBgS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byBgbmV0L21hYzgwMjExL0tjb25maWdgIGFuZCByZWFsbHkgZGlnIGluIHRoZXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIGRpcmVjdCBkZXBlbmRlbmNpZXMsIG9idmlvdXNseSwgYnV0IGFsc28gaW5kaXJlY3Qgb25lcy4gSSBzaG91bGQgYmUgbG9va2luZyBvdXQgZm9yIGFueSAmIzM0O2RlcGVuZHMgb24mIzM0OyBvciAmIzM0O3NlbGVjdCYjMzQ7IHN0YXRlbWVudHMsIGFuZCBldmVuIG1vcmUgYnJvYWRseSBob3cgdGhlIG1vZHVsZXMgYXJlIG9yZ2FuaXNlZC4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaWYgYENGRzgwMjExYCBpcyBhIGRpcmVjdCBwcmVyZXF1aXNpdGUgb3IgaWYgdGhlcmUgYXJlIGFueSBvdGhlciB1bmRlcmx5aW5nIGZhY3RvcnMgYXQgcGxheS4gVW5kZXJzdGFuZGluZyB0aGlzIGRlcGVuZGVuY3kgY2hhaW4gaXMgYWJzb2x1dGVseSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgcGllY2VzIG9mIHRoZSBrZXJuZWwgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEkmIzM5O2xsIGtlZXAgYW4gb3BlbiBtaW5kIGZvciBhbnkgb3RoZXIgbW9kdWxlcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdCwgb3IgdGhhdCBhcmUsIGluIHR1cm4sIGRlcGVuZGVudCBvbiBgTUFDODAyMTFgLiBJIHJlYWxseSBtdXN0IGJlIG1ldGhvZGljYWwgYWJvdXQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBNQUM4MDIxMVxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDU6XHRcdHNlbGVjdCBDUllQVE9cbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxuICAgODpcdFx0c2VsZWN0IENSWVBUT19BRVNcbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fQ0NNXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0dDTVxuICAxMTpcdFx0c2VsZWN0IENSQzMyXG4gIDEyOlx0XHRoZWxwXG4gIDEzOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXG4gIDE0Olx0XHQgIG5ldHdvcmtpbmcgc3RhY2suXG4gIDE1Olx0XG4gIDE2Olx0Y29tbWVudCBcJiMzNDtDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMVwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXG4gIDE4Olx0XG4gIDE5Olx0aWYgTUFDODAyMTEgIT0gblxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUzNwoJCQkJCQkJb3V0cHV0OiAyMTQKCQkJCQkJCXRob3VnaHRzOiAyODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRmluYWwgRnV6emluZyBTdHJhdGVneSBWYWxpZGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBqdXN0IHJ1biB0aHJvdWdoIHRoaXMgb25lIGxhc3QgdGltZSBiZWZvcmUgd2UgY29tbWl0IHRvIGl0LiBGaXJzdCwgYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSB0cnVlIGhlcmUsIG5vIHF1ZXN0aW9uLiBUaGUgdGFyZ2V0IGlzIHRoZSBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAgZnVuY3Rpb24gaW4gYG5ldC93aXJlbGVzcy9jb3JlLmNgLiBUaGUgcmVhc29uaW5nIGlzIHNvdW5kOiB0aGlzIHBhdGNoIHRvdWNoZXMgdGhlIE5BTiBjaGFubmVsIHNjaGVkdWxlIGFsbG9jYXRpb24sIG9yZGVyaW5nLCBhbmQgcm9sbGJhY2sgbG9naWMsIHdoaWNoIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGV4cG9zZWQgdGhyb3VnaCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSAoYG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZGApIG1ha2VzIGl0IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgYW5kIHRoZSBpbmNsdXNpb24gb2YgZW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyBsaWtlIGBtYWM4MDIxMV9od3NpbWAgcmVhbGx5IHVwcyB0aGUgYW50ZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGJ1Z3MsIHBhcnRpY3VsYXJseSBtZW1vcnkgY29ycnVwdGlvbiwgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCBvciByYWNlIGNvbmRpdGlvbnMuCgpOZXh0LCBJJiMzOTt2ZSBnb3QgdGhlIGBGb2N1c1N5bWJvbHNgIG5haWxlZCBkb3duOiBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAsIGBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWRgLCBhbmQgYGNmZzgwMjExX3N0b3BfbmFuYC4gQ292ZXJpbmcgdGhvc2Ugc2hvdWxkIGdpdmUgdXMgYSBnb29kIHNob3QgYXQgZXhlcmNpc2luZyBhbGwgdGhlIGNyaXRpY2FsIGNvZGUgcGF0aHMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbG9vayByaWdodCBhcyB3ZWxsOiBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gVGhleSYjMzk7cmUgZXNzZW50aWFsIGZvciBlbmFibGluZyB0aGUgcmVsZXZhbnQga2VybmVsIG1vZHVsZXMuCgpBbHJpZ2h0LCBhIGZpbmFsIHF1aWNrIHNjYW4uIFllcywgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZCB3aXRoIHRoaXMgZnV6emluZyBwbGFuLiBUaW1lIHRvIG1vdmUgb24gYW5kIHNldCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfc3RvcF9uYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSBpbiBuZXQvd2lyZWxlc3MvY29yZS5jLCBhbHRlcmluZyBtZW1vcnkgbWFuYWdlbWVudCwgY2hhbm5lbCBkZWZpbml0aW9uIHN3YXBwaW5nLCBhbmQgZXJyb3Igcm9sbGJhY2sgaGFuZGxpbmcgZm9yIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpIGxvY2FsIHNjaGVkdWxlcy4gVGhpcyBwYXRoIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIG5sODAyMTEgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSAoTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCkgYW5kIHZpcnR1YWwgbWFjODAyMTEgZGV2aWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfc3RvcF9uYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSBpbiBuZXQvd2lyZWxlc3MvY29yZS5jLCBhbHRlcmluZyBtZW1vcnkgbWFuYWdlbWVudCwgY2hhbm5lbCBkZWZpbml0aW9uIHN3YXBwaW5nLCBhbmQgZXJyb3Igcm9sbGJhY2sgaGFuZGxpbmcgZm9yIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpIGxvY2FsIHNjaGVkdWxlcy4gVGhpcyBwYXRoIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIG5sODAyMTEgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSAoTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCkgYW5kIHZpcnR1YWwgbWFjODAyMTEgZGV2aWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSgpYCB0byBwcmUtYWxsb2NhdGUgYW5kIHBvcHVsYXRlIHRoZSBuZXcgTkFOIGNoYW5uZWwgZGVmaW5pdGlvbnMgYXJyYXkgKGBjaGFuZGVmc2ApIHVzaW5nIGBrY2FsbG9jKClgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2sgYHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZCgpYC4gSWYgdGhlIGRyaXZlciBjYWxsYmFjayBmYWlscywgdGhlIHByZXZpb3VzIHNjaGVkdWxlIChgb2xkX2NoYW5kZWZzYCwgYG9sZF9uX2NoYW5uZWxzYCkgaXMgcmVzdG9yZWQgYW5kIHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkOyBvbiBzdWNjZXNzLCB0aGUgb2xkIGFycmF5IGlzIGZyZWVkLlxuXG5LQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gQWxsIGFsbG9jYXRpb25zIGluIHRoaXMgcGF0Y2ggdXNlIGBrY2FsbG9jKClgICh6ZXJvLWluaXRpYWxpemVkKSwgaW5wdXQgc2NoZWR1bGVzIGFyZSB6ZXJvLWluaXRpYWxpemVkIChga3phbGxvYygpYCBvciBzdHJ1Y3QgaW5pdGlhbGl6ZXIgYHt9YCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB3aGlsZSB1bmluaXRpYWxpemVkLlxuLSBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxlYWsgZHVyaW5nIHN0YXRlIHJvbGxiYWNrLCBmYWxsIHN0cmljdGx5IHVuZGVyIHRoZSBkb21haW4gb2Ygc3RhbmRhcmQgS0FTQU4gYW5kIFNMVUIgZGVidWdnZXJzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTFlYzI0MTQzM2I0MzQ5ODRlYWI4MTViMWVhMjU3N2RkZjlmMGJlNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMjE6Mjk6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwppbmRleCBkMTMzMTBmZWY2OTFhLi41YjQyZDZlYzFhZDY2IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTI4OCw2ICYjNDM7Mjg4LDggQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJCSAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZCkKIHsKJiM0MzsJc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmcyA9IE5VTEwsICpvbGRfY2hhbmRlZnM7CiYjNDM7CXU4IG9sZF9uX2NoYW5uZWxzOwogCWludCByZXQ7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cmRldi0mZ3Q7d2lwaHkubXR4KTsKQEAgLTI5OCwyOSAmIzQzOzMwMCw0MiBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJaWYgKHdkZXYtJmd0O3UubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JcmV0ID0gcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKHJkZXYsIHdkZXYsIHNjaGVkKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0Jd2Rldi0mZ3Q7dS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBzY2hlZC0mZ3Q7ZGVmZXJyZWQ7Ci0KLQlrZnJlZSh3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmcyk7Ci0Jd2Rldi0mZ3Q7dS5uYW4uY2hhbmRlZnMgPSBOVUxMOwotCXdkZXYtJmd0O3UubmFuLm5fY2hhbm5lbHMgPSAwOwomIzQzOwkvKgomIzQzOwkgKiBQcmUtYWxsb2NhdGUgY2hhbmRlZnMsIHNvIHdlIGRvbiYjMzk7dCBydWluIHRoZSBjdXJyZW50CiYjNDM7CSAqIHNjaGVkdWxlIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KJiM0MzsJICovCiYjNDM7CWlmIChzY2hlZC0mZ3Q7bl9jaGFubmVscykgewomIzQzOwkJY2hhbmRlZnMgPSBrY2FsbG9jKHNjaGVkLSZndDtuX2NoYW5uZWxzLCBzaXplb2YoKmNoYW5kZWZzKSwKJiM0MzsJCQkJICAgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIWNoYW5kZWZzKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKCFzY2hlZC0mZ3Q7bl9jaGFubmVscykKLQkJcmV0dXJuIDA7CiYjNDM7CQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHNjaGVkLSZndDtuX2NoYW5uZWxzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQljaGFuZGVmc1tpXSA9IHNjaGVkLSZndDtuYW5fY2hhbm5lbHNbaV0uY2hhbmRlZjsKJiM0MzsJfQogCi0Jd2Rldi0mZ3Q7dS5uYW4uY2hhbmRlZnMgPSBrY2FsbG9jKHNjaGVkLSZndDtuX2NoYW5uZWxzLAotCQkJCSAgICAgICBzaXplb2YoKndkZXYtJmd0O3UubmFuLmNoYW5kZWZzKSwKLQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmcykKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CS8qCiYjNDM7CSAqIFN3YXAgaW4gdGhlIG5ldyBjaGFuZGVmcyBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyIGFuZCBzZXQgdGhlCiYjNDM7CSAqIGRlZmVycmVkIGZsYWcsIHNvIGlmIHRoZSBkcml2ZXIgY29tcGxldGVzIHRoZSB1cGRhdGUgc3luY2hyb25vdXNseQomIzQzOwkgKiB0aGUgbmV3IHNjaGVkdWxlIHdpbGwgYmUgYWxyZWFkeSBpbiBwbGFjZS4KJiM0MzsJICovCiYjNDM7CW9sZF9jaGFuZGVmcyA9IHdkZXYtJmd0O3UubmFuLmNoYW5kZWZzOwomIzQzOwlvbGRfbl9jaGFubmVscyA9IHdkZXYtJmd0O3UubmFuLm5fY2hhbm5lbHM7CiYjNDM7CXdkZXYtJmd0O3UubmFuLmNoYW5kZWZzID0gY2hhbmRlZnM7CiYjNDM7CXdkZXYtJmd0O3UubmFuLm5fY2hhbm5lbHMgPSBzY2hlZC0mZ3Q7bl9jaGFubmVsczsKJiM0MzsJd2Rldi0mZ3Q7dS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBzY2hlZC0mZ3Q7ZGVmZXJyZWQ7CiAKLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHNjaGVkLSZndDtuX2NoYW5uZWxzOyBpJiM0MzsmIzQzOykKLQkJd2Rldi0mZ3Q7dS5uYW4uY2hhbmRlZnNbaV0gPSBzY2hlZC0mZ3Q7bmFuX2NoYW5uZWxzW2ldLmNoYW5kZWY7CiYjNDM7CXJldCA9IHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChyZGV2LCB3ZGV2LCBzY2hlZCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCS8qIFJlc3RvcmUgdGhlIHByZXZpb3VzIHNjaGVkdWxlIG9uIGZhaWx1cmUgKi8KJiM0MzsJCXdkZXYtJmd0O3UubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQl3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmcyA9IG9sZF9jaGFuZGVmczsKJiM0MzsJCXdkZXYtJmd0O3UubmFuLm5fY2hhbm5lbHMgPSBvbGRfbl9jaGFubmVsczsKJiM0MzsJCWtmcmVlKGNoYW5kZWZzKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KIAotCXdkZXYtJmd0O3UubmFuLm5fY2hhbm5lbHMgPSBzY2hlZC0mZ3Q7bl9jaGFubmVsczsKJiM0MzsJa2ZyZWUob2xkX2NoYW5kZWZzKTsKIAogCXJldHVybiAwOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlIGNoYW5nZXMgaW4gYG5ldC93aXJlbGVzcy9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlYCBmdW5jdGlvbi4KCkZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nL2ltcHJvdmVtZW50IHRvIHRoZSBzY2hlZHVsZSB1cGRhdGUgcHJvY2Vzcy4gVGhlIG1haW4gY2hhbmdlIGludm9sdmVzIHByZS1hbGxvY2F0aW5nIHRoZSBgY2hhbmRlZnNgIGJ1ZmZlciBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyIGZ1bmN0aW9uIGByZGV2X25hbl9zZXRfbG9jYWxfc2NoZWRgLiBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgYSBwb3RlbnRpYWwgcmFjZSBvciBmYWlsdXJlIG1vZGUgd2hlcmUgYSBzY2hlZHVsZSB1cGRhdGUgY291bGQgYmUgY29ycnVwdGVkIGlmIHRoZSBidWZmZXIgYWxsb2NhdGlvbiBmYWlscyAqZHVyaW5nKiBhbiB1cGRhdGUuIE5vdywgb24gZmFpbHVyZSwgdGhlIG9yaWdpbmFsIHN0YXRlIGlzIHJlc3RvcmVkLgoKVGhlICYjMzQ7YmVmb3JlJiMzNDsgdmVyc2lvbiBzZWVtcyB0byBhbGxvY2F0ZSBhbmQgZGVhbGxvY2F0ZSBgY2hhbmRlZnNgIGluIGEgbW9yZSBzeW5jaHJvbm91cyBtYW5uZXIuIFRoZSBuZXcgdmVyc2lvbiBhdHRlbXB0cyB0byBwcmV2ZW50IGFuIGludGVycnVwdGlvbiB0byBzY2hlZHVsZSB1cGRhdGVzIGJ5IHByZS1hbGxvY2F0aW5nLCBhbmQgb25seSB1cGRhdGluZyB0aGUgZGF0YSBwb2ludGVyIGFmdGVyIGEgc3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLiBPbiBlcnJvciwgaXQgcmVzdG9yZXMgdGhlIG9yaWdpbmFsIHN0YXRlIGFuZCBmcmVlcyB0aGUgbmV3IGFsbG9jYXRpb24uCgpNeSBpbml0aWFsIGNvbmNlcm4sIGlzIHRoaXM6IERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgbWFuYWdlbWVudCBjb21wbGV4aXR5IHRoYXQgS01TQU4gY291bGQgY2F0Y2g/IFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG9sZF9jaGFuZGVmc2AgYW5kIHRoZSByZXN0b3JlIGxvZ2ljICpkb2VzKiBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGNvZGVwYXRocyBzbGlnaHRseS4gQWxzbywgd2hhdCBpZiB0aGVyZSYjMzk7cyBhIHByb2JsZW0gd2l0aCB0aGUgZHJpdmVyIGNvZGUgKmFmdGVyKiB0aGUgdXBkYXRlZCBgY2hhbmRlZnNgIGFyZSBzd2FwcGVkIGluPyBUaGUgcmVzdG9yZSBwYXRoIGxvb2tzIGNvcnJlY3QsIGJ1dCBpdCYjMzk7cyB0aGUga2luZCBvZiBhcmVhIHdoZXJlIGEgc3VidGxlIHJhY2Ugb3IgdXNlLWFmdGVyLWZyZWUgKmNvdWxkKiBiZSBpbnRyb2R1Y2VkLgoKVG8gYmUgdGhvcm91Z2gsIEkgd2lsbCB1c2UgYGdyZXBwZXJgIG9yIGVxdWl2YWxlbnQgdG9vbHMgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBhbmQgYW55IHJlbGF0ZWQgY29kZSB0byBzZWUgaG93IGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlYCBpcyB1c2VkLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGFueSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLCBvciBvdGhlciBjbG9zZWx5IHJlbGF0ZWQgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyAoZS5nLiBgd2Rldi0mZ3Q7dS5uYW5gKSB0aGF0IGFyZSB1c2VkIGluIHRoZSBzYW1lIGNvbnRleHQgdG8gZ2V0IGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QuIFRoYXQgd2lsbCBnaXZlIG1lIG1vcmUgaW5zaWdodCBpbnRvIHRoZSAqbGlrZWxpaG9vZCogb2YgYSBLTVNBTiBpc3N1ZSBhbmQgbGV0IG1lIG1ha2UgYSBmaW5hbCBkZWNpc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NvcmUuYz0yNTU9dm9pZCBjZmc4MDIxMV9zdG9wX25hbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNzYtXHQvKiBVbnNjaGVkdWxlIGFsbCAqL1xubmV0L3dpcmVsZXNzL2NvcmUuYzoyNzc6XHRjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIFx1MDAyNmVtcHR5X3NjaGVkKTtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjc4LVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMjg2LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyODc6aW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yODgtXHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oPTU2MT12b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmgtNTYzLVxubmV0L3dpcmVsZXNzL2NvcmUuaDo1NjQ6aW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuaC01NjUtXHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE3Njg1PXN0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzc2Mi1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc3NjM6XHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShyZGV2LCB3ZGV2LCBzY2hlZCk7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3NzY0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYxMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGl2aW5nIERlZXAgaW50byBOQU4gU2NoZWR1bGluZyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaG93IHdlJiMzOTtyZSBzZXR0aW5nIHVwIHRoZSBsb2NhbCBzY2hlZHVsZXIgd2l0aGluIHRoZSBOQU4gZnJhbWV3b3JrLiBNeSBtYWluIGZvY3VzIGlzIG9uIGBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWRgLCBidXQgSSBrbm93IHRoaXMgdG91Y2hlcyBvbiBzZXZlcmFsIGludGVyY29ubmVjdGVkIHBpZWNlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGBuYW4uY2hhbmRlZnNgLCBgbmFuLm5fY2hhbm5lbHNgLCBhbmQgYG5hbi5zY2hlZF91cGRhdGVfcGVuZGluZ2AuIEkgYWxyZWFkeSBrbm93IHRoZXNlIGFyZSBrZXkgdmFyaWFibGVzLCBidXQgSSBoYXZlIHRvIGZvbGxvdyB0aGUgY29tcGxldGUgZGF0YSBmbG93LgoKSSB3YW50IHRvIGtub3c6IHdoZXJlIGFyZSB0aGVzZSB2YXJpYWJsZXMgYmVpbmcgbW9kaWZpZWQ/IFdoYXQgZnVuY3Rpb25zIGFyZSByZWFkaW5nIHRoZW0/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIEkgbmVlZCB0byBjb25zaWRlcj8gSXMgdGhlcmUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcyBoZXJlPyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHN0ZXAgdGhyb3VnaCB0aGUgY29kZSBleGVjdXRpb24sIG1lbnRhbGx5IHNpbXVsYXRpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93LiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgbG9naWMgZXJyb3JzIHRoYXQgbWlnaHQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIGNoYW5uZWwgc2VsZWN0aW9uLCBzY2hlZHVsaW5nIHVwZGF0ZXMsIG9yIG92ZXJhbGwgTkFOIG9wZXJhdGlvbi4gVGhpcyBhbHNvIG1lYW5zIGV4cGxvcmluZyBob3cgYWxsIHRoZSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgdGFsa2luZyB0byBlYWNoIG90aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFuZGVmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NoYW4uYz03NjU9X2NmZzgwMjExX2NoYW5kZWZfY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmMxLFxuLS1cbm5ldC93aXJlbGVzcy9jaGFuLmMtNzg3LVx0ICogbXVsdGlwbGUgQVBzLCBidXQgaW4gdGhpcyBjYXNlIHVzZXJzcGFjZSBzaG91bGQgY29uZmlndXJlXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjc4ODpcdCAqIGlkZW50aWNhbCBjaGFuZGVmcyBpbmNsdWRpbmcgTlBDQSwgZXZlbiBpZiBwZXJoYXBzIG9uZSBvZlxubmV0L3dpcmVsZXNzL2NoYW4uYy03ODktXHQgKiB0aGUgQVAgaW50ZXJmYWNlcyBkb2VzbiYjMzk7dCBldmVuIGFkdmVydGlzZSBpdC5cbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTg0NS1cdCAqIHNhbWUgcHJpbWFyeSAxNjAsIGJ1dCBhcmUgbm90IGlkZW50aWNhbCAtIHRoaXMgY2Fubm90IGhhcHBlblxubmV0L3dpcmVsZXNzL2NoYW4uYzo4NDY6XHQgKiBzaW5jZSB0aGV5IG11c3QgYmUgMzIwIChubyB3aWRlciBjaGFuZGVmcyBleGlzdCwgYXQgbGVhc3QgeWV0Lilcbm5ldC93aXJlbGVzcy9jaGFuLmMtODQ3LVx0ICovXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0yODc9aW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMjkwLXtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MjkxOlx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmcyA9IE5VTEwsICpvbGRfY2hhbmRlZnM7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTI5Mi1cdHU4IG9sZF9uX2NoYW5uZWxzO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMzAzLVx0Lypcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzA0Olx0ICogUHJlLWFsbG9jYXRlIGNoYW5kZWZzLCBzbyB3ZSBkb24mIzM5O3QgcnVpbiB0aGUgY3VycmVudFxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMDUtXHQgKiBzY2hlZHVsZSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMDctXHRpZiAoc2NoZWQtXHUwMDNlbl9jaGFubmVscykge1xubmV0L3dpcmVsZXNzL2NvcmUuYzozMDg6XHRcdGNoYW5kZWZzID0ga2NhbGxvYyhzY2hlZC1cdTAwM2VuX2NoYW5uZWxzLCBzaXplb2YoKmNoYW5kZWZzKSxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzA5LVx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjMxMDpcdFx0aWYgKCFjaGFuZGVmcylcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzExLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMzEzLVx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2NoZWQtXHUwMDNlbl9jaGFubmVsczsgaSYjNDM7JiM0MzspXG5uZXQvd2lyZWxlc3MvY29yZS5jOjMxNDpcdFx0XHRjaGFuZGVmc1tpXSA9IHNjaGVkLVx1MDAzZW5hbl9jaGFubmVsc1tpXS5jaGFuZGVmO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0zMTUtXHR9XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMTctXHQvKlxubmV0L3dpcmVsZXNzL2NvcmUuYzozMTg6XHQgKiBTd2FwIGluIHRoZSBuZXcgY2hhbmRlZnMgYmVmb3JlIGNhbGxpbmcgdGhlIGRyaXZlciBhbmQgc2V0IHRoZVxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMTktXHQgKiBkZWZlcnJlZCBmbGFnLCBzbyBpZiB0aGUgZHJpdmVyIGNvbXBsZXRlcyB0aGUgdXBkYXRlIHN5bmNocm9ub3VzbHlcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMyMS1cdCAqL1xubmV0L3dpcmVsZXNzL2NvcmUuYzozMjI6XHRvbGRfY2hhbmRlZnMgPSB3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0zMjMtXHRvbGRfbl9jaGFubmVscyA9IHdkZXYtXHUwMDNldS5uYW4ubl9jaGFubmVscztcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzI0Olx0d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyA9IGNoYW5kZWZzO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0zMjUtXHR3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBzY2hlZC1cdTAwM2VuX2NoYW5uZWxzO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMzMxLVx0XHR3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nID0gZmFsc2U7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjMzMjpcdFx0d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyA9IG9sZF9jaGFuZGVmcztcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzMzLVx0XHR3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBvbGRfbl9jaGFubmVscztcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzM0Olx0XHRrZnJlZShjaGFuZGVmcyk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTMzNS1cdFx0cmV0dXJuIHJldDtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMzNy1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MzM4Olx0a2ZyZWUob2xkX2NoYW5kZWZzKTtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzM5LVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTQ1ODM9c3RhdGljIGludCBubDgwMjExX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDYzOC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTQ2Mzk6XHRcdC8qIG5vdGU6IHJldHVybnMgZmlyc3Qgb25lIGlmIGlkZW50aWNhbCBjaGFuZGVmcyAqL1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDY0MC1cdFx0Y29tcGF0X2NoYW5kZWYgPSBjZmc4MDIxMV9jaGFuZGVmX2NvbXBhdGlibGUoXHUwMDI2Y2hhbmRlZixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE3NTIzPXN0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X3BlZXJfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3NTg4LVx0XHRcdGlmIChjZmc4MDIxMV9jaGFuZGVmX2NvbXBhdGlibGUoXHUwMDI2bmFuX2NoYW5uZWxzW2ldLmNoYW5kZWYsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3NTg5Olx0XHRcdFx0XHRcdFx0XHUwMDI2d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmc1tqXSkpIHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc1OTAtXHRcdFx0XHRjb21wYXRpYmxlID0gdHJ1ZTtcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9MjMzNz1zdGF0aWMgYm9vbCByZWdfd2Rldl9jaGFuX3ZhbGlkKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTIzNTQtXHRcdFx0cmV0ID0gY2ZnODAyMTFfcmVnX2Nhbl9iZWFjb24od2lwaHksXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjM1NTpcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZ3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzW2ldLFxubmV0L3dpcmVsZXNzL3JlZy5jLTIzNTYtXHRcdFx0XHRcdFx0ICAgICAgTkw4MDIxMV9JRlRZUEVfTkFOKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM0OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gdGhlIE5BTiBTY2hlZHVsZXIqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjaGVkdWxlciBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIDgwMi4xMSBOQU4gZHJpdmVyLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkYC4gVGhhdCBmdW5jdGlvbiBpcyB0aGUgbGlrZWx5IGVudHJ5IHBvaW50IHdoZXJlIHRoZSBzY2hlZHVsZXIgcGFyYW1ldGVycyBhbmQgY29uZmlndXJhdGlvbnMgYXJlIHNldCwgc28gaXTigJlzIHRoZSBwZXJmZWN0IHBsYWNlIHRvIGJlZ2luLiBJIG5lZWQgdG8gdHJhY2UgZXhhY3RseSBob3cgdGhlIGBzY2hlZGAgc3RydWN0dXJlIGlzIHBhcnNlZCBmcm9tIHRoZSBOZXRsaW5rIG1lc3NhZ2UgYW5kLCBjcnVjaWFsbHksIGhvdyBhbmQgd2hlcmUgaXQgaXMgYWxsb2NhdGVkIHdpdGhpbiB0aGUgZHJpdmVy4oCZcyBjb250ZXh0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3Vycm91bmRpbmcgdGhlIE5BTiBzY2hlZHVsZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIHNldHMgdXAgdGhlIHN0cnVjdHVyZXMgbmVlZGVkIHRvIHJ1biB0aGUgc2NoZWR1bGVyLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgYW55IHZ1bG5lcmFiaWxpdGllcyBhcmUgbGlrZWx5IHRvIGV4aXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzY4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzY4NTpcdHN0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBza19idWZmICpza2IsXG4xNzY4NjpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4xNzY4NzpcdHtcbjE3Njg4Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuMTc2ODk6XHRcdHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuMTc2OTA6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuMTc2OTE6XHRcdGludCByZW0sIGkgPSAwLCBuX2NoYW5uZWxzID0gMCwgcmV0O1xuMTc2OTI6XHRcdHN0cnVjdCBubGF0dHIgKmNoYW5uZWw7XG4xNzY5MzpcdFx0Ym9vbCBzY2hlZF9lbXB0eTtcbjE3Njk0Olx0XG4xNzY5NTpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbjE3Njk2Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE3Njk3Olx0XG4xNzY5ODpcdFx0aWYgKCF3ZGV2X3J1bm5pbmcod2RldikpXG4xNzY5OTpcdFx0XHRyZXR1cm4gLUVOT1RDT05OO1xuMTc3MDA6XHRcbjE3NzAxOlx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX05BTl9USU1FX1NMT1RTXSlcbjE3NzAyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTc3MDM6XHRcbjE3NzA0Olx0XHQvKiBGaXJzdCBjb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovXG4xNzcwNTpcdFx0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcbjE3NzA2Olx0XHRcdFx0XHQgaW5mby1cdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSlcbjE3NzA3Olx0XHRcdG5fY2hhbm5lbHMmIzQzOyYjNDM7O1xuMTc3MDg6XHRcbjE3NzA5Olx0XHRzY2hlZCA9IGt6YWxsb2Moc3RydWN0X3NpemUoc2NoZWQsIG5hbl9jaGFubmVscywgbl9jaGFubmVscyksXG4xNzcxMDpcdFx0XHRcdEdGUF9LRVJORUwpO1xuMTc3MTE6XHRcdGlmICghc2NoZWQpXG4xNzcxMjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE3NzEzOlx0XG4xNzcxNDpcdFx0c2NoZWQtXHUwMDNlbl9jaGFubmVscyA9IG5fY2hhbm5lbHM7XG4xNzcxNTpcdFxuMTc3MTY6XHRcdG5sbXNnX2Zvcl9lYWNoX2F0dHJfdHlwZShjaGFubmVsLCBOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwsXG4xNzcxNzpcdFx0XHRcdFx0IGluZm8tXHUwMDNlbmxoZHIsIEdFTkxfSERSTEVOLCByZW0pIHtcbjE3NzE4Olx0XHRcdHJldCA9IG5sODAyMTFfcGFyc2VfbmFuX2NoYW5uZWwocmRldiwgY2hhbm5lbCwgaW5mbyxcbjE3NzE5Olx0XHRcdFx0XHRcdFx0c2NoZWQtXHUwMDNlbmFuX2NoYW5uZWxzLCBpLCB0cnVlKTtcbjE3NzIwOlx0XG4xNzcyMTpcdFx0XHRpZiAocmV0KVxuMTc3MjI6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTc3MjM6XHRcdFx0aSYjNDM7JiM0Mzs7XG4xNzcyNDpcdFx0fVxuMTc3MjU6XHRcbjE3NzI2Olx0XHQvKiBQYXJzZSBhbmQgdmFsaWRhdGUgc2NoZWR1bGUgKi9cbjE3NzI3Olx0XHRyZXQgPSBubDgwMjExX3BhcnNlX25hbl9zY2hlZHVsZShpbmZvLFxuMTc3Mjg6XHRcdFx0XHRcdFx0IGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX05BTl9USU1FX1NMT1RTXSxcbjE3NzI5Olx0XHRcdFx0XHRcdCBzY2hlZC1cdTAwM2VzY2hlZHVsZSwgc2NoZWQtXHUwMDNlbl9jaGFubmVscyk7XG4xNzczMDpcdFx0aWYgKHJldClcbjE3NzMxOlx0XHRcdHJldHVybiByZXQ7XG4xNzczMjpcdFxuMTc3MzM6XHRcdHNjaGVkX2VtcHR5ID0gbmw4MDIxMV9uYW5faXNfc2NoZWRfZW1wdHkoc2NoZWQpO1xuMTc3MzQ6XHRcbjE3NzM1Olx0XHRzY2hlZC1cdTAwM2VkZWZlcnJlZCA9XG4xNzczNjpcdFx0XHRubGFfZ2V0X2ZsYWcoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX1NDSEVEX0RFRkVSUkVEXSk7XG4xNzczNzpcdFxuMTc3Mzg6XHRcdGlmIChzY2hlZF9lbXB0eSkge1xuMTc3Mzk6XHRcdFx0aWYgKHNjaGVkLVx1MDAzZWRlZmVycmVkKSB7XG4xNzc0MDpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGluZm8tXHUwMDNlZXh0YWNrLFxuMTc3NDE6XHRcdFx0XHRcdCAgICAgICBcJiMzNDtTY2hlZHVsZSBjYW5ub3QgYmUgZGVmZXJyZWQgaWYgYWxsIHRpbWUgc2xvdHMgYXJlIHVuYXZhaWxhYmxlXCYjMzQ7KTtcbjE3NzQyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzc0MzpcdFx0XHR9XG4xNzc0NDpcdFxuMTc3NDU6XHRcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX05BTl9BVkFJTF9CTE9CXSkge1xuMTc3NDY6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhpbmZvLVx1MDAzZWV4dGFjayxcbjE3NzQ3Olx0XHRcdFx0XHQgICAgICAgXCYjMzQ7TkFOIEF2YWlsYWJpbGl0eSBibG9iIG11c3QgYmUgZW1wdHkgaWYgYWxsIHRpbWUgc2xvdHMgYXJlIHVuYXZhaWxhYmxlXCYjMzQ7KTtcbjE3NzQ4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzc0OTpcdFx0XHR9XG4xNzc1MDpcdFx0fSBlbHNlIHtcbjE3NzUxOlx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX0FWQUlMX0JMT0JdKSB7XG4xNzc1MjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGluZm8tXHUwMDNlZXh0YWNrLFxuMTc3NTM6XHRcdFx0XHRcdCAgICAgICBcJiMzNDtOQU4gQXZhaWxhYmlsaXR5IGJsb2IgYXR0cmlidXRlIGlzIHJlcXVpcmVkXCYjMzQ7KTtcbjE3NzU0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzc1NTpcdFx0XHR9XG4xNzc1NjpcdFxuMTc3NTc6XHRcdFx0c2NoZWQtXHUwMDNlbmFuX2F2YWlsX2Jsb2IgPVxuMTc3NTg6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fQVZBSUxfQkxPQl0pO1xuMTc3NTk6XHRcdFx0c2NoZWQtXHUwMDNlbmFuX2F2YWlsX2Jsb2JfbGVuID1cbjE3NzYwOlx0XHRcdFx0bmxhX2xlbihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fQVZBSUxfQkxPQl0pO1xuMTc3NjE6XHRcdH1cbjE3NzYyOlx0XG4xNzc2MzpcdFx0cmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2Rldiwgc2NoZWQpO1xuMTc3NjQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5OTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIGBjZmc4MDIxMV9zdG9wX25hbmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBtZW50YWwgZ2VhcnMgYXJlIGFscmVhZHkgdHVybmluZy4gJiMzNDtMZXQmIzM5O3MgY2hlY2sgYGNmZzgwMjExX3N0b3BfbmFuYCYjMzQ7IOKAkyB0aGF0JiMzOTtzIHRoZSBjb21tYW5kLCB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0JiMzOTtzICpzdXBwb3NlZCogdG8gd29yay4gSSYjMzk7bSBhc3N1bWluZyBpdCByZWxhdGVzIHRvIFdpLUZpIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpLCB3aGljaCBtZWFucyBpdCBwcm9iYWJseSBoYW5kbGVzIHRoZSBzdG9wcGluZyBvciB0ZXJtaW5hdGlvbiBvZiBzb21lIE5BTi1yZWxhdGVkIHByb2Nlc3MuIElzIGl0IGdyYWNlZnVsbHkgc2h1dHRpbmcgZG93biBkaXNjb3Zlcnk/IENsZWFuaW5nIHVwIHNvbWUgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXM/IERlLXJlZ2lzdGVyaW5nIHNvbWV0aGluZz8gVGhlIG51YW5jZXMgYXJlIGtleSBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJiMzOTtzIGRlZmluaXRpb24sIGhvdyBpdCYjMzk7cyBjYWxsZWQsIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcuIElzIHRoZXJlIGFueSBleGlzdGluZyBpbmZvcm1hdGlvbiBvciBkb2N1bWVudGF0aW9uIEkgY2FuIGxldmVyYWdlPyBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1NTpcdHZvaWQgY2ZnODAyMTFfc3RvcF9uYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIDI1NjpcdFx0XHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcbiAyNTc6XHR7XG4gMjU4Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkIGVtcHR5X3NjaGVkID0ge307XG4gMjU5Olx0XG4gMjYwOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkubXR4KTtcbiAyNjE6XHRcbiAyNjI6XHRcdGlmIChXQVJOX09OKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTikpXG4gMjYzOlx0XHRcdHJldHVybjtcbiAyNjQ6XHRcbiAyNjU6XHRcdGlmICghd2Rldl9ydW5uaW5nKHdkZXYpKVxuIDI2NjpcdFx0XHRyZXR1cm47XG4gMjY3Olx0XG4gMjY4Olx0XHRjZmc4MDIxMV9wbXNyX3dkZXZfZG93bih3ZGV2KTtcbiAyNjk6XHRcbiAyNzA6XHRcdC8qXG4gMjcxOlx0XHQgKiBJZiB0aGVyZSBpcyBhIHNjaGVkdWxlZCB1cGRhdGUgcGVuZGluZywgbWFyayBpdCBhcyBjYW5jZWxlZCwgc28gdGhlXG4gMjcyOlx0XHQgKiBlbXB0eSBzY2hlZHVsZSB3aWxsIGJlIGFjY2VwdGVkXG4gMjczOlx0XHQgKi9cbiAyNzQ6XHRcdHdkZXYtXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBmYWxzZTtcbiAyNzU6XHRcbiAyNzY6XHRcdC8qIFVuc2NoZWR1bGUgYWxsICovXG4gMjc3Olx0XHRjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIFx1MDAyNmVtcHR5X3NjaGVkKTtcbiAyNzg6XHRcbiAyNzk6XHRcdHJkZXZfc3RvcF9uYW4ocmRldiwgd2Rldik7XG4gMjgwOlx0XHR3ZGV2LVx1MDAzZWlzX3J1bm5pbmcgPSBmYWxzZTtcbiAyODE6XHRcbiAyODI6XHRcdGV0aF96ZXJvX2FkZHIod2Rldi1cdTAwM2V1Lm5hbi5jbHVzdGVyX2lkKTtcbiAyODM6XHRcbiAyODQ6XHRcdHJkZXYtXHUwMDNlb3BlbmNvdW50LS07XG4gMjg1Olx0fVxuIDI4NjpcdFxuIDI4NzpcdGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiAyODg6XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIDI4OTpcdFx0XHRcdFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKVxuIDI5MDpcdHtcbiAyOTE6XHRcdHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZnMgPSBOVUxMLCAqb2xkX2NoYW5kZWZzO1xuIDI5MjpcdFx0dTggb2xkX25fY2hhbm5lbHM7XG4gMjkzOlx0XHRpbnQgcmV0O1xuIDI5NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTAwCgkJCQkJCQlvdXRwdXQ6IDI2NwoJCQkJCQkJdGhvdWdodHM6IDk5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50IG9mIE5BTiBTY2hlZHVsZSBVcGRhdGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBtb2RpZmllcyBob3cgdGhlIGBjaGFuZGVmc2AgYXJyYXksIHBhcnQgb2YgYHdkZXYtJmd0O3UubmFuYCwgZ2V0cyB1cGRhdGVkIHdpdGhpbiBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAuIFRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiB3YXMgYSBiaXQgY2x1bmt5LCB3aXRoIHRoZSBkcml2ZXIgY2FsbGJhY2sgcG90ZW50aWFsbHkgZmFpbGluZyBhZnRlciB0aGUgbWVtb3J5IGZvciBgY2hhbmRlZnNgIHdhcyBmcmVlZCwgbGVhZGluZyB0byBhIGJyb2tlbiBzY2hlZHVsZS4gVGhpcyBuZXcgYXBwcm9hY2ggcHJlLWFsbG9jYXRlcyB0aGUgYGNoYW5kZWZzYCBhcnJheSB1c2luZyBga2NhbGxvY2AsIHBvcHVsYXRlcyBpdCB3aXRoIGRhdGEgY29waWVkIGZyb20gdGhlIGBzY2hlZGAgc3RydWN0dXJlJiMzOTtzIGBuYW5fY2hhbm5lbHNgLCBhbmQgdGhlbiBjYWxscyB0aGUgZHJpdmVyLiBDcml0aWNhbGx5LCBpdCBzYXZlcyB0aGUgb2xkIHNjaGVkdWxlLCByZXN0b3JpbmcgaXQgb24gZmFpbHVyZSBhbmQgZnJlZWluZyBpdCBvbiBzdWNjZXNzLgoKTXkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5LiBJIHdhbnQgdG8gZW5zdXJlIHdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBEaWdnaW5nIGluLCBJIGNhbiBzZWUgdGhhdCBgY2hhbmRlZnNgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHRoYW5rcyB0byBga2NhbGxvY2AgYW5kIHRoZSBjb3B5aW5nIG9mIGRhdGEgZnJvbSB0aGUgaW5pdGlhbGl6ZWQgYHNjaGVkYCBzdHJ1Y3QuIGBzY2hlZGAgaXRzZWxmIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgZW5zdXJpbmcgaXQmIzM5O3MgemVyb2VkLiBXZSBhbHNvIGhhdmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nLCByZXN0b3JpbmcgdGhlIHByZXZpb3VzIHNjaGVkdWxlIGlmIHRoZSBkcml2ZXIgZmFpbHMuIElmIHRoZSBkcml2ZXIgc3VjY2VlZHMsIHRoZSBvbGQgc2NoZWR1bGUgaXMgZnJlZWQuCgpHaXZlbiB0aGUgY29kZSYjMzk7cyBzdHJ1Y3R1cmUsIHBvdGVudGlhbCBpc3N1ZXMgd291bGQgYmUgaW4gdGhlIHJlYWxtIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MgbGlrZSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBzdGFuZGFyZCBLQVNBTiBhbmQgU0xVQiBkb21haW5zLiBJIGRvbiYjMzk7dCBzZWUgYW55IGV4cG9zZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCwgcGFzc2VkIHRvIHVzZXJzcGFjZSwgb3IgZGV0ZXJtaW5pbmcgY29udHJvbCBmbG93LgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB3aGV0aGVyIHdlIG5lZWQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBzcGVjaWZpY2FsbHkuIEtNU0FOIGlzIGNyaXRpY2FsIHdoZW4gdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGJlIHJlYWQgYnkgYSByZWFjaGFibGUgY29kZSBwYXRoLiBJbiB0aGlzIGNhc2UsIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBhc3Nlc3NlZDoKCjEuICAqKk5vIEtlcm5lbCBTdHJ1Y3R1cmVzIHRvIFVzZXIgU3BhY2U6KiogTm8ga2VybmVsIGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcy4KMi4gICoqTm8gVW5pbml0aWFsaXplZCBDb250cm9sIEZsb3c6KiogVGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgKipGdWxseSBJbml0aWFsaXplZCBEYXRhIFN0cnVjdHVyZXM6KiogRGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGwgemVyby1pbml0aWFsaXplZCB2aWEgYGtjYWxsb2NgIG9yIGBremFsbG9jYCBvciBhcmUgY29waWVkIGZyb20gaW5pdGlhbHplZCBzb3VyY2VzLgo0LiAgKipObyBVbmluaXRpYWxpemVkIEJ5dGUgQWNjZXNzOioqIE5vIGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCB3b3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBpbiBleGlzdGluZyBidWZmZXJzLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuIFRoZSBpc3N1ZXMgaGVyZSBhcmUgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgd2lsbCBjYXRjaCBhbnkgaXNzdWVzIHRoZXJlLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBMZXQmIzM5O3MgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoKWAgdG8gcHJlLWFsbG9jYXRlIGFuZCBwb3B1bGF0ZSB0aGUgbmV3IE5BTiBjaGFubmVsIGRlZmluaXRpb25zIGFycmF5IChgY2hhbmRlZnNgKSB1c2luZyBga2NhbGxvYygpYCBwcmlvciB0byBpbnZva2luZyB0aGUgZHJpdmVyIGNhbGxiYWNrIGByZGV2X25hbl9zZXRfbG9jYWxfc2NoZWQoKWAuIElmIHRoZSBkcml2ZXIgY2FsbGJhY2sgZmFpbHMsIHRoZSBwcmV2aW91cyBzY2hlZHVsZSAoYG9sZF9jaGFuZGVmc2AsIGBvbGRfbl9jaGFubmVsc2ApIGlzIHJlc3RvcmVkIGFuZCB0aGUgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcmVlZDsgb24gc3VjY2VzcywgdGhlIG9sZCBhcnJheSBpcyBmcmVlZC5cblxuS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIEFsbCBhbGxvY2F0aW9ucyBpbiB0aGlzIHBhdGNoIHVzZSBga2NhbGxvYygpYCAoemVyby1pbml0aWFsaXplZCksIGlucHV0IHNjaGVkdWxlcyBhcmUgemVyby1pbml0aWFsaXplZCAoYGt6YWxsb2MoKWAgb3Igc3RydWN0IGluaXRpYWxpemVyIGB7fWApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHJlYWQgd2hpbGUgdW5pbml0aWFsaXplZC5cbi0gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsZWFrIGR1cmluZyBzdGF0ZSByb2xsYmFjaywgZmFsbCBzdHJpY3RseSB1bmRlciB0aGUgZG9tYWluIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBTTFVCIGRlYnVnZ2Vycy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKClgIHRvIHByZS1hbGxvY2F0ZSBhbmQgcG9wdWxhdGUgdGhlIG5ldyBOQU4gY2hhbm5lbCBkZWZpbml0aW9ucyBhcnJheSAoYGNoYW5kZWZzYCkgdXNpbmcgYGtjYWxsb2MoKWAgcHJpb3IgdG8gaW52b2tpbmcgdGhlIGRyaXZlciBjYWxsYmFjayBgcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKClgLiBJZiB0aGUgZHJpdmVyIGNhbGxiYWNrIGZhaWxzLCB0aGUgcHJldmlvdXMgc2NoZWR1bGUgKGBvbGRfY2hhbmRlZnNgLCBgb2xkX25fY2hhbm5lbHNgKSBpcyByZXN0b3JlZCBhbmQgdGhlIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJlZWQ7IG9uIHN1Y2Nlc3MsIHRoZSBvbGQgYXJyYXkgaXMgZnJlZWQuXG5cbktBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBBbGwgYWxsb2NhdGlvbnMgaW4gdGhpcyBwYXRjaCB1c2UgYGtjYWxsb2MoKWAgKHplcm8taW5pdGlhbGl6ZWQpLCBpbnB1dCBzY2hlZHVsZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGBremFsbG9jKClgIG9yIHN0cnVjdCBpbml0aWFsaXplciBge31gKSwgYW5kIGFsbCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciByZWFkIHdoaWxlIHVuaW5pdGlhbGl6ZWQuXG4tIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbGVhayBkdXJpbmcgc3RhdGUgcm9sbGJhY2ssIGZhbGwgc3RyaWN0bHkgdW5kZXIgdGhlIGRvbWFpbiBvZiBzdGFuZGFyZCBLQVNBTiBhbmQgU0xVQiBkZWJ1Z2dlcnMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjI5OjQzLjMwODIxMTA1MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTA2ODU4MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlXCIsXG4gICAgXCJubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWRcIixcbiAgICBcImNmZzgwMjExX3N0b3BfbmFuXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSgpYCB0byBwcmUtYWxsb2NhdGUgYW5kIHBvcHVsYXRlIHRoZSBuZXcgTkFOIGNoYW5uZWwgZGVmaW5pdGlvbnMgYXJyYXkgKGBjaGFuZGVmc2ApIHVzaW5nIGBrY2FsbG9jKClgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2sgYHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZCgpYC4gSWYgdGhlIGRyaXZlciBjYWxsYmFjayBmYWlscywgdGhlIHByZXZpb3VzIHNjaGVkdWxlIChgb2xkX2NoYW5kZWZzYCwgYG9sZF9uX2NoYW5uZWxzYCkgaXMgcmVzdG9yZWQgYW5kIHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkOyBvbiBzdWNjZXNzLCB0aGUgb2xkIGFycmF5IGlzIGZyZWVkLlxcblxcbktBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gQWxsIGFsbG9jYXRpb25zIGluIHRoaXMgcGF0Y2ggdXNlIGBrY2FsbG9jKClgICh6ZXJvLWluaXRpYWxpemVkKSwgaW5wdXQgc2NoZWR1bGVzIGFyZSB6ZXJvLWluaXRpYWxpemVkIChga3phbGxvYygpYCBvciBzdHJ1Y3QgaW5pdGlhbGl6ZXIgYHt9YCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB3aGlsZSB1bmluaXRpYWxpemVkLlxcbi0gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsZWFrIGR1cmluZyBzdGF0ZSByb2xsYmFjaywgZmFsbCBzdHJpY3RseSB1bmRlciB0aGUgZG9tYWluIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBTTFVCIGRlYnVnZ2Vycy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUgaW4gbmV0L3dpcmVsZXNzL2NvcmUuYywgYWx0ZXJpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIGNoYW5uZWwgZGVmaW5pdGlvbiBzd2FwcGluZywgYW5kIGVycm9yIHJvbGxiYWNrIGhhbmRsaW5nIGZvciBOQU4gKE5laWdoYm9yIEF3YXJlbmVzcyBOZXR3b3JraW5nKSBsb2NhbCBzY2hlZHVsZXMuIFRoaXMgcGF0aCBpcyBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBubDgwMjExIGdlbmVyaWMgbmV0bGluayBpbnRlcmZhY2UgKE5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQpIGFuZCB2aXJ0dWFsIG1hYzgwMjExIGRldmljZXMgKHN1Y2ggYXMgbWFjODAyMTFfaHdzaW0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMToyOTo0My4zMDgyMTY0NDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzg4NjE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGExZWMyNDE0MzNiNDM0OTg0ZWFiODE1YjFlYTI1NzdkZGY5ZjBiZTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAyMToyOTo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjViNDJkNmVjMWFkNjYgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuY1xcbisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmNcXG5AQCAtMjg4LDYgKzI4OCw4IEBAIGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcXG4ge1xcbitcXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWZzID0gTlVMTCwgKm9sZF9jaGFuZGVmcztcXG4rXFx0dTggb2xkX25fY2hhbm5lbHM7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS5tdHgpO1xcbkBAIC0yOTgsMjkgKzMwMCw0MiBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdGlmICh3ZGV2LVxcdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZylcXG4gXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuLVxcdHJldCA9IHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChyZGV2LCB3ZGV2LCBzY2hlZCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHR3ZGV2LVxcdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IHNjaGVkLVxcdTAwM2VkZWZlcnJlZDtcXG4tXFxuLVxcdGtmcmVlKHdkZXYtXFx1MDAzZXUubmFuLmNoYW5kZWZzKTtcXG4tXFx0d2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBOVUxMO1xcbi1cXHR3ZGV2LVxcdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gMDtcXG4rXFx0LypcXG4rXFx0ICogUHJlLWFsbG9jYXRlIGNoYW5kZWZzLCBzbyB3ZSBkb24ndCBydWluIHRoZSBjdXJyZW50XFxuK1xcdCAqIHNjaGVkdWxlIG9uIGFsbG9jYXRpb24gZmFpbHVyZS5cXG4rXFx0ICovXFxuK1xcdGlmIChzY2hlZC1cXHUwMDNlbl9jaGFubmVscykge1xcbitcXHRcXHRjaGFuZGVmcyA9IGtjYWxsb2Moc2NoZWQtXFx1MDAzZW5fY2hhbm5lbHMsIHNpemVvZigqY2hhbmRlZnMpLFxcbitcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFjaGFuZGVmcylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRpZiAoIXNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBzY2hlZC1cXHUwMDNlbl9jaGFubmVsczsgaSsrKVxcbitcXHRcXHRcXHRjaGFuZGVmc1tpXSA9IHNjaGVkLVxcdTAwM2VuYW5fY2hhbm5lbHNbaV0uY2hhbmRlZjtcXG4rXFx0fVxcbiBcXG4tXFx0d2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBrY2FsbG9jKHNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKCp3ZGV2LVxcdTAwM2V1Lm5hbi5jaGFuZGVmcyksXFxuLVxcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4tXFx0aWYgKCF3ZGV2LVxcdTAwM2V1Lm5hbi5jaGFuZGVmcylcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdC8qXFxuK1xcdCAqIFN3YXAgaW4gdGhlIG5ldyBjaGFuZGVmcyBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyIGFuZCBzZXQgdGhlXFxuK1xcdCAqIGRlZmVycmVkIGZsYWcsIHNvIGlmIHRoZSBkcml2ZXIgY29tcGxldGVzIHRoZSB1cGRhdGUgc3luY2hyb25vdXNseVxcbitcXHQgKiB0aGUgbmV3IHNjaGVkdWxlIHdpbGwgYmUgYWxyZWFkeSBpbiBwbGFjZS5cXG4rXFx0ICovXFxuK1xcdG9sZF9jaGFuZGVmcyA9IHdkZXYtXFx1MDAzZXUubmFuLmNoYW5kZWZzO1xcbitcXHRvbGRfbl9jaGFubmVscyA9IHdkZXYtXFx1MDAzZXUubmFuLm5fY2hhbm5lbHM7XFxuK1xcdHdkZXYtXFx1MDAzZXUubmFuLmNoYW5kZWZzID0gY2hhbmRlZnM7XFxuK1xcdHdkZXYtXFx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBzY2hlZC1cXHUwMDNlbl9jaGFubmVscztcXG4rXFx0d2Rldi1cXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBzY2hlZC1cXHUwMDNlZGVmZXJyZWQ7XFxuIFxcbi1cXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzOyBpKyspXFxuLVxcdFxcdHdkZXYtXFx1MDAzZXUubmFuLmNoYW5kZWZzW2ldID0gc2NoZWQtXFx1MDAzZW5hbl9jaGFubmVsc1tpXS5jaGFuZGVmO1xcbitcXHRyZXQgPSByZGV2X25hbl9zZXRfbG9jYWxfc2NoZWQocmRldiwgd2Rldiwgc2NoZWQpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdC8qIFJlc3RvcmUgdGhlIHByZXZpb3VzIHNjaGVkdWxlIG9uIGZhaWx1cmUgKi9cXG4rXFx0XFx0d2Rldi1cXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBmYWxzZTtcXG4rXFx0XFx0d2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBvbGRfY2hhbmRlZnM7XFxuK1xcdFxcdHdkZXYtXFx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBvbGRfbl9jaGFubmVscztcXG4rXFx0XFx0a2ZyZWUoY2hhbmRlZnMpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbi1cXHR3ZGV2LVxcdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gc2NoZWQtXFx1MDAzZW5fY2hhbm5lbHM7XFxuK1xcdGtmcmVlKG9sZF9jaGFuZGVmcyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMToyOTo0My44NDY3ODEyNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ1MDg1Mjk5MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlXCIsXG4gICAgXCJubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWRcIixcbiAgICBcImNmZzgwMjExX3N0b3BfbmFuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSBpbiBuZXQvd2lyZWxlc3MvY29yZS5jLCBhbHRlcmluZyBtZW1vcnkgbWFuYWdlbWVudCwgY2hhbm5lbCBkZWZpbml0aW9uIHN3YXBwaW5nLCBhbmQgZXJyb3Igcm9sbGJhY2sgaGFuZGxpbmcgZm9yIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpIGxvY2FsIHNjaGVkdWxlcy4gVGhpcyBwYXRoIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIG5sODAyMTEgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSAoTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCkgYW5kIHZpcnR1YWwgbWFjODAyMTEgZGV2aWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTFlYzI0MTQzM2I0MzQ5ODRlYWI4MTViMWVhMjU3N2RkZjlmMGJlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjE6Mjk6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xuaW5kZXggZDEzMzEwZmVmNjkxYS4uNWI0MmQ2ZWMxYWQ2NiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmNcbisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbkBAIC0yODgsNiArMjg4LDggQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpXG4ge1xuK1x0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmcyA9IE5VTEwsICpvbGRfY2hhbmRlZnM7XG4rXHR1OCBvbGRfbl9jaGFubmVscztcbiBcdGludCByZXQ7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkubXR4KTtcbkBAIC0yOTgsMjkgKzMwMCw0MiBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRpZiAod2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZylcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbi1cdHJldCA9IHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChyZGV2LCB3ZGV2LCBzY2hlZCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0d2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IHNjaGVkLVx1MDAzZWRlZmVycmVkO1xuLVxuLVx0a2ZyZWUod2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyk7XG4tXHR3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzID0gTlVMTDtcbi1cdHdkZXYtXHUwMDNldS5uYW4ubl9jaGFubmVscyA9IDA7XG4rXHQvKlxuK1x0ICogUHJlLWFsbG9jYXRlIGNoYW5kZWZzLCBzbyB3ZSBkb24ndCBydWluIHRoZSBjdXJyZW50XG4rXHQgKiBzY2hlZHVsZSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuXG4rXHQgKi9cbitcdGlmIChzY2hlZC1cdTAwM2VuX2NoYW5uZWxzKSB7XG4rXHRcdGNoYW5kZWZzID0ga2NhbGxvYyhzY2hlZC1cdTAwM2VuX2NoYW5uZWxzLCBzaXplb2YoKmNoYW5kZWZzKSxcbitcdFx0XHRcdCAgIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIWNoYW5kZWZzKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0aWYgKCFzY2hlZC1cdTAwM2VuX2NoYW5uZWxzKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNjaGVkLVx1MDAzZW5fY2hhbm5lbHM7IGkrKylcbitcdFx0XHRjaGFuZGVmc1tpXSA9IHNjaGVkLVx1MDAzZW5hbl9jaGFubmVsc1tpXS5jaGFuZGVmO1xuK1x0fVxuIFxuLVx0d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyA9IGtjYWxsb2Moc2NoZWQtXHUwMDNlbl9jaGFubmVscyxcbi1cdFx0XHRcdCAgICAgICBzaXplb2YoKndkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnMpLFxuLVx0XHRcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuLVx0aWYgKCF3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdC8qXG4rXHQgKiBTd2FwIGluIHRoZSBuZXcgY2hhbmRlZnMgYmVmb3JlIGNhbGxpbmcgdGhlIGRyaXZlciBhbmQgc2V0IHRoZVxuK1x0ICogZGVmZXJyZWQgZmxhZywgc28gaWYgdGhlIGRyaXZlciBjb21wbGV0ZXMgdGhlIHVwZGF0ZSBzeW5jaHJvbm91c2x5XG4rXHQgKiB0aGUgbmV3IHNjaGVkdWxlIHdpbGwgYmUgYWxyZWFkeSBpbiBwbGFjZS5cbitcdCAqL1xuK1x0b2xkX2NoYW5kZWZzID0gd2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcztcbitcdG9sZF9uX2NoYW5uZWxzID0gd2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzO1xuK1x0d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyA9IGNoYW5kZWZzO1xuK1x0d2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gc2NoZWQtXHUwMDNlbl9jaGFubmVscztcbitcdHdkZXYtXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBzY2hlZC1cdTAwM2VkZWZlcnJlZDtcbiBcbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzY2hlZC1cdTAwM2VuX2NoYW5uZWxzOyBpKyspXG4tXHRcdHdkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnNbaV0gPSBzY2hlZC1cdTAwM2VuYW5fY2hhbm5lbHNbaV0uY2hhbmRlZjtcbitcdHJldCA9IHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChyZGV2LCB3ZGV2LCBzY2hlZCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdC8qIFJlc3RvcmUgdGhlIHByZXZpb3VzIHNjaGVkdWxlIG9uIGZhaWx1cmUgKi9cbitcdFx0d2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IGZhbHNlO1xuK1x0XHR3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzID0gb2xkX2NoYW5kZWZzO1xuK1x0XHR3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBvbGRfbl9jaGFubmVscztcbitcdFx0a2ZyZWUoY2hhbmRlZnMpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFxuLVx0d2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gc2NoZWQtXHUwMDNlbl9jaGFubmVscztcbitcdGtmcmVlKG9sZF9jaGFuZGVmcyk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMToyOTo0My44NDY3ODQxOTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTk4Mjk0MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbmV0L3dpcmVsZXNzL2NvcmUuY2AgZmlsZSBhbmQsIG1vcmUgcHJlY2lzZWx5LCB0aGUgYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGVgIGZ1bmN0aW9uLiBUaGlzIHJlcXVpcmVzIGEgbWV0aG9kaWNhbCBhcHByb2FjaCwgbmF0dXJhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIOKAkyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbi4gVGhpcyBtZWFucyBJJ2xsIGRlbHZlIGludG8gdGhlIGNvbnRleHQsIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGltcGFjdGVkLCBhbmQgdGhlIHNwZWNpZmljIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbi4gSSBtdXN0IGFzY2VydGFpbiBpdHMgcmVhY2hhYmlsaXR5IGZyb20gdmFyaW91cyBwb2ludHMgaW4gdGhlIHdpcmVsZXNzIHN0YWNrLlxuXG5UbyBnZXQgYSBxdWljayBhbmQgZGVlcCB2aWV3LCBJJ2xsIGxldmVyYWdlIG15IGV4aXN0aW5nIHRvb2xraXQuIEknbGwgcmVhY2ggZm9yIGVpdGhlciBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZXhhbWluZSBib3RoIHRoZSBgbmV0L3dpcmVsZXNzL2NvcmUuY2AgZmlsZSBhbmQgdGhlIGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlYCBmdW5jdGlvbiBpbiBkZXRhaWwuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IHBpbnBvaW50IGV4YWN0bHkgd2hhdCdzIGNoYW5nZWQgYW5kIHVuZGVyc3RhbmQgdGhlIGxvY2FsIGZ1bmN0aW9uLCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gTXkgZ29hbCBpcyBhIGZ1bGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY3OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6Mjk6NDkuMDQ1MDgxNjc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDE4NzM5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvY29yZS5jPTI1NT12b2lkIGNmZzgwMjExX3N0b3BfbmFuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjc2LVxcdC8qIFVuc2NoZWR1bGUgYWxsICovXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyNzc6XFx0Y2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShyZGV2LCB3ZGV2LCBcXHUwMDI2ZW1wdHlfc2NoZWQpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjc4LVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yODYtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyODc6aW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjg4LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD01NjE9dm9pZCBjZmc4MDIxMV9zdG9wX3BkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTYzLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg6NTY0OmludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU2NS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTc2ODU9c3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc3NjItXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNzc2MzpcXHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShyZGV2LCB3ZGV2LCBzY2hlZCk7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzc2NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjI5OjUwLjg4Njk2MDY4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNzg2NzU4MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBjZmc4MDIxMSBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGhvdyBgY2ZnODAyMTFgIGdldHMgYnVpbHQgYW5kIGNvbmZpZ3VyZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBidWlsZCBzeXN0ZW0uIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIGBjZmc4MDIxMWAsIGFuZCB0aGVuIEknbGwgaGVhZCBvdmVyIHRvIGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgIHRvIHNlZSBob3cgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIHVsdGltYXRlbHkgdHJhbnNsYXRlIGludG8gY29tcGlsYXRpb24gZGlyZWN0aXZlcyBhbmQgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZWdyYXRpb24gaW50byB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrIGFuZCBhbnkgcG90ZW50aWFsIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzLiBJdCdzIHRoZSBzdGFuZGFyZCBhcHByb2FjaCwgS2NvbmZpZyBmb3IgdGhlIFwid2hhdFwiIGFuZCBNYWtlZmlsZSBmb3IgdGhlIFwiaG93XCIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMToyOTo1My4wNjU2Mzg1MjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4OTEzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLS4qY29yZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL01ha2VmaWxlPTM9b2JqLXkgKz0gdGVzdHMvXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTQtXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1dFWFRfQ09SRSkgKz0gd2V4dC1jb3JlLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtNi1vYmotJChDT05GSUdfV0VYVF9QUk9DKSArPSB3ZXh0LXByb2Mub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMToyOTo1My4xMTQ1Mzc2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTcxNjExODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXaXJlbGVzcyBNYWtlZmlsZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gdHJvdWJsZXNob290IHRoaXMgaXNzdWUgaXMgdG8gZXhhbWluZSB0aGUgYG5ldC93aXJlbGVzcy9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgY29tcG9uZW50cyBpcyBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpbmdzIGFyZSBiZWluZyBjb21waWxlZCwgbGlua2VkLCBhbmQgcG90ZW50aWFsbHkgd2hlcmUgc3BlY2lmaWMgbW9kdWxlIGRlcGVuZGVuY2llcyBhcmUgc2V0LiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciBhbnl0aGluZyB1bnVzdWFsIG9yIHVuZXhwZWN0ZWQgaW4gdGhlIGJ1aWxkIGZsYWdzLCBpbmNsdWRlIHBhdGhzLCBvciBtb2R1bGUgZGVjbGFyYXRpb25zLiBNYXliZSB0aGVyZSdzIGEgbWlzY29uZmlndXJhdGlvbiBpbiBob3cgYSBkcml2ZXIgaXMgYmVpbmcgYnVpbHQsIGEgZGVwZW5kZW5jeSB0aGF0J3Mgbm90IGJlaW5nIG1ldCwgb3IgYSBjb25mbGljdGluZyBzZXR0aW5nLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgcGFyc2luZyB0aGlzIE1ha2VmaWxlIGZvciBjbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjI5OjU1LjI3MTcwMTk1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai0kKENPTkZJR19DRkc4MDIxMSkgKz0gY2ZnODAyMTEub1xcbiAgIDM6XFx0b2JqLXkgKz0gdGVzdHMvXFxuICAgNDpcXHRcXG4gICA1OlxcdG9iai0kKENPTkZJR19XRVhUX0NPUkUpICs9IHdleHQtY29yZS5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfV0VYVF9QUk9DKSArPSB3ZXh0LXByb2Mub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX1dFWFRfUFJJVikgKz0gd2V4dC1wcml2Lm9cXG4gICA4OlxcdFxcbiAgIDk6XFx0Y2ZnODAyMTEteSArPSBjb3JlLm8gc3lzZnMubyByYWRpb3RhcC5vIHV0aWwubyByZWcubyBzY2FuLm8gbmw4MDIxMS5vXFxuICAxMDpcXHRjZmc4MDIxMS15ICs9IG1sbWUubyBpYnNzLm8gc21lLm8gY2hhbi5vIGV0aHRvb2wubyBtZXNoLm8gYXAubyB0cmFjZS5vIG9jYi5vXFxuICAxMTpcXHRjZmc4MDIxMS15ICs9IG1pY2hhZWwtbWljLm8gcG1zci5vXFxuICAxMjpcXHRjZmc4MDIxMS0kKENPTkZJR19PRikgKz0gb2Yub1xcbiAgMTM6XFx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgKz0gZGVidWdmcy5vXFxuICAxNDpcXHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9XRVhUKSArPSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cXG4gIDE1OlxcdFxcbiAgMTY6XFx0Q0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTKSArPSBzaGlwcGVkLWNlcnRzLm9cXG4gIDE5OlxcdGlmbmVxICgkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLClcXG4gIDIwOlxcdGNmZzgwMjExLXkgKz0gZXh0cmEtY2VydHMub1xcbiAgMjE6XFx0ZW5kaWZcXG4gIDIyOlxcdFxcbiAgMjM6XFx0JChvYmopL3NoaXBwZWQtY2VydHMuYzogJChzb3J0ICQod2lsZGNhcmQgJChzcmMpL2NlcnRzLyouaGV4KSlcXG4gIDI0OlxcdFxcdEAkKGtlY2hvKSBcXFwiICBHRU4gICAgICRAXFxcIlxcbiAgMjU6XFx0XFx0JChRKShlY2hvICcjaW5jbHVkZSBcXFwicmVnLmhcXFwiJzsgXFxcXFxcbiAgMjY6XFx0XFx0ICBlY2hvICdjb25zdCB1OCBzaGlwcGVkX3JlZ2RiX2NlcnRzW10gPSB7JzsgXFxcXFxcbiAgMjc6XFx0XFx0ICBlY2hvIHwgY2F0IC0gJF4gOyBcXFxcXFxuICAyODpcXHRcXHQgIGVjaG8gJ307JzsgXFxcXFxcbiAgMjk6XFx0XFx0ICBlY2hvICd1bnNpZ25lZCBpbnQgc2hpcHBlZF9yZWdkYl9jZXJ0c19sZW4gPSBzaXplb2Yoc2hpcHBlZF9yZWdkYl9jZXJ0cyk7JzsgXFxcXFxcbiAgMzA6XFx0XFx0ICkgXFx1MDAzZSAkQFxcbiAgMzE6XFx0XFxuICAzMjpcXHQkKG9iaikvZXh0cmEtY2VydHMuYzogJChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSKSBcXFxcXFxuICAzMzpcXHRcXHRcXHQgICAgICAkKHNvcnQgJCh3aWxkY2FyZCAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLyoueDUwOSkpXFxuICAzNDpcXHRcXHRAJChrZWNobykgXFxcIiAgR0VOICAgICAkQFxcXCJcXG4gIDM1OlxcdFxcdCQoUSkoc2V0IC1lOyBcXFxcXFxuICAzNjpcXHRcXHQgIGFsbGY9XFxcIlxcXCI7IFxcXFxcXG4gIDM3OlxcdFxcdCAgZm9yIGYgaW4gJF4gOyBkbyBcXFxcXFxuICAzODpcXHRcXHQgICAgICB0ZXN0IC1mICQkZiB8fCBjb250aW51ZTtcXFxcXFxuICAzOTpcXHRcXHQgICAgICAjIHNpbWlsYXIgdG8gaGV4ZHVtcCAtdiAtZSAnMS8xIFxcXCIweCUuMngsXFxcIiBcXFwiXFxcXG5cXFwiJyBcXFxcXFxuICA0MDpcXHRcXHQgICAgICB0aGlzZj0kJChvZCAtQW4gLXYgLXR4MSBcXHUwMDNjICQkZiB8IFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6Mjk6NTUuMjcxNzY1MDM1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxODg4NzU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBXaXJlbGVzcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBDRkc4MDIxMWAuIFRpbWUgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyBgbmV0L3dpcmVsZXNzL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBrZXJuZWwgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgYENGRzgwMjExYCBpcyBvYnZpb3VzbHkgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGF0LiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhhdCBmaWxlIHRvIHVuZGVyc3RhbmQgd2hpY2ggb3RoZXIgb3B0aW9ucywgZmVhdHVyZXMsIG9yIG1vZHVsZXMgcmVseSBvbiBvciBhcmUgbGlua2VkIHRvIGBDRkc4MDIxMWAuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGRlZXBlciBhbmFseXNpcyBJJ20gcGxhbm5pbmcuIEkgbmVlZCB0byBlbnN1cmUgbm90aGluZyBicmVha3MgdW5leHBlY3RlZGx5IGxhdGVyIG9uIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NDMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjI5OjU3LjE5MDY1NTU4M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzNDI1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENGRzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTMtXFx0Ym9vbCBcXFwiZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjY4OmNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cXHRib29sIFxcXCJjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cXHRib29sIFxcXCJyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTAwLVxcdGJvb2wgXFxcImFsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMTpjb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVxcdHN0cmluZyBcXFwiYWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cXHRib29sIFxcXCJjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cXHRib29sIFxcXCJjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE1OTpjb25maWcgQ0ZHODAyMTFfREVGQVVMVF9QU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cXHRib29sIFxcXCJlbmFibGUgcG93ZXJzYXZlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVxcdGJvb2wgXFxcImNmZzgwMjExIERlYnVnRlMgZW50cmllc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJzdXBwb3J0IENSREFcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE4Nzpjb25maWcgQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJjZmc4MDIxMSB3aXJlbGVzcyBleHRlbnNpb25zIGNvbXBhdGliaWxpdHlcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTMtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6Mjk6NTcuMjQxMDA0NTQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjg0MTYyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkV4YW1pbmluZyB0aGUgQ29yZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgd2lyZWxlc3MgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbmV0L3dpcmVsZXNzL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSBsaW5lcyByZWxhdGVkIHRvIGBDT05GSUdfQ0ZHODAyMTFgLiBUaGF0J3MgdGhlIGZvdW5kYXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgbWFjODAyMTEsIHRoZSBjb3JlIHdpcmVsZXNzIHN0YWNrLiBJJ20gYXNzdW1pbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgbG9naWMgYXJvdW5kIGl0IHRoYXQncyBjYXVzaW5nIHRoZSBpc3N1ZSwgc28gSSdsbCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJIGV4cGVjdCB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbmV0d29ya2luZyBmZWF0dXJlcywgbWF5YmUgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBzZWxlY3Rpb25zLCBhbmQsIGhvcGVmdWxseSwgYSBjbHVlIGFzIHRvIHdoeSB0aGluZ3MgYXJlIGJlaGF2aW5nIHRoZSB3YXkgdGhleSBhcmUuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gdGhlcmUuIEknbSBnb2luZyB0byBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMToyOTo1OS4zNjk0MjQwMzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0XFx0Ym9vbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQ0ZHODAyMTFcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgMjA6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMjpcXHRcXHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcXG4gIDIzOlxcdFxcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbid0XFxuICAyNDpcXHRcXHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cXG4gIDI4OlxcdFxcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL0RvY3VtZW50YXRpb24vY2ZnODAyMTFcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRpZiBDRkc4MDIxMVxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwibmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kXFxcIlxcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBUaGUgbmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kIGhlbHBzIGltcGxlbWVudGluZyB0aGluZ3MgbGlrZVxcbiAgNDI6XFx0XFx0ICBmYWN0b3J5IGNhbGlicmF0aW9uIG9yIHZhbGlkYXRpb24gdG9vbHMgZm9yIHdpcmVsZXNzIGNoaXBzLlxcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBPTkxZIGZvciBrZXJuZWxzIHRoYXQgYXJlIHNwZWNpZmljYWxseVxcbiAgNDU6XFx0XFx0ICBidWlsdCBmb3Igc3VjaCBwdXJwb3Nlcy5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0XFx0ICBEZWJ1Z2dpbmcgdG9vbHMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gZW5kIHVwIGluIHRoZSBoYW5kcyBvZlxcbiAgNDg6XFx0XFx0ICB1c2VycyBzaG91bGQgYmV0dGVyIGJlIGltcGxlbWVudGVkIHdpdGggZGVidWdmcy5cXG4gIDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMToyOTo1OS4zNjk0OTI2NzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyMDE0NTg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTkFOIFNjaGVkdWxlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgYG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZGAuIEl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgZHVnIGludG8gdGhlIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpIGNvZGUuIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgaXMgdHJhY2luZyB0aGUgbmV0bGluayBjb21tYW5kcyB0aGF0IGV2ZW50dWFsbHkgaW52b2tlIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHNwZWNpZmljYWxseSB0aGUgbmV0bGluayBtZXNzYWdlIHR5cGUsIGF0dHJpYnV0ZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBjb250ZXh0IHRoYXQgZ2V0cyBwYXNzZWQgYWxvbmcuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBzb21lIGJlaGF2aW9yIEknbSBzZWVpbmcgYW5kIGVuc3VyaW5nIHRoZSBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHNldCBhbmQgaW50ZXJwcmV0ZWQgY29ycmVjdGx5LiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBpZGVudGlmeSB0aGUgZW50cnkgcG9pbnQgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbW1hbmQgc3RydWN0dXJlIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBvcGVyYXRpb24uIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgYW5kIHN0YXJ0IHRyYWNpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjAxLjU4OTY0MTEwMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzMTcxMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE3NjcyPXN0YXRpYyBib29sIG5sODAyMTFfbmFuX2lzX3NjaGVkX2VtcHR5KHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzY4NC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3Njg1OnN0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzY4Ni1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDYxMS1cXHRcXHQuY21kID0gTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIwNjEyOlxcdFxcdC5kb2l0ID0gbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjA2MTMtXFx0XFx0LmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDowMS42ODE5NjgyNTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg4MTYwMTcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIG5sODAyMTEgUmVhY2hhYmlsaXR5IGFuZCBOQU4gU3VwcG9ydCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlIGNhbiBhY3R1YWxseSByZWFjaCBubDgwMjExIGZyb20gc3l6a2FsbGVyLiBJIGtub3cgc3l6a2FsbGVyJ3MgcHJldHR5IHNvbGlkIHdpdGggaXRzIG5ldGxpbmsgYW5kIG5sODAyMTEgc3R1ZmYsIGxldmVyYWdpbmcgZWl0aGVyIG1hYzgwMjExX2h3c2ltIG9yIHRob3NlIHZpcnR1YWwgZGV2aWNlcyBsaWtlIHZpcnRfd2lmaS4gU28sIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYWNjZXNzLiBOb3csIEknbSB0aGlua2luZywgbGV0J3MganVzdCBtYWtlIHN1cmUgYE1BQzgwMjExX0hXU0lNYCBhbmQgYENGRzgwMjExYCBhcmUgY29ycmVjdGx5IGNvbmZpZ3VyZWQuIFRoYXQgd291bGQgYmUgdGhlIGZpcnN0IHN0ZXAuIFRoZW4gdGhlIGtleSBxdWVzdGlvbiBpcywgZG9lcyBtYWM4MDIxMV9od3NpbSAqYWN0dWFsbHkqIHN1cHBvcnQgTkFOPyBJIGNhbid0IGFzc3VtZSBhbnl0aGluZy4gVG8gYmUgc3VyZSwgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgTUFDODAyMTFfSFdTSU1gIGNvZGUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBkcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyOTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6MDQuNTYzNTcyNTQyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODUyMTE2MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5hbl9zZXRfbG9jYWxfc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvY2ZnODAyMTEuaD00ODQzPXN0cnVjdCBtZ210X2ZyYW1lX3JlZ3Mge1xcbi0tXFxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC01MTkyLSAqXFx0QWxsIG90aGVyIHBhcmFtZXRlcnMgbXVzdCBiZSBpZ25vcmVkLlxcbmluY2x1ZGUvbmV0L2NmZzgwMjExLmg6NTE5MzogKiBAbmFuX3NldF9sb2NhbF9zY2hlZDogY29uZmlndXJlIHRoZSBsb2NhbCBzY2hlZHVsZSBmb3IgTkFOLiBUaGUgc2NoZWR1bGVcXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTUxOTQtICpcXHRjb25zaXN0cyBvZiBhbiBhcnJheSBvZiAlY2ZnODAyMTFfbmFuX2NoYW5uZWwgYW5kIHRoZSBzY2hlZHVsZSBpdHNlbGYsXFxuLS1cXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oPTUyODA9c3RydWN0IGNmZzgwMjExX29wcyB7XFxuLS1cXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTU1ODYtXFx0XFx0XFx0XFx0ICAgdTMyIGNoYW5nZXMpO1xcbmluY2x1ZGUvbmV0L2NmZzgwMjExLmg6NTU4NzpcXHRpbnRcXHQoKm5hbl9zZXRfbG9jYWxfc2NoZWQpKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC01NTg4LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTU5NTM9aWVlZTgwMjExX3NldF9sb2NhbF9uYW5fc2NoZWQoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTYwLVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1OTYxOlxcdHJldHVybiBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzZGF0YSwgc2NoZWQpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTYyLX1cXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz01OTc2PWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy02MDkxLVxcdC5zZXRfZXBjcyA9IGllZWU4MDIxMV9zZXRfZXBjcyxcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NjA5MjpcXHQubmFuX3NldF9sb2NhbF9zY2hlZCA9IGllZWU4MDIxMV9zZXRfbG9jYWxfbmFuX3NjaGVkLFxcbm5ldC9tYWM4MDIxMS9jZmcuYy02MDkzLVxcdC5uYW5fc2V0X3BlZXJfc2NoZWQgPSBpZWVlODAyMTFfc2V0X3BlZXJfbmFuX3NjaGVkLFxcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYz0xMDUwPWllZWU4MDIxMV9uZXdfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jaGFuLmMtMTA3MS1cXHQgKiBXZSBpZ25vcmVkIGEgZHJpdmVyIGVycm9yLCBzZWUgX2llZWU4MDIxMV9zZXRfYWN0aXZlX2xpbmtzIGFuZC9vclxcbm5ldC9tYWM4MDIxMS9jaGFuLmM6MTA3MjpcXHQgKiBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZFxcbm5ldC9tYWM4MDIxMS9jaGFuLmMtMTA3My1cXHQgKi9cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTIwODI9aW50IGllZWU4MDIxMV9tZXNoX2ZpbmlzaF9jc2Eoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMDg1LS8qIE5BTiBjb2RlICovXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjA4NjppbnQgaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjA4Ny1cXHRcXHRcXHRcXHQgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9uYW4uYz0yNDE9aWVlZTgwMjExX25hbl9maW5kX2ZyZWVfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKnNjaGVkX2NmZylcXG4tLVxcbm5ldC9tYWM4MDIxMS9uYW4uYy0yNTAtXFxubmV0L21hYzgwMjExL25hbi5jOjI1MTppbnQgaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL25hbi5jLTI1Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0yNTU9dm9pZCBjZmc4MDIxMV9zdG9wX25hbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI3Ni1cXHQvKiBVbnNjaGVkdWxlIGFsbCAqL1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6Mjc3OlxcdGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2RldiwgXFx1MDAyNmVtcHR5X3NjaGVkKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI3OC1cXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjg2LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6Mjg3OmludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI4OC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzI3LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzI4OlxcdHJldCA9IHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChyZGV2LCB3ZGV2LCBzY2hlZCk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMjktXFx0aWYgKHJldCkge1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD01NjE9dm9pZCBjZmc4MDIxMV9zdG9wX3BkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTYzLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg6NTY0OmludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU2NS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTc2NzI9c3RhdGljIGJvb2wgbmw4MDIxMV9uYW5faXNfc2NoZWRfZW1wdHkoc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3Njg0LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc2ODU6c3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3Njg2LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzc2Mi1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3NzYzOlxcdHJldHVybiBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIHNjaGVkKTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3NzY0LX1cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDYxMS1cXHRcXHQuY21kID0gTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIwNjEyOlxcdFxcdC5kb2l0ID0gbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjA2MTMtXFx0XFx0LmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLFxcbi0tXFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg9MTA2ND1zdGF0aWMgaW5saW5lIGludFxcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oOjEwNjU6cmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaC0xMDY2LVxcdFxcdFxcdCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTA3MC1cXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxMDcxOlxcdHRyYWNlX3JkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIHdkZXYsIHNjaGVkKTtcXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxMDcyOlxcdGlmIChyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZW5hbl9zZXRfbG9jYWxfc2NoZWQpXFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg6MTA3MzpcXHRcXHRyZXQgPSByZGV2LVxcdTAwM2VvcHMtXFx1MDAzZW5hbl9zZXRfbG9jYWxfc2NoZWQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCB3ZGV2LCBzY2hlZCk7XFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTA3NC1cXHRlbHNlXFxuLS1cXG5uZXQvd2lyZWxlc3MvdHJhY2UuaD0yNDE5PVRSQUNFX0VWRU5UKHJkZXZfZGVsX25hbl9mdW5jLFxcbi0tXFxubmV0L3dpcmVsZXNzL3RyYWNlLmgtMjQzNi1cXG5uZXQvd2lyZWxlc3MvdHJhY2UuaDoyNDM3OlRSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZCxcXG5uZXQvd2lyZWxlc3MvdHJhY2UuaC0yNDM4LVxcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjA2LjQxNTY5NDU4MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI5NDIzNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTkFOIGFuZCBtYWM4MDIxMV9od3NpbSoqXG5cbk9rYXksIHNvIGBtYWM4MDIxMWAgaGFzIHN1cHBvcnQgZm9yIE5BTiwgdGhhdCdzIGdvb2QgbmV3cy4gQW5kIGlmIGBtYWM4MDIxMV9od3NpbWAgc3VwcG9ydHMgYG1hYzgwMjExYCwgdGhlbiBJIGhhdmUgYSBwb3RlbnRpYWwgdGVzdGJlZC4gQmVmb3JlIEkgZGlnIHRvbyBkZWVwLCB0aG91Z2gsIGxldCdzIHZlcmlmeSBgTUFDODAyMTFgJ3MgY29uZmlndXJhdGlvbiBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBjaGVjayBgbmV0L21hYzgwMjExL0tjb25maWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGJlZm9yZSBJIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIGRldGFpbHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIHRvIHdvcmsgZnJvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDowOC40NDUxMjE5MzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTU1NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTk9aWYgTUFDODAyMTEgIT0gblxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMi1cXHRib29sXFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ6Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MTpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NDg9ZW5kY2hvaWNlXFxubmV0L21hYzgwMjExL0tjb25maWctNDktXFxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01MS1cXHRzdHJpbmdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXFxcIlNvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBtYWM4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIkVuYWJsZSBMRUQgdHJpZ2dlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkV4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cXHRib29sIFxcXCJUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDktXFxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cXHRib29sIFxcXCJTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzI6Y29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cXHRib29sIFxcXCJWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiVmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjM6Y29uZmlnIE1BQzgwMjExX0hUX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTY0LVxcdGJvb2wgXFxcIlZlcmJvc2UgSFQgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIlZlcmJvc2UgT0NCIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXFx0Ym9vbCBcXFwiVmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTc6Y29uZmlnIE1BQzgwMjExX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlZlcmJvc2UgcG93ZXJzYXZlIG1vZGUgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjEwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNTpjb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXFx0Ym9vbCBcXFwiVmVyYm9zZSBURExTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXFxubmV0L21hYzgwMjExL0tjb25maWctMjk0LVxcdGJvb2wgXFxcIkV4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXFxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVxcdGludCBcXFwiU3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVxcXCIgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDowOC40OTEyODQyMjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgwMjAyNjIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOQU4gU2NoZWR1bGVyKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIE5BTiBzY2hlZHVsaW5nIGlzc3VlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIGBuZXQvd2lyZWxlc3MvY29yZS5jYC4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgYXJvdW5kIHRoZSBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAgZnVuY3Rpb24uIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0aGUgY29yZSBsb2dpYyBmb3Igc2V0dGluZyB1cCBsb2NhbCBzY2hlZHVsZXMgaW4gdGhlIE5BTiBzeXN0ZW0gdG8gcmVzaWRlLiBJJ20gYWltaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIHBvdGVudGlhbCBzcG90cyB3aGVyZSBhIGJ1ZyBtaWdodCBiZSBsdXJraW5nLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDoxMS4yOTMzMTM0MTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjgwOlxcdFxcdHdkZXYtXFx1MDAzZWlzX3J1bm5pbmcgPSBmYWxzZTtcXG4gMjgxOlxcdFxcbiAyODI6XFx0XFx0ZXRoX3plcm9fYWRkcih3ZGV2LVxcdTAwM2V1Lm5hbi5jbHVzdGVyX2lkKTtcXG4gMjgzOlxcdFxcbiAyODQ6XFx0XFx0cmRldi1cXHUwMDNlb3BlbmNvdW50LS07XFxuIDI4NTpcXHR9XFxuIDI4NjpcXHRcXG4gMjg3OlxcdGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gMjg4OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiAyODk6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmcyA9IE5VTEwsICpvbGRfY2hhbmRlZnM7XFxuIDI5MjpcXHRcXHR1OCBvbGRfbl9jaGFubmVscztcXG4gMjkzOlxcdFxcdGludCByZXQ7XFxuIDI5NDpcXHRcXG4gMjk1OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5Lm10eCk7XFxuIDI5NjpcXHRcXG4gMjk3OlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8ICF3ZGV2X3J1bm5pbmcod2RldikpXFxuIDI5ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjk5OlxcdFxcbiAzMDA6XFx0XFx0aWYgKHdkZXYtXFx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nKVxcbiAzMDE6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gMzAyOlxcdFxcbiAzMDM6XFx0XFx0LypcXG4gMzA0OlxcdFxcdCAqIFByZS1hbGxvY2F0ZSBjaGFuZGVmcywgc28gd2UgZG9uJ3QgcnVpbiB0aGUgY3VycmVudFxcbiAzMDU6XFx0XFx0ICogc2NoZWR1bGUgb24gYWxsb2NhdGlvbiBmYWlsdXJlLlxcbiAzMDY6XFx0XFx0ICovXFxuIDMwNzpcXHRcXHRpZiAoc2NoZWQtXFx1MDAzZW5fY2hhbm5lbHMpIHtcXG4gMzA4OlxcdFxcdFxcdGNoYW5kZWZzID0ga2NhbGxvYyhzY2hlZC1cXHUwMDNlbl9jaGFubmVscywgc2l6ZW9mKCpjaGFuZGVmcyksXFxuIDMwOTpcXHRcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMKTtcXG4gMzEwOlxcdFxcdFxcdGlmICghY2hhbmRlZnMpXFxuIDMxMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzEyOlxcdFxcbiAzMTM6XFx0XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBzY2hlZC1cXHUwMDNlbl9jaGFubmVsczsgaSsrKVxcbiAzMTQ6XFx0XFx0XFx0XFx0Y2hhbmRlZnNbaV0gPSBzY2hlZC1cXHUwMDNlbmFuX2NoYW5uZWxzW2ldLmNoYW5kZWY7XFxuIDMxNTpcXHRcXHR9XFxuIDMxNjpcXHRcXG4gMzE3OlxcdFxcdC8qXFxuIDMxODpcXHRcXHQgKiBTd2FwIGluIHRoZSBuZXcgY2hhbmRlZnMgYmVmb3JlIGNhbGxpbmcgdGhlIGRyaXZlciBhbmQgc2V0IHRoZVxcbiAzMTk6XFx0XFx0ICogZGVmZXJyZWQgZmxhZywgc28gaWYgdGhlIGRyaXZlciBjb21wbGV0ZXMgdGhlIHVwZGF0ZSBzeW5jaHJvbm91c2x5XFxuIDMyMDpcXHRcXHQgKiB0aGUgbmV3IHNjaGVkdWxlIHdpbGwgYmUgYWxyZWFkeSBpbiBwbGFjZS5cXG4gMzIxOlxcdFxcdCAqL1xcbiAzMjI6XFx0XFx0b2xkX2NoYW5kZWZzID0gd2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnM7XFxuIDMyMzpcXHRcXHRvbGRfbl9jaGFubmVscyA9IHdkZXYtXFx1MDAzZXUubmFuLm5fY2hhbm5lbHM7XFxuIDMyNDpcXHRcXHR3ZGV2LVxcdTAwM2V1Lm5hbi5jaGFuZGVmcyA9IGNoYW5kZWZzO1xcbiAzMjU6XFx0XFx0d2Rldi1cXHUwMDNldS5uYW4ubl9jaGFubmVscyA9IHNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzO1xcbiAzMjY6XFx0XFx0d2Rldi1cXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBzY2hlZC1cXHUwMDNlZGVmZXJyZWQ7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdHJldCA9IHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChyZGV2LCB3ZGV2LCBzY2hlZCk7XFxuIDMyOTpcXHRcXHRpZiAocmV0KSB7XFxuIDMzMDpcXHRcXHRcXHQvKiBSZXN0b3JlIHRoZSBwcmV2aW91cyBzY2hlZHVsZSBvbiBmYWlsdXJlICovXFxuIDMzMTpcXHRcXHRcXHR3ZGV2LVxcdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IGZhbHNlO1xcbiAzMzI6XFx0XFx0XFx0d2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBvbGRfY2hhbmRlZnM7XFxuIDMzMzpcXHRcXHRcXHR3ZGV2LVxcdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gb2xkX25fY2hhbm5lbHM7XFxuIDMzNDpcXHRcXHRcXHRrZnJlZShjaGFuZGVmcyk7XFxuIDMzNTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzMzY6XFx0XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRcXHRrZnJlZShvbGRfY2hhbmRlZnMpO1xcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHRyZXR1cm4gMDtcXG4gMzQxOlxcdH1cXG4gMzQyOlxcdFxcbiAzNDM6XFx0dm9pZCBjZmc4MDIxMV9zdG9wX3BkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gMzQ0OlxcdFxcdFxcdCAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXFxuIDM0NTpcXHR7XFxuIDM0NjpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS5tdHgpO1xcbiAzNDc6XFx0XFxuIDM0ODpcXHRcXHRpZiAoV0FSTl9PTih3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUEQpKVxcbiAzNDk6XFx0XFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDoxMS4yOTM0MzU0NTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjUzODc4NDY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbiBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAgc2VlbXMgdG8gYmUgYSBzaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiBob3cgY2hhbm5lbCBkZWZpbml0aW9ucyBhcmUgaGFuZGxlZC4gUHJldmlvdXNseSwgaXQgYWxsb2NhdGVkIGBjaGFuZGVmc2AgKmFmdGVyKiB0aGUgaW5pdGlhbCBjYWxsIGFuZCB0aGVuIGNvbmRpdGlvbmFsbHkgZnJlZWQgYW5kIHJlYWxsb2NhdGVkIGJhc2VkIG9uIHRoZSBpbml0aWFsIGNhbGwncyByZXR1cm4uIE5vdywgaXQncyBjaGFuZ2VkIHRvIHByZS1hbGxvY2F0ZSwgc2V0IHRoZSB2YXJpYWJsZXMgKmJlZm9yZSogdGhlIGNyaXRpY2FsIGNhbGwgYHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZGAsIGFuZCB0aGVuIGltcGxlbWVudCBhIHByb3BlciByb2xsYmFjayBtZWNoYW5pc20gb24gZmFpbHVyZSwgcmVzdG9yaW5nIHRoZSBvbGQgc3RhdGUuICBJZiB0aGUgY2FsbCAqc3VjY2VlZHMqLCBpdCByZWxlYXNlcyB0aGUgKm9sZCogZGF0YS5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm5zIGFyZSBhcm91bmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBuZXcgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhbmQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMuIFByZS1hbGxvY2F0aW9uIGNvbWJpbmVkIHdpdGggcG9pbnRlciBzd2FwcGluZyBhbmQgY2FsbGJhY2sgYmVoYXZpb3IgY2FuIGludHJvZHVjZSBzdWJ0bGUgZXJyb3JzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBcImRlZmVycmVkXCIgbmF0dXJlIG9mIHRoZSBzY2hlZHVsZSB1cGRhdGUuIFRoaXMgcmV2aXNlZCBzdHJ1Y3R1cmUsIHdpdGggaXRzIHByZS1hbGxvY2F0aW9uLCBwb2ludGVyIG1hbmlwdWxhdGlvbiwgYW5kIGNvbmRpdGlvbmFsIHJvbGxiYWNrLCBzY3JlYW1zIFwiZnV6eiBtZSFcIiBUaGVzZSBraW5kcyBvZiBjaGFuZ2VzIGFyZSB0aGUgcHJpbWUgdGFyZ2V0cyBmb3IgdW5jb3ZlcmluZyBtZW1vcnkgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIGFuZCBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMuXG5cblJlYWNoYWJpbGl0eSBpcyBkZWZpbml0ZWx5IGhpZ2guIEkgY2FuIGhpdCB0aGlzIGZ1bmN0aW9uIGVhc2lseSB1c2luZyB0aGUgYE5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRURgIE5ldGxpbmsgY29tbWFuZC4gVGhhdOKAmXMgYSBzdHJhaWdodGZvcndhcmQgaW50ZXJmYWNlIGZvciBhbnkgd2lyZWxlc3MgbmV0d29yayAoc2ltdWxhdGVkIG9yIHJlYWwpLiBUaGUgZmFjdCB0aGF0IGl0IG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBzdGF0ZSB3aXRoaW4gYSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50LCBhcyBwZXIgZ3VpZGVsaW5lcywgY29uZmlybXMgdGhlIGZ1enppbmcgdmFsdWUuXG5cbkZyb20gYSBmb2N1cyBzeW1ib2wgcGVyc3BlY3RpdmUsIEknbSBjb25maWRlbnQgaW4gaW5jbHVkaW5nOlxuXG4qICAgYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGVgICh0aGUgbW9kaWZpZWQgZnVuY3Rpb24pXG4qICAgYG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZGAgKHRoZSBlbnRyeSBwb2ludClcbiogICBgY2ZnODAyMTFfc3RvcF9uYW5gIChhIGNhbGxlcilcblxuSSdsbCBiZSBzZXR0aW5nIHVwIGEgdGVzdCBlbnZpcm9ubWVudCwgbGlrZWx5IHdpdGggYE1BQzgwMjExX0hXU0lNYCBydW5uaW5nIHdpdGhpbiBRRU1VIHdpdGggc3l6a2FsbGVyLiBJJ2xsIG5lZWQgdG8gZW5hYmxlIGBDRkc4MDIxMWAsIGBOTDgwMjExX1RFU1RNT0RFYCAoanVzdCB0byBiZSBzYWZlKSwgYW5kLCBvZiBjb3Vyc2UsIGBNQUM4MDIxMWAgYW5kIGBNQUM4MDIxMV9IV1NJTWAgZm9yIHRoZSBlbXVsYXRlZCBkZXZpY2UuIFRoZXNlIHNldHRpbmdzIGdpdmUgbWUgZ29vZCBjb3ZlcmFnZS4gTGV0J3Mgc2VlIGlmIHdlIGNhbiB0cmlnZ2VyIHNvbWUgYnVncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NjQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6MTcuODMyMjIzNDIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUyMDk5MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9IV1NJTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjE5LjU4NDMyNzU4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDAwMjc4MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBWaXJ0dWFsIFdpcmVsZXNzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSB2aXJ0dWFsIHdpcmVsZXNzIG5ldHdvcmsgZHJpdmVyLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgZHJpdmVyLiBMZXQncyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUganVpY3kgZGV0YWlscyBhYm91dCBmZWF0dXJlIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHNldHRpbmdzIGFyZSBrZXB0LiBUaGF0J3MgdGhlIGZpcnN0IHN0b3AgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIHdpcmVsZXNzIGxhbmRzY2FwZSBhbmQgd2hhdCdzIGNvbmZpZ3VyYWJsZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzcyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6MjEuOTg0NjA5MDU1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XFxuICAgNjpcXHRcXHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxcbiAgIDc6XFx0XFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxcbiAgIDg6XFx0XFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XFxuICAgOTpcXHRcXHQgIHRvIHVzZSB0aGlzIHRvb2wuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICAxMjpcXHRcXHQgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBWSVJUX1dJRklcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZXRoZXJuZXQgY29ubmVjdGlvbnMgdG8gYXBwZWFyIGFzIGlmIHRoZXlcXG4gIDE5OlxcdFxcdCAgYXJlIHdpZmkgY29ubmVjdGlvbnMgdGhyb3VnaCBhIHNwZWNpYWwgcnRuZXRsaW5rIGRldmljZS5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDoyMS45ODQ2Nzk5MDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUyMTA0NDEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gY2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBgTUFDODAyMTFgIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqQW5hbHl6aW5nIGBNQUM4MDIxMWAgRGVwZW5kZW5jaWVzIGluIHRoZSBLZXJuZWwqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgYE1BQzgwMjExYCBpcyBjb25uZWN0ZWQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHdpcmVsZXNzIHN1YnN5c3RlbSwgcGFydGljdWxhcmx5IGBDRkc4MDIxMWAuIEkga25vdyBpdCdzIGEgY3JpdGljYWwgcmVsYXRpb25zaGlwLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gaXQgc3BlY2lmaWNhbGx5IGJ5IGV4YW1pbmluZyB0aGUgYEtjb25maWdgIGZpbGUuIEknbGwgbmVlZCB0byBnbyB0byBgbmV0L21hYzgwMjExL0tjb25maWdgIGFuZCByZWFsbHkgZGlnIGluIHRoZXJlLiBJJ20gbG9va2luZyBmb3IgZGlyZWN0IGRlcGVuZGVuY2llcywgb2J2aW91c2x5LCBidXQgYWxzbyBpbmRpcmVjdCBvbmVzLiBJIHNob3VsZCBiZSBsb29raW5nIG91dCBmb3IgYW55IFwiZGVwZW5kcyBvblwiIG9yIFwic2VsZWN0XCIgc3RhdGVtZW50cywgYW5kIGV2ZW4gbW9yZSBicm9hZGx5IGhvdyB0aGUgbW9kdWxlcyBhcmUgb3JnYW5pc2VkLiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIGBDRkc4MDIxMWAgaXMgYSBkaXJlY3QgcHJlcmVxdWlzaXRlIG9yIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgdW5kZXJseWluZyBmYWN0b3JzIGF0IHBsYXkuIFVuZGVyc3RhbmRpbmcgdGhpcyBkZXBlbmRlbmN5IGNoYWluIGlzIGFic29sdXRlbHkga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHBpZWNlcyBvZiB0aGUga2VybmVsIHJlbGF0ZSB0byBlYWNoIG90aGVyLiBJJ2xsIGtlZXAgYW4gb3BlbiBtaW5kIGZvciBhbnkgb3RoZXIgbW9kdWxlcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdCwgb3IgdGhhdCBhcmUsIGluIHR1cm4sIGRlcGVuZGVudCBvbiBgTUFDODAyMTFgLiBJIHJlYWxseSBtdXN0IGJlIG1ldGhvZGljYWwgYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjI0LjUwNTcyNzAwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE1BQzgwMjExXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAgNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcXG4gICA3OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NDTVxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19HQ01cXG4gIDExOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTI6XFx0XFx0aGVscFxcbiAgMTM6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBJRUVFIDgwMi4xMVxcbiAgMTQ6XFx0XFx0ICBuZXR3b3JraW5nIHN0YWNrLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRjb21tZW50IFxcXCJDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxcbiAgMTg6XFx0XFxuICAxOTpcXHRpZiBNQUM4MDIxMSAhPSBuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6MjQuNTA1Nzk2NTI0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNzYzNDE3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRmluYWwgRnV6emluZyBTdHJhdGVneSBWYWxpZGF0aW9uKipcblxuT2theSwgbGV0J3MganVzdCBydW4gdGhyb3VnaCB0aGlzIG9uZSBsYXN0IHRpbWUgYmVmb3JlIHdlIGNvbW1pdCB0byBpdC4gRmlyc3QsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgdHJ1ZSBoZXJlLCBubyBxdWVzdGlvbi4gVGhlIHRhcmdldCBpcyB0aGUgYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGVgIGZ1bmN0aW9uIGluIGBuZXQvd2lyZWxlc3MvY29yZS5jYC4gVGhlIHJlYXNvbmluZyBpcyBzb3VuZDogdGhpcyBwYXRjaCB0b3VjaGVzIHRoZSBOQU4gY2hhbm5lbCBzY2hlZHVsZSBhbGxvY2F0aW9uLCBvcmRlcmluZywgYW5kIHJvbGxiYWNrIGxvZ2ljLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIGZhY3QgdGhhdCBpdCdzIGV4cG9zZWQgdGhyb3VnaCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSAoYG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZGApIG1ha2VzIGl0IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgYW5kIHRoZSBpbmNsdXNpb24gb2YgZW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyBsaWtlIGBtYWM4MDIxMV9od3NpbWAgcmVhbGx5IHVwcyB0aGUgYW50ZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgaW50ZXJlc3RpbmcgYnVncywgcGFydGljdWxhcmx5IG1lbW9yeSBjb3JydXB0aW9uLCBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIG9yIHJhY2UgY29uZGl0aW9ucy5cblxuTmV4dCwgSSd2ZSBnb3QgdGhlIGBGb2N1c1N5bWJvbHNgIG5haWxlZCBkb3duOiBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAsIGBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWRgLCBhbmQgYGNmZzgwMjExX3N0b3BfbmFuYC4gQ292ZXJpbmcgdGhvc2Ugc2hvdWxkIGdpdmUgdXMgYSBnb29kIHNob3QgYXQgZXhlcmNpc2luZyBhbGwgdGhlIGNyaXRpY2FsIGNvZGUgcGF0aHMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbG9vayByaWdodCBhcyB3ZWxsOiBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gVGhleSdyZSBlc3NlbnRpYWwgZm9yIGVuYWJsaW5nIHRoZSByZWxldmFudCBrZXJuZWwgbW9kdWxlcy5cblxuQWxyaWdodCwgYSBmaW5hbCBxdWljayBzY2FuLiBZZXMsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSdtIHNhdGlzZmllZCB3aXRoIHRoaXMgZnV6emluZyBwbGFuLiBUaW1lIHRvIG1vdmUgb24gYW5kIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1MzcsIk91dHB1dFRva2VucyI6MjE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6MjguNzgyMTQyMjE0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5OTMxNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZVwiLFxuICAgIFwibmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkXCIsXG4gICAgXCJjZmc4MDIxMV9zdG9wX25hblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUgaW4gbmV0L3dpcmVsZXNzL2NvcmUuYywgYWx0ZXJpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIGNoYW5uZWwgZGVmaW5pdGlvbiBzd2FwcGluZywgYW5kIGVycm9yIHJvbGxiYWNrIGhhbmRsaW5nIGZvciBOQU4gKE5laWdoYm9yIEF3YXJlbmVzcyBOZXR3b3JraW5nKSBsb2NhbCBzY2hlZHVsZXMuIFRoaXMgcGF0aCBpcyBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBubDgwMjExIGdlbmVyaWMgbmV0bGluayBpbnRlcmZhY2UgKE5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQpIGFuZCB2aXJ0dWFsIG1hYzgwMjExIGRldmljZXMgKHN1Y2ggYXMgbWFjODAyMTFfaHdzaW0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlXCIsXG4gICAgXCJubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWRcIixcbiAgICBcImNmZzgwMjExX3N0b3BfbmFuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSBpbiBuZXQvd2lyZWxlc3MvY29yZS5jLCBhbHRlcmluZyBtZW1vcnkgbWFuYWdlbWVudCwgY2hhbm5lbCBkZWZpbml0aW9uIHN3YXBwaW5nLCBhbmQgZXJyb3Igcm9sbGJhY2sgaGFuZGxpbmcgZm9yIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpIGxvY2FsIHNjaGVkdWxlcy4gVGhpcyBwYXRoIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIG5sODAyMTEgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSAoTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCkgYW5kIHZpcnR1YWwgbWFjODAyMTEgZGV2aWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjI4LjkzMjA4NzEwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0ODE5Mjc2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDoyOC45MzI5MjQ1MTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjQ4MTA4NDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoKWAgdG8gcHJlLWFsbG9jYXRlIGFuZCBwb3B1bGF0ZSB0aGUgbmV3IE5BTiBjaGFubmVsIGRlZmluaXRpb25zIGFycmF5IChgY2hhbmRlZnNgKSB1c2luZyBga2NhbGxvYygpYCBwcmlvciB0byBpbnZva2luZyB0aGUgZHJpdmVyIGNhbGxiYWNrIGByZGV2X25hbl9zZXRfbG9jYWxfc2NoZWQoKWAuIElmIHRoZSBkcml2ZXIgY2FsbGJhY2sgZmFpbHMsIHRoZSBwcmV2aW91cyBzY2hlZHVsZSAoYG9sZF9jaGFuZGVmc2AsIGBvbGRfbl9jaGFubmVsc2ApIGlzIHJlc3RvcmVkIGFuZCB0aGUgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcmVlZDsgb24gc3VjY2VzcywgdGhlIG9sZCBhcnJheSBpcyBmcmVlZC5cXG5cXG5LQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIEFsbCBhbGxvY2F0aW9ucyBpbiB0aGlzIHBhdGNoIHVzZSBga2NhbGxvYygpYCAoemVyby1pbml0aWFsaXplZCksIGlucHV0IHNjaGVkdWxlcyBhcmUgemVyby1pbml0aWFsaXplZCAoYGt6YWxsb2MoKWAgb3Igc3RydWN0IGluaXRpYWxpemVyIGB7fWApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHJlYWQgd2hpbGUgdW5pbml0aWFsaXplZC5cXG4tIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbGVhayBkdXJpbmcgc3RhdGUgcm9sbGJhY2ssIGZhbGwgc3RyaWN0bHkgdW5kZXIgdGhlIGRvbWFpbiBvZiBzdGFuZGFyZCBLQVNBTiBhbmQgU0xVQiBkZWJ1Z2dlcnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMWVjMjQxNDMzYjQzNDk4NGVhYjgxNWIxZWEyNTc3ZGRmOWYwYmU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAyMToyOTo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5pbmRleCBkMTMzMTBmZWY2OTFhLi41YjQyZDZlYzFhZDY2IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuY1xuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xuQEAgLTI4OCw2ICsyODgsOCBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcbiB7XG4rXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWZzID0gTlVMTCwgKm9sZF9jaGFuZGVmcztcbitcdHU4IG9sZF9uX2NoYW5uZWxzO1xuIFx0aW50IHJldDtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5tdHgpO1xuQEAgLTI5OCwyOSArMzAwLDQyIEBAIGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdGlmICh3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0cmV0ID0gcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKHJkZXYsIHdkZXYsIHNjaGVkKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHR3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nID0gc2NoZWQtXHUwMDNlZGVmZXJyZWQ7XG4tXG4tXHRrZnJlZSh3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzKTtcbi1cdHdkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBOVUxMO1xuLVx0d2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gMDtcbitcdC8qXG4rXHQgKiBQcmUtYWxsb2NhdGUgY2hhbmRlZnMsIHNvIHdlIGRvbid0IHJ1aW4gdGhlIGN1cnJlbnRcbitcdCAqIHNjaGVkdWxlIG9uIGFsbG9jYXRpb24gZmFpbHVyZS5cbitcdCAqL1xuK1x0aWYgKHNjaGVkLVx1MDAzZW5fY2hhbm5lbHMpIHtcbitcdFx0Y2hhbmRlZnMgPSBrY2FsbG9jKHNjaGVkLVx1MDAzZW5fY2hhbm5lbHMsIHNpemVvZigqY2hhbmRlZnMpLFxuK1x0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghY2hhbmRlZnMpXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRpZiAoIXNjaGVkLVx1MDAzZW5fY2hhbm5lbHMpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2NoZWQtXHUwMDNlbl9jaGFubmVsczsgaSsrKVxuK1x0XHRcdGNoYW5kZWZzW2ldID0gc2NoZWQtXHUwMDNlbmFuX2NoYW5uZWxzW2ldLmNoYW5kZWY7XG4rXHR9XG4gXG4tXHR3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzID0ga2NhbGxvYyhzY2hlZC1cdTAwM2VuX2NoYW5uZWxzLFxuLVx0XHRcdFx0ICAgICAgIHNpemVvZigqd2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyksXG4tXHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIXdkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnMpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0LypcbitcdCAqIFN3YXAgaW4gdGhlIG5ldyBjaGFuZGVmcyBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyIGFuZCBzZXQgdGhlXG4rXHQgKiBkZWZlcnJlZCBmbGFnLCBzbyBpZiB0aGUgZHJpdmVyIGNvbXBsZXRlcyB0aGUgdXBkYXRlIHN5bmNocm9ub3VzbHlcbitcdCAqIHRoZSBuZXcgc2NoZWR1bGUgd2lsbCBiZSBhbHJlYWR5IGluIHBsYWNlLlxuK1x0ICovXG4rXHRvbGRfY2hhbmRlZnMgPSB3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzO1xuK1x0b2xkX25fY2hhbm5lbHMgPSB3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHM7XG4rXHR3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzID0gY2hhbmRlZnM7XG4rXHR3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBzY2hlZC1cdTAwM2VuX2NoYW5uZWxzO1xuK1x0d2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IHNjaGVkLVx1MDAzZWRlZmVycmVkO1xuIFxuLVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNjaGVkLVx1MDAzZW5fY2hhbm5lbHM7IGkrKylcbi1cdFx0d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmc1tpXSA9IHNjaGVkLVx1MDAzZW5hbl9jaGFubmVsc1tpXS5jaGFuZGVmO1xuK1x0cmV0ID0gcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKHJkZXYsIHdkZXYsIHNjaGVkKTtcbitcdGlmIChyZXQpIHtcbitcdFx0LyogUmVzdG9yZSB0aGUgcHJldmlvdXMgc2NoZWR1bGUgb24gZmFpbHVyZSAqL1xuK1x0XHR3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nID0gZmFsc2U7XG4rXHRcdHdkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBvbGRfY2hhbmRlZnM7XG4rXHRcdHdkZXYtXHUwMDNldS5uYW4ubl9jaGFubmVscyA9IG9sZF9uX2NoYW5uZWxzO1xuK1x0XHRrZnJlZShjaGFuZGVmcyk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4tXHR3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBzY2hlZC1cdTAwM2VuX2NoYW5uZWxzO1xuK1x0a2ZyZWUob2xkX2NoYW5kZWZzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjI4LjkzMjkyNTkyMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzQ3Njc3MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiBmb3IgVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlIGNoYW5nZXMgaW4gYG5ldC93aXJlbGVzcy9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlYCBmdW5jdGlvbi5cblxuRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhlIHBhdGNoIGlzIGEgcmVmYWN0b3JpbmcvaW1wcm92ZW1lbnQgdG8gdGhlIHNjaGVkdWxlIHVwZGF0ZSBwcm9jZXNzLiBUaGUgbWFpbiBjaGFuZ2UgaW52b2x2ZXMgcHJlLWFsbG9jYXRpbmcgdGhlIGBjaGFuZGVmc2AgYnVmZmVyIGJlZm9yZSBjYWxsaW5nIHRoZSBkcml2ZXIgZnVuY3Rpb24gYHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZGAuIFRoaXMgaXMgZG9uZSB0byBhdm9pZCBhIHBvdGVudGlhbCByYWNlIG9yIGZhaWx1cmUgbW9kZSB3aGVyZSBhIHNjaGVkdWxlIHVwZGF0ZSBjb3VsZCBiZSBjb3JydXB0ZWQgaWYgdGhlIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxzICpkdXJpbmcqIGFuIHVwZGF0ZS4gTm93LCBvbiBmYWlsdXJlLCB0aGUgb3JpZ2luYWwgc3RhdGUgaXMgcmVzdG9yZWQuXG5cblRoZSBcImJlZm9yZVwiIHZlcnNpb24gc2VlbXMgdG8gYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGUgYGNoYW5kZWZzYCBpbiBhIG1vcmUgc3luY2hyb25vdXMgbWFubmVyLiBUaGUgbmV3IHZlcnNpb24gYXR0ZW1wdHMgdG8gcHJldmVudCBhbiBpbnRlcnJ1cHRpb24gdG8gc2NoZWR1bGUgdXBkYXRlcyBieSBwcmUtYWxsb2NhdGluZywgYW5kIG9ubHkgdXBkYXRpbmcgdGhlIGRhdGEgcG9pbnRlciBhZnRlciBhIHN1Y2Nlc3NmdWwgYWxsb2NhdGlvbi4gT24gZXJyb3IsIGl0IHJlc3RvcmVzIHRoZSBvcmlnaW5hbCBzdGF0ZSBhbmQgZnJlZXMgdGhlIG5ldyBhbGxvY2F0aW9uLlxuXG5NeSBpbml0aWFsIGNvbmNlcm4sIGlzIHRoaXM6IERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgbWFuYWdlbWVudCBjb21wbGV4aXR5IHRoYXQgS01TQU4gY291bGQgY2F0Y2g/IFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG9sZF9jaGFuZGVmc2AgYW5kIHRoZSByZXN0b3JlIGxvZ2ljICpkb2VzKiBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGNvZGVwYXRocyBzbGlnaHRseS4gQWxzbywgd2hhdCBpZiB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIHRoZSBkcml2ZXIgY29kZSAqYWZ0ZXIqIHRoZSB1cGRhdGVkIGBjaGFuZGVmc2AgYXJlIHN3YXBwZWQgaW4/IFRoZSByZXN0b3JlIHBhdGggbG9va3MgY29ycmVjdCwgYnV0IGl0J3MgdGhlIGtpbmQgb2YgYXJlYSB3aGVyZSBhIHN1YnRsZSByYWNlIG9yIHVzZS1hZnRlci1mcmVlICpjb3VsZCogYmUgaW50cm9kdWNlZC5cblxuVG8gYmUgdGhvcm91Z2gsIEkgd2lsbCB1c2UgYGdyZXBwZXJgIG9yIGVxdWl2YWxlbnQgdG9vbHMgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBhbmQgYW55IHJlbGF0ZWQgY29kZSB0byBzZWUgaG93IGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlYCBpcyB1c2VkLiBJJ2xsIHNlYXJjaCBmb3IgYW55IGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24sIG9yIG90aGVyIGNsb3NlbHkgcmVsYXRlZCBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIChlLmcuIGB3ZGV2LVx1MDAzZXUubmFuYCkgdGhhdCBhcmUgdXNlZCBpbiB0aGUgc2FtZSBjb250ZXh0IHRvIGdldCBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gncyBpbXBhY3QuIFRoYXQgd2lsbCBnaXZlIG1lIG1vcmUgaW5zaWdodCBpbnRvIHRoZSAqbGlrZWxpaG9vZCogb2YgYSBLTVNBTiBpc3N1ZSBhbmQgbGV0IG1lIG1ha2UgYSBmaW5hbCBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjM2LjY4MDYwNzQ5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5NDQ0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmM9MjU1PXZvaWQgY2ZnODAyMTFfc3RvcF9uYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNzYtXFx0LyogVW5zY2hlZHVsZSBhbGwgKi9cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjI3NzpcXHRjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIFxcdTAwMjZlbXB0eV9zY2hlZCk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNzgtXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI4Ni1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjI4NzppbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yODgtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oPTU2MT12b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaC01NjMtXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo1NjQ6aW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTY1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNzY4NT1zdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzc2Mi1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3NzYzOlxcdHJldHVybiBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIHNjaGVkKTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3NzY0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6MzYuNzQ2NTU4MTcyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NzA0MTExMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqRGl2aW5nIERlZXAgaW50byBOQU4gU2NoZWR1bGluZyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBob3cgd2UncmUgc2V0dGluZyB1cCB0aGUgbG9jYWwgc2NoZWR1bGVyIHdpdGhpbiB0aGUgTkFOIGZyYW1ld29yay4gTXkgbWFpbiBmb2N1cyBpcyBvbiBgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkYCwgYnV0IEkga25vdyB0aGlzIHRvdWNoZXMgb24gc2V2ZXJhbCBpbnRlcmNvbm5lY3RlZCBwaWVjZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgbmFuLmNoYW5kZWZzYCwgYG5hbi5uX2NoYW5uZWxzYCwgYW5kIGBuYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmdgLiBJIGFscmVhZHkga25vdyB0aGVzZSBhcmUga2V5IHZhcmlhYmxlcywgYnV0IEkgaGF2ZSB0byBmb2xsb3cgdGhlIGNvbXBsZXRlIGRhdGEgZmxvdy5cblxuSSB3YW50IHRvIGtub3c6IHdoZXJlIGFyZSB0aGVzZSB2YXJpYWJsZXMgYmVpbmcgbW9kaWZpZWQ/IFdoYXQgZnVuY3Rpb25zIGFyZSByZWFkaW5nIHRoZW0/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIEkgbmVlZCB0byBjb25zaWRlcj8gSXMgdGhlcmUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcyBoZXJlPyBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gc3RlcCB0aHJvdWdoIHRoZSBjb2RlIGV4ZWN1dGlvbiwgbWVudGFsbHkgc2ltdWxhdGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cuIEknbSBsb29raW5nIGZvciBhbnkgc3VidGxlIGxvZ2ljIGVycm9ycyB0aGF0IG1pZ2h0IGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBpbiBjaGFubmVsIHNlbGVjdGlvbiwgc2NoZWR1bGluZyB1cGRhdGVzLCBvciBvdmVyYWxsIE5BTiBvcGVyYXRpb24uIFRoaXMgYWxzbyBtZWFucyBleHBsb3JpbmcgaG93IGFsbCB0aGUgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHRhbGtpbmcgdG8gZWFjaCBvdGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYxMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjM5LjMxNjk3MjA5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA2MzUyMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhbmRlZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvY2hhbi5jPTc2NT1fY2ZnODAyMTFfY2hhbmRlZl9jb21wYXRpYmxlKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqYzEsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTc4Ny1cXHQgKiBtdWx0aXBsZSBBUHMsIGJ1dCBpbiB0aGlzIGNhc2UgdXNlcnNwYWNlIHNob3VsZCBjb25maWd1cmVcXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjc4ODpcXHQgKiBpZGVudGljYWwgY2hhbmRlZnMgaW5jbHVkaW5nIE5QQ0EsIGV2ZW4gaWYgcGVyaGFwcyBvbmUgb2ZcXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTc4OS1cXHQgKiB0aGUgQVAgaW50ZXJmYWNlcyBkb2Vzbid0IGV2ZW4gYWR2ZXJ0aXNlIGl0Llxcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYy04NDUtXFx0ICogc2FtZSBwcmltYXJ5IDE2MCwgYnV0IGFyZSBub3QgaWRlbnRpY2FsIC0gdGhpcyBjYW5ub3QgaGFwcGVuXFxubmV0L3dpcmVsZXNzL2NoYW4uYzo4NDY6XFx0ICogc2luY2UgdGhleSBtdXN0IGJlIDMyMCAobm8gd2lkZXIgY2hhbmRlZnMgZXhpc3QsIGF0IGxlYXN0IHlldC4pXFxubmV0L3dpcmVsZXNzL2NoYW4uYy04NDctXFx0ICovXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTI4Nz1pbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI5MC17XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyOTE6XFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmcyA9IE5VTEwsICpvbGRfY2hhbmRlZnM7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yOTItXFx0dTggb2xkX25fY2hhbm5lbHM7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMwMy1cXHQvKlxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzA0OlxcdCAqIFByZS1hbGxvY2F0ZSBjaGFuZGVmcywgc28gd2UgZG9uJ3QgcnVpbiB0aGUgY3VycmVudFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzA1LVxcdCAqIHNjaGVkdWxlIG9uIGFsbG9jYXRpb24gZmFpbHVyZS5cXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzA3LVxcdGlmIChzY2hlZC1cXHUwMDNlbl9jaGFubmVscykge1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzA4OlxcdFxcdGNoYW5kZWZzID0ga2NhbGxvYyhzY2hlZC1cXHUwMDNlbl9jaGFubmVscywgc2l6ZW9mKCpjaGFuZGVmcyksXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMDktXFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzozMTA6XFx0XFx0aWYgKCFjaGFuZGVmcylcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMxMS1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzEzLVxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mgc2NoZWQtXFx1MDAzZW5fY2hhbm5lbHM7IGkrKylcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjMxNDpcXHRcXHRcXHRjaGFuZGVmc1tpXSA9IHNjaGVkLVxcdTAwM2VuYW5fY2hhbm5lbHNbaV0uY2hhbmRlZjtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMxNS1cXHR9XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMxNy1cXHQvKlxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzE4OlxcdCAqIFN3YXAgaW4gdGhlIG5ldyBjaGFuZGVmcyBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyIGFuZCBzZXQgdGhlXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMTktXFx0ICogZGVmZXJyZWQgZmxhZywgc28gaWYgdGhlIGRyaXZlciBjb21wbGV0ZXMgdGhlIHVwZGF0ZSBzeW5jaHJvbm91c2x5XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMyMS1cXHQgKi9cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjMyMjpcXHRvbGRfY2hhbmRlZnMgPSB3ZGV2LVxcdTAwM2V1Lm5hbi5jaGFuZGVmcztcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMyMy1cXHRvbGRfbl9jaGFubmVscyA9IHdkZXYtXFx1MDAzZXUubmFuLm5fY2hhbm5lbHM7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzozMjQ6XFx0d2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBjaGFuZGVmcztcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMyNS1cXHR3ZGV2LVxcdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gc2NoZWQtXFx1MDAzZW5fY2hhbm5lbHM7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMzMS1cXHRcXHR3ZGV2LVxcdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IGZhbHNlO1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzMyOlxcdFxcdHdkZXYtXFx1MDAzZXUubmFuLmNoYW5kZWZzID0gb2xkX2NoYW5kZWZzO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzMzLVxcdFxcdHdkZXYtXFx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBvbGRfbl9jaGFubmVscztcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjMzNDpcXHRcXHRrZnJlZShjaGFuZGVmcyk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMzUtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzM3LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzM4OlxcdGtmcmVlKG9sZF9jaGFuZGVmcyk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMzktXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE0NTgzPXN0YXRpYyBpbnQgbmw4MDIxMV9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDYzOC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE0NjM5OlxcdFxcdC8qIG5vdGU6IHJldHVybnMgZmlyc3Qgb25lIGlmIGlkZW50aWNhbCBjaGFuZGVmcyAqL1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ2NDAtXFx0XFx0Y29tcGF0X2NoYW5kZWYgPSBjZmc4MDIxMV9jaGFuZGVmX2NvbXBhdGlibGUoXFx1MDAyNmNoYW5kZWYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE3NTIzPXN0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X3BlZXJfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc1ODgtXFx0XFx0XFx0aWYgKGNmZzgwMjExX2NoYW5kZWZfY29tcGF0aWJsZShcXHUwMDI2bmFuX2NoYW5uZWxzW2ldLmNoYW5kZWYsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNzU4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2d2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnNbal0pKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzU5MC1cXHRcXHRcXHRcXHRjb21wYXRpYmxlID0gdHJ1ZTtcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0yMzM3PXN0YXRpYyBib29sIHJlZ193ZGV2X2NoYW5fdmFsaWQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0yMzU0LVxcdFxcdFxcdHJldCA9IGNmZzgwMjExX3JlZ19jYW5fYmVhY29uKHdpcGh5LFxcbm5ldC93aXJlbGVzcy9yZWcuYzoyMzU1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ3ZGV2LVxcdTAwM2V1Lm5hbi5jaGFuZGVmc1tpXSxcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjM1Ni1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBOTDgwMjExX0lGVFlQRV9OQU4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDozOS40MTc2Mjk4MTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE0NTU3NjE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byB0aGUgTkFOIFNjaGVkdWxlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY2hlZHVsZXIgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSA4MDIuMTEgTkFOIGRyaXZlci4gTGV0J3Mgc3RhcnQgd2l0aCBgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkYC4gVGhhdCBmdW5jdGlvbiBpcyB0aGUgbGlrZWx5IGVudHJ5IHBvaW50IHdoZXJlIHRoZSBzY2hlZHVsZXIgcGFyYW1ldGVycyBhbmQgY29uZmlndXJhdGlvbnMgYXJlIHNldCwgc28gaXTigJlzIHRoZSBwZXJmZWN0IHBsYWNlIHRvIGJlZ2luLiBJIG5lZWQgdG8gdHJhY2UgZXhhY3RseSBob3cgdGhlIGBzY2hlZGAgc3RydWN0dXJlIGlzIHBhcnNlZCBmcm9tIHRoZSBOZXRsaW5rIG1lc3NhZ2UgYW5kLCBjcnVjaWFsbHksIGhvdyBhbmQgd2hlcmUgaXQgaXMgYWxsb2NhdGVkIHdpdGhpbiB0aGUgZHJpdmVy4oCZcyBjb250ZXh0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3Vycm91bmRpbmcgdGhlIE5BTiBzY2hlZHVsZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIHNldHMgdXAgdGhlIHN0cnVjdHVyZXMgbmVlZGVkIHRvIHJ1biB0aGUgc2NoZWR1bGVyLCBiZWNhdXNlIHRoYXQncyB3aGVyZSBhbnkgdnVsbmVyYWJpbGl0aWVzIGFyZSBsaWtlbHkgdG8gZXhpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNDksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDo0MS41NjMyMTA4ODNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0MzA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3Njg1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzY4NTpcXHRzdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE3Njg2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjE3Njg3OlxcdHtcXG4xNzY4ODpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4xNzY4OTpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4xNzY5MDpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMV07XFxuMTc2OTE6XFx0XFx0aW50IHJlbSwgaSA9IDAsIG5fY2hhbm5lbHMgPSAwLCByZXQ7XFxuMTc2OTI6XFx0XFx0c3RydWN0IG5sYXR0ciAqY2hhbm5lbDtcXG4xNzY5MzpcXHRcXHRib29sIHNjaGVkX2VtcHR5O1xcbjE3Njk0OlxcdFxcbjE3Njk1OlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxcbjE3Njk2OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xNzY5NzpcXHRcXG4xNzY5ODpcXHRcXHRpZiAoIXdkZXZfcnVubmluZyh3ZGV2KSlcXG4xNzY5OTpcXHRcXHRcXHRyZXR1cm4gLUVOT1RDT05OO1xcbjE3NzAwOlxcdFxcbjE3NzAxOlxcdFxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX05BTl9USU1FX1NMT1RTXSlcXG4xNzcwMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNzcwMzpcXHRcXG4xNzcwNDpcXHRcXHQvKiBGaXJzdCBjb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovXFxuMTc3MDU6XFx0XFx0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcXG4xNzcwNjpcXHRcXHRcXHRcXHRcXHQgaW5mby1cXHUwMDNlbmxoZHIsIEdFTkxfSERSTEVOLCByZW0pXFxuMTc3MDc6XFx0XFx0XFx0bl9jaGFubmVscysrO1xcbjE3NzA4OlxcdFxcbjE3NzA5OlxcdFxcdHNjaGVkID0ga3phbGxvYyhzdHJ1Y3Rfc2l6ZShzY2hlZCwgbmFuX2NoYW5uZWxzLCBuX2NoYW5uZWxzKSxcXG4xNzcxMDpcXHRcXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG4xNzcxMTpcXHRcXHRpZiAoIXNjaGVkKVxcbjE3NzEyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE3NzEzOlxcdFxcbjE3NzE0OlxcdFxcdHNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzID0gbl9jaGFubmVscztcXG4xNzcxNTpcXHRcXG4xNzcxNjpcXHRcXHRubG1zZ19mb3JfZWFjaF9hdHRyX3R5cGUoY2hhbm5lbCwgTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMLFxcbjE3NzE3OlxcdFxcdFxcdFxcdFxcdCBpbmZvLVxcdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkge1xcbjE3NzE4OlxcdFxcdFxcdHJldCA9IG5sODAyMTFfcGFyc2VfbmFuX2NoYW5uZWwocmRldiwgY2hhbm5lbCwgaW5mbyxcXG4xNzcxOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzY2hlZC1cXHUwMDNlbmFuX2NoYW5uZWxzLCBpLCB0cnVlKTtcXG4xNzcyMDpcXHRcXG4xNzcyMTpcXHRcXHRcXHRpZiAocmV0KVxcbjE3NzIyOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTc3MjM6XFx0XFx0XFx0aSsrO1xcbjE3NzI0OlxcdFxcdH1cXG4xNzcyNTpcXHRcXG4xNzcyNjpcXHRcXHQvKiBQYXJzZSBhbmQgdmFsaWRhdGUgc2NoZWR1bGUgKi9cXG4xNzcyNzpcXHRcXHRyZXQgPSBubDgwMjExX3BhcnNlX25hbl9zY2hlZHVsZShpbmZvLFxcbjE3NzI4OlxcdFxcdFxcdFxcdFxcdFxcdCBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX1RJTUVfU0xPVFNdLFxcbjE3NzI5OlxcdFxcdFxcdFxcdFxcdFxcdCBzY2hlZC1cXHUwMDNlc2NoZWR1bGUsIHNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzKTtcXG4xNzczMDpcXHRcXHRpZiAocmV0KVxcbjE3NzMxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTc3MzI6XFx0XFxuMTc3MzM6XFx0XFx0c2NoZWRfZW1wdHkgPSBubDgwMjExX25hbl9pc19zY2hlZF9lbXB0eShzY2hlZCk7XFxuMTc3MzQ6XFx0XFxuMTc3MzU6XFx0XFx0c2NoZWQtXFx1MDAzZWRlZmVycmVkID1cXG4xNzczNjpcXHRcXHRcXHRubGFfZ2V0X2ZsYWcoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX05BTl9TQ0hFRF9ERUZFUlJFRF0pO1xcbjE3NzM3OlxcdFxcbjE3NzM4OlxcdFxcdGlmIChzY2hlZF9lbXB0eSkge1xcbjE3NzM5OlxcdFxcdFxcdGlmIChzY2hlZC1cXHUwMDNlZGVmZXJyZWQpIHtcXG4xNzc0MDpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhpbmZvLVxcdTAwM2VleHRhY2ssXFxuMTc3NDE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJTY2hlZHVsZSBjYW5ub3QgYmUgZGVmZXJyZWQgaWYgYWxsIHRpbWUgc2xvdHMgYXJlIHVuYXZhaWxhYmxlXFxcIik7XFxuMTc3NDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTc3NDM6XFx0XFx0XFx0fVxcbjE3NzQ0OlxcdFxcbjE3NzQ1OlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX0FWQUlMX0JMT0JdKSB7XFxuMTc3NDY6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coaW5mby1cXHUwMDNlZXh0YWNrLFxcbjE3NzQ3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiTkFOIEF2YWlsYWJpbGl0eSBibG9iIG11c3QgYmUgZW1wdHkgaWYgYWxsIHRpbWUgc2xvdHMgYXJlIHVuYXZhaWxhYmxlXFxcIik7XFxuMTc3NDg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTc3NDk6XFx0XFx0XFx0fVxcbjE3NzUwOlxcdFxcdH0gZWxzZSB7XFxuMTc3NTE6XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX0FWQUlMX0JMT0JdKSB7XFxuMTc3NTI6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coaW5mby1cXHUwMDNlZXh0YWNrLFxcbjE3NzUzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiTkFOIEF2YWlsYWJpbGl0eSBibG9iIGF0dHJpYnV0ZSBpcyByZXF1aXJlZFxcXCIpO1xcbjE3NzU0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3NzU1OlxcdFxcdFxcdH1cXG4xNzc1NjpcXHRcXG4xNzc1NzpcXHRcXHRcXHRzY2hlZC1cXHUwMDNlbmFuX2F2YWlsX2Jsb2IgPVxcbjE3NzU4OlxcdFxcdFxcdFxcdG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fQVZBSUxfQkxPQl0pO1xcbjE3NzU5OlxcdFxcdFxcdHNjaGVkLVxcdTAwM2VuYW5fYXZhaWxfYmxvYl9sZW4gPVxcbjE3NzYwOlxcdFxcdFxcdFxcdG5sYV9sZW4oaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX05BTl9BVkFJTF9CTE9CXSk7XFxuMTc3NjE6XFx0XFx0fVxcbjE3NzYyOlxcdFxcbjE3NzYzOlxcdFxcdHJldHVybiBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIHNjaGVkKTtcXG4xNzc2NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjQxLjU2NzM2MjA1M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTMxNTYwMDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgYGNmZzgwMjExX3N0b3BfbmFuYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgbWVudGFsIGdlYXJzIGFyZSBhbHJlYWR5IHR1cm5pbmcuIFwiTGV0J3MgY2hlY2sgYGNmZzgwMjExX3N0b3BfbmFuYFwiIOKAkyB0aGF0J3MgdGhlIGNvbW1hbmQsIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgaXQncyAqc3VwcG9zZWQqIHRvIHdvcmsuIEknbSBhc3N1bWluZyBpdCByZWxhdGVzIHRvIFdpLUZpIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpLCB3aGljaCBtZWFucyBpdCBwcm9iYWJseSBoYW5kbGVzIHRoZSBzdG9wcGluZyBvciB0ZXJtaW5hdGlvbiBvZiBzb21lIE5BTi1yZWxhdGVkIHByb2Nlc3MuIElzIGl0IGdyYWNlZnVsbHkgc2h1dHRpbmcgZG93biBkaXNjb3Zlcnk/IENsZWFuaW5nIHVwIHNvbWUgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXM/IERlLXJlZ2lzdGVyaW5nIHNvbWV0aGluZz8gVGhlIG51YW5jZXMgYXJlIGtleSBoZXJlLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24ncyBkZWZpbml0aW9uLCBob3cgaXQncyBjYWxsZWQsIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcuIElzIHRoZXJlIGFueSBleGlzdGluZyBpbmZvcm1hdGlvbiBvciBkb2N1bWVudGF0aW9uIEkgY2FuIGxldmVyYWdlPyBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5OTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjQzLjY5ODkyNzAzOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTgwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTU6XFx0dm9pZCBjZmc4MDIxMV9zdG9wX25hbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIDI1NjpcXHRcXHRcXHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4gMjU3OlxcdHtcXG4gMjU4OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgZW1wdHlfc2NoZWQgPSB7fTtcXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkubXR4KTtcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0aWYgKFdBUk5fT04od2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTikpXFxuIDI2MzpcXHRcXHRcXHRyZXR1cm47XFxuIDI2NDpcXHRcXG4gMjY1OlxcdFxcdGlmICghd2Rldl9ydW5uaW5nKHdkZXYpKVxcbiAyNjY6XFx0XFx0XFx0cmV0dXJuO1xcbiAyNjc6XFx0XFxuIDI2ODpcXHRcXHRjZmc4MDIxMV9wbXNyX3dkZXZfZG93bih3ZGV2KTtcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0LypcXG4gMjcxOlxcdFxcdCAqIElmIHRoZXJlIGlzIGEgc2NoZWR1bGVkIHVwZGF0ZSBwZW5kaW5nLCBtYXJrIGl0IGFzIGNhbmNlbGVkLCBzbyB0aGVcXG4gMjcyOlxcdFxcdCAqIGVtcHR5IHNjaGVkdWxlIHdpbGwgYmUgYWNjZXB0ZWRcXG4gMjczOlxcdFxcdCAqL1xcbiAyNzQ6XFx0XFx0d2Rldi1cXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBmYWxzZTtcXG4gMjc1OlxcdFxcbiAyNzY6XFx0XFx0LyogVW5zY2hlZHVsZSBhbGwgKi9cXG4gMjc3OlxcdFxcdGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2RldiwgXFx1MDAyNmVtcHR5X3NjaGVkKTtcXG4gMjc4OlxcdFxcbiAyNzk6XFx0XFx0cmRldl9zdG9wX25hbihyZGV2LCB3ZGV2KTtcXG4gMjgwOlxcdFxcdHdkZXYtXFx1MDAzZWlzX3J1bm5pbmcgPSBmYWxzZTtcXG4gMjgxOlxcdFxcbiAyODI6XFx0XFx0ZXRoX3plcm9fYWRkcih3ZGV2LVxcdTAwM2V1Lm5hbi5jbHVzdGVyX2lkKTtcXG4gMjgzOlxcdFxcbiAyODQ6XFx0XFx0cmRldi1cXHUwMDNlb3BlbmNvdW50LS07XFxuIDI4NTpcXHR9XFxuIDI4NjpcXHRcXG4gMjg3OlxcdGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gMjg4OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiAyODk6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmcyA9IE5VTEwsICpvbGRfY2hhbmRlZnM7XFxuIDI5MjpcXHRcXHR1OCBvbGRfbl9jaGFubmVscztcXG4gMjkzOlxcdFxcdGludCByZXQ7XFxuIDI5NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6NDMuNjk5NDMyMzc4WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3MTQ1NDg2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudCBvZiBOQU4gU2NoZWR1bGUgVXBkYXRlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIG1vZGlmaWVzIGhvdyB0aGUgYGNoYW5kZWZzYCBhcnJheSwgcGFydCBvZiBgd2Rldi1cdTAwM2V1Lm5hbmAsIGdldHMgdXBkYXRlZCB3aXRoaW4gYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGVgLiBUaGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gd2FzIGEgYml0IGNsdW5reSwgd2l0aCB0aGUgZHJpdmVyIGNhbGxiYWNrIHBvdGVudGlhbGx5IGZhaWxpbmcgYWZ0ZXIgdGhlIG1lbW9yeSBmb3IgYGNoYW5kZWZzYCB3YXMgZnJlZWQsIGxlYWRpbmcgdG8gYSBicm9rZW4gc2NoZWR1bGUuIFRoaXMgbmV3IGFwcHJvYWNoIHByZS1hbGxvY2F0ZXMgdGhlIGBjaGFuZGVmc2AgYXJyYXkgdXNpbmcgYGtjYWxsb2NgLCBwb3B1bGF0ZXMgaXQgd2l0aCBkYXRhIGNvcGllZCBmcm9tIHRoZSBgc2NoZWRgIHN0cnVjdHVyZSdzIGBuYW5fY2hhbm5lbHNgLCBhbmQgdGhlbiBjYWxscyB0aGUgZHJpdmVyLiBDcml0aWNhbGx5LCBpdCBzYXZlcyB0aGUgb2xkIHNjaGVkdWxlLCByZXN0b3JpbmcgaXQgb24gZmFpbHVyZSBhbmQgZnJlZWluZyBpdCBvbiBzdWNjZXNzLlxuXG5NeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuIEkgd2FudCB0byBlbnN1cmUgd2UncmUgbm90IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gRGlnZ2luZyBpbiwgSSBjYW4gc2VlIHRoYXQgYGNoYW5kZWZzYCBpcyBmdWxseSBpbml0aWFsaXplZCB0aGFua3MgdG8gYGtjYWxsb2NgIGFuZCB0aGUgY29weWluZyBvZiBkYXRhIGZyb20gdGhlIGluaXRpYWxpemVkIGBzY2hlZGAgc3RydWN0LiBgc2NoZWRgIGl0c2VsZiBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIGVuc3VyaW5nIGl0J3MgemVyb2VkLiBXZSBhbHNvIGhhdmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nLCByZXN0b3JpbmcgdGhlIHByZXZpb3VzIHNjaGVkdWxlIGlmIHRoZSBkcml2ZXIgZmFpbHMuIElmIHRoZSBkcml2ZXIgc3VjY2VlZHMsIHRoZSBvbGQgc2NoZWR1bGUgaXMgZnJlZWQuXG5cbkdpdmVuIHRoZSBjb2RlJ3Mgc3RydWN0dXJlLCBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGJlIGluIHRoZSByZWFsbSBvZiBtZW1vcnkgbWFuYWdlbWVudCBidWdzIGxpa2UgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgc3RhbmRhcmQgS0FTQU4gYW5kIFNMVUIgZG9tYWlucy4gSSBkb24ndCBzZWUgYW55IGV4cG9zZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCwgcGFzc2VkIHRvIHVzZXJzcGFjZSwgb3IgZGV0ZXJtaW5pbmcgY29udHJvbCBmbG93LlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gd2hldGhlciB3ZSBuZWVkIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgc3BlY2lmaWNhbGx5LiBLTVNBTiBpcyBjcml0aWNhbCB3aGVuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNhbiBiZSByZWFkIGJ5IGEgcmVhY2hhYmxlIGNvZGUgcGF0aC4gSW4gdGhpcyBjYXNlLCBoZXJlJ3Mgd2hhdCBJJ3ZlIGFzc2Vzc2VkOlxuXG4xLiAgKipObyBLZXJuZWwgU3RydWN0dXJlcyB0byBVc2VyIFNwYWNlOioqIE5vIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMuXG4yLiAgKipObyBVbmluaXRpYWxpemVkIENvbnRyb2wgRmxvdzoqKiBUaGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuICAqKkZ1bGx5IEluaXRpYWxpemVkIERhdGEgU3RydWN0dXJlczoqKiBEYXRhIHN0cnVjdHVyZXMgYXJlIGFsbCB6ZXJvLWluaXRpYWxpemVkIHZpYSBga2NhbGxvY2Agb3IgYGt6YWxsb2NgIG9yIGFyZSBjb3BpZWQgZnJvbSBpbml0aWFsemVkIHNvdXJjZXMuXG40LiAgKipObyBVbmluaXRpYWxpemVkIEJ5dGUgQWNjZXNzOioqIE5vIGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCB3b3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBpbiBleGlzdGluZyBidWZmZXJzLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24ndCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiBUaGUgaXNzdWVzIGhlcmUgYXJlIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIHdpbGwgY2F0Y2ggYW55IGlzc3VlcyB0aGVyZS5cblxuT2theSwgSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIExldCdzIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MDAsIk91dHB1dFRva2VucyI6MjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6NTEuNDEzOTg0MTYxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSgpYCB0byBwcmUtYWxsb2NhdGUgYW5kIHBvcHVsYXRlIHRoZSBuZXcgTkFOIGNoYW5uZWwgZGVmaW5pdGlvbnMgYXJyYXkgKGBjaGFuZGVmc2ApIHVzaW5nIGBrY2FsbG9jKClgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2sgYHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZCgpYC4gSWYgdGhlIGRyaXZlciBjYWxsYmFjayBmYWlscywgdGhlIHByZXZpb3VzIHNjaGVkdWxlIChgb2xkX2NoYW5kZWZzYCwgYG9sZF9uX2NoYW5uZWxzYCkgaXMgcmVzdG9yZWQgYW5kIHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkOyBvbiBzdWNjZXNzLCB0aGUgb2xkIGFycmF5IGlzIGZyZWVkLlxcblxcbktBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gQWxsIGFsbG9jYXRpb25zIGluIHRoaXMgcGF0Y2ggdXNlIGBrY2FsbG9jKClgICh6ZXJvLWluaXRpYWxpemVkKSwgaW5wdXQgc2NoZWR1bGVzIGFyZSB6ZXJvLWluaXRpYWxpemVkIChga3phbGxvYygpYCBvciBzdHJ1Y3QgaW5pdGlhbGl6ZXIgYHt9YCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB3aGlsZSB1bmluaXRpYWxpemVkLlxcbi0gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsZWFrIGR1cmluZyBzdGF0ZSByb2xsYmFjaywgZmFsbCBzdHJpY3RseSB1bmRlciB0aGUgZG9tYWluIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBTTFVCIGRlYnVnZ2Vycy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKClgIHRvIHByZS1hbGxvY2F0ZSBhbmQgcG9wdWxhdGUgdGhlIG5ldyBOQU4gY2hhbm5lbCBkZWZpbml0aW9ucyBhcnJheSAoYGNoYW5kZWZzYCkgdXNpbmcgYGtjYWxsb2MoKWAgcHJpb3IgdG8gaW52b2tpbmcgdGhlIGRyaXZlciBjYWxsYmFjayBgcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKClgLiBJZiB0aGUgZHJpdmVyIGNhbGxiYWNrIGZhaWxzLCB0aGUgcHJldmlvdXMgc2NoZWR1bGUgKGBvbGRfY2hhbmRlZnNgLCBgb2xkX25fY2hhbm5lbHNgKSBpcyByZXN0b3JlZCBhbmQgdGhlIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJlZWQ7IG9uIHN1Y2Nlc3MsIHRoZSBvbGQgYXJyYXkgaXMgZnJlZWQuXFxuXFxuS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBBbGwgYWxsb2NhdGlvbnMgaW4gdGhpcyBwYXRjaCB1c2UgYGtjYWxsb2MoKWAgKHplcm8taW5pdGlhbGl6ZWQpLCBpbnB1dCBzY2hlZHVsZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGBremFsbG9jKClgIG9yIHN0cnVjdCBpbml0aWFsaXplciBge31gKSwgYW5kIGFsbCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciByZWFkIHdoaWxlIHVuaW5pdGlhbGl6ZWQuXFxuLSBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxlYWsgZHVyaW5nIHN0YXRlIHJvbGxiYWNrLCBmYWxsIHN0cmljdGx5IHVuZGVyIHRoZSBkb21haW4gb2Ygc3RhbmRhcmQgS0FTQU4gYW5kIFNMVUIgZGVidWdnZXJzLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflows5ftk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 21:28:22 +0000 UTC FinishedAt: 2026-09-07 21:30:52 +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": "d50cd8bd-d121-431f-9ee1-572e89648ab8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "cfg80211_nan_set_local_schedule", "nl80211_nan_set_local_sched", "cfg80211_stop_nan" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfc3RvcF9uYW4mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSgpYCB0byBwcmUtYWxsb2NhdGUgYW5kIHBvcHVsYXRlIHRoZSBuZXcgTkFOIGNoYW5uZWwgZGVmaW5pdGlvbnMgYXJyYXkgKGBjaGFuZGVmc2ApIHVzaW5nIGBrY2FsbG9jKClgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2sgYHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZCgpYC4gSWYgdGhlIGRyaXZlciBjYWxsYmFjayBmYWlscywgdGhlIHByZXZpb3VzIHNjaGVkdWxlIChgb2xkX2NoYW5kZWZzYCwgYG9sZF9uX2NoYW5uZWxzYCkgaXMgcmVzdG9yZWQgYW5kIHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkOyBvbiBzdWNjZXNzLCB0aGUgb2xkIGFycmF5IGlzIGZyZWVkLlxuXG5LQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gQWxsIGFsbG9jYXRpb25zIGluIHRoaXMgcGF0Y2ggdXNlIGBrY2FsbG9jKClgICh6ZXJvLWluaXRpYWxpemVkKSwgaW5wdXQgc2NoZWR1bGVzIGFyZSB6ZXJvLWluaXRpYWxpemVkIChga3phbGxvYygpYCBvciBzdHJ1Y3QgaW5pdGlhbGl6ZXIgYHt9YCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB3aGlsZSB1bmluaXRpYWxpemVkLlxuLSBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxlYWsgZHVyaW5nIHN0YXRlIHJvbGxiYWNrLCBmYWxsIHN0cmljdGx5IHVuZGVyIHRoZSBkb21haW4gb2Ygc3RhbmRhcmQgS0FTQU4gYW5kIFNMVUIgZGVidWdnZXJzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlIGluIG5ldC93aXJlbGVzcy9jb3JlLmMsIGFsdGVyaW5nIG1lbW9yeSBtYW5hZ2VtZW50LCBjaGFubmVsIGRlZmluaXRpb24gc3dhcHBpbmcsIGFuZCBlcnJvciByb2xsYmFjayBoYW5kbGluZyBmb3IgTkFOIChOZWlnaGJvciBBd2FyZW5lc3MgTmV0d29ya2luZykgbG9jYWwgc2NoZWR1bGVzLiBUaGlzIHBhdGggaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSB0aGUgbmw4MDIxMSBnZW5lcmljIG5ldGxpbmsgaW50ZXJmYWNlIChOTDgwMjExX0NNRF9OQU5fU0VUX0xPQ0FMX1NDSEVEKSBhbmQgdmlydHVhbCBtYWM4MDIxMSBkZXZpY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMToyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGExZWMyNDE0MzNiNDM0OTg0ZWFiODE1YjFlYTI1NzdkZGY5ZjBiZTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDIxOjI5OjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5pbmRleCBkMTMzMTBmZWY2OTFhLi41YjQyZDZlYzFhZDY2IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xuQEAgLTI4OCw2ICYjNDM7Mjg4LDggQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpXG4ge1xuJiM0MztcdHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZnMgPSBOVUxMLCAqb2xkX2NoYW5kZWZzO1xuJiM0MztcdHU4IG9sZF9uX2NoYW5uZWxzO1xuIFx0aW50IHJldDtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5tdHgpO1xuQEAgLTI5OCwyOSAmIzQzOzMwMCw0MiBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRpZiAod2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZylcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbi1cdHJldCA9IHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChyZGV2LCB3ZGV2LCBzY2hlZCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0d2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IHNjaGVkLVx1MDAzZWRlZmVycmVkO1xuLVxuLVx0a2ZyZWUod2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyk7XG4tXHR3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzID0gTlVMTDtcbi1cdHdkZXYtXHUwMDNldS5uYW4ubl9jaGFubmVscyA9IDA7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcmUtYWxsb2NhdGUgY2hhbmRlZnMsIHNvIHdlIGRvbiYjMzk7dCBydWluIHRoZSBjdXJyZW50XG4mIzQzO1x0ICogc2NoZWR1bGUgb24gYWxsb2NhdGlvbiBmYWlsdXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzY2hlZC1cdTAwM2VuX2NoYW5uZWxzKSB7XG4mIzQzO1x0XHRjaGFuZGVmcyA9IGtjYWxsb2Moc2NoZWQtXHUwMDNlbl9jaGFubmVscywgc2l6ZW9mKCpjaGFuZGVmcyksXG4mIzQzO1x0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIWNoYW5kZWZzKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGlmICghc2NoZWQtXHUwMDNlbl9jaGFubmVscylcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2NoZWQtXHUwMDNlbl9jaGFubmVsczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGNoYW5kZWZzW2ldID0gc2NoZWQtXHUwMDNlbmFuX2NoYW5uZWxzW2ldLmNoYW5kZWY7XG4mIzQzO1x0fVxuIFxuLVx0d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyA9IGtjYWxsb2Moc2NoZWQtXHUwMDNlbl9jaGFubmVscyxcbi1cdFx0XHRcdCAgICAgICBzaXplb2YoKndkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnMpLFxuLVx0XHRcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuLVx0aWYgKCF3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFN3YXAgaW4gdGhlIG5ldyBjaGFuZGVmcyBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyIGFuZCBzZXQgdGhlXG4mIzQzO1x0ICogZGVmZXJyZWQgZmxhZywgc28gaWYgdGhlIGRyaXZlciBjb21wbGV0ZXMgdGhlIHVwZGF0ZSBzeW5jaHJvbm91c2x5XG4mIzQzO1x0ICogdGhlIG5ldyBzY2hlZHVsZSB3aWxsIGJlIGFscmVhZHkgaW4gcGxhY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0b2xkX2NoYW5kZWZzID0gd2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcztcbiYjNDM7XHRvbGRfbl9jaGFubmVscyA9IHdkZXYtXHUwMDNldS5uYW4ubl9jaGFubmVscztcbiYjNDM7XHR3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzID0gY2hhbmRlZnM7XG4mIzQzO1x0d2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gc2NoZWQtXHUwMDNlbl9jaGFubmVscztcbiYjNDM7XHR3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nID0gc2NoZWQtXHUwMDNlZGVmZXJyZWQ7XG4gXG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2NoZWQtXHUwMDNlbl9jaGFubmVsczsgaSYjNDM7JiM0MzspXG4tXHRcdHdkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnNbaV0gPSBzY2hlZC1cdTAwM2VuYW5fY2hhbm5lbHNbaV0uY2hhbmRlZjtcbiYjNDM7XHRyZXQgPSByZGV2X25hbl9zZXRfbG9jYWxfc2NoZWQocmRldiwgd2Rldiwgc2NoZWQpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdC8qIFJlc3RvcmUgdGhlIHByZXZpb3VzIHNjaGVkdWxlIG9uIGZhaWx1cmUgKi9cbiYjNDM7XHRcdHdkZXYtXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdHdkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBvbGRfY2hhbmRlZnM7XG4mIzQzO1x0XHR3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBvbGRfbl9jaGFubmVscztcbiYjNDM7XHRcdGtmcmVlKGNoYW5kZWZzKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuLVx0d2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gc2NoZWQtXHUwMDNlbl9jaGFubmVscztcbiYjNDM7XHRrZnJlZShvbGRfY2hhbmRlZnMpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfc3RvcF9uYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSBpbiBuZXQvd2lyZWxlc3MvY29yZS5jLCBhbHRlcmluZyBtZW1vcnkgbWFuYWdlbWVudCwgY2hhbm5lbCBkZWZpbml0aW9uIHN3YXBwaW5nLCBhbmQgZXJyb3Igcm9sbGJhY2sgaGFuZGxpbmcgZm9yIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpIGxvY2FsIHNjaGVkdWxlcy4gVGhpcyBwYXRoIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIG5sODAyMTEgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSAoTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCkgYW5kIHZpcnR1YWwgbWFjODAyMTEgZGV2aWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMWVjMjQxNDMzYjQzNDk4NGVhYjgxNWIxZWEyNTc3ZGRmOWYwYmU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAyMToyOTo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IGQxMzMxMGZlZjY5MWEuLjViNDJkNmVjMWFkNjYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuYwpAQCAtMjg4LDYgJiM0MzsyODgsOCBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAJCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKQogewomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWZzID0gTlVMTCwgKm9sZF9jaGFuZGVmczsKJiM0MzsJdTggb2xkX25fY2hhbm5lbHM7CiAJaW50IHJldDsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtyZGV2LSZndDt3aXBoeS5tdHgpOwpAQCAtMjk4LDI5ICYjNDM7MzAwLDQyIEBAIGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAlpZiAod2Rldi0mZ3Q7dS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlyZXQgPSByZGV2X25hbl9zZXRfbG9jYWxfc2NoZWQocmRldiwgd2Rldiwgc2NoZWQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQl3ZGV2LSZndDt1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IHNjaGVkLSZndDtkZWZlcnJlZDsKLQotCWtmcmVlKHdkZXYtJmd0O3UubmFuLmNoYW5kZWZzKTsKLQl3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmcyA9IE5VTEw7Ci0Jd2Rldi0mZ3Q7dS5uYW4ubl9jaGFubmVscyA9IDA7CiYjNDM7CS8qCiYjNDM7CSAqIFByZS1hbGxvY2F0ZSBjaGFuZGVmcywgc28gd2UgZG9uJiMzOTt0IHJ1aW4gdGhlIGN1cnJlbnQKJiM0MzsJICogc2NoZWR1bGUgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNjaGVkLSZndDtuX2NoYW5uZWxzKSB7CiYjNDM7CQljaGFuZGVmcyA9IGtjYWxsb2Moc2NoZWQtJmd0O25fY2hhbm5lbHMsIHNpemVvZigqY2hhbmRlZnMpLAomIzQzOwkJCQkgICBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghY2hhbmRlZnMpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoIXNjaGVkLSZndDtuX2NoYW5uZWxzKQotCQlyZXR1cm4gMDsKJiM0MzsJCWZvciAoaW50IGkgPSAwOyBpICZsdDsgc2NoZWQtJmd0O25fY2hhbm5lbHM7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWNoYW5kZWZzW2ldID0gc2NoZWQtJmd0O25hbl9jaGFubmVsc1tpXS5jaGFuZGVmOwomIzQzOwl9CiAKLQl3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmcyA9IGtjYWxsb2Moc2NoZWQtJmd0O25fY2hhbm5lbHMsCi0JCQkJICAgICAgIHNpemVvZigqd2Rldi0mZ3Q7dS5uYW4uY2hhbmRlZnMpLAotCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIXdkZXYtJmd0O3UubmFuLmNoYW5kZWZzKQotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJLyoKJiM0MzsJICogU3dhcCBpbiB0aGUgbmV3IGNoYW5kZWZzIGJlZm9yZSBjYWxsaW5nIHRoZSBkcml2ZXIgYW5kIHNldCB0aGUKJiM0MzsJICogZGVmZXJyZWQgZmxhZywgc28gaWYgdGhlIGRyaXZlciBjb21wbGV0ZXMgdGhlIHVwZGF0ZSBzeW5jaHJvbm91c2x5CiYjNDM7CSAqIHRoZSBuZXcgc2NoZWR1bGUgd2lsbCBiZSBhbHJlYWR5IGluIHBsYWNlLgomIzQzOwkgKi8KJiM0MzsJb2xkX2NoYW5kZWZzID0gd2Rldi0mZ3Q7dS5uYW4uY2hhbmRlZnM7CiYjNDM7CW9sZF9uX2NoYW5uZWxzID0gd2Rldi0mZ3Q7dS5uYW4ubl9jaGFubmVsczsKJiM0MzsJd2Rldi0mZ3Q7dS5uYW4uY2hhbmRlZnMgPSBjaGFuZGVmczsKJiM0MzsJd2Rldi0mZ3Q7dS5uYW4ubl9jaGFubmVscyA9IHNjaGVkLSZndDtuX2NoYW5uZWxzOwomIzQzOwl3ZGV2LSZndDt1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IHNjaGVkLSZndDtkZWZlcnJlZDsKIAotCWZvciAoaW50IGkgPSAwOyBpICZsdDsgc2NoZWQtJmd0O25fY2hhbm5lbHM7IGkmIzQzOyYjNDM7KQotCQl3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmc1tpXSA9IHNjaGVkLSZndDtuYW5fY2hhbm5lbHNbaV0uY2hhbmRlZjsKJiM0MzsJcmV0ID0gcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKHJkZXYsIHdkZXYsIHNjaGVkKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJLyogUmVzdG9yZSB0aGUgcHJldmlvdXMgc2NoZWR1bGUgb24gZmFpbHVyZSAqLwomIzQzOwkJd2Rldi0mZ3Q7dS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBmYWxzZTsKJiM0MzsJCXdkZXYtJmd0O3UubmFuLmNoYW5kZWZzID0gb2xkX2NoYW5kZWZzOwomIzQzOwkJd2Rldi0mZ3Q7dS5uYW4ubl9jaGFubmVscyA9IG9sZF9uX2NoYW5uZWxzOwomIzQzOwkJa2ZyZWUoY2hhbmRlZnMpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQogCi0Jd2Rldi0mZ3Q7dS5uYW4ubl9jaGFubmVscyA9IHNjaGVkLSZndDtuX2NoYW5uZWxzOwomIzQzOwlrZnJlZShvbGRfY2hhbmRlZnMpOwogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaDogQSBEZWVwIERpdmUqKgoKT2theSwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbmV0L3dpcmVsZXNzL2NvcmUuY2AgZmlsZSBhbmQsIG1vcmUgcHJlY2lzZWx5LCB0aGUgYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGVgIGZ1bmN0aW9uLiBUaGlzIHJlcXVpcmVzIGEgbWV0aG9kaWNhbCBhcHByb2FjaCwgbmF0dXJhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIOKAkyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbi4gVGhpcyBtZWFucyBJJiMzOTtsbCBkZWx2ZSBpbnRvIHRoZSBjb250ZXh0LCB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBpbXBhY3RlZCwgYW5kIHRoZSBzcGVjaWZpYyBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24uIEkgbXVzdCBhc2NlcnRhaW4gaXRzIHJlYWNoYWJpbGl0eSBmcm9tIHZhcmlvdXMgcG9pbnRzIGluIHRoZSB3aXJlbGVzcyBzdGFjay4KClRvIGdldCBhIHF1aWNrIGFuZCBkZWVwIHZpZXcsIEkmIzM5O2xsIGxldmVyYWdlIG15IGV4aXN0aW5nIHRvb2xraXQuIEkmIzM5O2xsIHJlYWNoIGZvciBlaXRoZXIgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGV4YW1pbmUgYm90aCB0aGUgYG5ldC93aXJlbGVzcy9jb3JlLmNgIGZpbGUgYW5kIHRoZSBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAgZnVuY3Rpb24gaW4gZGV0YWlsLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gcXVpY2tseSBwaW5wb2ludCBleGFjdGx5IHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgdW5kZXJzdGFuZCB0aGUgbG9jYWwgZnVuY3Rpb24sIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBNeSBnb2FsIGlzIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NvcmUuYz0yNTU9dm9pZCBjZmc4MDIxMV9zdG9wX25hbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNzYtXHQvKiBVbnNjaGVkdWxlIGFsbCAqL1xubmV0L3dpcmVsZXNzL2NvcmUuYzoyNzc6XHRjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIFx1MDAyNmVtcHR5X3NjaGVkKTtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjc4LVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMjg2LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyODc6aW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yODgtXHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oPTU2MT12b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmgtNTYzLVxubmV0L3dpcmVsZXNzL2NvcmUuaDo1NjQ6aW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuaC01NjUtXHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE3Njg1PXN0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzc2Mi1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc3NjM6XHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShyZGV2LCB3ZGV2LCBzY2hlZCk7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3NzY0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDk1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBjZmc4MDIxMSBCdWlsZCBQcm9jZXNzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gaG93IGBjZmc4MDIxMWAgZ2V0cyBidWlsdCBhbmQgY29uZmlndXJlZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBjb3JlIGJ1aWxkIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIGBjZmc4MDIxMWAsIGFuZCB0aGVuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgbmV0L3dpcmVsZXNzL01ha2VmaWxlYCB0byBzZWUgaG93IHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB1bHRpbWF0ZWx5IHRyYW5zbGF0ZSBpbnRvIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgYW5kIG9iamVjdCBmaWxlIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGludGVncmF0aW9uIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjayBhbmQgYW55IHBvdGVudGlhbCBidWlsZC10aW1lIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGFwcHJvYWNoLCBLY29uZmlnIGZvciB0aGUgJiMzNDt3aGF0JiMzNDsgYW5kIE1ha2VmaWxlIGZvciB0aGUgJiMzNDtob3cmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotLipjb3JlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvTWFrZWZpbGU9Mz1vYmoteSAmIzQzOz0gdGVzdHMvXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtNC1cbm5ldC93aXJlbGVzcy9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19XRVhUX0NPUkUpICYjNDM7PSB3ZXh0LWNvcmUub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX1dFWFRfUFJPQykgJiM0Mzs9IHdleHQtcHJvYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgwMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBXaXJlbGVzcyBNYWtlZmlsZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHRyb3VibGVzaG9vdCB0aGlzIGlzc3VlIGlzIHRvIGV4YW1pbmUgdGhlIGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSB3aXJlbGVzcyBuZXR3b3JraW5nIGNvbXBvbmVudHMgaXMgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaW5ncyBhcmUgYmVpbmcgY29tcGlsZWQsIGxpbmtlZCwgYW5kIHBvdGVudGlhbGx5IHdoZXJlIHNwZWNpZmljIG1vZHVsZSBkZXBlbmRlbmNpZXMgYXJlIHNldC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHVudXN1YWwgb3IgdW5leHBlY3RlZCBpbiB0aGUgYnVpbGQgZmxhZ3MsIGluY2x1ZGUgcGF0aHMsIG9yIG1vZHVsZSBkZWNsYXJhdGlvbnMuIE1heWJlIHRoZXJlJiMzOTtzIGEgbWlzY29uZmlndXJhdGlvbiBpbiBob3cgYSBkcml2ZXIgaXMgYmVpbmcgYnVpbHQsIGEgZGVwZW5kZW5jeSB0aGF0JiMzOTtzIG5vdCBiZWluZyBtZXQsIG9yIGEgY29uZmxpY3Rpbmcgc2V0dGluZy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHN0YXJ0IHBhcnNpbmcgdGhpcyBNYWtlZmlsZSBmb3IgY2x1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0b2JqLSQoQ09ORklHX0NGRzgwMjExKSAmIzQzOz0gY2ZnODAyMTEub1xuICAgMzpcdG9iai15ICYjNDM7PSB0ZXN0cy9cbiAgIDQ6XHRcbiAgIDU6XHRvYmotJChDT05GSUdfV0VYVF9DT1JFKSAmIzQzOz0gd2V4dC1jb3JlLm9cbiAgIDY6XHRvYmotJChDT05GSUdfV0VYVF9QUk9DKSAmIzQzOz0gd2V4dC1wcm9jLm9cbiAgIDc6XHRvYmotJChDT05GSUdfV0VYVF9QUklWKSAmIzQzOz0gd2V4dC1wcml2Lm9cbiAgIDg6XHRcbiAgIDk6XHRjZmc4MDIxMS15ICYjNDM7PSBjb3JlLm8gc3lzZnMubyByYWRpb3RhcC5vIHV0aWwubyByZWcubyBzY2FuLm8gbmw4MDIxMS5vXG4gIDEwOlx0Y2ZnODAyMTEteSAmIzQzOz0gbWxtZS5vIGlic3MubyBzbWUubyBjaGFuLm8gZXRodG9vbC5vIG1lc2gubyBhcC5vIHRyYWNlLm8gb2NiLm9cbiAgMTE6XHRjZmc4MDIxMS15ICYjNDM7PSBtaWNoYWVsLW1pYy5vIHBtc3Iub1xuICAxMjpcdGNmZzgwMjExLSQoQ09ORklHX09GKSAmIzQzOz0gb2Yub1xuICAxMzpcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICYjNDM7PSBkZWJ1Z2ZzLm9cbiAgMTQ6XHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9XRVhUKSAmIzQzOz0gd2V4dC1jb21wYXQubyB3ZXh0LXNtZS5vXG4gIDE1Olx0XG4gIDE2Olx0Q0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcbiAgMTc6XHRcbiAgMTg6XHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVMpICYjNDM7PSBzaGlwcGVkLWNlcnRzLm9cbiAgMTk6XHRpZm5lcSAoJChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSKSwpXG4gIDIwOlx0Y2ZnODAyMTEteSAmIzQzOz0gZXh0cmEtY2VydHMub1xuICAyMTpcdGVuZGlmXG4gIDIyOlx0XG4gIDIzOlx0JChvYmopL3NoaXBwZWQtY2VydHMuYzogJChzb3J0ICQod2lsZGNhcmQgJChzcmMpL2NlcnRzLyouaGV4KSlcbiAgMjQ6XHRcdEAkKGtlY2hvKSBcJiMzNDsgIEdFTiAgICAgJEBcJiMzNDtcbiAgMjU6XHRcdCQoUSkoZWNobyAmIzM5OyNpbmNsdWRlIFwmIzM0O3JlZy5oXCYjMzQ7JiMzOTs7IFxcXG4gIDI2Olx0XHQgIGVjaG8gJiMzOTtjb25zdCB1OCBzaGlwcGVkX3JlZ2RiX2NlcnRzW10gPSB7JiMzOTs7IFxcXG4gIDI3Olx0XHQgIGVjaG8gfCBjYXQgLSAkXiA7IFxcXG4gIDI4Olx0XHQgIGVjaG8gJiMzOTt9OyYjMzk7OyBcXFxuICAyOTpcdFx0ICBlY2hvICYjMzk7dW5zaWduZWQgaW50IHNoaXBwZWRfcmVnZGJfY2VydHNfbGVuID0gc2l6ZW9mKHNoaXBwZWRfcmVnZGJfY2VydHMpOyYjMzk7OyBcXFxuICAzMDpcdFx0ICkgXHUwMDNlICRAXG4gIDMxOlx0XG4gIDMyOlx0JChvYmopL2V4dHJhLWNlcnRzLmM6ICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikgXFxcbiAgMzM6XHRcdFx0ICAgICAgJChzb3J0ICQod2lsZGNhcmQgJChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSKS8qLng1MDkpKVxuICAzNDpcdFx0QCQoa2VjaG8pIFwmIzM0OyAgR0VOICAgICAkQFwmIzM0O1xuICAzNTpcdFx0JChRKShzZXQgLWU7IFxcXG4gIDM2Olx0XHQgIGFsbGY9XCYjMzQ7XCYjMzQ7OyBcXFxuICAzNzpcdFx0ICBmb3IgZiBpbiAkXiA7IGRvIFxcXG4gIDM4Olx0XHQgICAgICB0ZXN0IC1mICQkZiB8fCBjb250aW51ZTtcXFxuICAzOTpcdFx0ICAgICAgIyBzaW1pbGFyIHRvIGhleGR1bXAgLXYgLWUgJiMzOTsxLzEgXCYjMzQ7MHglLjJ4LFwmIzM0OyBcJiMzNDtcXG5cJiMzNDsmIzM5OyBcXFxuICA0MDpcdFx0ICAgICAgdGhpc2Y9JCQob2QgLUFuIC12IC10eDEgXHUwMDNjICQkZiB8IFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg0MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgV2lyZWxlc3MgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENGRzgwMjExYC4gVGltZSB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBrZXJuZWwgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgYENGRzgwMjExYCBpcyBvYnZpb3VzbHkgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoYXQgZmlsZSB0byB1bmRlcnN0YW5kIHdoaWNoIG90aGVyIG9wdGlvbnMsIGZlYXR1cmVzLCBvciBtb2R1bGVzIHJlbHkgb24gb3IgYXJlIGxpbmtlZCB0byBgQ0ZHODAyMTFgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWVwZXIgYW5hbHlzaXMgSSYjMzk7bSBwbGFubmluZy4gSSBuZWVkIHRvIGVuc3VyZSBub3RoaW5nIGJyZWFrcyB1bmV4cGVjdGVkbHkgbGF0ZXIgb24gZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENGRzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7YWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTY4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRXhhbWluaW5nIHRoZSBDb3JlIFdpcmVsZXNzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgd2lyZWxlc3MgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC93aXJlbGVzcy9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGUgbGluZXMgcmVsYXRlZCB0byBgQ09ORklHX0NGRzgwMjExYC4gVGhhdCYjMzk7cyB0aGUgZm91bmRhdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBtYWM4MDIxMSwgdGhlIGNvcmUgd2lyZWxlc3Mgc3RhY2suIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgbG9naWMgYXJvdW5kIGl0IHRoYXQmIzM5O3MgY2F1c2luZyB0aGUgaXNzdWUsIHNvIEkmIzM5O2xsIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGRlcGVuZGVuY2llcyBvbiBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzLCBtYXliZSBzb21lIHBsYXRmb3JtLXNwZWNpZmljIHNlbGVjdGlvbnMsIGFuZCwgaG9wZWZ1bGx5LCBhIGNsdWUgYXMgdG8gd2h5IHRoaW5ncyBhcmUgYmVoYXZpbmcgdGhlIHdheSB0aGV5IGFyZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGluIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTU6XHRcdGJvb2xcbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgQ0ZHODAyMTFcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgMjA6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjE6XHRcdHNlbGVjdCBDUkMzMlxuICAyMjpcdFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXG4gIDIzOlx0XHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4mIzM5O3RcbiAgMjQ6XHRcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxuICAyODpcdFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcbiAgMzE6XHRcbiAgMzI6XHRcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXG4gIDM1Olx0XG4gIDM2Olx0aWYgQ0ZHODAyMTFcbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgTkw4MDIxMV9URVNUTU9ERVxuICAzOTpcdFx0Ym9vbCBcJiMzNDtubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmRcJiMzNDtcbiAgNDA6XHRcdGhlbHBcbiAgNDE6XHRcdCAgVGhlIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZCBoZWxwcyBpbXBsZW1lbnRpbmcgdGhpbmdzIGxpa2VcbiAgNDI6XHRcdCAgZmFjdG9yeSBjYWxpYnJhdGlvbiBvciB2YWxpZGF0aW9uIHRvb2xzIGZvciB3aXJlbGVzcyBjaGlwcy5cbiAgNDM6XHRcbiAgNDQ6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIE9OTFkgZm9yIGtlcm5lbHMgdGhhdCBhcmUgc3BlY2lmaWNhbGx5XG4gIDQ1Olx0XHQgIGJ1aWx0IGZvciBzdWNoIHB1cnBvc2VzLlxuICA0NjpcdFxuICA0NzpcdFx0ICBEZWJ1Z2dpbmcgdG9vbHMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gZW5kIHVwIGluIHRoZSBoYW5kcyBvZlxuICA0ODpcdFx0ICB1c2VycyBzaG91bGQgYmV0dGVyIGJlIGltcGxlbWVudGVkIHdpdGggZGVidWdmcy5cbiAgNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIE5BTiBTY2hlZHVsZXIqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkYC4gSXQmIzM5O3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgZHVnIGludG8gdGhlIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpIGNvZGUuIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgaXMgdHJhY2luZyB0aGUgbmV0bGluayBjb21tYW5kcyB0aGF0IGV2ZW50dWFsbHkgaW52b2tlIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHNwZWNpZmljYWxseSB0aGUgbmV0bGluayBtZXNzYWdlIHR5cGUsIGF0dHJpYnV0ZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBjb250ZXh0IHRoYXQgZ2V0cyBwYXNzZWQgYWxvbmcuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBzb21lIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nIGFuZCBlbnN1cmluZyB0aGUgc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGFyZSBiZWluZyBzZXQgYW5kIGludGVycHJldGVkIGNvcnJlY3RseS4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBlbnRyeSBwb2ludCBhbmQgdW5kZXJzdGFuZCB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IG9wZXJhdGlvbi4gVGltZSB0byBmaXJlIHVwIHRoZSBkZWJ1Z2dlciBhbmQgc3RhcnQgdHJhY2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmM9MTc2NzI9c3RhdGljIGJvb2wgbmw4MDIxMV9uYW5faXNfc2NoZWRfZW1wdHkoc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzY4NC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc2ODU6c3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc2ODYtXHRcdFx0XHQgICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NzQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNjExLVx0XHQuY21kID0gTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjA2MTI6XHRcdC5kb2l0ID0gbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDYxMy1cdFx0LmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjkzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgbmw4MDIxMSBSZWFjaGFiaWxpdHkgYW5kIE5BTiBTdXBwb3J0KioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlIGNhbiBhY3R1YWxseSByZWFjaCBubDgwMjExIGZyb20gc3l6a2FsbGVyLiBJIGtub3cgc3l6a2FsbGVyJiMzOTtzIHByZXR0eSBzb2xpZCB3aXRoIGl0cyBuZXRsaW5rIGFuZCBubDgwMjExIHN0dWZmLCBsZXZlcmFnaW5nIGVpdGhlciBtYWM4MDIxMV9od3NpbSBvciB0aG9zZSB2aXJ0dWFsIGRldmljZXMgbGlrZSB2aXJ0X3dpZmkuIFNvLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGFjY2Vzcy4gTm93LCBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgYE1BQzgwMjExX0hXU0lNYCBhbmQgYENGRzgwMjExYCBhcmUgY29ycmVjdGx5IGNvbmZpZ3VyZWQuIFRoYXQgd291bGQgYmUgdGhlIGZpcnN0IHN0ZXAuIFRoZW4gdGhlIGtleSBxdWVzdGlvbiBpcywgZG9lcyBtYWM4MDIxMV9od3NpbSAqYWN0dWFsbHkqIHN1cHBvcnQgTkFOPyBJIGNhbiYjMzk7dCBhc3N1bWUgYW55dGhpbmcuIFRvIGJlIHN1cmUsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBNQUM4MDIxMV9IV1NJTWAgY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBkZWZpbml0aXZlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFuX3NldF9sb2NhbF9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9jZmc4MDIxMS5oPTQ4NDM9c3RydWN0IG1nbXRfZnJhbWVfcmVncyB7XG4tLVxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC01MTkyLSAqXHRBbGwgb3RoZXIgcGFyYW1ldGVycyBtdXN0IGJlIGlnbm9yZWQuXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oOjUxOTM6ICogQG5hbl9zZXRfbG9jYWxfc2NoZWQ6IGNvbmZpZ3VyZSB0aGUgbG9jYWwgc2NoZWR1bGUgZm9yIE5BTi4gVGhlIHNjaGVkdWxlXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTUxOTQtICpcdGNvbnNpc3RzIG9mIGFuIGFycmF5IG9mICVjZmc4MDIxMV9uYW5fY2hhbm5lbCBhbmQgdGhlIHNjaGVkdWxlIGl0c2VsZixcbi0tXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oPTUyODA9c3RydWN0IGNmZzgwMjExX29wcyB7XG4tLVxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC01NTg2LVx0XHRcdFx0ICAgdTMyIGNoYW5nZXMpO1xuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaDo1NTg3Olx0aW50XHQoKm5hbl9zZXRfbG9jYWxfc2NoZWQpKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTU1ODgtXHRcdFx0XHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTk1Mz1pZWVlODAyMTFfc2V0X2xvY2FsX25hbl9zY2hlZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy01OTYwLVxubmV0L21hYzgwMjExL2NmZy5jOjU5NjE6XHRyZXR1cm4gaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc2RhdGEsIHNjaGVkKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTYyLX1cbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTk3Nj1jb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTYwOTEtXHQuc2V0X2VwY3MgPSBpZWVlODAyMTFfc2V0X2VwY3MsXG5uZXQvbWFjODAyMTEvY2ZnLmM6NjA5MjpcdC5uYW5fc2V0X2xvY2FsX3NjaGVkID0gaWVlZTgwMjExX3NldF9sb2NhbF9uYW5fc2NoZWQsXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjA5My1cdC5uYW5fc2V0X3BlZXJfc2NoZWQgPSBpZWVlODAyMTFfc2V0X3BlZXJfbmFuX3NjaGVkLFxuLS1cbm5ldC9tYWM4MDIxMS9jaGFuLmM9MTA1MD1pZWVlODAyMTFfbmV3X2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL2NoYW4uYy0xMDcxLVx0ICogV2UgaWdub3JlZCBhIGRyaXZlciBlcnJvciwgc2VlIF9pZWVlODAyMTFfc2V0X2FjdGl2ZV9saW5rcyBhbmQvb3Jcbm5ldC9tYWM4MDIxMS9jaGFuLmM6MTA3MjpcdCAqIGllZWU4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkXG5uZXQvbWFjODAyMTEvY2hhbi5jLTEwNzMtXHQgKi9cbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMDgyPWludCBpZWVlODAyMTFfbWVzaF9maW5pc2hfY3NhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIwODUtLyogTkFOIGNvZGUgKi9cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIwODY6aW50IGllZWU4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjA4Ny1cdFx0XHRcdCAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpO1xuLS1cbm5ldC9tYWM4MDIxMS9uYW4uYz0yNDE9aWVlZTgwMjExX25hbl9maW5kX2ZyZWVfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKnNjaGVkX2NmZylcbi0tXG5uZXQvbWFjODAyMTEvbmFuLmMtMjUwLVxubmV0L21hYzgwMjExL25hbi5jOjI1MTppbnQgaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvbmFuLmMtMjUyLVx0XHRcdFx0ICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jPTI1NT12b2lkIGNmZzgwMjExX3N0b3BfbmFuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI3Ni1cdC8qIFVuc2NoZWR1bGUgYWxsICovXG5uZXQvd2lyZWxlc3MvY29yZS5jOjI3NzpcdGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2RldiwgXHUwMDI2ZW1wdHlfc2NoZWQpO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0yNzgtXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yODYtXG5uZXQvd2lyZWxlc3MvY29yZS5jOjI4NzppbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI4OC1cdFx0XHRcdCAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMzI3LVxubmV0L3dpcmVsZXNzL2NvcmUuYzozMjg6XHRyZXQgPSByZGV2X25hbl9zZXRfbG9jYWxfc2NoZWQocmRldiwgd2Rldiwgc2NoZWQpO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0zMjktXHRpZiAocmV0KSB7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaD01NjE9dm9pZCBjZmc4MDIxMV9zdG9wX3BkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU2My1cbm5ldC93aXJlbGVzcy9jb3JlLmg6NTY0OmludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTY1LVx0XHRcdFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNzY3Mj1zdGF0aWMgYm9vbCBubDgwMjExX25hbl9pc19zY2hlZF9lbXB0eShzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3Njg0LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNzY4NTpzdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzY4Ni1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc3NjItXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3NzYzOlx0cmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2Rldiwgc2NoZWQpO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzc2NC19XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTc0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDYxMS1cdFx0LmNtZCA9IE5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIwNjEyOlx0XHQuZG9pdCA9IG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZCxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjA2MTMtXHRcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcbi0tXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaD0xMDY0PXN0YXRpYyBpbmxpbmUgaW50XG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxMDY1OnJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaC0xMDY2LVx0XHRcdCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oLTEwNzAtXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxMDcxOlx0dHJhY2VfcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIHNjaGVkKTtcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oOjEwNzI6XHRpZiAocmRldi1cdTAwM2VvcHMtXHUwMDNlbmFuX3NldF9sb2NhbF9zY2hlZClcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oOjEwNzM6XHRcdHJldCA9IHJkZXYtXHUwMDNlb3BzLVx1MDAzZW5hbl9zZXRfbG9jYWxfc2NoZWQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2Rldiwgc2NoZWQpO1xubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTA3NC1cdGVsc2Vcbi0tXG5uZXQvd2lyZWxlc3MvdHJhY2UuaD0yNDE5PVRSQUNFX0VWRU5UKHJkZXZfZGVsX25hbl9mdW5jLFxuLS1cbm5ldC93aXJlbGVzcy90cmFjZS5oLTI0MzYtXG5uZXQvd2lyZWxlc3MvdHJhY2UuaDoyNDM3OlRSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZCxcbm5ldC93aXJlbGVzcy90cmFjZS5oLTI0MzgtXHRUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkxMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTkFOIGFuZCBtYWM4MDIxMV9od3NpbSoqCgpPa2F5LCBzbyBgbWFjODAyMTFgIGhhcyBzdXBwb3J0IGZvciBOQU4sIHRoYXQmIzM5O3MgZ29vZCBuZXdzLiBBbmQgaWYgYG1hYzgwMjExX2h3c2ltYCBzdXBwb3J0cyBgbWFjODAyMTFgLCB0aGVuIEkgaGF2ZSBhIHBvdGVudGlhbCB0ZXN0YmVkLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIHRob3VnaCwgbGV0JiMzOTtzIHZlcmlmeSBgTUFDODAyMTFgJiMzOTtzIGNvbmZpZ3VyYXRpb24gaW4gdGhlIEtjb25maWcgZmlsZXMuIFRpbWUgdG8gY2hlY2sgYG5ldC9tYWM4MDIxMS9LY29uZmlnYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBiZWZvcmUgSSBzdGFydCBsb29raW5nIGF0IHRoZSBkZXRhaWxzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiB0byB3b3JrIGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMzNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgTkFOIFNjaGVkdWxlcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgTkFOIHNjaGVkdWxpbmcgaXNzdWUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIGBuZXQvd2lyZWxlc3MvY29yZS5jYC4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgYXJvdW5kIHRoZSBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAgZnVuY3Rpb24uIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdGhlIGNvcmUgbG9naWMgZm9yIHNldHRpbmcgdXAgbG9jYWwgc2NoZWR1bGVzIGluIHRoZSBOQU4gc3lzdGVtIHRvIHJlc2lkZS4gSSYjMzk7bSBhaW1pbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCB0aGUgcG90ZW50aWFsIHNwb3RzIHdoZXJlIGEgYnVnIG1pZ2h0IGJlIGx1cmtpbmcuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFx0d2Rldi1cdTAwM2Vpc19ydW5uaW5nID0gZmFsc2U7XG4gMjgxOlx0XG4gMjgyOlx0XHRldGhfemVyb19hZGRyKHdkZXYtXHUwMDNldS5uYW4uY2x1c3Rlcl9pZCk7XG4gMjgzOlx0XG4gMjg0Olx0XHRyZGV2LVx1MDAzZW9wZW5jb3VudC0tO1xuIDI4NTpcdH1cbiAyODY6XHRcbiAyODc6XHRpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gMjg4Olx0XHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiAyODk6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcbiAyOTA6XHR7XG4gMjkxOlx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWZzID0gTlVMTCwgKm9sZF9jaGFuZGVmcztcbiAyOTI6XHRcdHU4IG9sZF9uX2NoYW5uZWxzO1xuIDI5MzpcdFx0aW50IHJldDtcbiAyOTQ6XHRcbiAyOTU6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5tdHgpO1xuIDI5NjpcdFxuIDI5NzpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTiB8fCAhd2Rldl9ydW5uaW5nKHdkZXYpKVxuIDI5ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyOTk6XHRcbiAzMDA6XHRcdGlmICh3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nKVxuIDMwMTpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDMwMjpcdFxuIDMwMzpcdFx0LypcbiAzMDQ6XHRcdCAqIFByZS1hbGxvY2F0ZSBjaGFuZGVmcywgc28gd2UgZG9uJiMzOTt0IHJ1aW4gdGhlIGN1cnJlbnRcbiAzMDU6XHRcdCAqIHNjaGVkdWxlIG9uIGFsbG9jYXRpb24gZmFpbHVyZS5cbiAzMDY6XHRcdCAqL1xuIDMwNzpcdFx0aWYgKHNjaGVkLVx1MDAzZW5fY2hhbm5lbHMpIHtcbiAzMDg6XHRcdFx0Y2hhbmRlZnMgPSBrY2FsbG9jKHNjaGVkLVx1MDAzZW5fY2hhbm5lbHMsIHNpemVvZigqY2hhbmRlZnMpLFxuIDMwOTpcdFx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4gMzEwOlx0XHRcdGlmICghY2hhbmRlZnMpXG4gMzExOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzEyOlx0XG4gMzEzOlx0XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzY2hlZC1cdTAwM2VuX2NoYW5uZWxzOyBpJiM0MzsmIzQzOylcbiAzMTQ6XHRcdFx0XHRjaGFuZGVmc1tpXSA9IHNjaGVkLVx1MDAzZW5hbl9jaGFubmVsc1tpXS5jaGFuZGVmO1xuIDMxNTpcdFx0fVxuIDMxNjpcdFxuIDMxNzpcdFx0LypcbiAzMTg6XHRcdCAqIFN3YXAgaW4gdGhlIG5ldyBjaGFuZGVmcyBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyIGFuZCBzZXQgdGhlXG4gMzE5Olx0XHQgKiBkZWZlcnJlZCBmbGFnLCBzbyBpZiB0aGUgZHJpdmVyIGNvbXBsZXRlcyB0aGUgdXBkYXRlIHN5bmNocm9ub3VzbHlcbiAzMjA6XHRcdCAqIHRoZSBuZXcgc2NoZWR1bGUgd2lsbCBiZSBhbHJlYWR5IGluIHBsYWNlLlxuIDMyMTpcdFx0ICovXG4gMzIyOlx0XHRvbGRfY2hhbmRlZnMgPSB3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzO1xuIDMyMzpcdFx0b2xkX25fY2hhbm5lbHMgPSB3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHM7XG4gMzI0Olx0XHR3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzID0gY2hhbmRlZnM7XG4gMzI1Olx0XHR3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBzY2hlZC1cdTAwM2VuX2NoYW5uZWxzO1xuIDMyNjpcdFx0d2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IHNjaGVkLVx1MDAzZWRlZmVycmVkO1xuIDMyNzpcdFxuIDMyODpcdFx0cmV0ID0gcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKHJkZXYsIHdkZXYsIHNjaGVkKTtcbiAzMjk6XHRcdGlmIChyZXQpIHtcbiAzMzA6XHRcdFx0LyogUmVzdG9yZSB0aGUgcHJldmlvdXMgc2NoZWR1bGUgb24gZmFpbHVyZSAqL1xuIDMzMTpcdFx0XHR3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nID0gZmFsc2U7XG4gMzMyOlx0XHRcdHdkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBvbGRfY2hhbmRlZnM7XG4gMzMzOlx0XHRcdHdkZXYtXHUwMDNldS5uYW4ubl9jaGFubmVscyA9IG9sZF9uX2NoYW5uZWxzO1xuIDMzNDpcdFx0XHRrZnJlZShjaGFuZGVmcyk7XG4gMzM1Olx0XHRcdHJldHVybiByZXQ7XG4gMzM2Olx0XHR9XG4gMzM3Olx0XG4gMzM4Olx0XHRrZnJlZShvbGRfY2hhbmRlZnMpO1xuIDMzOTpcdFxuIDM0MDpcdFx0cmV0dXJuIDA7XG4gMzQxOlx0fVxuIDM0MjpcdFxuIDM0MzpcdHZvaWQgY2ZnODAyMTFfc3RvcF9wZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gMzQ0Olx0XHRcdCAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4gMzQ1Olx0e1xuIDM0NjpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5Lm10eCk7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRpZiAoV0FSTl9PTih3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QRCkpXG4gMzQ5Olx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NjQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlYCBQYXRjaCBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaW4gYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGVgIHNlZW1zIHRvIGJlIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgaG93IGNoYW5uZWwgZGVmaW5pdGlvbnMgYXJlIGhhbmRsZWQuIFByZXZpb3VzbHksIGl0IGFsbG9jYXRlZCBgY2hhbmRlZnNgICphZnRlciogdGhlIGluaXRpYWwgY2FsbCBhbmQgdGhlbiBjb25kaXRpb25hbGx5IGZyZWVkIGFuZCByZWFsbG9jYXRlZCBiYXNlZCBvbiB0aGUgaW5pdGlhbCBjYWxsJiMzOTtzIHJldHVybi4gTm93LCBpdCYjMzk7cyBjaGFuZ2VkIHRvIHByZS1hbGxvY2F0ZSwgc2V0IHRoZSB2YXJpYWJsZXMgKmJlZm9yZSogdGhlIGNyaXRpY2FsIGNhbGwgYHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZGAsIGFuZCB0aGVuIGltcGxlbWVudCBhIHByb3BlciByb2xsYmFjayBtZWNoYW5pc20gb24gZmFpbHVyZSwgcmVzdG9yaW5nIHRoZSBvbGQgc3RhdGUuICBJZiB0aGUgY2FsbCAqc3VjY2VlZHMqLCBpdCByZWxlYXNlcyB0aGUgKm9sZCogZGF0YS4KCk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmUgYXJvdW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW50cm9kdWNlZCBieSB0aGUgbmV3IG9yZGVyIG9mIG9wZXJhdGlvbnMgYW5kIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzLiBQcmUtYWxsb2NhdGlvbiBjb21iaW5lZCB3aXRoIHBvaW50ZXIgc3dhcHBpbmcgYW5kIGNhbGxiYWNrIGJlaGF2aW9yIGNhbiBpbnRyb2R1Y2Ugc3VidGxlIGVycm9ycywgZXNwZWNpYWxseSBnaXZlbiB0aGUgJiMzNDtkZWZlcnJlZCYjMzQ7IG5hdHVyZSBvZiB0aGUgc2NoZWR1bGUgdXBkYXRlLiBUaGlzIHJldmlzZWQgc3RydWN0dXJlLCB3aXRoIGl0cyBwcmUtYWxsb2NhdGlvbiwgcG9pbnRlciBtYW5pcHVsYXRpb24sIGFuZCBjb25kaXRpb25hbCByb2xsYmFjaywgc2NyZWFtcyAmIzM0O2Z1enogbWUhJiMzNDsgVGhlc2Uga2luZHMgb2YgY2hhbmdlcyBhcmUgdGhlIHByaW1lIHRhcmdldHMgZm9yIHVuY292ZXJpbmcgbWVtb3J5IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBhbmQgb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzLgoKUmVhY2hhYmlsaXR5IGlzIGRlZmluaXRlbHkgaGlnaC4gSSBjYW4gaGl0IHRoaXMgZnVuY3Rpb24gZWFzaWx5IHVzaW5nIHRoZSBgTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRGAgTmV0bGluayBjb21tYW5kLiBUaGF04oCZcyBhIHN0cmFpZ2h0Zm9yd2FyZCBpbnRlcmZhY2UgZm9yIGFueSB3aXJlbGVzcyBuZXR3b3JrIChzaW11bGF0ZWQgb3IgcmVhbCkuIFRoZSBmYWN0IHRoYXQgaXQgbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgYW5kIHN0YXRlIHdpdGhpbiBhIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnQsIGFzIHBlciBndWlkZWxpbmVzLCBjb25maXJtcyB0aGUgZnV6emluZyB2YWx1ZS4KCkZyb20gYSBmb2N1cyBzeW1ib2wgcGVyc3BlY3RpdmUsIEkmIzM5O20gY29uZmlkZW50IGluIGluY2x1ZGluZzoKCiogICBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAgKHRoZSBtb2RpZmllZCBmdW5jdGlvbikKKiAgIGBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWRgICh0aGUgZW50cnkgcG9pbnQpCiogICBgY2ZnODAyMTFfc3RvcF9uYW5gIChhIGNhbGxlcikKCkkmIzM5O2xsIGJlIHNldHRpbmcgdXAgYSB0ZXN0IGVudmlyb25tZW50LCBsaWtlbHkgd2l0aCBgTUFDODAyMTFfSFdTSU1gIHJ1bm5pbmcgd2l0aGluIFFFTVUgd2l0aCBzeXprYWxsZXIuIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBDRkc4MDIxMWAsIGBOTDgwMjExX1RFU1RNT0RFYCAoanVzdCB0byBiZSBzYWZlKSwgYW5kLCBvZiBjb3Vyc2UsIGBNQUM4MDIxMWAgYW5kIGBNQUM4MDIxMV9IV1NJTWAgZm9yIHRoZSBlbXVsYXRlZCBkZXZpY2UuIFRoZXNlIHNldHRpbmdzIGdpdmUgbWUgZ29vZCBjb3ZlcmFnZS4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gdHJpZ2dlciBzb21lIGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9IV1NJTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBWaXJ0dWFsIFdpcmVsZXNzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgdmlydHVhbCB3aXJlbGVzcyBuZXR3b3JrIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGRyaXZlci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBqdWljeSBkZXRhaWxzIGFib3V0IGZlYXR1cmUgZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGtlcHQuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0b3AgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIHdpcmVsZXNzIGxhbmRzY2FwZSBhbmQgd2hhdCYjMzk7cyBjb25maWd1cmFibGUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjb25maWcgTUFDODAyMTFfSFdTSU1cbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4gICAzOlx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gICA0Olx0XHRoZWxwXG4gICA1Olx0XHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3RcbiAgIDY6XHRcdCAgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjayAobWFjODAyMTEpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgbm90XG4gICA3Olx0XHQgIG5lZWRlZCBmb3Igbm9ybWFsIHdpcmVsZXNzIExBTiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy4gU2VlXG4gICA4Olx0XHQgIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9tYWM4MDIxMV9od3NpbSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3dcbiAgIDk6XHRcdCAgdG8gdXNlIHRoaXMgdG9vbC5cbiAgMTA6XHRcbiAgMTE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG4gIDEyOlx0XHQgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFZJUlRfV0lGSVxuICAxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7V2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXCYjMzQ7XG4gIDE2Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZXRoZXJuZXQgY29ubmVjdGlvbnMgdG8gYXBwZWFyIGFzIGlmIHRoZXlcbiAgMTk6XHRcdCAgYXJlIHdpZmkgY29ubmVjdGlvbnMgdGhyb3VnaCBhIHNwZWNpYWwgcnRuZXRsaW5rIGRldmljZS5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGBNQUM4MDIxMWAgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqQW5hbHl6aW5nIGBNQUM4MDIxMWAgRGVwZW5kZW5jaWVzIGluIHRoZSBLZXJuZWwqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGBNQUM4MDIxMWAgaXMgY29ubmVjdGVkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0sIHBhcnRpY3VsYXJseSBgQ0ZHODAyMTFgLiBJIGtub3cgaXQmIzM5O3MgYSBjcml0aWNhbCByZWxhdGlvbnNoaXAsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBpdCBzcGVjaWZpY2FsbHkgYnkgZXhhbWluaW5nIHRoZSBgS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byBgbmV0L21hYzgwMjExL0tjb25maWdgIGFuZCByZWFsbHkgZGlnIGluIHRoZXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIGRpcmVjdCBkZXBlbmRlbmNpZXMsIG9idmlvdXNseSwgYnV0IGFsc28gaW5kaXJlY3Qgb25lcy4gSSBzaG91bGQgYmUgbG9va2luZyBvdXQgZm9yIGFueSAmIzM0O2RlcGVuZHMgb24mIzM0OyBvciAmIzM0O3NlbGVjdCYjMzQ7IHN0YXRlbWVudHMsIGFuZCBldmVuIG1vcmUgYnJvYWRseSBob3cgdGhlIG1vZHVsZXMgYXJlIG9yZ2FuaXNlZC4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaWYgYENGRzgwMjExYCBpcyBhIGRpcmVjdCBwcmVyZXF1aXNpdGUgb3IgaWYgdGhlcmUgYXJlIGFueSBvdGhlciB1bmRlcmx5aW5nIGZhY3RvcnMgYXQgcGxheS4gVW5kZXJzdGFuZGluZyB0aGlzIGRlcGVuZGVuY3kgY2hhaW4gaXMgYWJzb2x1dGVseSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgcGllY2VzIG9mIHRoZSBrZXJuZWwgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEkmIzM5O2xsIGtlZXAgYW4gb3BlbiBtaW5kIGZvciBhbnkgb3RoZXIgbW9kdWxlcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdCwgb3IgdGhhdCBhcmUsIGluIHR1cm4sIGRlcGVuZGVudCBvbiBgTUFDODAyMTFgLiBJIHJlYWxseSBtdXN0IGJlIG1ldGhvZGljYWwgYWJvdXQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBNQUM4MDIxMVxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDU6XHRcdHNlbGVjdCBDUllQVE9cbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxuICAgODpcdFx0c2VsZWN0IENSWVBUT19BRVNcbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fQ0NNXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0dDTVxuICAxMTpcdFx0c2VsZWN0IENSQzMyXG4gIDEyOlx0XHRoZWxwXG4gIDEzOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXG4gIDE0Olx0XHQgIG5ldHdvcmtpbmcgc3RhY2suXG4gIDE1Olx0XG4gIDE2Olx0Y29tbWVudCBcJiMzNDtDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMVwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXG4gIDE4Olx0XG4gIDE5Olx0aWYgTUFDODAyMTEgIT0gblxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUzNwoJCQkJCQkJb3V0cHV0OiAyMTQKCQkJCQkJCXRob3VnaHRzOiAyODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRmluYWwgRnV6emluZyBTdHJhdGVneSBWYWxpZGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBqdXN0IHJ1biB0aHJvdWdoIHRoaXMgb25lIGxhc3QgdGltZSBiZWZvcmUgd2UgY29tbWl0IHRvIGl0LiBGaXJzdCwgYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSB0cnVlIGhlcmUsIG5vIHF1ZXN0aW9uLiBUaGUgdGFyZ2V0IGlzIHRoZSBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAgZnVuY3Rpb24gaW4gYG5ldC93aXJlbGVzcy9jb3JlLmNgLiBUaGUgcmVhc29uaW5nIGlzIHNvdW5kOiB0aGlzIHBhdGNoIHRvdWNoZXMgdGhlIE5BTiBjaGFubmVsIHNjaGVkdWxlIGFsbG9jYXRpb24sIG9yZGVyaW5nLCBhbmQgcm9sbGJhY2sgbG9naWMsIHdoaWNoIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGV4cG9zZWQgdGhyb3VnaCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSAoYG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZGApIG1ha2VzIGl0IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgYW5kIHRoZSBpbmNsdXNpb24gb2YgZW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyBsaWtlIGBtYWM4MDIxMV9od3NpbWAgcmVhbGx5IHVwcyB0aGUgYW50ZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGJ1Z3MsIHBhcnRpY3VsYXJseSBtZW1vcnkgY29ycnVwdGlvbiwgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCBvciByYWNlIGNvbmRpdGlvbnMuCgpOZXh0LCBJJiMzOTt2ZSBnb3QgdGhlIGBGb2N1c1N5bWJvbHNgIG5haWxlZCBkb3duOiBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAsIGBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWRgLCBhbmQgYGNmZzgwMjExX3N0b3BfbmFuYC4gQ292ZXJpbmcgdGhvc2Ugc2hvdWxkIGdpdmUgdXMgYSBnb29kIHNob3QgYXQgZXhlcmNpc2luZyBhbGwgdGhlIGNyaXRpY2FsIGNvZGUgcGF0aHMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbG9vayByaWdodCBhcyB3ZWxsOiBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gVGhleSYjMzk7cmUgZXNzZW50aWFsIGZvciBlbmFibGluZyB0aGUgcmVsZXZhbnQga2VybmVsIG1vZHVsZXMuCgpBbHJpZ2h0LCBhIGZpbmFsIHF1aWNrIHNjYW4uIFllcywgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZCB3aXRoIHRoaXMgZnV6emluZyBwbGFuLiBUaW1lIHRvIG1vdmUgb24gYW5kIHNldCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfc3RvcF9uYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSBpbiBuZXQvd2lyZWxlc3MvY29yZS5jLCBhbHRlcmluZyBtZW1vcnkgbWFuYWdlbWVudCwgY2hhbm5lbCBkZWZpbml0aW9uIHN3YXBwaW5nLCBhbmQgZXJyb3Igcm9sbGJhY2sgaGFuZGxpbmcgZm9yIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpIGxvY2FsIHNjaGVkdWxlcy4gVGhpcyBwYXRoIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIG5sODAyMTEgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSAoTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCkgYW5kIHZpcnR1YWwgbWFjODAyMTEgZGV2aWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfc3RvcF9uYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSBpbiBuZXQvd2lyZWxlc3MvY29yZS5jLCBhbHRlcmluZyBtZW1vcnkgbWFuYWdlbWVudCwgY2hhbm5lbCBkZWZpbml0aW9uIHN3YXBwaW5nLCBhbmQgZXJyb3Igcm9sbGJhY2sgaGFuZGxpbmcgZm9yIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpIGxvY2FsIHNjaGVkdWxlcy4gVGhpcyBwYXRoIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIG5sODAyMTEgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSAoTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCkgYW5kIHZpcnR1YWwgbWFjODAyMTEgZGV2aWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSgpYCB0byBwcmUtYWxsb2NhdGUgYW5kIHBvcHVsYXRlIHRoZSBuZXcgTkFOIGNoYW5uZWwgZGVmaW5pdGlvbnMgYXJyYXkgKGBjaGFuZGVmc2ApIHVzaW5nIGBrY2FsbG9jKClgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2sgYHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZCgpYC4gSWYgdGhlIGRyaXZlciBjYWxsYmFjayBmYWlscywgdGhlIHByZXZpb3VzIHNjaGVkdWxlIChgb2xkX2NoYW5kZWZzYCwgYG9sZF9uX2NoYW5uZWxzYCkgaXMgcmVzdG9yZWQgYW5kIHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkOyBvbiBzdWNjZXNzLCB0aGUgb2xkIGFycmF5IGlzIGZyZWVkLlxuXG5LQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gQWxsIGFsbG9jYXRpb25zIGluIHRoaXMgcGF0Y2ggdXNlIGBrY2FsbG9jKClgICh6ZXJvLWluaXRpYWxpemVkKSwgaW5wdXQgc2NoZWR1bGVzIGFyZSB6ZXJvLWluaXRpYWxpemVkIChga3phbGxvYygpYCBvciBzdHJ1Y3QgaW5pdGlhbGl6ZXIgYHt9YCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB3aGlsZSB1bmluaXRpYWxpemVkLlxuLSBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxlYWsgZHVyaW5nIHN0YXRlIHJvbGxiYWNrLCBmYWxsIHN0cmljdGx5IHVuZGVyIHRoZSBkb21haW4gb2Ygc3RhbmRhcmQgS0FTQU4gYW5kIFNMVUIgZGVidWdnZXJzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTFlYzI0MTQzM2I0MzQ5ODRlYWI4MTViMWVhMjU3N2RkZjlmMGJlNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMjE6Mjk6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwppbmRleCBkMTMzMTBmZWY2OTFhLi41YjQyZDZlYzFhZDY2IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTI4OCw2ICYjNDM7Mjg4LDggQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJCSAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZCkKIHsKJiM0MzsJc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmcyA9IE5VTEwsICpvbGRfY2hhbmRlZnM7CiYjNDM7CXU4IG9sZF9uX2NoYW5uZWxzOwogCWludCByZXQ7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cmRldi0mZ3Q7d2lwaHkubXR4KTsKQEAgLTI5OCwyOSAmIzQzOzMwMCw0MiBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJaWYgKHdkZXYtJmd0O3UubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JcmV0ID0gcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKHJkZXYsIHdkZXYsIHNjaGVkKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0Jd2Rldi0mZ3Q7dS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBzY2hlZC0mZ3Q7ZGVmZXJyZWQ7Ci0KLQlrZnJlZSh3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmcyk7Ci0Jd2Rldi0mZ3Q7dS5uYW4uY2hhbmRlZnMgPSBOVUxMOwotCXdkZXYtJmd0O3UubmFuLm5fY2hhbm5lbHMgPSAwOwomIzQzOwkvKgomIzQzOwkgKiBQcmUtYWxsb2NhdGUgY2hhbmRlZnMsIHNvIHdlIGRvbiYjMzk7dCBydWluIHRoZSBjdXJyZW50CiYjNDM7CSAqIHNjaGVkdWxlIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KJiM0MzsJICovCiYjNDM7CWlmIChzY2hlZC0mZ3Q7bl9jaGFubmVscykgewomIzQzOwkJY2hhbmRlZnMgPSBrY2FsbG9jKHNjaGVkLSZndDtuX2NoYW5uZWxzLCBzaXplb2YoKmNoYW5kZWZzKSwKJiM0MzsJCQkJICAgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIWNoYW5kZWZzKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKCFzY2hlZC0mZ3Q7bl9jaGFubmVscykKLQkJcmV0dXJuIDA7CiYjNDM7CQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHNjaGVkLSZndDtuX2NoYW5uZWxzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQljaGFuZGVmc1tpXSA9IHNjaGVkLSZndDtuYW5fY2hhbm5lbHNbaV0uY2hhbmRlZjsKJiM0MzsJfQogCi0Jd2Rldi0mZ3Q7dS5uYW4uY2hhbmRlZnMgPSBrY2FsbG9jKHNjaGVkLSZndDtuX2NoYW5uZWxzLAotCQkJCSAgICAgICBzaXplb2YoKndkZXYtJmd0O3UubmFuLmNoYW5kZWZzKSwKLQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmcykKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CS8qCiYjNDM7CSAqIFN3YXAgaW4gdGhlIG5ldyBjaGFuZGVmcyBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyIGFuZCBzZXQgdGhlCiYjNDM7CSAqIGRlZmVycmVkIGZsYWcsIHNvIGlmIHRoZSBkcml2ZXIgY29tcGxldGVzIHRoZSB1cGRhdGUgc3luY2hyb25vdXNseQomIzQzOwkgKiB0aGUgbmV3IHNjaGVkdWxlIHdpbGwgYmUgYWxyZWFkeSBpbiBwbGFjZS4KJiM0MzsJICovCiYjNDM7CW9sZF9jaGFuZGVmcyA9IHdkZXYtJmd0O3UubmFuLmNoYW5kZWZzOwomIzQzOwlvbGRfbl9jaGFubmVscyA9IHdkZXYtJmd0O3UubmFuLm5fY2hhbm5lbHM7CiYjNDM7CXdkZXYtJmd0O3UubmFuLmNoYW5kZWZzID0gY2hhbmRlZnM7CiYjNDM7CXdkZXYtJmd0O3UubmFuLm5fY2hhbm5lbHMgPSBzY2hlZC0mZ3Q7bl9jaGFubmVsczsKJiM0MzsJd2Rldi0mZ3Q7dS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBzY2hlZC0mZ3Q7ZGVmZXJyZWQ7CiAKLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHNjaGVkLSZndDtuX2NoYW5uZWxzOyBpJiM0MzsmIzQzOykKLQkJd2Rldi0mZ3Q7dS5uYW4uY2hhbmRlZnNbaV0gPSBzY2hlZC0mZ3Q7bmFuX2NoYW5uZWxzW2ldLmNoYW5kZWY7CiYjNDM7CXJldCA9IHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChyZGV2LCB3ZGV2LCBzY2hlZCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCS8qIFJlc3RvcmUgdGhlIHByZXZpb3VzIHNjaGVkdWxlIG9uIGZhaWx1cmUgKi8KJiM0MzsJCXdkZXYtJmd0O3UubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQl3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmcyA9IG9sZF9jaGFuZGVmczsKJiM0MzsJCXdkZXYtJmd0O3UubmFuLm5fY2hhbm5lbHMgPSBvbGRfbl9jaGFubmVsczsKJiM0MzsJCWtmcmVlKGNoYW5kZWZzKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KIAotCXdkZXYtJmd0O3UubmFuLm5fY2hhbm5lbHMgPSBzY2hlZC0mZ3Q7bl9jaGFubmVsczsKJiM0MzsJa2ZyZWUob2xkX2NoYW5kZWZzKTsKIAogCXJldHVybiAwOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlIGNoYW5nZXMgaW4gYG5ldC93aXJlbGVzcy9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlYCBmdW5jdGlvbi4KCkZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nL2ltcHJvdmVtZW50IHRvIHRoZSBzY2hlZHVsZSB1cGRhdGUgcHJvY2Vzcy4gVGhlIG1haW4gY2hhbmdlIGludm9sdmVzIHByZS1hbGxvY2F0aW5nIHRoZSBgY2hhbmRlZnNgIGJ1ZmZlciBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyIGZ1bmN0aW9uIGByZGV2X25hbl9zZXRfbG9jYWxfc2NoZWRgLiBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgYSBwb3RlbnRpYWwgcmFjZSBvciBmYWlsdXJlIG1vZGUgd2hlcmUgYSBzY2hlZHVsZSB1cGRhdGUgY291bGQgYmUgY29ycnVwdGVkIGlmIHRoZSBidWZmZXIgYWxsb2NhdGlvbiBmYWlscyAqZHVyaW5nKiBhbiB1cGRhdGUuIE5vdywgb24gZmFpbHVyZSwgdGhlIG9yaWdpbmFsIHN0YXRlIGlzIHJlc3RvcmVkLgoKVGhlICYjMzQ7YmVmb3JlJiMzNDsgdmVyc2lvbiBzZWVtcyB0byBhbGxvY2F0ZSBhbmQgZGVhbGxvY2F0ZSBgY2hhbmRlZnNgIGluIGEgbW9yZSBzeW5jaHJvbm91cyBtYW5uZXIuIFRoZSBuZXcgdmVyc2lvbiBhdHRlbXB0cyB0byBwcmV2ZW50IGFuIGludGVycnVwdGlvbiB0byBzY2hlZHVsZSB1cGRhdGVzIGJ5IHByZS1hbGxvY2F0aW5nLCBhbmQgb25seSB1cGRhdGluZyB0aGUgZGF0YSBwb2ludGVyIGFmdGVyIGEgc3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLiBPbiBlcnJvciwgaXQgcmVzdG9yZXMgdGhlIG9yaWdpbmFsIHN0YXRlIGFuZCBmcmVlcyB0aGUgbmV3IGFsbG9jYXRpb24uCgpNeSBpbml0aWFsIGNvbmNlcm4sIGlzIHRoaXM6IERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgbWFuYWdlbWVudCBjb21wbGV4aXR5IHRoYXQgS01TQU4gY291bGQgY2F0Y2g/IFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG9sZF9jaGFuZGVmc2AgYW5kIHRoZSByZXN0b3JlIGxvZ2ljICpkb2VzKiBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGNvZGVwYXRocyBzbGlnaHRseS4gQWxzbywgd2hhdCBpZiB0aGVyZSYjMzk7cyBhIHByb2JsZW0gd2l0aCB0aGUgZHJpdmVyIGNvZGUgKmFmdGVyKiB0aGUgdXBkYXRlZCBgY2hhbmRlZnNgIGFyZSBzd2FwcGVkIGluPyBUaGUgcmVzdG9yZSBwYXRoIGxvb2tzIGNvcnJlY3QsIGJ1dCBpdCYjMzk7cyB0aGUga2luZCBvZiBhcmVhIHdoZXJlIGEgc3VidGxlIHJhY2Ugb3IgdXNlLWFmdGVyLWZyZWUgKmNvdWxkKiBiZSBpbnRyb2R1Y2VkLgoKVG8gYmUgdGhvcm91Z2gsIEkgd2lsbCB1c2UgYGdyZXBwZXJgIG9yIGVxdWl2YWxlbnQgdG9vbHMgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBhbmQgYW55IHJlbGF0ZWQgY29kZSB0byBzZWUgaG93IGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlYCBpcyB1c2VkLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGFueSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLCBvciBvdGhlciBjbG9zZWx5IHJlbGF0ZWQgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyAoZS5nLiBgd2Rldi0mZ3Q7dS5uYW5gKSB0aGF0IGFyZSB1c2VkIGluIHRoZSBzYW1lIGNvbnRleHQgdG8gZ2V0IGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QuIFRoYXQgd2lsbCBnaXZlIG1lIG1vcmUgaW5zaWdodCBpbnRvIHRoZSAqbGlrZWxpaG9vZCogb2YgYSBLTVNBTiBpc3N1ZSBhbmQgbGV0IG1lIG1ha2UgYSBmaW5hbCBkZWNpc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NvcmUuYz0yNTU9dm9pZCBjZmc4MDIxMV9zdG9wX25hbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNzYtXHQvKiBVbnNjaGVkdWxlIGFsbCAqL1xubmV0L3dpcmVsZXNzL2NvcmUuYzoyNzc6XHRjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIFx1MDAyNmVtcHR5X3NjaGVkKTtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjc4LVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMjg2LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyODc6aW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yODgtXHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oPTU2MT12b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmgtNTYzLVxubmV0L3dpcmVsZXNzL2NvcmUuaDo1NjQ6aW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuaC01NjUtXHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE3Njg1PXN0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzc2Mi1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc3NjM6XHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShyZGV2LCB3ZGV2LCBzY2hlZCk7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3NzY0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYxMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGl2aW5nIERlZXAgaW50byBOQU4gU2NoZWR1bGluZyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaG93IHdlJiMzOTtyZSBzZXR0aW5nIHVwIHRoZSBsb2NhbCBzY2hlZHVsZXIgd2l0aGluIHRoZSBOQU4gZnJhbWV3b3JrLiBNeSBtYWluIGZvY3VzIGlzIG9uIGBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWRgLCBidXQgSSBrbm93IHRoaXMgdG91Y2hlcyBvbiBzZXZlcmFsIGludGVyY29ubmVjdGVkIHBpZWNlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGBuYW4uY2hhbmRlZnNgLCBgbmFuLm5fY2hhbm5lbHNgLCBhbmQgYG5hbi5zY2hlZF91cGRhdGVfcGVuZGluZ2AuIEkgYWxyZWFkeSBrbm93IHRoZXNlIGFyZSBrZXkgdmFyaWFibGVzLCBidXQgSSBoYXZlIHRvIGZvbGxvdyB0aGUgY29tcGxldGUgZGF0YSBmbG93LgoKSSB3YW50IHRvIGtub3c6IHdoZXJlIGFyZSB0aGVzZSB2YXJpYWJsZXMgYmVpbmcgbW9kaWZpZWQ/IFdoYXQgZnVuY3Rpb25zIGFyZSByZWFkaW5nIHRoZW0/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIEkgbmVlZCB0byBjb25zaWRlcj8gSXMgdGhlcmUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcyBoZXJlPyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHN0ZXAgdGhyb3VnaCB0aGUgY29kZSBleGVjdXRpb24sIG1lbnRhbGx5IHNpbXVsYXRpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93LiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgbG9naWMgZXJyb3JzIHRoYXQgbWlnaHQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIGNoYW5uZWwgc2VsZWN0aW9uLCBzY2hlZHVsaW5nIHVwZGF0ZXMsIG9yIG92ZXJhbGwgTkFOIG9wZXJhdGlvbi4gVGhpcyBhbHNvIG1lYW5zIGV4cGxvcmluZyBob3cgYWxsIHRoZSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgdGFsa2luZyB0byBlYWNoIG90aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFuZGVmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NoYW4uYz03NjU9X2NmZzgwMjExX2NoYW5kZWZfY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmMxLFxuLS1cbm5ldC93aXJlbGVzcy9jaGFuLmMtNzg3LVx0ICogbXVsdGlwbGUgQVBzLCBidXQgaW4gdGhpcyBjYXNlIHVzZXJzcGFjZSBzaG91bGQgY29uZmlndXJlXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjc4ODpcdCAqIGlkZW50aWNhbCBjaGFuZGVmcyBpbmNsdWRpbmcgTlBDQSwgZXZlbiBpZiBwZXJoYXBzIG9uZSBvZlxubmV0L3dpcmVsZXNzL2NoYW4uYy03ODktXHQgKiB0aGUgQVAgaW50ZXJmYWNlcyBkb2VzbiYjMzk7dCBldmVuIGFkdmVydGlzZSBpdC5cbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTg0NS1cdCAqIHNhbWUgcHJpbWFyeSAxNjAsIGJ1dCBhcmUgbm90IGlkZW50aWNhbCAtIHRoaXMgY2Fubm90IGhhcHBlblxubmV0L3dpcmVsZXNzL2NoYW4uYzo4NDY6XHQgKiBzaW5jZSB0aGV5IG11c3QgYmUgMzIwIChubyB3aWRlciBjaGFuZGVmcyBleGlzdCwgYXQgbGVhc3QgeWV0Lilcbm5ldC93aXJlbGVzcy9jaGFuLmMtODQ3LVx0ICovXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0yODc9aW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMjkwLXtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MjkxOlx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmcyA9IE5VTEwsICpvbGRfY2hhbmRlZnM7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTI5Mi1cdHU4IG9sZF9uX2NoYW5uZWxzO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMzAzLVx0Lypcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzA0Olx0ICogUHJlLWFsbG9jYXRlIGNoYW5kZWZzLCBzbyB3ZSBkb24mIzM5O3QgcnVpbiB0aGUgY3VycmVudFxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMDUtXHQgKiBzY2hlZHVsZSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMDctXHRpZiAoc2NoZWQtXHUwMDNlbl9jaGFubmVscykge1xubmV0L3dpcmVsZXNzL2NvcmUuYzozMDg6XHRcdGNoYW5kZWZzID0ga2NhbGxvYyhzY2hlZC1cdTAwM2VuX2NoYW5uZWxzLCBzaXplb2YoKmNoYW5kZWZzKSxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzA5LVx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjMxMDpcdFx0aWYgKCFjaGFuZGVmcylcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzExLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMzEzLVx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2NoZWQtXHUwMDNlbl9jaGFubmVsczsgaSYjNDM7JiM0MzspXG5uZXQvd2lyZWxlc3MvY29yZS5jOjMxNDpcdFx0XHRjaGFuZGVmc1tpXSA9IHNjaGVkLVx1MDAzZW5hbl9jaGFubmVsc1tpXS5jaGFuZGVmO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0zMTUtXHR9XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMTctXHQvKlxubmV0L3dpcmVsZXNzL2NvcmUuYzozMTg6XHQgKiBTd2FwIGluIHRoZSBuZXcgY2hhbmRlZnMgYmVmb3JlIGNhbGxpbmcgdGhlIGRyaXZlciBhbmQgc2V0IHRoZVxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMTktXHQgKiBkZWZlcnJlZCBmbGFnLCBzbyBpZiB0aGUgZHJpdmVyIGNvbXBsZXRlcyB0aGUgdXBkYXRlIHN5bmNocm9ub3VzbHlcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMyMS1cdCAqL1xubmV0L3dpcmVsZXNzL2NvcmUuYzozMjI6XHRvbGRfY2hhbmRlZnMgPSB3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0zMjMtXHRvbGRfbl9jaGFubmVscyA9IHdkZXYtXHUwMDNldS5uYW4ubl9jaGFubmVscztcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzI0Olx0d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyA9IGNoYW5kZWZzO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0zMjUtXHR3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBzY2hlZC1cdTAwM2VuX2NoYW5uZWxzO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMzMxLVx0XHR3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nID0gZmFsc2U7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjMzMjpcdFx0d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyA9IG9sZF9jaGFuZGVmcztcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzMzLVx0XHR3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBvbGRfbl9jaGFubmVscztcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzM0Olx0XHRrZnJlZShjaGFuZGVmcyk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTMzNS1cdFx0cmV0dXJuIHJldDtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMzNy1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MzM4Olx0a2ZyZWUob2xkX2NoYW5kZWZzKTtcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzM5LVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTQ1ODM9c3RhdGljIGludCBubDgwMjExX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDYzOC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTQ2Mzk6XHRcdC8qIG5vdGU6IHJldHVybnMgZmlyc3Qgb25lIGlmIGlkZW50aWNhbCBjaGFuZGVmcyAqL1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDY0MC1cdFx0Y29tcGF0X2NoYW5kZWYgPSBjZmc4MDIxMV9jaGFuZGVmX2NvbXBhdGlibGUoXHUwMDI2Y2hhbmRlZixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE3NTIzPXN0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X3BlZXJfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3NTg4LVx0XHRcdGlmIChjZmc4MDIxMV9jaGFuZGVmX2NvbXBhdGlibGUoXHUwMDI2bmFuX2NoYW5uZWxzW2ldLmNoYW5kZWYsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3NTg5Olx0XHRcdFx0XHRcdFx0XHUwMDI2d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmc1tqXSkpIHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc1OTAtXHRcdFx0XHRjb21wYXRpYmxlID0gdHJ1ZTtcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9MjMzNz1zdGF0aWMgYm9vbCByZWdfd2Rldl9jaGFuX3ZhbGlkKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTIzNTQtXHRcdFx0cmV0ID0gY2ZnODAyMTFfcmVnX2Nhbl9iZWFjb24od2lwaHksXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjM1NTpcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZ3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzW2ldLFxubmV0L3dpcmVsZXNzL3JlZy5jLTIzNTYtXHRcdFx0XHRcdFx0ICAgICAgTkw4MDIxMV9JRlRZUEVfTkFOKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM0OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gdGhlIE5BTiBTY2hlZHVsZXIqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjaGVkdWxlciBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIDgwMi4xMSBOQU4gZHJpdmVyLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkYC4gVGhhdCBmdW5jdGlvbiBpcyB0aGUgbGlrZWx5IGVudHJ5IHBvaW50IHdoZXJlIHRoZSBzY2hlZHVsZXIgcGFyYW1ldGVycyBhbmQgY29uZmlndXJhdGlvbnMgYXJlIHNldCwgc28gaXTigJlzIHRoZSBwZXJmZWN0IHBsYWNlIHRvIGJlZ2luLiBJIG5lZWQgdG8gdHJhY2UgZXhhY3RseSBob3cgdGhlIGBzY2hlZGAgc3RydWN0dXJlIGlzIHBhcnNlZCBmcm9tIHRoZSBOZXRsaW5rIG1lc3NhZ2UgYW5kLCBjcnVjaWFsbHksIGhvdyBhbmQgd2hlcmUgaXQgaXMgYWxsb2NhdGVkIHdpdGhpbiB0aGUgZHJpdmVy4oCZcyBjb250ZXh0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3Vycm91bmRpbmcgdGhlIE5BTiBzY2hlZHVsZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIHNldHMgdXAgdGhlIHN0cnVjdHVyZXMgbmVlZGVkIHRvIHJ1biB0aGUgc2NoZWR1bGVyLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgYW55IHZ1bG5lcmFiaWxpdGllcyBhcmUgbGlrZWx5IHRvIGV4aXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzY4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzY4NTpcdHN0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBza19idWZmICpza2IsXG4xNzY4NjpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4xNzY4NzpcdHtcbjE3Njg4Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuMTc2ODk6XHRcdHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuMTc2OTA6XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuMTc2OTE6XHRcdGludCByZW0sIGkgPSAwLCBuX2NoYW5uZWxzID0gMCwgcmV0O1xuMTc2OTI6XHRcdHN0cnVjdCBubGF0dHIgKmNoYW5uZWw7XG4xNzY5MzpcdFx0Ym9vbCBzY2hlZF9lbXB0eTtcbjE3Njk0Olx0XG4xNzY5NTpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbjE3Njk2Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE3Njk3Olx0XG4xNzY5ODpcdFx0aWYgKCF3ZGV2X3J1bm5pbmcod2RldikpXG4xNzY5OTpcdFx0XHRyZXR1cm4gLUVOT1RDT05OO1xuMTc3MDA6XHRcbjE3NzAxOlx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX05BTl9USU1FX1NMT1RTXSlcbjE3NzAyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTc3MDM6XHRcbjE3NzA0Olx0XHQvKiBGaXJzdCBjb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovXG4xNzcwNTpcdFx0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcbjE3NzA2Olx0XHRcdFx0XHQgaW5mby1cdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSlcbjE3NzA3Olx0XHRcdG5fY2hhbm5lbHMmIzQzOyYjNDM7O1xuMTc3MDg6XHRcbjE3NzA5Olx0XHRzY2hlZCA9IGt6YWxsb2Moc3RydWN0X3NpemUoc2NoZWQsIG5hbl9jaGFubmVscywgbl9jaGFubmVscyksXG4xNzcxMDpcdFx0XHRcdEdGUF9LRVJORUwpO1xuMTc3MTE6XHRcdGlmICghc2NoZWQpXG4xNzcxMjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE3NzEzOlx0XG4xNzcxNDpcdFx0c2NoZWQtXHUwMDNlbl9jaGFubmVscyA9IG5fY2hhbm5lbHM7XG4xNzcxNTpcdFxuMTc3MTY6XHRcdG5sbXNnX2Zvcl9lYWNoX2F0dHJfdHlwZShjaGFubmVsLCBOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwsXG4xNzcxNzpcdFx0XHRcdFx0IGluZm8tXHUwMDNlbmxoZHIsIEdFTkxfSERSTEVOLCByZW0pIHtcbjE3NzE4Olx0XHRcdHJldCA9IG5sODAyMTFfcGFyc2VfbmFuX2NoYW5uZWwocmRldiwgY2hhbm5lbCwgaW5mbyxcbjE3NzE5Olx0XHRcdFx0XHRcdFx0c2NoZWQtXHUwMDNlbmFuX2NoYW5uZWxzLCBpLCB0cnVlKTtcbjE3NzIwOlx0XG4xNzcyMTpcdFx0XHRpZiAocmV0KVxuMTc3MjI6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTc3MjM6XHRcdFx0aSYjNDM7JiM0Mzs7XG4xNzcyNDpcdFx0fVxuMTc3MjU6XHRcbjE3NzI2Olx0XHQvKiBQYXJzZSBhbmQgdmFsaWRhdGUgc2NoZWR1bGUgKi9cbjE3NzI3Olx0XHRyZXQgPSBubDgwMjExX3BhcnNlX25hbl9zY2hlZHVsZShpbmZvLFxuMTc3Mjg6XHRcdFx0XHRcdFx0IGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX05BTl9USU1FX1NMT1RTXSxcbjE3NzI5Olx0XHRcdFx0XHRcdCBzY2hlZC1cdTAwM2VzY2hlZHVsZSwgc2NoZWQtXHUwMDNlbl9jaGFubmVscyk7XG4xNzczMDpcdFx0aWYgKHJldClcbjE3NzMxOlx0XHRcdHJldHVybiByZXQ7XG4xNzczMjpcdFxuMTc3MzM6XHRcdHNjaGVkX2VtcHR5ID0gbmw4MDIxMV9uYW5faXNfc2NoZWRfZW1wdHkoc2NoZWQpO1xuMTc3MzQ6XHRcbjE3NzM1Olx0XHRzY2hlZC1cdTAwM2VkZWZlcnJlZCA9XG4xNzczNjpcdFx0XHRubGFfZ2V0X2ZsYWcoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX1NDSEVEX0RFRkVSUkVEXSk7XG4xNzczNzpcdFxuMTc3Mzg6XHRcdGlmIChzY2hlZF9lbXB0eSkge1xuMTc3Mzk6XHRcdFx0aWYgKHNjaGVkLVx1MDAzZWRlZmVycmVkKSB7XG4xNzc0MDpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGluZm8tXHUwMDNlZXh0YWNrLFxuMTc3NDE6XHRcdFx0XHRcdCAgICAgICBcJiMzNDtTY2hlZHVsZSBjYW5ub3QgYmUgZGVmZXJyZWQgaWYgYWxsIHRpbWUgc2xvdHMgYXJlIHVuYXZhaWxhYmxlXCYjMzQ7KTtcbjE3NzQyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzc0MzpcdFx0XHR9XG4xNzc0NDpcdFxuMTc3NDU6XHRcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX05BTl9BVkFJTF9CTE9CXSkge1xuMTc3NDY6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhpbmZvLVx1MDAzZWV4dGFjayxcbjE3NzQ3Olx0XHRcdFx0XHQgICAgICAgXCYjMzQ7TkFOIEF2YWlsYWJpbGl0eSBibG9iIG11c3QgYmUgZW1wdHkgaWYgYWxsIHRpbWUgc2xvdHMgYXJlIHVuYXZhaWxhYmxlXCYjMzQ7KTtcbjE3NzQ4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzc0OTpcdFx0XHR9XG4xNzc1MDpcdFx0fSBlbHNlIHtcbjE3NzUxOlx0XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX0FWQUlMX0JMT0JdKSB7XG4xNzc1MjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGluZm8tXHUwMDNlZXh0YWNrLFxuMTc3NTM6XHRcdFx0XHRcdCAgICAgICBcJiMzNDtOQU4gQXZhaWxhYmlsaXR5IGJsb2IgYXR0cmlidXRlIGlzIHJlcXVpcmVkXCYjMzQ7KTtcbjE3NzU0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzc1NTpcdFx0XHR9XG4xNzc1NjpcdFxuMTc3NTc6XHRcdFx0c2NoZWQtXHUwMDNlbmFuX2F2YWlsX2Jsb2IgPVxuMTc3NTg6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fQVZBSUxfQkxPQl0pO1xuMTc3NTk6XHRcdFx0c2NoZWQtXHUwMDNlbmFuX2F2YWlsX2Jsb2JfbGVuID1cbjE3NzYwOlx0XHRcdFx0bmxhX2xlbihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fQVZBSUxfQkxPQl0pO1xuMTc3NjE6XHRcdH1cbjE3NzYyOlx0XG4xNzc2MzpcdFx0cmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2Rldiwgc2NoZWQpO1xuMTc3NjQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIxOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5OTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIGBjZmc4MDIxMV9zdG9wX25hbmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBtZW50YWwgZ2VhcnMgYXJlIGFscmVhZHkgdHVybmluZy4gJiMzNDtMZXQmIzM5O3MgY2hlY2sgYGNmZzgwMjExX3N0b3BfbmFuYCYjMzQ7IOKAkyB0aGF0JiMzOTtzIHRoZSBjb21tYW5kLCB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0JiMzOTtzICpzdXBwb3NlZCogdG8gd29yay4gSSYjMzk7bSBhc3N1bWluZyBpdCByZWxhdGVzIHRvIFdpLUZpIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpLCB3aGljaCBtZWFucyBpdCBwcm9iYWJseSBoYW5kbGVzIHRoZSBzdG9wcGluZyBvciB0ZXJtaW5hdGlvbiBvZiBzb21lIE5BTi1yZWxhdGVkIHByb2Nlc3MuIElzIGl0IGdyYWNlZnVsbHkgc2h1dHRpbmcgZG93biBkaXNjb3Zlcnk/IENsZWFuaW5nIHVwIHNvbWUgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXM/IERlLXJlZ2lzdGVyaW5nIHNvbWV0aGluZz8gVGhlIG51YW5jZXMgYXJlIGtleSBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJiMzOTtzIGRlZmluaXRpb24sIGhvdyBpdCYjMzk7cyBjYWxsZWQsIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcuIElzIHRoZXJlIGFueSBleGlzdGluZyBpbmZvcm1hdGlvbiBvciBkb2N1bWVudGF0aW9uIEkgY2FuIGxldmVyYWdlPyBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1NTpcdHZvaWQgY2ZnODAyMTFfc3RvcF9uYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIDI1NjpcdFx0XHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcbiAyNTc6XHR7XG4gMjU4Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkIGVtcHR5X3NjaGVkID0ge307XG4gMjU5Olx0XG4gMjYwOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkubXR4KTtcbiAyNjE6XHRcbiAyNjI6XHRcdGlmIChXQVJOX09OKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTikpXG4gMjYzOlx0XHRcdHJldHVybjtcbiAyNjQ6XHRcbiAyNjU6XHRcdGlmICghd2Rldl9ydW5uaW5nKHdkZXYpKVxuIDI2NjpcdFx0XHRyZXR1cm47XG4gMjY3Olx0XG4gMjY4Olx0XHRjZmc4MDIxMV9wbXNyX3dkZXZfZG93bih3ZGV2KTtcbiAyNjk6XHRcbiAyNzA6XHRcdC8qXG4gMjcxOlx0XHQgKiBJZiB0aGVyZSBpcyBhIHNjaGVkdWxlZCB1cGRhdGUgcGVuZGluZywgbWFyayBpdCBhcyBjYW5jZWxlZCwgc28gdGhlXG4gMjcyOlx0XHQgKiBlbXB0eSBzY2hlZHVsZSB3aWxsIGJlIGFjY2VwdGVkXG4gMjczOlx0XHQgKi9cbiAyNzQ6XHRcdHdkZXYtXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBmYWxzZTtcbiAyNzU6XHRcbiAyNzY6XHRcdC8qIFVuc2NoZWR1bGUgYWxsICovXG4gMjc3Olx0XHRjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIFx1MDAyNmVtcHR5X3NjaGVkKTtcbiAyNzg6XHRcbiAyNzk6XHRcdHJkZXZfc3RvcF9uYW4ocmRldiwgd2Rldik7XG4gMjgwOlx0XHR3ZGV2LVx1MDAzZWlzX3J1bm5pbmcgPSBmYWxzZTtcbiAyODE6XHRcbiAyODI6XHRcdGV0aF96ZXJvX2FkZHIod2Rldi1cdTAwM2V1Lm5hbi5jbHVzdGVyX2lkKTtcbiAyODM6XHRcbiAyODQ6XHRcdHJkZXYtXHUwMDNlb3BlbmNvdW50LS07XG4gMjg1Olx0fVxuIDI4NjpcdFxuIDI4NzpcdGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiAyODg6XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIDI4OTpcdFx0XHRcdFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKVxuIDI5MDpcdHtcbiAyOTE6XHRcdHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZnMgPSBOVUxMLCAqb2xkX2NoYW5kZWZzO1xuIDI5MjpcdFx0dTggb2xkX25fY2hhbm5lbHM7XG4gMjkzOlx0XHRpbnQgcmV0O1xuIDI5NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTAwCgkJCQkJCQlvdXRwdXQ6IDI2NwoJCQkJCQkJdGhvdWdodHM6IDk5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50IG9mIE5BTiBTY2hlZHVsZSBVcGRhdGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBtb2RpZmllcyBob3cgdGhlIGBjaGFuZGVmc2AgYXJyYXksIHBhcnQgb2YgYHdkZXYtJmd0O3UubmFuYCwgZ2V0cyB1cGRhdGVkIHdpdGhpbiBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAuIFRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiB3YXMgYSBiaXQgY2x1bmt5LCB3aXRoIHRoZSBkcml2ZXIgY2FsbGJhY2sgcG90ZW50aWFsbHkgZmFpbGluZyBhZnRlciB0aGUgbWVtb3J5IGZvciBgY2hhbmRlZnNgIHdhcyBmcmVlZCwgbGVhZGluZyB0byBhIGJyb2tlbiBzY2hlZHVsZS4gVGhpcyBuZXcgYXBwcm9hY2ggcHJlLWFsbG9jYXRlcyB0aGUgYGNoYW5kZWZzYCBhcnJheSB1c2luZyBga2NhbGxvY2AsIHBvcHVsYXRlcyBpdCB3aXRoIGRhdGEgY29waWVkIGZyb20gdGhlIGBzY2hlZGAgc3RydWN0dXJlJiMzOTtzIGBuYW5fY2hhbm5lbHNgLCBhbmQgdGhlbiBjYWxscyB0aGUgZHJpdmVyLiBDcml0aWNhbGx5LCBpdCBzYXZlcyB0aGUgb2xkIHNjaGVkdWxlLCByZXN0b3JpbmcgaXQgb24gZmFpbHVyZSBhbmQgZnJlZWluZyBpdCBvbiBzdWNjZXNzLgoKTXkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5LiBJIHdhbnQgdG8gZW5zdXJlIHdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBEaWdnaW5nIGluLCBJIGNhbiBzZWUgdGhhdCBgY2hhbmRlZnNgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHRoYW5rcyB0byBga2NhbGxvY2AgYW5kIHRoZSBjb3B5aW5nIG9mIGRhdGEgZnJvbSB0aGUgaW5pdGlhbGl6ZWQgYHNjaGVkYCBzdHJ1Y3QuIGBzY2hlZGAgaXRzZWxmIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgZW5zdXJpbmcgaXQmIzM5O3MgemVyb2VkLiBXZSBhbHNvIGhhdmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nLCByZXN0b3JpbmcgdGhlIHByZXZpb3VzIHNjaGVkdWxlIGlmIHRoZSBkcml2ZXIgZmFpbHMuIElmIHRoZSBkcml2ZXIgc3VjY2VlZHMsIHRoZSBvbGQgc2NoZWR1bGUgaXMgZnJlZWQuCgpHaXZlbiB0aGUgY29kZSYjMzk7cyBzdHJ1Y3R1cmUsIHBvdGVudGlhbCBpc3N1ZXMgd291bGQgYmUgaW4gdGhlIHJlYWxtIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MgbGlrZSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBzdGFuZGFyZCBLQVNBTiBhbmQgU0xVQiBkb21haW5zLiBJIGRvbiYjMzk7dCBzZWUgYW55IGV4cG9zZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCwgcGFzc2VkIHRvIHVzZXJzcGFjZSwgb3IgZGV0ZXJtaW5pbmcgY29udHJvbCBmbG93LgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB3aGV0aGVyIHdlIG5lZWQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBzcGVjaWZpY2FsbHkuIEtNU0FOIGlzIGNyaXRpY2FsIHdoZW4gdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGJlIHJlYWQgYnkgYSByZWFjaGFibGUgY29kZSBwYXRoLiBJbiB0aGlzIGNhc2UsIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBhc3Nlc3NlZDoKCjEuICAqKk5vIEtlcm5lbCBTdHJ1Y3R1cmVzIHRvIFVzZXIgU3BhY2U6KiogTm8ga2VybmVsIGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcy4KMi4gICoqTm8gVW5pbml0aWFsaXplZCBDb250cm9sIEZsb3c6KiogVGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgKipGdWxseSBJbml0aWFsaXplZCBEYXRhIFN0cnVjdHVyZXM6KiogRGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGwgemVyby1pbml0aWFsaXplZCB2aWEgYGtjYWxsb2NgIG9yIGBremFsbG9jYCBvciBhcmUgY29waWVkIGZyb20gaW5pdGlhbHplZCBzb3VyY2VzLgo0LiAgKipObyBVbmluaXRpYWxpemVkIEJ5dGUgQWNjZXNzOioqIE5vIGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCB3b3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBpbiBleGlzdGluZyBidWZmZXJzLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuIFRoZSBpc3N1ZXMgaGVyZSBhcmUgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgd2lsbCBjYXRjaCBhbnkgaXNzdWVzIHRoZXJlLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBMZXQmIzM5O3MgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoKWAgdG8gcHJlLWFsbG9jYXRlIGFuZCBwb3B1bGF0ZSB0aGUgbmV3IE5BTiBjaGFubmVsIGRlZmluaXRpb25zIGFycmF5IChgY2hhbmRlZnNgKSB1c2luZyBga2NhbGxvYygpYCBwcmlvciB0byBpbnZva2luZyB0aGUgZHJpdmVyIGNhbGxiYWNrIGByZGV2X25hbl9zZXRfbG9jYWxfc2NoZWQoKWAuIElmIHRoZSBkcml2ZXIgY2FsbGJhY2sgZmFpbHMsIHRoZSBwcmV2aW91cyBzY2hlZHVsZSAoYG9sZF9jaGFuZGVmc2AsIGBvbGRfbl9jaGFubmVsc2ApIGlzIHJlc3RvcmVkIGFuZCB0aGUgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcmVlZDsgb24gc3VjY2VzcywgdGhlIG9sZCBhcnJheSBpcyBmcmVlZC5cblxuS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIEFsbCBhbGxvY2F0aW9ucyBpbiB0aGlzIHBhdGNoIHVzZSBga2NhbGxvYygpYCAoemVyby1pbml0aWFsaXplZCksIGlucHV0IHNjaGVkdWxlcyBhcmUgemVyby1pbml0aWFsaXplZCAoYGt6YWxsb2MoKWAgb3Igc3RydWN0IGluaXRpYWxpemVyIGB7fWApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHJlYWQgd2hpbGUgdW5pbml0aWFsaXplZC5cbi0gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsZWFrIGR1cmluZyBzdGF0ZSByb2xsYmFjaywgZmFsbCBzdHJpY3RseSB1bmRlciB0aGUgZG9tYWluIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBTTFVCIGRlYnVnZ2Vycy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKClgIHRvIHByZS1hbGxvY2F0ZSBhbmQgcG9wdWxhdGUgdGhlIG5ldyBOQU4gY2hhbm5lbCBkZWZpbml0aW9ucyBhcnJheSAoYGNoYW5kZWZzYCkgdXNpbmcgYGtjYWxsb2MoKWAgcHJpb3IgdG8gaW52b2tpbmcgdGhlIGRyaXZlciBjYWxsYmFjayBgcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKClgLiBJZiB0aGUgZHJpdmVyIGNhbGxiYWNrIGZhaWxzLCB0aGUgcHJldmlvdXMgc2NoZWR1bGUgKGBvbGRfY2hhbmRlZnNgLCBgb2xkX25fY2hhbm5lbHNgKSBpcyByZXN0b3JlZCBhbmQgdGhlIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJlZWQ7IG9uIHN1Y2Nlc3MsIHRoZSBvbGQgYXJyYXkgaXMgZnJlZWQuXG5cbktBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBBbGwgYWxsb2NhdGlvbnMgaW4gdGhpcyBwYXRjaCB1c2UgYGtjYWxsb2MoKWAgKHplcm8taW5pdGlhbGl6ZWQpLCBpbnB1dCBzY2hlZHVsZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGBremFsbG9jKClgIG9yIHN0cnVjdCBpbml0aWFsaXplciBge31gKSwgYW5kIGFsbCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciByZWFkIHdoaWxlIHVuaW5pdGlhbGl6ZWQuXG4tIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbGVhayBkdXJpbmcgc3RhdGUgcm9sbGJhY2ssIGZhbGwgc3RyaWN0bHkgdW5kZXIgdGhlIGRvbWFpbiBvZiBzdGFuZGFyZCBLQVNBTiBhbmQgU0xVQiBkZWJ1Z2dlcnMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjI5OjQzLjMwODIxMTA1MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTA2ODU4MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlXCIsXG4gICAgXCJubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWRcIixcbiAgICBcImNmZzgwMjExX3N0b3BfbmFuXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSgpYCB0byBwcmUtYWxsb2NhdGUgYW5kIHBvcHVsYXRlIHRoZSBuZXcgTkFOIGNoYW5uZWwgZGVmaW5pdGlvbnMgYXJyYXkgKGBjaGFuZGVmc2ApIHVzaW5nIGBrY2FsbG9jKClgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2sgYHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZCgpYC4gSWYgdGhlIGRyaXZlciBjYWxsYmFjayBmYWlscywgdGhlIHByZXZpb3VzIHNjaGVkdWxlIChgb2xkX2NoYW5kZWZzYCwgYG9sZF9uX2NoYW5uZWxzYCkgaXMgcmVzdG9yZWQgYW5kIHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkOyBvbiBzdWNjZXNzLCB0aGUgb2xkIGFycmF5IGlzIGZyZWVkLlxcblxcbktBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gQWxsIGFsbG9jYXRpb25zIGluIHRoaXMgcGF0Y2ggdXNlIGBrY2FsbG9jKClgICh6ZXJvLWluaXRpYWxpemVkKSwgaW5wdXQgc2NoZWR1bGVzIGFyZSB6ZXJvLWluaXRpYWxpemVkIChga3phbGxvYygpYCBvciBzdHJ1Y3QgaW5pdGlhbGl6ZXIgYHt9YCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB3aGlsZSB1bmluaXRpYWxpemVkLlxcbi0gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsZWFrIGR1cmluZyBzdGF0ZSByb2xsYmFjaywgZmFsbCBzdHJpY3RseSB1bmRlciB0aGUgZG9tYWluIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBTTFVCIGRlYnVnZ2Vycy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUgaW4gbmV0L3dpcmVsZXNzL2NvcmUuYywgYWx0ZXJpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIGNoYW5uZWwgZGVmaW5pdGlvbiBzd2FwcGluZywgYW5kIGVycm9yIHJvbGxiYWNrIGhhbmRsaW5nIGZvciBOQU4gKE5laWdoYm9yIEF3YXJlbmVzcyBOZXR3b3JraW5nKSBsb2NhbCBzY2hlZHVsZXMuIFRoaXMgcGF0aCBpcyBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBubDgwMjExIGdlbmVyaWMgbmV0bGluayBpbnRlcmZhY2UgKE5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQpIGFuZCB2aXJ0dWFsIG1hYzgwMjExIGRldmljZXMgKHN1Y2ggYXMgbWFjODAyMTFfaHdzaW0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMToyOTo0My4zMDgyMTY0NDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzg4NjE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGExZWMyNDE0MzNiNDM0OTg0ZWFiODE1YjFlYTI1NzdkZGY5ZjBiZTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAyMToyOTo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjViNDJkNmVjMWFkNjYgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuY1xcbisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmNcXG5AQCAtMjg4LDYgKzI4OCw4IEBAIGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcXG4ge1xcbitcXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWZzID0gTlVMTCwgKm9sZF9jaGFuZGVmcztcXG4rXFx0dTggb2xkX25fY2hhbm5lbHM7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS5tdHgpO1xcbkBAIC0yOTgsMjkgKzMwMCw0MiBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdGlmICh3ZGV2LVxcdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZylcXG4gXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuLVxcdHJldCA9IHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChyZGV2LCB3ZGV2LCBzY2hlZCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHR3ZGV2LVxcdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IHNjaGVkLVxcdTAwM2VkZWZlcnJlZDtcXG4tXFxuLVxcdGtmcmVlKHdkZXYtXFx1MDAzZXUubmFuLmNoYW5kZWZzKTtcXG4tXFx0d2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBOVUxMO1xcbi1cXHR3ZGV2LVxcdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gMDtcXG4rXFx0LypcXG4rXFx0ICogUHJlLWFsbG9jYXRlIGNoYW5kZWZzLCBzbyB3ZSBkb24ndCBydWluIHRoZSBjdXJyZW50XFxuK1xcdCAqIHNjaGVkdWxlIG9uIGFsbG9jYXRpb24gZmFpbHVyZS5cXG4rXFx0ICovXFxuK1xcdGlmIChzY2hlZC1cXHUwMDNlbl9jaGFubmVscykge1xcbitcXHRcXHRjaGFuZGVmcyA9IGtjYWxsb2Moc2NoZWQtXFx1MDAzZW5fY2hhbm5lbHMsIHNpemVvZigqY2hhbmRlZnMpLFxcbitcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFjaGFuZGVmcylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRpZiAoIXNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBzY2hlZC1cXHUwMDNlbl9jaGFubmVsczsgaSsrKVxcbitcXHRcXHRcXHRjaGFuZGVmc1tpXSA9IHNjaGVkLVxcdTAwM2VuYW5fY2hhbm5lbHNbaV0uY2hhbmRlZjtcXG4rXFx0fVxcbiBcXG4tXFx0d2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBrY2FsbG9jKHNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKCp3ZGV2LVxcdTAwM2V1Lm5hbi5jaGFuZGVmcyksXFxuLVxcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4tXFx0aWYgKCF3ZGV2LVxcdTAwM2V1Lm5hbi5jaGFuZGVmcylcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdC8qXFxuK1xcdCAqIFN3YXAgaW4gdGhlIG5ldyBjaGFuZGVmcyBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyIGFuZCBzZXQgdGhlXFxuK1xcdCAqIGRlZmVycmVkIGZsYWcsIHNvIGlmIHRoZSBkcml2ZXIgY29tcGxldGVzIHRoZSB1cGRhdGUgc3luY2hyb25vdXNseVxcbitcXHQgKiB0aGUgbmV3IHNjaGVkdWxlIHdpbGwgYmUgYWxyZWFkeSBpbiBwbGFjZS5cXG4rXFx0ICovXFxuK1xcdG9sZF9jaGFuZGVmcyA9IHdkZXYtXFx1MDAzZXUubmFuLmNoYW5kZWZzO1xcbitcXHRvbGRfbl9jaGFubmVscyA9IHdkZXYtXFx1MDAzZXUubmFuLm5fY2hhbm5lbHM7XFxuK1xcdHdkZXYtXFx1MDAzZXUubmFuLmNoYW5kZWZzID0gY2hhbmRlZnM7XFxuK1xcdHdkZXYtXFx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBzY2hlZC1cXHUwMDNlbl9jaGFubmVscztcXG4rXFx0d2Rldi1cXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBzY2hlZC1cXHUwMDNlZGVmZXJyZWQ7XFxuIFxcbi1cXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzOyBpKyspXFxuLVxcdFxcdHdkZXYtXFx1MDAzZXUubmFuLmNoYW5kZWZzW2ldID0gc2NoZWQtXFx1MDAzZW5hbl9jaGFubmVsc1tpXS5jaGFuZGVmO1xcbitcXHRyZXQgPSByZGV2X25hbl9zZXRfbG9jYWxfc2NoZWQocmRldiwgd2Rldiwgc2NoZWQpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdC8qIFJlc3RvcmUgdGhlIHByZXZpb3VzIHNjaGVkdWxlIG9uIGZhaWx1cmUgKi9cXG4rXFx0XFx0d2Rldi1cXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBmYWxzZTtcXG4rXFx0XFx0d2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBvbGRfY2hhbmRlZnM7XFxuK1xcdFxcdHdkZXYtXFx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBvbGRfbl9jaGFubmVscztcXG4rXFx0XFx0a2ZyZWUoY2hhbmRlZnMpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbi1cXHR3ZGV2LVxcdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gc2NoZWQtXFx1MDAzZW5fY2hhbm5lbHM7XFxuK1xcdGtmcmVlKG9sZF9jaGFuZGVmcyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMToyOTo0My44NDY3ODEyNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ1MDg1Mjk5MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlXCIsXG4gICAgXCJubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWRcIixcbiAgICBcImNmZzgwMjExX3N0b3BfbmFuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSBpbiBuZXQvd2lyZWxlc3MvY29yZS5jLCBhbHRlcmluZyBtZW1vcnkgbWFuYWdlbWVudCwgY2hhbm5lbCBkZWZpbml0aW9uIHN3YXBwaW5nLCBhbmQgZXJyb3Igcm9sbGJhY2sgaGFuZGxpbmcgZm9yIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpIGxvY2FsIHNjaGVkdWxlcy4gVGhpcyBwYXRoIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIG5sODAyMTEgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSAoTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCkgYW5kIHZpcnR1YWwgbWFjODAyMTEgZGV2aWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTFlYzI0MTQzM2I0MzQ5ODRlYWI4MTViMWVhMjU3N2RkZjlmMGJlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjE6Mjk6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xuaW5kZXggZDEzMzEwZmVmNjkxYS4uNWI0MmQ2ZWMxYWQ2NiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmNcbisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbkBAIC0yODgsNiArMjg4LDggQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpXG4ge1xuK1x0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmcyA9IE5VTEwsICpvbGRfY2hhbmRlZnM7XG4rXHR1OCBvbGRfbl9jaGFubmVscztcbiBcdGludCByZXQ7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkubXR4KTtcbkBAIC0yOTgsMjkgKzMwMCw0MiBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRpZiAod2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZylcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbi1cdHJldCA9IHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChyZGV2LCB3ZGV2LCBzY2hlZCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0d2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IHNjaGVkLVx1MDAzZWRlZmVycmVkO1xuLVxuLVx0a2ZyZWUod2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyk7XG4tXHR3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzID0gTlVMTDtcbi1cdHdkZXYtXHUwMDNldS5uYW4ubl9jaGFubmVscyA9IDA7XG4rXHQvKlxuK1x0ICogUHJlLWFsbG9jYXRlIGNoYW5kZWZzLCBzbyB3ZSBkb24ndCBydWluIHRoZSBjdXJyZW50XG4rXHQgKiBzY2hlZHVsZSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuXG4rXHQgKi9cbitcdGlmIChzY2hlZC1cdTAwM2VuX2NoYW5uZWxzKSB7XG4rXHRcdGNoYW5kZWZzID0ga2NhbGxvYyhzY2hlZC1cdTAwM2VuX2NoYW5uZWxzLCBzaXplb2YoKmNoYW5kZWZzKSxcbitcdFx0XHRcdCAgIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIWNoYW5kZWZzKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0aWYgKCFzY2hlZC1cdTAwM2VuX2NoYW5uZWxzKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNjaGVkLVx1MDAzZW5fY2hhbm5lbHM7IGkrKylcbitcdFx0XHRjaGFuZGVmc1tpXSA9IHNjaGVkLVx1MDAzZW5hbl9jaGFubmVsc1tpXS5jaGFuZGVmO1xuK1x0fVxuIFxuLVx0d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyA9IGtjYWxsb2Moc2NoZWQtXHUwMDNlbl9jaGFubmVscyxcbi1cdFx0XHRcdCAgICAgICBzaXplb2YoKndkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnMpLFxuLVx0XHRcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuLVx0aWYgKCF3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdC8qXG4rXHQgKiBTd2FwIGluIHRoZSBuZXcgY2hhbmRlZnMgYmVmb3JlIGNhbGxpbmcgdGhlIGRyaXZlciBhbmQgc2V0IHRoZVxuK1x0ICogZGVmZXJyZWQgZmxhZywgc28gaWYgdGhlIGRyaXZlciBjb21wbGV0ZXMgdGhlIHVwZGF0ZSBzeW5jaHJvbm91c2x5XG4rXHQgKiB0aGUgbmV3IHNjaGVkdWxlIHdpbGwgYmUgYWxyZWFkeSBpbiBwbGFjZS5cbitcdCAqL1xuK1x0b2xkX2NoYW5kZWZzID0gd2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcztcbitcdG9sZF9uX2NoYW5uZWxzID0gd2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzO1xuK1x0d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyA9IGNoYW5kZWZzO1xuK1x0d2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gc2NoZWQtXHUwMDNlbl9jaGFubmVscztcbitcdHdkZXYtXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBzY2hlZC1cdTAwM2VkZWZlcnJlZDtcbiBcbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzY2hlZC1cdTAwM2VuX2NoYW5uZWxzOyBpKyspXG4tXHRcdHdkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnNbaV0gPSBzY2hlZC1cdTAwM2VuYW5fY2hhbm5lbHNbaV0uY2hhbmRlZjtcbitcdHJldCA9IHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChyZGV2LCB3ZGV2LCBzY2hlZCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdC8qIFJlc3RvcmUgdGhlIHByZXZpb3VzIHNjaGVkdWxlIG9uIGZhaWx1cmUgKi9cbitcdFx0d2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IGZhbHNlO1xuK1x0XHR3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzID0gb2xkX2NoYW5kZWZzO1xuK1x0XHR3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBvbGRfbl9jaGFubmVscztcbitcdFx0a2ZyZWUoY2hhbmRlZnMpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFxuLVx0d2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gc2NoZWQtXHUwMDNlbl9jaGFubmVscztcbitcdGtmcmVlKG9sZF9jaGFuZGVmcyk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMToyOTo0My44NDY3ODQxOTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTk4Mjk0MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbmV0L3dpcmVsZXNzL2NvcmUuY2AgZmlsZSBhbmQsIG1vcmUgcHJlY2lzZWx5LCB0aGUgYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGVgIGZ1bmN0aW9uLiBUaGlzIHJlcXVpcmVzIGEgbWV0aG9kaWNhbCBhcHByb2FjaCwgbmF0dXJhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIOKAkyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbi4gVGhpcyBtZWFucyBJJ2xsIGRlbHZlIGludG8gdGhlIGNvbnRleHQsIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGltcGFjdGVkLCBhbmQgdGhlIHNwZWNpZmljIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbi4gSSBtdXN0IGFzY2VydGFpbiBpdHMgcmVhY2hhYmlsaXR5IGZyb20gdmFyaW91cyBwb2ludHMgaW4gdGhlIHdpcmVsZXNzIHN0YWNrLlxuXG5UbyBnZXQgYSBxdWljayBhbmQgZGVlcCB2aWV3LCBJJ2xsIGxldmVyYWdlIG15IGV4aXN0aW5nIHRvb2xraXQuIEknbGwgcmVhY2ggZm9yIGVpdGhlciBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZXhhbWluZSBib3RoIHRoZSBgbmV0L3dpcmVsZXNzL2NvcmUuY2AgZmlsZSBhbmQgdGhlIGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlYCBmdW5jdGlvbiBpbiBkZXRhaWwuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IHBpbnBvaW50IGV4YWN0bHkgd2hhdCdzIGNoYW5nZWQgYW5kIHVuZGVyc3RhbmQgdGhlIGxvY2FsIGZ1bmN0aW9uLCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gTXkgZ29hbCBpcyBhIGZ1bGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY3OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6Mjk6NDkuMDQ1MDgxNjc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDE4NzM5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvY29yZS5jPTI1NT12b2lkIGNmZzgwMjExX3N0b3BfbmFuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjc2LVxcdC8qIFVuc2NoZWR1bGUgYWxsICovXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyNzc6XFx0Y2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShyZGV2LCB3ZGV2LCBcXHUwMDI2ZW1wdHlfc2NoZWQpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjc4LVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yODYtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyODc6aW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjg4LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD01NjE9dm9pZCBjZmc4MDIxMV9zdG9wX3BkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTYzLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg6NTY0OmludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU2NS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTc2ODU9c3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc3NjItXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNzc2MzpcXHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShyZGV2LCB3ZGV2LCBzY2hlZCk7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzc2NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjI5OjUwLjg4Njk2MDY4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNzg2NzU4MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBjZmc4MDIxMSBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGhvdyBgY2ZnODAyMTFgIGdldHMgYnVpbHQgYW5kIGNvbmZpZ3VyZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBidWlsZCBzeXN0ZW0uIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIGBjZmc4MDIxMWAsIGFuZCB0aGVuIEknbGwgaGVhZCBvdmVyIHRvIGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgIHRvIHNlZSBob3cgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIHVsdGltYXRlbHkgdHJhbnNsYXRlIGludG8gY29tcGlsYXRpb24gZGlyZWN0aXZlcyBhbmQgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZWdyYXRpb24gaW50byB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrIGFuZCBhbnkgcG90ZW50aWFsIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzLiBJdCdzIHRoZSBzdGFuZGFyZCBhcHByb2FjaCwgS2NvbmZpZyBmb3IgdGhlIFwid2hhdFwiIGFuZCBNYWtlZmlsZSBmb3IgdGhlIFwiaG93XCIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMToyOTo1My4wNjU2Mzg1MjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4OTEzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLS4qY29yZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL01ha2VmaWxlPTM9b2JqLXkgKz0gdGVzdHMvXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTQtXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1dFWFRfQ09SRSkgKz0gd2V4dC1jb3JlLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtNi1vYmotJChDT05GSUdfV0VYVF9QUk9DKSArPSB3ZXh0LXByb2Mub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMToyOTo1My4xMTQ1Mzc2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTcxNjExODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXaXJlbGVzcyBNYWtlZmlsZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gdHJvdWJsZXNob290IHRoaXMgaXNzdWUgaXMgdG8gZXhhbWluZSB0aGUgYG5ldC93aXJlbGVzcy9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgY29tcG9uZW50cyBpcyBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpbmdzIGFyZSBiZWluZyBjb21waWxlZCwgbGlua2VkLCBhbmQgcG90ZW50aWFsbHkgd2hlcmUgc3BlY2lmaWMgbW9kdWxlIGRlcGVuZGVuY2llcyBhcmUgc2V0LiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciBhbnl0aGluZyB1bnVzdWFsIG9yIHVuZXhwZWN0ZWQgaW4gdGhlIGJ1aWxkIGZsYWdzLCBpbmNsdWRlIHBhdGhzLCBvciBtb2R1bGUgZGVjbGFyYXRpb25zLiBNYXliZSB0aGVyZSdzIGEgbWlzY29uZmlndXJhdGlvbiBpbiBob3cgYSBkcml2ZXIgaXMgYmVpbmcgYnVpbHQsIGEgZGVwZW5kZW5jeSB0aGF0J3Mgbm90IGJlaW5nIG1ldCwgb3IgYSBjb25mbGljdGluZyBzZXR0aW5nLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgcGFyc2luZyB0aGlzIE1ha2VmaWxlIGZvciBjbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjI5OjU1LjI3MTcwMTk1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai0kKENPTkZJR19DRkc4MDIxMSkgKz0gY2ZnODAyMTEub1xcbiAgIDM6XFx0b2JqLXkgKz0gdGVzdHMvXFxuICAgNDpcXHRcXG4gICA1OlxcdG9iai0kKENPTkZJR19XRVhUX0NPUkUpICs9IHdleHQtY29yZS5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfV0VYVF9QUk9DKSArPSB3ZXh0LXByb2Mub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX1dFWFRfUFJJVikgKz0gd2V4dC1wcml2Lm9cXG4gICA4OlxcdFxcbiAgIDk6XFx0Y2ZnODAyMTEteSArPSBjb3JlLm8gc3lzZnMubyByYWRpb3RhcC5vIHV0aWwubyByZWcubyBzY2FuLm8gbmw4MDIxMS5vXFxuICAxMDpcXHRjZmc4MDIxMS15ICs9IG1sbWUubyBpYnNzLm8gc21lLm8gY2hhbi5vIGV0aHRvb2wubyBtZXNoLm8gYXAubyB0cmFjZS5vIG9jYi5vXFxuICAxMTpcXHRjZmc4MDIxMS15ICs9IG1pY2hhZWwtbWljLm8gcG1zci5vXFxuICAxMjpcXHRjZmc4MDIxMS0kKENPTkZJR19PRikgKz0gb2Yub1xcbiAgMTM6XFx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgKz0gZGVidWdmcy5vXFxuICAxNDpcXHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9XRVhUKSArPSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cXG4gIDE1OlxcdFxcbiAgMTY6XFx0Q0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTKSArPSBzaGlwcGVkLWNlcnRzLm9cXG4gIDE5OlxcdGlmbmVxICgkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLClcXG4gIDIwOlxcdGNmZzgwMjExLXkgKz0gZXh0cmEtY2VydHMub1xcbiAgMjE6XFx0ZW5kaWZcXG4gIDIyOlxcdFxcbiAgMjM6XFx0JChvYmopL3NoaXBwZWQtY2VydHMuYzogJChzb3J0ICQod2lsZGNhcmQgJChzcmMpL2NlcnRzLyouaGV4KSlcXG4gIDI0OlxcdFxcdEAkKGtlY2hvKSBcXFwiICBHRU4gICAgICRAXFxcIlxcbiAgMjU6XFx0XFx0JChRKShlY2hvICcjaW5jbHVkZSBcXFwicmVnLmhcXFwiJzsgXFxcXFxcbiAgMjY6XFx0XFx0ICBlY2hvICdjb25zdCB1OCBzaGlwcGVkX3JlZ2RiX2NlcnRzW10gPSB7JzsgXFxcXFxcbiAgMjc6XFx0XFx0ICBlY2hvIHwgY2F0IC0gJF4gOyBcXFxcXFxuICAyODpcXHRcXHQgIGVjaG8gJ307JzsgXFxcXFxcbiAgMjk6XFx0XFx0ICBlY2hvICd1bnNpZ25lZCBpbnQgc2hpcHBlZF9yZWdkYl9jZXJ0c19sZW4gPSBzaXplb2Yoc2hpcHBlZF9yZWdkYl9jZXJ0cyk7JzsgXFxcXFxcbiAgMzA6XFx0XFx0ICkgXFx1MDAzZSAkQFxcbiAgMzE6XFx0XFxuICAzMjpcXHQkKG9iaikvZXh0cmEtY2VydHMuYzogJChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSKSBcXFxcXFxuICAzMzpcXHRcXHRcXHQgICAgICAkKHNvcnQgJCh3aWxkY2FyZCAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLyoueDUwOSkpXFxuICAzNDpcXHRcXHRAJChrZWNobykgXFxcIiAgR0VOICAgICAkQFxcXCJcXG4gIDM1OlxcdFxcdCQoUSkoc2V0IC1lOyBcXFxcXFxuICAzNjpcXHRcXHQgIGFsbGY9XFxcIlxcXCI7IFxcXFxcXG4gIDM3OlxcdFxcdCAgZm9yIGYgaW4gJF4gOyBkbyBcXFxcXFxuICAzODpcXHRcXHQgICAgICB0ZXN0IC1mICQkZiB8fCBjb250aW51ZTtcXFxcXFxuICAzOTpcXHRcXHQgICAgICAjIHNpbWlsYXIgdG8gaGV4ZHVtcCAtdiAtZSAnMS8xIFxcXCIweCUuMngsXFxcIiBcXFwiXFxcXG5cXFwiJyBcXFxcXFxuICA0MDpcXHRcXHQgICAgICB0aGlzZj0kJChvZCAtQW4gLXYgLXR4MSBcXHUwMDNjICQkZiB8IFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6Mjk6NTUuMjcxNzY1MDM1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxODg4NzU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBXaXJlbGVzcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBDRkc4MDIxMWAuIFRpbWUgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyBgbmV0L3dpcmVsZXNzL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBrZXJuZWwgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgYENGRzgwMjExYCBpcyBvYnZpb3VzbHkgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGF0LiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhhdCBmaWxlIHRvIHVuZGVyc3RhbmQgd2hpY2ggb3RoZXIgb3B0aW9ucywgZmVhdHVyZXMsIG9yIG1vZHVsZXMgcmVseSBvbiBvciBhcmUgbGlua2VkIHRvIGBDRkc4MDIxMWAuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGRlZXBlciBhbmFseXNpcyBJJ20gcGxhbm5pbmcuIEkgbmVlZCB0byBlbnN1cmUgbm90aGluZyBicmVha3MgdW5leHBlY3RlZGx5IGxhdGVyIG9uIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NDMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjI5OjU3LjE5MDY1NTU4M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzNDI1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENGRzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTMtXFx0Ym9vbCBcXFwiZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjY4OmNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cXHRib29sIFxcXCJjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cXHRib29sIFxcXCJyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTAwLVxcdGJvb2wgXFxcImFsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMTpjb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVxcdHN0cmluZyBcXFwiYWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cXHRib29sIFxcXCJjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cXHRib29sIFxcXCJjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE1OTpjb25maWcgQ0ZHODAyMTFfREVGQVVMVF9QU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cXHRib29sIFxcXCJlbmFibGUgcG93ZXJzYXZlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVxcdGJvb2wgXFxcImNmZzgwMjExIERlYnVnRlMgZW50cmllc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJzdXBwb3J0IENSREFcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE4Nzpjb25maWcgQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJjZmc4MDIxMSB3aXJlbGVzcyBleHRlbnNpb25zIGNvbXBhdGliaWxpdHlcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTMtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6Mjk6NTcuMjQxMDA0NTQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjg0MTYyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkV4YW1pbmluZyB0aGUgQ29yZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgd2lyZWxlc3MgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbmV0L3dpcmVsZXNzL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSBsaW5lcyByZWxhdGVkIHRvIGBDT05GSUdfQ0ZHODAyMTFgLiBUaGF0J3MgdGhlIGZvdW5kYXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgbWFjODAyMTEsIHRoZSBjb3JlIHdpcmVsZXNzIHN0YWNrLiBJJ20gYXNzdW1pbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgbG9naWMgYXJvdW5kIGl0IHRoYXQncyBjYXVzaW5nIHRoZSBpc3N1ZSwgc28gSSdsbCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJIGV4cGVjdCB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbmV0d29ya2luZyBmZWF0dXJlcywgbWF5YmUgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBzZWxlY3Rpb25zLCBhbmQsIGhvcGVmdWxseSwgYSBjbHVlIGFzIHRvIHdoeSB0aGluZ3MgYXJlIGJlaGF2aW5nIHRoZSB3YXkgdGhleSBhcmUuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gdGhlcmUuIEknbSBnb2luZyB0byBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMToyOTo1OS4zNjk0MjQwMzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0XFx0Ym9vbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQ0ZHODAyMTFcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgMjA6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMjpcXHRcXHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcXG4gIDIzOlxcdFxcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbid0XFxuICAyNDpcXHRcXHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cXG4gIDI4OlxcdFxcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL0RvY3VtZW50YXRpb24vY2ZnODAyMTFcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRpZiBDRkc4MDIxMVxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwibmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kXFxcIlxcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBUaGUgbmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kIGhlbHBzIGltcGxlbWVudGluZyB0aGluZ3MgbGlrZVxcbiAgNDI6XFx0XFx0ICBmYWN0b3J5IGNhbGlicmF0aW9uIG9yIHZhbGlkYXRpb24gdG9vbHMgZm9yIHdpcmVsZXNzIGNoaXBzLlxcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBPTkxZIGZvciBrZXJuZWxzIHRoYXQgYXJlIHNwZWNpZmljYWxseVxcbiAgNDU6XFx0XFx0ICBidWlsdCBmb3Igc3VjaCBwdXJwb3Nlcy5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0XFx0ICBEZWJ1Z2dpbmcgdG9vbHMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gZW5kIHVwIGluIHRoZSBoYW5kcyBvZlxcbiAgNDg6XFx0XFx0ICB1c2VycyBzaG91bGQgYmV0dGVyIGJlIGltcGxlbWVudGVkIHdpdGggZGVidWdmcy5cXG4gIDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMToyOTo1OS4zNjk0OTI2NzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyMDE0NTg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTkFOIFNjaGVkdWxlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgYG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZGAuIEl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgZHVnIGludG8gdGhlIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpIGNvZGUuIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgaXMgdHJhY2luZyB0aGUgbmV0bGluayBjb21tYW5kcyB0aGF0IGV2ZW50dWFsbHkgaW52b2tlIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHNwZWNpZmljYWxseSB0aGUgbmV0bGluayBtZXNzYWdlIHR5cGUsIGF0dHJpYnV0ZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBjb250ZXh0IHRoYXQgZ2V0cyBwYXNzZWQgYWxvbmcuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBzb21lIGJlaGF2aW9yIEknbSBzZWVpbmcgYW5kIGVuc3VyaW5nIHRoZSBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHNldCBhbmQgaW50ZXJwcmV0ZWQgY29ycmVjdGx5LiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBpZGVudGlmeSB0aGUgZW50cnkgcG9pbnQgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbW1hbmQgc3RydWN0dXJlIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBvcGVyYXRpb24uIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgYW5kIHN0YXJ0IHRyYWNpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjAxLjU4OTY0MTEwMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzMTcxMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE3NjcyPXN0YXRpYyBib29sIG5sODAyMTFfbmFuX2lzX3NjaGVkX2VtcHR5KHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzY4NC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3Njg1OnN0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzY4Ni1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDYxMS1cXHRcXHQuY21kID0gTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIwNjEyOlxcdFxcdC5kb2l0ID0gbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjA2MTMtXFx0XFx0LmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDowMS42ODE5NjgyNTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg4MTYwMTcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIG5sODAyMTEgUmVhY2hhYmlsaXR5IGFuZCBOQU4gU3VwcG9ydCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlIGNhbiBhY3R1YWxseSByZWFjaCBubDgwMjExIGZyb20gc3l6a2FsbGVyLiBJIGtub3cgc3l6a2FsbGVyJ3MgcHJldHR5IHNvbGlkIHdpdGggaXRzIG5ldGxpbmsgYW5kIG5sODAyMTEgc3R1ZmYsIGxldmVyYWdpbmcgZWl0aGVyIG1hYzgwMjExX2h3c2ltIG9yIHRob3NlIHZpcnR1YWwgZGV2aWNlcyBsaWtlIHZpcnRfd2lmaS4gU28sIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYWNjZXNzLiBOb3csIEknbSB0aGlua2luZywgbGV0J3MganVzdCBtYWtlIHN1cmUgYE1BQzgwMjExX0hXU0lNYCBhbmQgYENGRzgwMjExYCBhcmUgY29ycmVjdGx5IGNvbmZpZ3VyZWQuIFRoYXQgd291bGQgYmUgdGhlIGZpcnN0IHN0ZXAuIFRoZW4gdGhlIGtleSBxdWVzdGlvbiBpcywgZG9lcyBtYWM4MDIxMV9od3NpbSAqYWN0dWFsbHkqIHN1cHBvcnQgTkFOPyBJIGNhbid0IGFzc3VtZSBhbnl0aGluZy4gVG8gYmUgc3VyZSwgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgTUFDODAyMTFfSFdTSU1gIGNvZGUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBkcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyOTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6MDQuNTYzNTcyNTQyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODUyMTE2MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5hbl9zZXRfbG9jYWxfc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvY2ZnODAyMTEuaD00ODQzPXN0cnVjdCBtZ210X2ZyYW1lX3JlZ3Mge1xcbi0tXFxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC01MTkyLSAqXFx0QWxsIG90aGVyIHBhcmFtZXRlcnMgbXVzdCBiZSBpZ25vcmVkLlxcbmluY2x1ZGUvbmV0L2NmZzgwMjExLmg6NTE5MzogKiBAbmFuX3NldF9sb2NhbF9zY2hlZDogY29uZmlndXJlIHRoZSBsb2NhbCBzY2hlZHVsZSBmb3IgTkFOLiBUaGUgc2NoZWR1bGVcXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTUxOTQtICpcXHRjb25zaXN0cyBvZiBhbiBhcnJheSBvZiAlY2ZnODAyMTFfbmFuX2NoYW5uZWwgYW5kIHRoZSBzY2hlZHVsZSBpdHNlbGYsXFxuLS1cXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oPTUyODA9c3RydWN0IGNmZzgwMjExX29wcyB7XFxuLS1cXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTU1ODYtXFx0XFx0XFx0XFx0ICAgdTMyIGNoYW5nZXMpO1xcbmluY2x1ZGUvbmV0L2NmZzgwMjExLmg6NTU4NzpcXHRpbnRcXHQoKm5hbl9zZXRfbG9jYWxfc2NoZWQpKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC01NTg4LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTU5NTM9aWVlZTgwMjExX3NldF9sb2NhbF9uYW5fc2NoZWQoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTYwLVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1OTYxOlxcdHJldHVybiBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzZGF0YSwgc2NoZWQpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTYyLX1cXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz01OTc2PWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy02MDkxLVxcdC5zZXRfZXBjcyA9IGllZWU4MDIxMV9zZXRfZXBjcyxcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NjA5MjpcXHQubmFuX3NldF9sb2NhbF9zY2hlZCA9IGllZWU4MDIxMV9zZXRfbG9jYWxfbmFuX3NjaGVkLFxcbm5ldC9tYWM4MDIxMS9jZmcuYy02MDkzLVxcdC5uYW5fc2V0X3BlZXJfc2NoZWQgPSBpZWVlODAyMTFfc2V0X3BlZXJfbmFuX3NjaGVkLFxcbi0tXFxubmV0L21hYzgwMjExL2NoYW4uYz0xMDUwPWllZWU4MDIxMV9uZXdfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jaGFuLmMtMTA3MS1cXHQgKiBXZSBpZ25vcmVkIGEgZHJpdmVyIGVycm9yLCBzZWUgX2llZWU4MDIxMV9zZXRfYWN0aXZlX2xpbmtzIGFuZC9vclxcbm5ldC9tYWM4MDIxMS9jaGFuLmM6MTA3MjpcXHQgKiBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZFxcbm5ldC9tYWM4MDIxMS9jaGFuLmMtMTA3My1cXHQgKi9cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTIwODI9aW50IGllZWU4MDIxMV9tZXNoX2ZpbmlzaF9jc2Eoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMDg1LS8qIE5BTiBjb2RlICovXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjA4NjppbnQgaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjA4Ny1cXHRcXHRcXHRcXHQgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9uYW4uYz0yNDE9aWVlZTgwMjExX25hbl9maW5kX2ZyZWVfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKnNjaGVkX2NmZylcXG4tLVxcbm5ldC9tYWM4MDIxMS9uYW4uYy0yNTAtXFxubmV0L21hYzgwMjExL25hbi5jOjI1MTppbnQgaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL25hbi5jLTI1Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0yNTU9dm9pZCBjZmc4MDIxMV9zdG9wX25hbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI3Ni1cXHQvKiBVbnNjaGVkdWxlIGFsbCAqL1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6Mjc3OlxcdGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2RldiwgXFx1MDAyNmVtcHR5X3NjaGVkKTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI3OC1cXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjg2LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6Mjg3OmludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI4OC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzI3LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzI4OlxcdHJldCA9IHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChyZGV2LCB3ZGV2LCBzY2hlZCk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMjktXFx0aWYgKHJldCkge1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD01NjE9dm9pZCBjZmc4MDIxMV9zdG9wX3BkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTYzLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg6NTY0OmludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU2NS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTc2NzI9c3RhdGljIGJvb2wgbmw4MDIxMV9uYW5faXNfc2NoZWRfZW1wdHkoc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3Njg0LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc2ODU6c3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3Njg2LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzc2Mi1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3NzYzOlxcdHJldHVybiBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIHNjaGVkKTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3NzY0LX1cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDYxMS1cXHRcXHQuY21kID0gTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIwNjEyOlxcdFxcdC5kb2l0ID0gbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjA2MTMtXFx0XFx0LmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLFxcbi0tXFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg9MTA2ND1zdGF0aWMgaW5saW5lIGludFxcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oOjEwNjU6cmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaC0xMDY2LVxcdFxcdFxcdCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTA3MC1cXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxMDcxOlxcdHRyYWNlX3JkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIHdkZXYsIHNjaGVkKTtcXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxMDcyOlxcdGlmIChyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZW5hbl9zZXRfbG9jYWxfc2NoZWQpXFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg6MTA3MzpcXHRcXHRyZXQgPSByZGV2LVxcdTAwM2VvcHMtXFx1MDAzZW5hbl9zZXRfbG9jYWxfc2NoZWQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCB3ZGV2LCBzY2hlZCk7XFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTA3NC1cXHRlbHNlXFxuLS1cXG5uZXQvd2lyZWxlc3MvdHJhY2UuaD0yNDE5PVRSQUNFX0VWRU5UKHJkZXZfZGVsX25hbl9mdW5jLFxcbi0tXFxubmV0L3dpcmVsZXNzL3RyYWNlLmgtMjQzNi1cXG5uZXQvd2lyZWxlc3MvdHJhY2UuaDoyNDM3OlRSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZCxcXG5uZXQvd2lyZWxlc3MvdHJhY2UuaC0yNDM4LVxcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjA2LjQxNTY5NDU4MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI5NDIzNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTkFOIGFuZCBtYWM4MDIxMV9od3NpbSoqXG5cbk9rYXksIHNvIGBtYWM4MDIxMWAgaGFzIHN1cHBvcnQgZm9yIE5BTiwgdGhhdCdzIGdvb2QgbmV3cy4gQW5kIGlmIGBtYWM4MDIxMV9od3NpbWAgc3VwcG9ydHMgYG1hYzgwMjExYCwgdGhlbiBJIGhhdmUgYSBwb3RlbnRpYWwgdGVzdGJlZC4gQmVmb3JlIEkgZGlnIHRvbyBkZWVwLCB0aG91Z2gsIGxldCdzIHZlcmlmeSBgTUFDODAyMTFgJ3MgY29uZmlndXJhdGlvbiBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBjaGVjayBgbmV0L21hYzgwMjExL0tjb25maWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGJlZm9yZSBJIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIGRldGFpbHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIHRvIHdvcmsgZnJvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDowOC40NDUxMjE5MzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTU1NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTk9aWYgTUFDODAyMTEgIT0gblxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMi1cXHRib29sXFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ6Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MTpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NDg9ZW5kY2hvaWNlXFxubmV0L21hYzgwMjExL0tjb25maWctNDktXFxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01MS1cXHRzdHJpbmdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXFxcIlNvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBtYWM4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIkVuYWJsZSBMRUQgdHJpZ2dlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkV4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cXHRib29sIFxcXCJUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDktXFxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cXHRib29sIFxcXCJTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzI6Y29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cXHRib29sIFxcXCJWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiVmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjM6Y29uZmlnIE1BQzgwMjExX0hUX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTY0LVxcdGJvb2wgXFxcIlZlcmJvc2UgSFQgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIlZlcmJvc2UgT0NCIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXFx0Ym9vbCBcXFwiVmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTc6Y29uZmlnIE1BQzgwMjExX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlZlcmJvc2UgcG93ZXJzYXZlIG1vZGUgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjEwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNTpjb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXFx0Ym9vbCBcXFwiVmVyYm9zZSBURExTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXFxubmV0L21hYzgwMjExL0tjb25maWctMjk0LVxcdGJvb2wgXFxcIkV4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXFxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVxcdGludCBcXFwiU3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVxcXCIgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDowOC40OTEyODQyMjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgwMjAyNjIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOQU4gU2NoZWR1bGVyKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIE5BTiBzY2hlZHVsaW5nIGlzc3VlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIGBuZXQvd2lyZWxlc3MvY29yZS5jYC4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgYXJvdW5kIHRoZSBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAgZnVuY3Rpb24uIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0aGUgY29yZSBsb2dpYyBmb3Igc2V0dGluZyB1cCBsb2NhbCBzY2hlZHVsZXMgaW4gdGhlIE5BTiBzeXN0ZW0gdG8gcmVzaWRlLiBJJ20gYWltaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIHBvdGVudGlhbCBzcG90cyB3aGVyZSBhIGJ1ZyBtaWdodCBiZSBsdXJraW5nLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDoxMS4yOTMzMTM0MTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjgwOlxcdFxcdHdkZXYtXFx1MDAzZWlzX3J1bm5pbmcgPSBmYWxzZTtcXG4gMjgxOlxcdFxcbiAyODI6XFx0XFx0ZXRoX3plcm9fYWRkcih3ZGV2LVxcdTAwM2V1Lm5hbi5jbHVzdGVyX2lkKTtcXG4gMjgzOlxcdFxcbiAyODQ6XFx0XFx0cmRldi1cXHUwMDNlb3BlbmNvdW50LS07XFxuIDI4NTpcXHR9XFxuIDI4NjpcXHRcXG4gMjg3OlxcdGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gMjg4OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiAyODk6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmcyA9IE5VTEwsICpvbGRfY2hhbmRlZnM7XFxuIDI5MjpcXHRcXHR1OCBvbGRfbl9jaGFubmVscztcXG4gMjkzOlxcdFxcdGludCByZXQ7XFxuIDI5NDpcXHRcXG4gMjk1OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5Lm10eCk7XFxuIDI5NjpcXHRcXG4gMjk3OlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8ICF3ZGV2X3J1bm5pbmcod2RldikpXFxuIDI5ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjk5OlxcdFxcbiAzMDA6XFx0XFx0aWYgKHdkZXYtXFx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nKVxcbiAzMDE6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gMzAyOlxcdFxcbiAzMDM6XFx0XFx0LypcXG4gMzA0OlxcdFxcdCAqIFByZS1hbGxvY2F0ZSBjaGFuZGVmcywgc28gd2UgZG9uJ3QgcnVpbiB0aGUgY3VycmVudFxcbiAzMDU6XFx0XFx0ICogc2NoZWR1bGUgb24gYWxsb2NhdGlvbiBmYWlsdXJlLlxcbiAzMDY6XFx0XFx0ICovXFxuIDMwNzpcXHRcXHRpZiAoc2NoZWQtXFx1MDAzZW5fY2hhbm5lbHMpIHtcXG4gMzA4OlxcdFxcdFxcdGNoYW5kZWZzID0ga2NhbGxvYyhzY2hlZC1cXHUwMDNlbl9jaGFubmVscywgc2l6ZW9mKCpjaGFuZGVmcyksXFxuIDMwOTpcXHRcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMKTtcXG4gMzEwOlxcdFxcdFxcdGlmICghY2hhbmRlZnMpXFxuIDMxMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzEyOlxcdFxcbiAzMTM6XFx0XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBzY2hlZC1cXHUwMDNlbl9jaGFubmVsczsgaSsrKVxcbiAzMTQ6XFx0XFx0XFx0XFx0Y2hhbmRlZnNbaV0gPSBzY2hlZC1cXHUwMDNlbmFuX2NoYW5uZWxzW2ldLmNoYW5kZWY7XFxuIDMxNTpcXHRcXHR9XFxuIDMxNjpcXHRcXG4gMzE3OlxcdFxcdC8qXFxuIDMxODpcXHRcXHQgKiBTd2FwIGluIHRoZSBuZXcgY2hhbmRlZnMgYmVmb3JlIGNhbGxpbmcgdGhlIGRyaXZlciBhbmQgc2V0IHRoZVxcbiAzMTk6XFx0XFx0ICogZGVmZXJyZWQgZmxhZywgc28gaWYgdGhlIGRyaXZlciBjb21wbGV0ZXMgdGhlIHVwZGF0ZSBzeW5jaHJvbm91c2x5XFxuIDMyMDpcXHRcXHQgKiB0aGUgbmV3IHNjaGVkdWxlIHdpbGwgYmUgYWxyZWFkeSBpbiBwbGFjZS5cXG4gMzIxOlxcdFxcdCAqL1xcbiAzMjI6XFx0XFx0b2xkX2NoYW5kZWZzID0gd2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnM7XFxuIDMyMzpcXHRcXHRvbGRfbl9jaGFubmVscyA9IHdkZXYtXFx1MDAzZXUubmFuLm5fY2hhbm5lbHM7XFxuIDMyNDpcXHRcXHR3ZGV2LVxcdTAwM2V1Lm5hbi5jaGFuZGVmcyA9IGNoYW5kZWZzO1xcbiAzMjU6XFx0XFx0d2Rldi1cXHUwMDNldS5uYW4ubl9jaGFubmVscyA9IHNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzO1xcbiAzMjY6XFx0XFx0d2Rldi1cXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBzY2hlZC1cXHUwMDNlZGVmZXJyZWQ7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdHJldCA9IHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZChyZGV2LCB3ZGV2LCBzY2hlZCk7XFxuIDMyOTpcXHRcXHRpZiAocmV0KSB7XFxuIDMzMDpcXHRcXHRcXHQvKiBSZXN0b3JlIHRoZSBwcmV2aW91cyBzY2hlZHVsZSBvbiBmYWlsdXJlICovXFxuIDMzMTpcXHRcXHRcXHR3ZGV2LVxcdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IGZhbHNlO1xcbiAzMzI6XFx0XFx0XFx0d2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBvbGRfY2hhbmRlZnM7XFxuIDMzMzpcXHRcXHRcXHR3ZGV2LVxcdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gb2xkX25fY2hhbm5lbHM7XFxuIDMzNDpcXHRcXHRcXHRrZnJlZShjaGFuZGVmcyk7XFxuIDMzNTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzMzY6XFx0XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRcXHRrZnJlZShvbGRfY2hhbmRlZnMpO1xcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHRyZXR1cm4gMDtcXG4gMzQxOlxcdH1cXG4gMzQyOlxcdFxcbiAzNDM6XFx0dm9pZCBjZmc4MDIxMV9zdG9wX3BkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gMzQ0OlxcdFxcdFxcdCAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXFxuIDM0NTpcXHR7XFxuIDM0NjpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS5tdHgpO1xcbiAzNDc6XFx0XFxuIDM0ODpcXHRcXHRpZiAoV0FSTl9PTih3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUEQpKVxcbiAzNDk6XFx0XFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDoxMS4yOTM0MzU0NTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjUzODc4NDY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbiBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAgc2VlbXMgdG8gYmUgYSBzaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiBob3cgY2hhbm5lbCBkZWZpbml0aW9ucyBhcmUgaGFuZGxlZC4gUHJldmlvdXNseSwgaXQgYWxsb2NhdGVkIGBjaGFuZGVmc2AgKmFmdGVyKiB0aGUgaW5pdGlhbCBjYWxsIGFuZCB0aGVuIGNvbmRpdGlvbmFsbHkgZnJlZWQgYW5kIHJlYWxsb2NhdGVkIGJhc2VkIG9uIHRoZSBpbml0aWFsIGNhbGwncyByZXR1cm4uIE5vdywgaXQncyBjaGFuZ2VkIHRvIHByZS1hbGxvY2F0ZSwgc2V0IHRoZSB2YXJpYWJsZXMgKmJlZm9yZSogdGhlIGNyaXRpY2FsIGNhbGwgYHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZGAsIGFuZCB0aGVuIGltcGxlbWVudCBhIHByb3BlciByb2xsYmFjayBtZWNoYW5pc20gb24gZmFpbHVyZSwgcmVzdG9yaW5nIHRoZSBvbGQgc3RhdGUuICBJZiB0aGUgY2FsbCAqc3VjY2VlZHMqLCBpdCByZWxlYXNlcyB0aGUgKm9sZCogZGF0YS5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm5zIGFyZSBhcm91bmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBuZXcgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhbmQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMuIFByZS1hbGxvY2F0aW9uIGNvbWJpbmVkIHdpdGggcG9pbnRlciBzd2FwcGluZyBhbmQgY2FsbGJhY2sgYmVoYXZpb3IgY2FuIGludHJvZHVjZSBzdWJ0bGUgZXJyb3JzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBcImRlZmVycmVkXCIgbmF0dXJlIG9mIHRoZSBzY2hlZHVsZSB1cGRhdGUuIFRoaXMgcmV2aXNlZCBzdHJ1Y3R1cmUsIHdpdGggaXRzIHByZS1hbGxvY2F0aW9uLCBwb2ludGVyIG1hbmlwdWxhdGlvbiwgYW5kIGNvbmRpdGlvbmFsIHJvbGxiYWNrLCBzY3JlYW1zIFwiZnV6eiBtZSFcIiBUaGVzZSBraW5kcyBvZiBjaGFuZ2VzIGFyZSB0aGUgcHJpbWUgdGFyZ2V0cyBmb3IgdW5jb3ZlcmluZyBtZW1vcnkgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIGFuZCBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMuXG5cblJlYWNoYWJpbGl0eSBpcyBkZWZpbml0ZWx5IGhpZ2guIEkgY2FuIGhpdCB0aGlzIGZ1bmN0aW9uIGVhc2lseSB1c2luZyB0aGUgYE5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRURgIE5ldGxpbmsgY29tbWFuZC4gVGhhdOKAmXMgYSBzdHJhaWdodGZvcndhcmQgaW50ZXJmYWNlIGZvciBhbnkgd2lyZWxlc3MgbmV0d29yayAoc2ltdWxhdGVkIG9yIHJlYWwpLiBUaGUgZmFjdCB0aGF0IGl0IG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBzdGF0ZSB3aXRoaW4gYSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50LCBhcyBwZXIgZ3VpZGVsaW5lcywgY29uZmlybXMgdGhlIGZ1enppbmcgdmFsdWUuXG5cbkZyb20gYSBmb2N1cyBzeW1ib2wgcGVyc3BlY3RpdmUsIEknbSBjb25maWRlbnQgaW4gaW5jbHVkaW5nOlxuXG4qICAgYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGVgICh0aGUgbW9kaWZpZWQgZnVuY3Rpb24pXG4qICAgYG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZGAgKHRoZSBlbnRyeSBwb2ludClcbiogICBgY2ZnODAyMTFfc3RvcF9uYW5gIChhIGNhbGxlcilcblxuSSdsbCBiZSBzZXR0aW5nIHVwIGEgdGVzdCBlbnZpcm9ubWVudCwgbGlrZWx5IHdpdGggYE1BQzgwMjExX0hXU0lNYCBydW5uaW5nIHdpdGhpbiBRRU1VIHdpdGggc3l6a2FsbGVyLiBJJ2xsIG5lZWQgdG8gZW5hYmxlIGBDRkc4MDIxMWAsIGBOTDgwMjExX1RFU1RNT0RFYCAoanVzdCB0byBiZSBzYWZlKSwgYW5kLCBvZiBjb3Vyc2UsIGBNQUM4MDIxMWAgYW5kIGBNQUM4MDIxMV9IV1NJTWAgZm9yIHRoZSBlbXVsYXRlZCBkZXZpY2UuIFRoZXNlIHNldHRpbmdzIGdpdmUgbWUgZ29vZCBjb3ZlcmFnZS4gTGV0J3Mgc2VlIGlmIHdlIGNhbiB0cmlnZ2VyIHNvbWUgYnVncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NjQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6MTcuODMyMjIzNDIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUyMDk5MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9IV1NJTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjE5LjU4NDMyNzU4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDAwMjc4MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBWaXJ0dWFsIFdpcmVsZXNzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSB2aXJ0dWFsIHdpcmVsZXNzIG5ldHdvcmsgZHJpdmVyLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgZHJpdmVyLiBMZXQncyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUganVpY3kgZGV0YWlscyBhYm91dCBmZWF0dXJlIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHNldHRpbmdzIGFyZSBrZXB0LiBUaGF0J3MgdGhlIGZpcnN0IHN0b3AgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIHdpcmVsZXNzIGxhbmRzY2FwZSBhbmQgd2hhdCdzIGNvbmZpZ3VyYWJsZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzcyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6MjEuOTg0NjA5MDU1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XFxuICAgNjpcXHRcXHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxcbiAgIDc6XFx0XFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxcbiAgIDg6XFx0XFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XFxuICAgOTpcXHRcXHQgIHRvIHVzZSB0aGlzIHRvb2wuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICAxMjpcXHRcXHQgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBWSVJUX1dJRklcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZXRoZXJuZXQgY29ubmVjdGlvbnMgdG8gYXBwZWFyIGFzIGlmIHRoZXlcXG4gIDE5OlxcdFxcdCAgYXJlIHdpZmkgY29ubmVjdGlvbnMgdGhyb3VnaCBhIHNwZWNpYWwgcnRuZXRsaW5rIGRldmljZS5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDoyMS45ODQ2Nzk5MDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUyMTA0NDEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gY2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBgTUFDODAyMTFgIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqQW5hbHl6aW5nIGBNQUM4MDIxMWAgRGVwZW5kZW5jaWVzIGluIHRoZSBLZXJuZWwqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgYE1BQzgwMjExYCBpcyBjb25uZWN0ZWQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHdpcmVsZXNzIHN1YnN5c3RlbSwgcGFydGljdWxhcmx5IGBDRkc4MDIxMWAuIEkga25vdyBpdCdzIGEgY3JpdGljYWwgcmVsYXRpb25zaGlwLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gaXQgc3BlY2lmaWNhbGx5IGJ5IGV4YW1pbmluZyB0aGUgYEtjb25maWdgIGZpbGUuIEknbGwgbmVlZCB0byBnbyB0byBgbmV0L21hYzgwMjExL0tjb25maWdgIGFuZCByZWFsbHkgZGlnIGluIHRoZXJlLiBJJ20gbG9va2luZyBmb3IgZGlyZWN0IGRlcGVuZGVuY2llcywgb2J2aW91c2x5LCBidXQgYWxzbyBpbmRpcmVjdCBvbmVzLiBJIHNob3VsZCBiZSBsb29raW5nIG91dCBmb3IgYW55IFwiZGVwZW5kcyBvblwiIG9yIFwic2VsZWN0XCIgc3RhdGVtZW50cywgYW5kIGV2ZW4gbW9yZSBicm9hZGx5IGhvdyB0aGUgbW9kdWxlcyBhcmUgb3JnYW5pc2VkLiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIGBDRkc4MDIxMWAgaXMgYSBkaXJlY3QgcHJlcmVxdWlzaXRlIG9yIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgdW5kZXJseWluZyBmYWN0b3JzIGF0IHBsYXkuIFVuZGVyc3RhbmRpbmcgdGhpcyBkZXBlbmRlbmN5IGNoYWluIGlzIGFic29sdXRlbHkga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHBpZWNlcyBvZiB0aGUga2VybmVsIHJlbGF0ZSB0byBlYWNoIG90aGVyLiBJJ2xsIGtlZXAgYW4gb3BlbiBtaW5kIGZvciBhbnkgb3RoZXIgbW9kdWxlcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdCwgb3IgdGhhdCBhcmUsIGluIHR1cm4sIGRlcGVuZGVudCBvbiBgTUFDODAyMTFgLiBJIHJlYWxseSBtdXN0IGJlIG1ldGhvZGljYWwgYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjI0LjUwNTcyNzAwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE1BQzgwMjExXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAgNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcXG4gICA3OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NDTVxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19HQ01cXG4gIDExOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTI6XFx0XFx0aGVscFxcbiAgMTM6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBJRUVFIDgwMi4xMVxcbiAgMTQ6XFx0XFx0ICBuZXR3b3JraW5nIHN0YWNrLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRjb21tZW50IFxcXCJDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxcbiAgMTg6XFx0XFxuICAxOTpcXHRpZiBNQUM4MDIxMSAhPSBuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6MjQuNTA1Nzk2NTI0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNzYzNDE3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRmluYWwgRnV6emluZyBTdHJhdGVneSBWYWxpZGF0aW9uKipcblxuT2theSwgbGV0J3MganVzdCBydW4gdGhyb3VnaCB0aGlzIG9uZSBsYXN0IHRpbWUgYmVmb3JlIHdlIGNvbW1pdCB0byBpdC4gRmlyc3QsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgdHJ1ZSBoZXJlLCBubyBxdWVzdGlvbi4gVGhlIHRhcmdldCBpcyB0aGUgYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGVgIGZ1bmN0aW9uIGluIGBuZXQvd2lyZWxlc3MvY29yZS5jYC4gVGhlIHJlYXNvbmluZyBpcyBzb3VuZDogdGhpcyBwYXRjaCB0b3VjaGVzIHRoZSBOQU4gY2hhbm5lbCBzY2hlZHVsZSBhbGxvY2F0aW9uLCBvcmRlcmluZywgYW5kIHJvbGxiYWNrIGxvZ2ljLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIGZhY3QgdGhhdCBpdCdzIGV4cG9zZWQgdGhyb3VnaCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSAoYG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZGApIG1ha2VzIGl0IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgYW5kIHRoZSBpbmNsdXNpb24gb2YgZW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyBsaWtlIGBtYWM4MDIxMV9od3NpbWAgcmVhbGx5IHVwcyB0aGUgYW50ZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgaW50ZXJlc3RpbmcgYnVncywgcGFydGljdWxhcmx5IG1lbW9yeSBjb3JydXB0aW9uLCBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIG9yIHJhY2UgY29uZGl0aW9ucy5cblxuTmV4dCwgSSd2ZSBnb3QgdGhlIGBGb2N1c1N5bWJvbHNgIG5haWxlZCBkb3duOiBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZWAsIGBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWRgLCBhbmQgYGNmZzgwMjExX3N0b3BfbmFuYC4gQ292ZXJpbmcgdGhvc2Ugc2hvdWxkIGdpdmUgdXMgYSBnb29kIHNob3QgYXQgZXhlcmNpc2luZyBhbGwgdGhlIGNyaXRpY2FsIGNvZGUgcGF0aHMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbG9vayByaWdodCBhcyB3ZWxsOiBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gVGhleSdyZSBlc3NlbnRpYWwgZm9yIGVuYWJsaW5nIHRoZSByZWxldmFudCBrZXJuZWwgbW9kdWxlcy5cblxuQWxyaWdodCwgYSBmaW5hbCBxdWljayBzY2FuLiBZZXMsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSdtIHNhdGlzZmllZCB3aXRoIHRoaXMgZnV6emluZyBwbGFuLiBUaW1lIHRvIG1vdmUgb24gYW5kIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1MzcsIk91dHB1dFRva2VucyI6MjE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6MjguNzgyMTQyMjE0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5OTMxNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZVwiLFxuICAgIFwibmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkXCIsXG4gICAgXCJjZmc4MDIxMV9zdG9wX25hblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUgaW4gbmV0L3dpcmVsZXNzL2NvcmUuYywgYWx0ZXJpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIGNoYW5uZWwgZGVmaW5pdGlvbiBzd2FwcGluZywgYW5kIGVycm9yIHJvbGxiYWNrIGhhbmRsaW5nIGZvciBOQU4gKE5laWdoYm9yIEF3YXJlbmVzcyBOZXR3b3JraW5nKSBsb2NhbCBzY2hlZHVsZXMuIFRoaXMgcGF0aCBpcyBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBubDgwMjExIGdlbmVyaWMgbmV0bGluayBpbnRlcmZhY2UgKE5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQpIGFuZCB2aXJ0dWFsIG1hYzgwMjExIGRldmljZXMgKHN1Y2ggYXMgbWFjODAyMTFfaHdzaW0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlXCIsXG4gICAgXCJubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWRcIixcbiAgICBcImNmZzgwMjExX3N0b3BfbmFuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSBpbiBuZXQvd2lyZWxlc3MvY29yZS5jLCBhbHRlcmluZyBtZW1vcnkgbWFuYWdlbWVudCwgY2hhbm5lbCBkZWZpbml0aW9uIHN3YXBwaW5nLCBhbmQgZXJyb3Igcm9sbGJhY2sgaGFuZGxpbmcgZm9yIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpIGxvY2FsIHNjaGVkdWxlcy4gVGhpcyBwYXRoIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIG5sODAyMTEgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSAoTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCkgYW5kIHZpcnR1YWwgbWFjODAyMTEgZGV2aWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjI4LjkzMjA4NzEwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0ODE5Mjc2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDoyOC45MzI5MjQ1MTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjQ4MTA4NDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoKWAgdG8gcHJlLWFsbG9jYXRlIGFuZCBwb3B1bGF0ZSB0aGUgbmV3IE5BTiBjaGFubmVsIGRlZmluaXRpb25zIGFycmF5IChgY2hhbmRlZnNgKSB1c2luZyBga2NhbGxvYygpYCBwcmlvciB0byBpbnZva2luZyB0aGUgZHJpdmVyIGNhbGxiYWNrIGByZGV2X25hbl9zZXRfbG9jYWxfc2NoZWQoKWAuIElmIHRoZSBkcml2ZXIgY2FsbGJhY2sgZmFpbHMsIHRoZSBwcmV2aW91cyBzY2hlZHVsZSAoYG9sZF9jaGFuZGVmc2AsIGBvbGRfbl9jaGFubmVsc2ApIGlzIHJlc3RvcmVkIGFuZCB0aGUgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcmVlZDsgb24gc3VjY2VzcywgdGhlIG9sZCBhcnJheSBpcyBmcmVlZC5cXG5cXG5LQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIEFsbCBhbGxvY2F0aW9ucyBpbiB0aGlzIHBhdGNoIHVzZSBga2NhbGxvYygpYCAoemVyby1pbml0aWFsaXplZCksIGlucHV0IHNjaGVkdWxlcyBhcmUgemVyby1pbml0aWFsaXplZCAoYGt6YWxsb2MoKWAgb3Igc3RydWN0IGluaXRpYWxpemVyIGB7fWApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHJlYWQgd2hpbGUgdW5pbml0aWFsaXplZC5cXG4tIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbGVhayBkdXJpbmcgc3RhdGUgcm9sbGJhY2ssIGZhbGwgc3RyaWN0bHkgdW5kZXIgdGhlIGRvbWFpbiBvZiBzdGFuZGFyZCBLQVNBTiBhbmQgU0xVQiBkZWJ1Z2dlcnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMWVjMjQxNDMzYjQzNDk4NGVhYjgxNWIxZWEyNTc3ZGRmOWYwYmU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAyMToyOTo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5pbmRleCBkMTMzMTBmZWY2OTFhLi41YjQyZDZlYzFhZDY2IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuY1xuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xuQEAgLTI4OCw2ICsyODgsOCBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcbiB7XG4rXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWZzID0gTlVMTCwgKm9sZF9jaGFuZGVmcztcbitcdHU4IG9sZF9uX2NoYW5uZWxzO1xuIFx0aW50IHJldDtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5tdHgpO1xuQEAgLTI5OCwyOSArMzAwLDQyIEBAIGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdGlmICh3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0cmV0ID0gcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKHJkZXYsIHdkZXYsIHNjaGVkKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHR3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nID0gc2NoZWQtXHUwMDNlZGVmZXJyZWQ7XG4tXG4tXHRrZnJlZSh3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzKTtcbi1cdHdkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBOVUxMO1xuLVx0d2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gMDtcbitcdC8qXG4rXHQgKiBQcmUtYWxsb2NhdGUgY2hhbmRlZnMsIHNvIHdlIGRvbid0IHJ1aW4gdGhlIGN1cnJlbnRcbitcdCAqIHNjaGVkdWxlIG9uIGFsbG9jYXRpb24gZmFpbHVyZS5cbitcdCAqL1xuK1x0aWYgKHNjaGVkLVx1MDAzZW5fY2hhbm5lbHMpIHtcbitcdFx0Y2hhbmRlZnMgPSBrY2FsbG9jKHNjaGVkLVx1MDAzZW5fY2hhbm5lbHMsIHNpemVvZigqY2hhbmRlZnMpLFxuK1x0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghY2hhbmRlZnMpXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRpZiAoIXNjaGVkLVx1MDAzZW5fY2hhbm5lbHMpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2NoZWQtXHUwMDNlbl9jaGFubmVsczsgaSsrKVxuK1x0XHRcdGNoYW5kZWZzW2ldID0gc2NoZWQtXHUwMDNlbmFuX2NoYW5uZWxzW2ldLmNoYW5kZWY7XG4rXHR9XG4gXG4tXHR3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzID0ga2NhbGxvYyhzY2hlZC1cdTAwM2VuX2NoYW5uZWxzLFxuLVx0XHRcdFx0ICAgICAgIHNpemVvZigqd2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmcyksXG4tXHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIXdkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnMpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0LypcbitcdCAqIFN3YXAgaW4gdGhlIG5ldyBjaGFuZGVmcyBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyIGFuZCBzZXQgdGhlXG4rXHQgKiBkZWZlcnJlZCBmbGFnLCBzbyBpZiB0aGUgZHJpdmVyIGNvbXBsZXRlcyB0aGUgdXBkYXRlIHN5bmNocm9ub3VzbHlcbitcdCAqIHRoZSBuZXcgc2NoZWR1bGUgd2lsbCBiZSBhbHJlYWR5IGluIHBsYWNlLlxuK1x0ICovXG4rXHRvbGRfY2hhbmRlZnMgPSB3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzO1xuK1x0b2xkX25fY2hhbm5lbHMgPSB3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHM7XG4rXHR3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzID0gY2hhbmRlZnM7XG4rXHR3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBzY2hlZC1cdTAwM2VuX2NoYW5uZWxzO1xuK1x0d2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IHNjaGVkLVx1MDAzZWRlZmVycmVkO1xuIFxuLVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNjaGVkLVx1MDAzZW5fY2hhbm5lbHM7IGkrKylcbi1cdFx0d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmc1tpXSA9IHNjaGVkLVx1MDAzZW5hbl9jaGFubmVsc1tpXS5jaGFuZGVmO1xuK1x0cmV0ID0gcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKHJkZXYsIHdkZXYsIHNjaGVkKTtcbitcdGlmIChyZXQpIHtcbitcdFx0LyogUmVzdG9yZSB0aGUgcHJldmlvdXMgc2NoZWR1bGUgb24gZmFpbHVyZSAqL1xuK1x0XHR3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nID0gZmFsc2U7XG4rXHRcdHdkZXYtXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBvbGRfY2hhbmRlZnM7XG4rXHRcdHdkZXYtXHUwMDNldS5uYW4ubl9jaGFubmVscyA9IG9sZF9uX2NoYW5uZWxzO1xuK1x0XHRrZnJlZShjaGFuZGVmcyk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4tXHR3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBzY2hlZC1cdTAwM2VuX2NoYW5uZWxzO1xuK1x0a2ZyZWUob2xkX2NoYW5kZWZzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjI4LjkzMjkyNTkyMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzQ3Njc3MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiBmb3IgVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlIGNoYW5nZXMgaW4gYG5ldC93aXJlbGVzcy9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlYCBmdW5jdGlvbi5cblxuRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhlIHBhdGNoIGlzIGEgcmVmYWN0b3JpbmcvaW1wcm92ZW1lbnQgdG8gdGhlIHNjaGVkdWxlIHVwZGF0ZSBwcm9jZXNzLiBUaGUgbWFpbiBjaGFuZ2UgaW52b2x2ZXMgcHJlLWFsbG9jYXRpbmcgdGhlIGBjaGFuZGVmc2AgYnVmZmVyIGJlZm9yZSBjYWxsaW5nIHRoZSBkcml2ZXIgZnVuY3Rpb24gYHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZGAuIFRoaXMgaXMgZG9uZSB0byBhdm9pZCBhIHBvdGVudGlhbCByYWNlIG9yIGZhaWx1cmUgbW9kZSB3aGVyZSBhIHNjaGVkdWxlIHVwZGF0ZSBjb3VsZCBiZSBjb3JydXB0ZWQgaWYgdGhlIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxzICpkdXJpbmcqIGFuIHVwZGF0ZS4gTm93LCBvbiBmYWlsdXJlLCB0aGUgb3JpZ2luYWwgc3RhdGUgaXMgcmVzdG9yZWQuXG5cblRoZSBcImJlZm9yZVwiIHZlcnNpb24gc2VlbXMgdG8gYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGUgYGNoYW5kZWZzYCBpbiBhIG1vcmUgc3luY2hyb25vdXMgbWFubmVyLiBUaGUgbmV3IHZlcnNpb24gYXR0ZW1wdHMgdG8gcHJldmVudCBhbiBpbnRlcnJ1cHRpb24gdG8gc2NoZWR1bGUgdXBkYXRlcyBieSBwcmUtYWxsb2NhdGluZywgYW5kIG9ubHkgdXBkYXRpbmcgdGhlIGRhdGEgcG9pbnRlciBhZnRlciBhIHN1Y2Nlc3NmdWwgYWxsb2NhdGlvbi4gT24gZXJyb3IsIGl0IHJlc3RvcmVzIHRoZSBvcmlnaW5hbCBzdGF0ZSBhbmQgZnJlZXMgdGhlIG5ldyBhbGxvY2F0aW9uLlxuXG5NeSBpbml0aWFsIGNvbmNlcm4sIGlzIHRoaXM6IERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgbWFuYWdlbWVudCBjb21wbGV4aXR5IHRoYXQgS01TQU4gY291bGQgY2F0Y2g/IFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG9sZF9jaGFuZGVmc2AgYW5kIHRoZSByZXN0b3JlIGxvZ2ljICpkb2VzKiBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGNvZGVwYXRocyBzbGlnaHRseS4gQWxzbywgd2hhdCBpZiB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIHRoZSBkcml2ZXIgY29kZSAqYWZ0ZXIqIHRoZSB1cGRhdGVkIGBjaGFuZGVmc2AgYXJlIHN3YXBwZWQgaW4/IFRoZSByZXN0b3JlIHBhdGggbG9va3MgY29ycmVjdCwgYnV0IGl0J3MgdGhlIGtpbmQgb2YgYXJlYSB3aGVyZSBhIHN1YnRsZSByYWNlIG9yIHVzZS1hZnRlci1mcmVlICpjb3VsZCogYmUgaW50cm9kdWNlZC5cblxuVG8gYmUgdGhvcm91Z2gsIEkgd2lsbCB1c2UgYGdyZXBwZXJgIG9yIGVxdWl2YWxlbnQgdG9vbHMgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBhbmQgYW55IHJlbGF0ZWQgY29kZSB0byBzZWUgaG93IGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlYCBpcyB1c2VkLiBJJ2xsIHNlYXJjaCBmb3IgYW55IGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24sIG9yIG90aGVyIGNsb3NlbHkgcmVsYXRlZCBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIChlLmcuIGB3ZGV2LVx1MDAzZXUubmFuYCkgdGhhdCBhcmUgdXNlZCBpbiB0aGUgc2FtZSBjb250ZXh0IHRvIGdldCBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gncyBpbXBhY3QuIFRoYXQgd2lsbCBnaXZlIG1lIG1vcmUgaW5zaWdodCBpbnRvIHRoZSAqbGlrZWxpaG9vZCogb2YgYSBLTVNBTiBpc3N1ZSBhbmQgbGV0IG1lIG1ha2UgYSBmaW5hbCBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjM2LjY4MDYwNzQ5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5NDQ0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmM9MjU1PXZvaWQgY2ZnODAyMTFfc3RvcF9uYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNzYtXFx0LyogVW5zY2hlZHVsZSBhbGwgKi9cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjI3NzpcXHRjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIFxcdTAwMjZlbXB0eV9zY2hlZCk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNzgtXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI4Ni1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjI4NzppbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yODgtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oPTU2MT12b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaC01NjMtXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo1NjQ6aW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTY1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNzY4NT1zdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzc2Mi1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3NzYzOlxcdHJldHVybiBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIHNjaGVkKTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3NzY0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6MzYuNzQ2NTU4MTcyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NzA0MTExMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqRGl2aW5nIERlZXAgaW50byBOQU4gU2NoZWR1bGluZyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBob3cgd2UncmUgc2V0dGluZyB1cCB0aGUgbG9jYWwgc2NoZWR1bGVyIHdpdGhpbiB0aGUgTkFOIGZyYW1ld29yay4gTXkgbWFpbiBmb2N1cyBpcyBvbiBgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkYCwgYnV0IEkga25vdyB0aGlzIHRvdWNoZXMgb24gc2V2ZXJhbCBpbnRlcmNvbm5lY3RlZCBwaWVjZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgbmFuLmNoYW5kZWZzYCwgYG5hbi5uX2NoYW5uZWxzYCwgYW5kIGBuYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmdgLiBJIGFscmVhZHkga25vdyB0aGVzZSBhcmUga2V5IHZhcmlhYmxlcywgYnV0IEkgaGF2ZSB0byBmb2xsb3cgdGhlIGNvbXBsZXRlIGRhdGEgZmxvdy5cblxuSSB3YW50IHRvIGtub3c6IHdoZXJlIGFyZSB0aGVzZSB2YXJpYWJsZXMgYmVpbmcgbW9kaWZpZWQ/IFdoYXQgZnVuY3Rpb25zIGFyZSByZWFkaW5nIHRoZW0/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIEkgbmVlZCB0byBjb25zaWRlcj8gSXMgdGhlcmUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcyBoZXJlPyBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gc3RlcCB0aHJvdWdoIHRoZSBjb2RlIGV4ZWN1dGlvbiwgbWVudGFsbHkgc2ltdWxhdGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cuIEknbSBsb29raW5nIGZvciBhbnkgc3VidGxlIGxvZ2ljIGVycm9ycyB0aGF0IG1pZ2h0IGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBpbiBjaGFubmVsIHNlbGVjdGlvbiwgc2NoZWR1bGluZyB1cGRhdGVzLCBvciBvdmVyYWxsIE5BTiBvcGVyYXRpb24uIFRoaXMgYWxzbyBtZWFucyBleHBsb3JpbmcgaG93IGFsbCB0aGUgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHRhbGtpbmcgdG8gZWFjaCBvdGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYxMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjM5LjMxNjk3MjA5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA2MzUyMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhbmRlZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvY2hhbi5jPTc2NT1fY2ZnODAyMTFfY2hhbmRlZl9jb21wYXRpYmxlKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqYzEsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTc4Ny1cXHQgKiBtdWx0aXBsZSBBUHMsIGJ1dCBpbiB0aGlzIGNhc2UgdXNlcnNwYWNlIHNob3VsZCBjb25maWd1cmVcXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjc4ODpcXHQgKiBpZGVudGljYWwgY2hhbmRlZnMgaW5jbHVkaW5nIE5QQ0EsIGV2ZW4gaWYgcGVyaGFwcyBvbmUgb2ZcXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTc4OS1cXHQgKiB0aGUgQVAgaW50ZXJmYWNlcyBkb2Vzbid0IGV2ZW4gYWR2ZXJ0aXNlIGl0Llxcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYy04NDUtXFx0ICogc2FtZSBwcmltYXJ5IDE2MCwgYnV0IGFyZSBub3QgaWRlbnRpY2FsIC0gdGhpcyBjYW5ub3QgaGFwcGVuXFxubmV0L3dpcmVsZXNzL2NoYW4uYzo4NDY6XFx0ICogc2luY2UgdGhleSBtdXN0IGJlIDMyMCAobm8gd2lkZXIgY2hhbmRlZnMgZXhpc3QsIGF0IGxlYXN0IHlldC4pXFxubmV0L3dpcmVsZXNzL2NoYW4uYy04NDctXFx0ICovXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTI4Nz1pbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI5MC17XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyOTE6XFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmcyA9IE5VTEwsICpvbGRfY2hhbmRlZnM7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yOTItXFx0dTggb2xkX25fY2hhbm5lbHM7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMwMy1cXHQvKlxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzA0OlxcdCAqIFByZS1hbGxvY2F0ZSBjaGFuZGVmcywgc28gd2UgZG9uJ3QgcnVpbiB0aGUgY3VycmVudFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzA1LVxcdCAqIHNjaGVkdWxlIG9uIGFsbG9jYXRpb24gZmFpbHVyZS5cXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzA3LVxcdGlmIChzY2hlZC1cXHUwMDNlbl9jaGFubmVscykge1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzA4OlxcdFxcdGNoYW5kZWZzID0ga2NhbGxvYyhzY2hlZC1cXHUwMDNlbl9jaGFubmVscywgc2l6ZW9mKCpjaGFuZGVmcyksXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMDktXFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzozMTA6XFx0XFx0aWYgKCFjaGFuZGVmcylcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMxMS1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzEzLVxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mgc2NoZWQtXFx1MDAzZW5fY2hhbm5lbHM7IGkrKylcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjMxNDpcXHRcXHRcXHRjaGFuZGVmc1tpXSA9IHNjaGVkLVxcdTAwM2VuYW5fY2hhbm5lbHNbaV0uY2hhbmRlZjtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMxNS1cXHR9XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMxNy1cXHQvKlxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzE4OlxcdCAqIFN3YXAgaW4gdGhlIG5ldyBjaGFuZGVmcyBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyIGFuZCBzZXQgdGhlXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMTktXFx0ICogZGVmZXJyZWQgZmxhZywgc28gaWYgdGhlIGRyaXZlciBjb21wbGV0ZXMgdGhlIHVwZGF0ZSBzeW5jaHJvbm91c2x5XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMyMS1cXHQgKi9cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjMyMjpcXHRvbGRfY2hhbmRlZnMgPSB3ZGV2LVxcdTAwM2V1Lm5hbi5jaGFuZGVmcztcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMyMy1cXHRvbGRfbl9jaGFubmVscyA9IHdkZXYtXFx1MDAzZXUubmFuLm5fY2hhbm5lbHM7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzozMjQ6XFx0d2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnMgPSBjaGFuZGVmcztcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMyNS1cXHR3ZGV2LVxcdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gc2NoZWQtXFx1MDAzZW5fY2hhbm5lbHM7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTMzMS1cXHRcXHR3ZGV2LVxcdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZyA9IGZhbHNlO1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzMyOlxcdFxcdHdkZXYtXFx1MDAzZXUubmFuLmNoYW5kZWZzID0gb2xkX2NoYW5kZWZzO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzMzLVxcdFxcdHdkZXYtXFx1MDAzZXUubmFuLm5fY2hhbm5lbHMgPSBvbGRfbl9jaGFubmVscztcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjMzNDpcXHRcXHRrZnJlZShjaGFuZGVmcyk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMzUtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMzM3LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MzM4OlxcdGtmcmVlKG9sZF9jaGFuZGVmcyk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0zMzktXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE0NTgzPXN0YXRpYyBpbnQgbmw4MDIxMV9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDYzOC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE0NjM5OlxcdFxcdC8qIG5vdGU6IHJldHVybnMgZmlyc3Qgb25lIGlmIGlkZW50aWNhbCBjaGFuZGVmcyAqL1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ2NDAtXFx0XFx0Y29tcGF0X2NoYW5kZWYgPSBjZmc4MDIxMV9jaGFuZGVmX2NvbXBhdGlibGUoXFx1MDAyNmNoYW5kZWYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE3NTIzPXN0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X3BlZXJfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc1ODgtXFx0XFx0XFx0aWYgKGNmZzgwMjExX2NoYW5kZWZfY29tcGF0aWJsZShcXHUwMDI2bmFuX2NoYW5uZWxzW2ldLmNoYW5kZWYsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNzU4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2d2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnNbal0pKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzU5MC1cXHRcXHRcXHRcXHRjb21wYXRpYmxlID0gdHJ1ZTtcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0yMzM3PXN0YXRpYyBib29sIHJlZ193ZGV2X2NoYW5fdmFsaWQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0yMzU0LVxcdFxcdFxcdHJldCA9IGNmZzgwMjExX3JlZ19jYW5fYmVhY29uKHdpcGh5LFxcbm5ldC93aXJlbGVzcy9yZWcuYzoyMzU1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ3ZGV2LVxcdTAwM2V1Lm5hbi5jaGFuZGVmc1tpXSxcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjM1Ni1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBOTDgwMjExX0lGVFlQRV9OQU4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDozOS40MTc2Mjk4MTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE0NTU3NjE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byB0aGUgTkFOIFNjaGVkdWxlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY2hlZHVsZXIgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSA4MDIuMTEgTkFOIGRyaXZlci4gTGV0J3Mgc3RhcnQgd2l0aCBgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkYC4gVGhhdCBmdW5jdGlvbiBpcyB0aGUgbGlrZWx5IGVudHJ5IHBvaW50IHdoZXJlIHRoZSBzY2hlZHVsZXIgcGFyYW1ldGVycyBhbmQgY29uZmlndXJhdGlvbnMgYXJlIHNldCwgc28gaXTigJlzIHRoZSBwZXJmZWN0IHBsYWNlIHRvIGJlZ2luLiBJIG5lZWQgdG8gdHJhY2UgZXhhY3RseSBob3cgdGhlIGBzY2hlZGAgc3RydWN0dXJlIGlzIHBhcnNlZCBmcm9tIHRoZSBOZXRsaW5rIG1lc3NhZ2UgYW5kLCBjcnVjaWFsbHksIGhvdyBhbmQgd2hlcmUgaXQgaXMgYWxsb2NhdGVkIHdpdGhpbiB0aGUgZHJpdmVy4oCZcyBjb250ZXh0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3Vycm91bmRpbmcgdGhlIE5BTiBzY2hlZHVsZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIHNldHMgdXAgdGhlIHN0cnVjdHVyZXMgbmVlZGVkIHRvIHJ1biB0aGUgc2NoZWR1bGVyLCBiZWNhdXNlIHRoYXQncyB3aGVyZSBhbnkgdnVsbmVyYWJpbGl0aWVzIGFyZSBsaWtlbHkgdG8gZXhpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNDksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMTozMDo0MS41NjMyMTA4ODNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0MzA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3Njg1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzY4NTpcXHRzdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE3Njg2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjE3Njg3OlxcdHtcXG4xNzY4ODpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4xNzY4OTpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4xNzY5MDpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMV07XFxuMTc2OTE6XFx0XFx0aW50IHJlbSwgaSA9IDAsIG5fY2hhbm5lbHMgPSAwLCByZXQ7XFxuMTc2OTI6XFx0XFx0c3RydWN0IG5sYXR0ciAqY2hhbm5lbDtcXG4xNzY5MzpcXHRcXHRib29sIHNjaGVkX2VtcHR5O1xcbjE3Njk0OlxcdFxcbjE3Njk1OlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxcbjE3Njk2OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xNzY5NzpcXHRcXG4xNzY5ODpcXHRcXHRpZiAoIXdkZXZfcnVubmluZyh3ZGV2KSlcXG4xNzY5OTpcXHRcXHRcXHRyZXR1cm4gLUVOT1RDT05OO1xcbjE3NzAwOlxcdFxcbjE3NzAxOlxcdFxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX05BTl9USU1FX1NMT1RTXSlcXG4xNzcwMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNzcwMzpcXHRcXG4xNzcwNDpcXHRcXHQvKiBGaXJzdCBjb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovXFxuMTc3MDU6XFx0XFx0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcXG4xNzcwNjpcXHRcXHRcXHRcXHRcXHQgaW5mby1cXHUwMDNlbmxoZHIsIEdFTkxfSERSTEVOLCByZW0pXFxuMTc3MDc6XFx0XFx0XFx0bl9jaGFubmVscysrO1xcbjE3NzA4OlxcdFxcbjE3NzA5OlxcdFxcdHNjaGVkID0ga3phbGxvYyhzdHJ1Y3Rfc2l6ZShzY2hlZCwgbmFuX2NoYW5uZWxzLCBuX2NoYW5uZWxzKSxcXG4xNzcxMDpcXHRcXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG4xNzcxMTpcXHRcXHRpZiAoIXNjaGVkKVxcbjE3NzEyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE3NzEzOlxcdFxcbjE3NzE0OlxcdFxcdHNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzID0gbl9jaGFubmVscztcXG4xNzcxNTpcXHRcXG4xNzcxNjpcXHRcXHRubG1zZ19mb3JfZWFjaF9hdHRyX3R5cGUoY2hhbm5lbCwgTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMLFxcbjE3NzE3OlxcdFxcdFxcdFxcdFxcdCBpbmZvLVxcdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkge1xcbjE3NzE4OlxcdFxcdFxcdHJldCA9IG5sODAyMTFfcGFyc2VfbmFuX2NoYW5uZWwocmRldiwgY2hhbm5lbCwgaW5mbyxcXG4xNzcxOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzY2hlZC1cXHUwMDNlbmFuX2NoYW5uZWxzLCBpLCB0cnVlKTtcXG4xNzcyMDpcXHRcXG4xNzcyMTpcXHRcXHRcXHRpZiAocmV0KVxcbjE3NzIyOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTc3MjM6XFx0XFx0XFx0aSsrO1xcbjE3NzI0OlxcdFxcdH1cXG4xNzcyNTpcXHRcXG4xNzcyNjpcXHRcXHQvKiBQYXJzZSBhbmQgdmFsaWRhdGUgc2NoZWR1bGUgKi9cXG4xNzcyNzpcXHRcXHRyZXQgPSBubDgwMjExX3BhcnNlX25hbl9zY2hlZHVsZShpbmZvLFxcbjE3NzI4OlxcdFxcdFxcdFxcdFxcdFxcdCBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX1RJTUVfU0xPVFNdLFxcbjE3NzI5OlxcdFxcdFxcdFxcdFxcdFxcdCBzY2hlZC1cXHUwMDNlc2NoZWR1bGUsIHNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzKTtcXG4xNzczMDpcXHRcXHRpZiAocmV0KVxcbjE3NzMxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTc3MzI6XFx0XFxuMTc3MzM6XFx0XFx0c2NoZWRfZW1wdHkgPSBubDgwMjExX25hbl9pc19zY2hlZF9lbXB0eShzY2hlZCk7XFxuMTc3MzQ6XFx0XFxuMTc3MzU6XFx0XFx0c2NoZWQtXFx1MDAzZWRlZmVycmVkID1cXG4xNzczNjpcXHRcXHRcXHRubGFfZ2V0X2ZsYWcoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX05BTl9TQ0hFRF9ERUZFUlJFRF0pO1xcbjE3NzM3OlxcdFxcbjE3NzM4OlxcdFxcdGlmIChzY2hlZF9lbXB0eSkge1xcbjE3NzM5OlxcdFxcdFxcdGlmIChzY2hlZC1cXHUwMDNlZGVmZXJyZWQpIHtcXG4xNzc0MDpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhpbmZvLVxcdTAwM2VleHRhY2ssXFxuMTc3NDE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJTY2hlZHVsZSBjYW5ub3QgYmUgZGVmZXJyZWQgaWYgYWxsIHRpbWUgc2xvdHMgYXJlIHVuYXZhaWxhYmxlXFxcIik7XFxuMTc3NDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTc3NDM6XFx0XFx0XFx0fVxcbjE3NzQ0OlxcdFxcbjE3NzQ1OlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX0FWQUlMX0JMT0JdKSB7XFxuMTc3NDY6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coaW5mby1cXHUwMDNlZXh0YWNrLFxcbjE3NzQ3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiTkFOIEF2YWlsYWJpbGl0eSBibG9iIG11c3QgYmUgZW1wdHkgaWYgYWxsIHRpbWUgc2xvdHMgYXJlIHVuYXZhaWxhYmxlXFxcIik7XFxuMTc3NDg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTc3NDk6XFx0XFx0XFx0fVxcbjE3NzUwOlxcdFxcdH0gZWxzZSB7XFxuMTc3NTE6XFx0XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX0FWQUlMX0JMT0JdKSB7XFxuMTc3NTI6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coaW5mby1cXHUwMDNlZXh0YWNrLFxcbjE3NzUzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiTkFOIEF2YWlsYWJpbGl0eSBibG9iIGF0dHJpYnV0ZSBpcyByZXF1aXJlZFxcXCIpO1xcbjE3NzU0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3NzU1OlxcdFxcdFxcdH1cXG4xNzc1NjpcXHRcXG4xNzc1NzpcXHRcXHRcXHRzY2hlZC1cXHUwMDNlbmFuX2F2YWlsX2Jsb2IgPVxcbjE3NzU4OlxcdFxcdFxcdFxcdG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fQVZBSUxfQkxPQl0pO1xcbjE3NzU5OlxcdFxcdFxcdHNjaGVkLVxcdTAwM2VuYW5fYXZhaWxfYmxvYl9sZW4gPVxcbjE3NzYwOlxcdFxcdFxcdFxcdG5sYV9sZW4oaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX05BTl9BVkFJTF9CTE9CXSk7XFxuMTc3NjE6XFx0XFx0fVxcbjE3NzYyOlxcdFxcbjE3NzYzOlxcdFxcdHJldHVybiBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIHNjaGVkKTtcXG4xNzc2NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjQxLjU2NzM2MjA1M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTMxNTYwMDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgYGNmZzgwMjExX3N0b3BfbmFuYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgbWVudGFsIGdlYXJzIGFyZSBhbHJlYWR5IHR1cm5pbmcuIFwiTGV0J3MgY2hlY2sgYGNmZzgwMjExX3N0b3BfbmFuYFwiIOKAkyB0aGF0J3MgdGhlIGNvbW1hbmQsIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgaXQncyAqc3VwcG9zZWQqIHRvIHdvcmsuIEknbSBhc3N1bWluZyBpdCByZWxhdGVzIHRvIFdpLUZpIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpLCB3aGljaCBtZWFucyBpdCBwcm9iYWJseSBoYW5kbGVzIHRoZSBzdG9wcGluZyBvciB0ZXJtaW5hdGlvbiBvZiBzb21lIE5BTi1yZWxhdGVkIHByb2Nlc3MuIElzIGl0IGdyYWNlZnVsbHkgc2h1dHRpbmcgZG93biBkaXNjb3Zlcnk/IENsZWFuaW5nIHVwIHNvbWUgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXM/IERlLXJlZ2lzdGVyaW5nIHNvbWV0aGluZz8gVGhlIG51YW5jZXMgYXJlIGtleSBoZXJlLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24ncyBkZWZpbml0aW9uLCBob3cgaXQncyBjYWxsZWQsIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcuIElzIHRoZXJlIGFueSBleGlzdGluZyBpbmZvcm1hdGlvbiBvciBkb2N1bWVudGF0aW9uIEkgY2FuIGxldmVyYWdlPyBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5OTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIxOjMwOjQzLjY5ODkyNzAzOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTgwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTU6XFx0dm9pZCBjZmc4MDIxMV9zdG9wX25hbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIDI1NjpcXHRcXHRcXHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4gMjU3OlxcdHtcXG4gMjU4OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgZW1wdHlfc2NoZWQgPSB7fTtcXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkubXR4KTtcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0aWYgKFdBUk5fT04od2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTikpXFxuIDI2MzpcXHRcXHRcXHRyZXR1cm47XFxuIDI2NDpcXHRcXG4gMjY1OlxcdFxcdGlmICghd2Rldl9ydW5uaW5nKHdkZXYpKVxcbiAyNjY6XFx0XFx0XFx0cmV0dXJuO1xcbiAyNjc6XFx0XFxuIDI2ODpcXHRcXHRjZmc4MDIxMV9wbXNyX3dkZXZfZG93bih3ZGV2KTtcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0LypcXG4gMjcxOlxcdFxcdCAqIElmIHRoZXJlIGlzIGEgc2NoZWR1bGVkIHVwZGF0ZSBwZW5kaW5nLCBtYXJrIGl0IGFzIGNhbmNlbGVkLCBzbyB0aGVcXG4gMjcyOlxcdFxcdCAqIGVtcHR5IHNjaGVkdWxlIHdpbGwgYmUgYWNjZXB0ZWRcXG4gMjczOlxcdFxcdCAqL1xcbiAyNzQ6XFx0XFx0d2Rldi1cXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcgPSBmYWxzZTtcXG4gMjc1OlxcdFxcbiAyNzY6XFx0XFx0LyogVW5zY2hlZHVsZSBhbGwgKi9cXG4gMjc3OlxcdFxcdGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2RldiwgXFx1MDAyNmVtcHR5X3NjaGVkKTtcXG4gMjc4OlxcdFxcbiAyNzk6XFx0XFx0cmRldl9zdG9wX25hbihyZGV2LCB3ZGV2KTtcXG4gMjgwOlxcdFxcdHdkZXYtXFx1MDAzZWlzX3J1bm5pbmcgPSBmYWxzZTtcXG4gMjgxOlxcdFxcbiAyODI6XFx0XFx0ZXRoX3plcm9fYWRkcih3ZGV2LVxcdTAwM2V1Lm5hbi5jbHVzdGVyX2lkKTtcXG4gMjgzOlxcdFxcbiAyODQ6XFx0XFx0cmRldi1cXHUwMDNlb3BlbmNvdW50LS07XFxuIDI4NTpcXHR9XFxuIDI4NjpcXHRcXG4gMjg3OlxcdGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gMjg4OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiAyODk6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmcyA9IE5VTEwsICpvbGRfY2hhbmRlZnM7XFxuIDI5MjpcXHRcXHR1OCBvbGRfbl9jaGFubmVscztcXG4gMjkzOlxcdFxcdGludCByZXQ7XFxuIDI5NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6NDMuNjk5NDMyMzc4WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3MTQ1NDg2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudCBvZiBOQU4gU2NoZWR1bGUgVXBkYXRlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIG1vZGlmaWVzIGhvdyB0aGUgYGNoYW5kZWZzYCBhcnJheSwgcGFydCBvZiBgd2Rldi1cdTAwM2V1Lm5hbmAsIGdldHMgdXBkYXRlZCB3aXRoaW4gYGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGVgLiBUaGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gd2FzIGEgYml0IGNsdW5reSwgd2l0aCB0aGUgZHJpdmVyIGNhbGxiYWNrIHBvdGVudGlhbGx5IGZhaWxpbmcgYWZ0ZXIgdGhlIG1lbW9yeSBmb3IgYGNoYW5kZWZzYCB3YXMgZnJlZWQsIGxlYWRpbmcgdG8gYSBicm9rZW4gc2NoZWR1bGUuIFRoaXMgbmV3IGFwcHJvYWNoIHByZS1hbGxvY2F0ZXMgdGhlIGBjaGFuZGVmc2AgYXJyYXkgdXNpbmcgYGtjYWxsb2NgLCBwb3B1bGF0ZXMgaXQgd2l0aCBkYXRhIGNvcGllZCBmcm9tIHRoZSBgc2NoZWRgIHN0cnVjdHVyZSdzIGBuYW5fY2hhbm5lbHNgLCBhbmQgdGhlbiBjYWxscyB0aGUgZHJpdmVyLiBDcml0aWNhbGx5LCBpdCBzYXZlcyB0aGUgb2xkIHNjaGVkdWxlLCByZXN0b3JpbmcgaXQgb24gZmFpbHVyZSBhbmQgZnJlZWluZyBpdCBvbiBzdWNjZXNzLlxuXG5NeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuIEkgd2FudCB0byBlbnN1cmUgd2UncmUgbm90IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gRGlnZ2luZyBpbiwgSSBjYW4gc2VlIHRoYXQgYGNoYW5kZWZzYCBpcyBmdWxseSBpbml0aWFsaXplZCB0aGFua3MgdG8gYGtjYWxsb2NgIGFuZCB0aGUgY29weWluZyBvZiBkYXRhIGZyb20gdGhlIGluaXRpYWxpemVkIGBzY2hlZGAgc3RydWN0LiBgc2NoZWRgIGl0c2VsZiBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIGVuc3VyaW5nIGl0J3MgemVyb2VkLiBXZSBhbHNvIGhhdmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nLCByZXN0b3JpbmcgdGhlIHByZXZpb3VzIHNjaGVkdWxlIGlmIHRoZSBkcml2ZXIgZmFpbHMuIElmIHRoZSBkcml2ZXIgc3VjY2VlZHMsIHRoZSBvbGQgc2NoZWR1bGUgaXMgZnJlZWQuXG5cbkdpdmVuIHRoZSBjb2RlJ3Mgc3RydWN0dXJlLCBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGJlIGluIHRoZSByZWFsbSBvZiBtZW1vcnkgbWFuYWdlbWVudCBidWdzIGxpa2UgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgc3RhbmRhcmQgS0FTQU4gYW5kIFNMVUIgZG9tYWlucy4gSSBkb24ndCBzZWUgYW55IGV4cG9zZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCwgcGFzc2VkIHRvIHVzZXJzcGFjZSwgb3IgZGV0ZXJtaW5pbmcgY29udHJvbCBmbG93LlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gd2hldGhlciB3ZSBuZWVkIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgc3BlY2lmaWNhbGx5LiBLTVNBTiBpcyBjcml0aWNhbCB3aGVuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNhbiBiZSByZWFkIGJ5IGEgcmVhY2hhYmxlIGNvZGUgcGF0aC4gSW4gdGhpcyBjYXNlLCBoZXJlJ3Mgd2hhdCBJJ3ZlIGFzc2Vzc2VkOlxuXG4xLiAgKipObyBLZXJuZWwgU3RydWN0dXJlcyB0byBVc2VyIFNwYWNlOioqIE5vIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMuXG4yLiAgKipObyBVbmluaXRpYWxpemVkIENvbnRyb2wgRmxvdzoqKiBUaGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuICAqKkZ1bGx5IEluaXRpYWxpemVkIERhdGEgU3RydWN0dXJlczoqKiBEYXRhIHN0cnVjdHVyZXMgYXJlIGFsbCB6ZXJvLWluaXRpYWxpemVkIHZpYSBga2NhbGxvY2Agb3IgYGt6YWxsb2NgIG9yIGFyZSBjb3BpZWQgZnJvbSBpbml0aWFsemVkIHNvdXJjZXMuXG40LiAgKipObyBVbmluaXRpYWxpemVkIEJ5dGUgQWNjZXNzOioqIE5vIGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCB3b3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBpbiBleGlzdGluZyBidWZmZXJzLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24ndCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiBUaGUgaXNzdWVzIGhlcmUgYXJlIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIHdpbGwgY2F0Y2ggYW55IGlzc3VlcyB0aGVyZS5cblxuT2theSwgSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIExldCdzIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MDAsIk91dHB1dFRva2VucyI6MjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjE6MzA6NTEuNDEzOTg0MTYxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZSgpYCB0byBwcmUtYWxsb2NhdGUgYW5kIHBvcHVsYXRlIHRoZSBuZXcgTkFOIGNoYW5uZWwgZGVmaW5pdGlvbnMgYXJyYXkgKGBjaGFuZGVmc2ApIHVzaW5nIGBrY2FsbG9jKClgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2sgYHJkZXZfbmFuX3NldF9sb2NhbF9zY2hlZCgpYC4gSWYgdGhlIGRyaXZlciBjYWxsYmFjayBmYWlscywgdGhlIHByZXZpb3VzIHNjaGVkdWxlIChgb2xkX2NoYW5kZWZzYCwgYG9sZF9uX2NoYW5uZWxzYCkgaXMgcmVzdG9yZWQgYW5kIHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkOyBvbiBzdWNjZXNzLCB0aGUgb2xkIGFycmF5IGlzIGZyZWVkLlxcblxcbktBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gQWxsIGFsbG9jYXRpb25zIGluIHRoaXMgcGF0Y2ggdXNlIGBrY2FsbG9jKClgICh6ZXJvLWluaXRpYWxpemVkKSwgaW5wdXQgc2NoZWR1bGVzIGFyZSB6ZXJvLWluaXRpYWxpemVkIChga3phbGxvYygpYCBvciBzdHJ1Y3QgaW5pdGlhbGl6ZXIgYHt9YCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB3aGlsZSB1bmluaXRpYWxpemVkLlxcbi0gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsZWFrIGR1cmluZyBzdGF0ZSByb2xsYmFjaywgZmFsbCBzdHJpY3RseSB1bmRlciB0aGUgZG9tYWluIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBTTFVCIGRlYnVnZ2Vycy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKClgIHRvIHByZS1hbGxvY2F0ZSBhbmQgcG9wdWxhdGUgdGhlIG5ldyBOQU4gY2hhbm5lbCBkZWZpbml0aW9ucyBhcnJheSAoYGNoYW5kZWZzYCkgdXNpbmcgYGtjYWxsb2MoKWAgcHJpb3IgdG8gaW52b2tpbmcgdGhlIGRyaXZlciBjYWxsYmFjayBgcmRldl9uYW5fc2V0X2xvY2FsX3NjaGVkKClgLiBJZiB0aGUgZHJpdmVyIGNhbGxiYWNrIGZhaWxzLCB0aGUgcHJldmlvdXMgc2NoZWR1bGUgKGBvbGRfY2hhbmRlZnNgLCBgb2xkX25fY2hhbm5lbHNgKSBpcyByZXN0b3JlZCBhbmQgdGhlIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJlZWQ7IG9uIHN1Y2Nlc3MsIHRoZSBvbGQgYXJyYXkgaXMgZnJlZWQuXFxuXFxuS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBBbGwgYWxsb2NhdGlvbnMgaW4gdGhpcyBwYXRjaCB1c2UgYGtjYWxsb2MoKWAgKHplcm8taW5pdGlhbGl6ZWQpLCBpbnB1dCBzY2hlZHVsZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGBremFsbG9jKClgIG9yIHN0cnVjdCBpbml0aWFsaXplciBge31gKSwgYW5kIGFsbCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciByZWFkIHdoaWxlIHVuaW5pdGlhbGl6ZWQuXFxuLSBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxlYWsgZHVyaW5nIHN0YXRlIHJvbGxiYWNrLCBmYWxsIHN0cmljdGx5IHVuZGVyIHRoZSBkb21haW4gb2Ygc3RhbmRhcmQgS0FTQU4gYW5kIFNMVUIgZGVidWdnZXJzLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflows5ftk[1] Phase: Succeeded StartedAt: 2026-09-07 21:31:02 +0000 UTC FinishedAt: 2026-09-07 21:31:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 21:31:02 +0000 UTC FinishedAt: 2026-09-07 21:31:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[2] Phase: Succeeded StartedAt: 2026-09-07 21:31:02 +0000 UTC FinishedAt: 2026-09-08 01:11:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:31:02 +0000 UTC FinishedAt: 2026-09-08 01:11:36 +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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:31:02 +0000 UTC FinishedAt: 2026-09-07 21:31:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:31:02 +0000 UTC FinishedAt: 2026-09-07 21:31:07 +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-workflows5ftk/series-workflows5ftk-convert-artifact-596418268/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:31:12 +0000 UTC FinishedAt: 2026-09-07 21:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:31:12 +0000 UTC FinishedAt: 2026-09-07 21:47:07 +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:*233b0fe7-962c-4772-963a-a60e981ca763,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-workflows5ftk/series-workflows5ftk-convert-artifact-596418268/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": "dcf0ec48-c20b-4e1b-b7e6-fc9098ffbc62", "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-workflows5ftk/series-workflows5ftk-build-action-1918816778/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:31:12 +0000 UTC FinishedAt: 2026-09-07 21:46:57 +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:*233b0fe7-962c-4772-963a-a60e981ca763,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-workflows5ftk/series-workflows5ftk-convert-artifact-596418268/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": "dcf0ec48-c20b-4e1b-b7e6-fc9098ffbc62", "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-workflows5ftk/series-workflows5ftk-build-action-1918816778/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:47:07 +0000 UTC FinishedAt: 2026-09-07 21:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:47:07 +0000 UTC FinishedAt: 2026-09-07 21:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:47:07 +0000 UTC FinishedAt: 2026-09-07 21:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:47:07 +0000 UTC FinishedAt: 2026-09-07 21:47:12 +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":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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-workflows5ftk/series-workflows5ftk-convert-artifact-3477062427/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:47:17 +0000 UTC FinishedAt: 2026-09-07 21:49:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:47:17 +0000 UTC FinishedAt: 2026-09-07 21:48:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dcf0ec48-c20b-4e1b-b7e6-fc9098ffbc62,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-workflows5ftk/series-workflows5ftk-build-action-1918816778/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-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:49:09 +0000 UTC FinishedAt: 2026-09-07 21:49:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:49:09 +0000 UTC FinishedAt: 2026-09-07 21:49:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:49:09 +0000 UTC FinishedAt: 2026-09-07 22:07:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:49:09 +0000 UTC FinishedAt: 2026-09-07 22:07:59 +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:*233b0fe7-962c-4772-963a-a60e981ca763,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-workflows5ftk/series-workflows5ftk-convert-artifact-3477062427/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": "3bd32100-0bcb-425b-a399-82e0b57932ea", "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-workflows5ftk/series-workflows5ftk-build-action-831467199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 21:49:09 +0000 UTC FinishedAt: 2026-09-07 22:07:49 +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:*233b0fe7-962c-4772-963a-a60e981ca763,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-workflows5ftk/series-workflows5ftk-convert-artifact-3477062427/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": "3bd32100-0bcb-425b-a399-82e0b57932ea", "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-workflows5ftk/series-workflows5ftk-build-action-831467199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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:07:59 +0000 UTC FinishedAt: 2026-09-07 22:07:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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:07:59 +0000 UTC FinishedAt: 2026-09-07 22:07:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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:07:59 +0000 UTC FinishedAt: 2026-09-07 22:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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:07:59 +0000 UTC FinishedAt: 2026-09-07 22:09:40 +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:*3bd32100-0bcb-425b-a399-82e0b57932ea,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-workflows5ftk/series-workflows5ftk-build-action-831467199/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-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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:09:50 +0000 UTC FinishedAt: 2026-09-08 01:11:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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:09:50 +0000 UTC FinishedAt: 2026-09-08 01:11:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"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:*dcf0ec48-c20b-4e1b-b7e6-fc9098ffbc62,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3bd32100-0bcb-425b-a399-82e0b57932ea,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-workflows5ftk/series-workflows5ftk-build-action-1918816778/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-workflows5ftk/series-workflows5ftk-build-action-831467199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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:09:50 +0000 UTC FinishedAt: 2026-09-07 22:10:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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:09:50 +0000 UTC FinishedAt: 2026-09-07 22:09:59 +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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"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-workflows5ftk/series-workflows5ftk-convert-artifact-2303043348/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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:09:50 +0000 UTC FinishedAt: 2026-09-07 22:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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:09:50 +0000 UTC FinishedAt: 2026-09-07 22:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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:09:50 +0000 UTC FinishedAt: 2026-09-07 22:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 22:10:12 +0000 UTC FinishedAt: 2026-09-08 01:11:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5ftk[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":["cfg80211_nan_set_local_schedule","nl80211_nan_set_local_sched","cfg80211_stop_nan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"d50cd8bd-d121-431f-9ee1-572e89648ab8","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 22:10:12 +0000 UTC FinishedAt: 2026-09-08 01:11:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dcf0ec48-c20b-4e1b-b7e6-fc9098ffbc62,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3bd32100-0bcb-425b-a399-82e0b57932ea,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-workflows5ftk/series-workflows5ftk-build-action-1918816778/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-workflows5ftk/series-workflows5ftk-build-action-831467199/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-workflows5ftk/series-workflows5ftk-convert-artifact-2303043348/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,}