Name: series-workflowg2hn9 Phase: Succeeded StartedAt: 2026-07-06 19:45:45 +0000 UTC FinishedAt: 2026-07-07 00:00:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[0] Phase: Succeeded StartedAt: 2026-07-06 19:45:45 +0000 UTC FinishedAt: 2026-07-06 20:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 19:45:45 +0000 UTC FinishedAt: 2026-07-06 20:01:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "3582a5c8-697a-48e7-8b00-1985b93c0417" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "send_prp_supervision_frame", "hsr_handle_sup_frame", "hsr_newlink", "prp_drop_frame", "prp_register_frame_out" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfc3VwX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9uZXdsaW5rJiMzNDssCiAgICAmIzM0O3BycF9kcm9wX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9yZWdpc3Rlcl9mcmFtZV9vdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBQUlAgUmVkQm94IChQUlAtU0FOKSBpbiB0aGUgSFNSL1BSUCBzdWJzeXN0ZW0uIEl0IG1vZGlmaWVzIHN1cGVydmlzaW9uIGZyYW1lIGdlbmVyYXRpb24sIGZyYW1lIGZvcndhcmRpbmcgbG9naWMgKGRyb3BwaW5nIGFuZCByZWdpc3RlcmluZyksIGFuZCBub2RlIHNlcXVlbmNlIGhhbmRsaW5nIHRvIHN1cHBvcnQgdGhlIG5ldyBmZWF0dXJlLiBJdCBhbHNvIHJlbW92ZXMgdGhlIHJlc3RyaWN0aW9uIHRoYXQgaW50ZXJsaW5rIG9ubHkgd29ya3Mgd2l0aCBIU1IgaW4gbmV0bGluayBzZXR1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBuZXR3b3JrIHN0YWNrIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNlYjk5NjdjZjEwMTA4NTI4M2Y5YjM4M2Y5ODJlODRlZDE5YzVhODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDE5OjU3OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4wOTczZjlhOTRmNGQ0OCAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuQEAgLTM3MiwxMCAmIzQzOzM3MiwyMSBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbiB7XG4gXHRzdHJ1Y3QgaHNyX3ByaXYgKmhzciA9IG1hc3Rlci1cdTAwM2Voc3I7XG4gXHRzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkICpoc3Jfc3A7XG4mIzQzO1x0c3RydWN0IGhzcl9zdXBfdGx2ICpoc3Jfc3RsdjtcbiBcdHN0cnVjdCBoc3Jfc3VwX3RhZyAqaHNyX3N0YWc7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdGJvb2wgcmVkYm94X3Byb3h5O1xuJiM0MztcdGludCBleHRyYSA9IDA7XG4gXG4tXHRza2IgPSBoc3JfaW5pdF9za2IobWFzdGVyLCAwKTtcbiYjNDM7XHRyZWRib3hfcHJveHkgPSBoc3ItXHUwMDNlcmVkYm94IFx1MDAyNlx1MDAyNiBtYXN0ZXItXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LO1xuJiM0MztcbiYjNDM7XHQvKiBBIHByb3h5LWFubm91bmNlIGNhcnJpZXMgYSBSZWRCb3gtTUFDIFRMViBhbmQgYW4gRU9UIG1hcmtlci4gKi9cbiYjNDM7XHRpZiAocmVkYm94X3Byb3h5KVxuJiM0MztcdFx0ZXh0cmEgPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KSAmIzQzO1xuJiM0MztcdFx0XHRzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkgJiM0MztcbiYjNDM7XHRcdFx0c2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3Rsdik7XG4mIzQzO1xuJiM0MztcdHNrYiA9IGhzcl9pbml0X3NrYihtYXN0ZXIsIGV4dHJhKTtcbiBcdGlmICghc2tiKSB7XG4gXHRcdG5ldGRldl93YXJuX29uY2UobWFzdGVyLVx1MDAzZWRldiwgXCYjMzQ7UFJQOiBDb3VsZCBub3Qgc2VuZCBzdXBlcnZpc2lvbiBmcmFtZVxcblwmIzM0Oyk7XG4gXHRcdHJldHVybjtcbkBAIC0zOTMsOSAmIzQzOzQwNCwyNSBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XG4gXG4tXHQvKiBQYXlsb2FkOiBNYWNBZGRyZXNzQSAqL1xuJiM0MztcdC8qIFBheWxvYWQ6IE1hY0FkZHJlc3NBLCB0aGUgYW5ub3VuY2VkIG5vZGUuICovXG4gXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcbi1cdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbiYjNDM7XHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgYWRkcik7XG4mIzQzO1xuJiM0MztcdC8qIFByb3h5LWFubm91bmNlOiBhcHBlbmQgdGhlIFJlZEJveC1NQUMgVExWIChUeXBlIDMwKSBhbmQgYW4gZXhwbGljaXRcbiYjNDM7XHQgKiBFT1QgdG8gdGVybWluYXRlIHRoZSBUTFYgY2hhaW4gYmVmb3JlIHplcm8gcGFkZGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmVkYm94X3Byb3h5KSB7XG4mIzQzO1x0XHRoc3Jfc3RsdiA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KSk7XG4mIzQzO1x0XHRoc3Jfc3Rsdi1cdTAwM2VIU1JfVExWX3R5cGUgPSBQUlBfVExWX1JFREJPWF9NQUM7XG4mIzQzO1x0XHRoc3Jfc3Rsdi1cdTAwM2VIU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTtcbiYjNDM7XG4mIzQzO1x0XHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcbiYjNDM7XHRcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBoc3ItXHUwMDNlbWFjYWRkcmVzc19yZWRib3gpO1xuJiM0MztcbiYjNDM7XHRcdGhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTtcbiYjNDM7XHRcdGhzcl9zdGx2LVx1MDAzZUhTUl9UTFZfdHlwZSA9IEhTUl9UTFZfRU9UO1xuJiM0MztcdFx0aHNyX3N0bHYtXHUwMDNlSFNSX1RMVl9sZW5ndGggPSAwO1xuJiM0MztcdH1cbiBcbiBcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbkBAIC03NjgsNiAmIzQzOzc5NSwxNSBAQCBpbnQgaHNyX2Rldl9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlWzJdLFxuIFx0LyogTWFrZSBzdXJlIHRoZSAxc3QgY2FsbCB0byBuZXRpZl9jYXJyaWVyX29uKCkgZ2V0cyB0aHJvdWdoICovXG4gXHRuZXRpZl9jYXJyaWVyX29mZihoc3JfZGV2KTtcbiBcbiYjNDM7XHQvKiBQdWJsaXNoIHRoZSBSZWRCb3ggc3RhdGUgYmVmb3JlIGFueSBwb3J0IGlzIGF0dGFjaGVkOiB0aGUgcnhcbiYjNDM7XHQgKiBoYW5kbGVycyBhcmUgbGl2ZSBmcm9tIGhzcl9hZGRfcG9ydCgpIG9uLCBhbmQgaHNyX2FkZF9ub2RlKClcbiYjNDM7XHQgKiBzaXplcyBlYWNoIG5vZGUmIzM5O3MgcGVyLXBvcnQgc2VxdWVuY2Ugc3RhdGUgZnJvbSBoc3ItXHUwMDNlcmVkYm94LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChpbnRlcmxpbmspIHtcbiYjNDM7XHRcdGhzci1cdTAwM2VyZWRib3ggPSB0cnVlO1xuJiM0MztcdFx0ZXRoZXJfYWRkcl9jb3B5KGhzci1cdTAwM2VtYWNhZGRyZXNzX3JlZGJveCwgaW50ZXJsaW5rLVx1MDAzZWRldl9hZGRyKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmVzID0gaHNyX2FkZF9wb3J0KGhzciwgaHNyX2RldiwgSFNSX1BUX01BU1RFUiwgZXh0YWNrKTtcbiBcdGlmIChyZXMpXG4gXHRcdGdvdG8gZXJyX2FkZF9tYXN0ZXI7XG5AQCAtODA1LDggJiM0Mzs4NDEsNiBAQCBpbnQgaHNyX2Rldl9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlWzJdLFxuIFx0XHRpZiAocmVzKVxuIFx0XHRcdGdvdG8gZXJyX3VucmVnaXN0ZXI7XG4gXG4tXHRcdGhzci1cdTAwM2VyZWRib3ggPSB0cnVlO1xuLVx0XHRldGhlcl9hZGRyX2NvcHkoaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94LCBpbnRlcmxpbmstXHUwMDNlZGV2X2FkZHIpO1xuIFx0XHRtb2RfdGltZXIoXHUwMDI2aHNyLVx1MDAzZXBydW5lX3Byb3h5X3RpbWVyLFxuIFx0XHRcdCAgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKFBSVU5FX1BST1hZX1BFUklPRCkpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNjQuLmVmY2QwYWNlZjM4YzhiIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbkBAIC00NDAsMTIgJiM0Mzs0NDAsMzcgQEAgc3RhdGljIGludCBoc3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4gXHRyZXR1cm4gZGV2X3F1ZXVlX3htaXQoc2tiKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHBycF9pc19sYW5fZHVwKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiYjNDM7e1xuJiM0MztcdGVudW0gaHNyX3BvcnRfdHlwZSByeCA9IGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAocnggPT0gSFNSX1BUX1NMQVZFX0EgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgfHxcbiYjNDM7XHQgICAgICAgKHJ4ID09IEhTUl9QVF9TTEFWRV9CIFx1MDAyNlx1MDAyNiBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EpO1xuJiM0Mzt9XG4mIzQzO1xuIGJvb2wgcHJwX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIHtcbi1cdHJldHVybiAoKGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EgXHUwMDI2XHUwMDI2XG4tXHRcdCBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0IpIHx8XG4tXHRcdChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CIFx1MDAyNlx1MDAyNlxuLVx0XHQgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BKSk7XG4mIzQzO1x0ZW51bSBoc3JfcG9ydF90eXBlIHJ4ID0gZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZTtcbiYjNDM7XG4mIzQzO1x0LyogU3VwZXJ2aXNpb24gZnJhbWVzIGFyZSBub3QgZGVsaXZlcmVkIHRvIGEgU0FOIG9uIHRoZSBpbnRlcmxpbmsuICovXG4mIzQzO1x0aWYgKGZyYW1lLVx1MDAzZWlzX3N1cGVydmlzaW9uIFx1MDAyNlx1MDAyNiBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAocHJwX2lzX2xhbl9kdXAoZnJhbWUsIHBvcnQpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIExBTiB0byBpbnRlcmxpbms6IGtlZXAgUFJQLW5ldHdvcmsgdW5pY2FzdCBvZmYgdGhlIFNBTiBzZWdtZW50LiAqL1xuJiM0MztcdGlmICgocnggPT0gSFNSX1BUX1NMQVZFX0EgfHwgcnggPT0gSFNSX1BUX1NMQVZFX0IpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSylcbiYjNDM7XHRcdHJldHVybiBmcmFtZS1cdTAwM2Vkc3RfaW5fbm9kZV9kYjtcbiYjNDM7XG4mIzQzO1x0LyogSW50ZXJsaW5rIHRvIExBTjoga2VlcCBTQU4tdG8tU0FOIHVuaWNhc3QgbG9jYWwuICovXG4mIzQzO1x0aWYgKChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EgfHwgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcnggPT0gSFNSX1BUX0lOVEVSTElOSylcbiYjNDM7XHRcdHJldHVybiBmcmFtZS1cdTAwM2Vkc3RfaW5fcHJveHlfbm9kZV9kYjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbkBAIC00NTMsNyAmIzQzOzQ3OCw3IEBAIGJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiBcdGlmIChwb3J0LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19IU1JfRldEKVxuLVx0XHRyZXR1cm4gcHJwX2Ryb3BfZnJhbWUoZnJhbWUsIHBvcnQpO1xuJiM0MztcdFx0cmV0dXJuIHBycF9pc19sYW5fZHVwKGZyYW1lLCBwb3J0KTtcbiBcbiBcdC8qIFJlZEJveCBzcGVjaWZpYyBmcmFtZXMgZHJvcHBpbmcgcG9saWNpZXNcbiBcdCAqXG5AQCAtNDY2LDcgJiM0Mzs0OTEsNyBAQCBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdCAqIGFyZSBhZGRyZXNzZWQgdG8gaW50ZXJsaW5rIHBvcnQgKGFuZCBhcmUgaW4gdGhlIFByb3h5Tm9kZVRhYmxlKS5cbiBcdCAqL1xuIFx0c2tiID0gZnJhbWUtXHUwMDNlc2tiX2hzcjtcbi1cdGlmIChza2IgXHUwMDI2XHUwMDI2IHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRpZiAoc2tiIFx1MDAyNlx1MDAyNiBwcnBfaXNfbGFuX2R1cChmcmFtZSwgcG9ydCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGhzcl9pc19ub2RlX2luX2RiKFx1MDAyNnBvcnQtXHUwMDNlaHNyLVx1MDAzZXByb3h5X25vZGVfZGIsXG4gXHRcdFx0ICAgICAgZXRoX2hkcihza2IpLVx1MDAzZWhfZGVzdCkpIHtcbkBAIC03MDYsNiAmIzQzOzczMSwxOCBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIFx0ZnJhbWUtXHUwMDNlaXNfdmxhbiA9IGZhbHNlO1xuIFx0cHJvdG8gPSBldGhoZHItXHUwMDNlaF9wcm90bztcbiBcbiYjNDM7XHQvKiBQUlAgUmVkQm94IG9ubHk6IGNsYXNzaWZ5IHRoZSB1bmljYXN0IGRlc3RpbmF0aW9uIG9uY2Ugc28gdGhlXG4mIzQzO1x0ICogcGVyLWVncmVzcy1wb3J0IGRlY2lzaW9uIGluIHBycF9kcm9wX2ZyYW1lKCkgc3RheXMgTygxKS4gSFNSIFJlZEJveFxuJiM0MztcdCAqIGRvZXMgaXRzIG93biBjbGFzc2lmaWNhdGlvbiBhbmQgbXVzdCBub3QgcGF5IHRoZXNlIG5vZGUtdGFibGUgd2Fsa3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGhzci1cdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxIFx1MDAyNlx1MDAyNiBoc3ItXHUwMDNlcmVkYm94IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpc191bmljYXN0X2V0aGVyX2FkZHIoZXRoaGRyLVx1MDAzZWhfZGVzdCkpIHtcbiYjNDM7XHRcdGZyYW1lLVx1MDAzZWRzdF9pbl9ub2RlX2RiID1cbiYjNDM7XHRcdFx0aHNyX2lzX25vZGVfaW5fZGIoXHUwMDI2aHNyLVx1MDAzZW5vZGVfZGIsIGV0aGhkci1cdTAwM2VoX2Rlc3QpO1xuJiM0MztcdFx0ZnJhbWUtXHUwMDNlZHN0X2luX3Byb3h5X25vZGVfZGIgPVxuJiM0MztcdFx0XHRoc3JfaXNfbm9kZV9pbl9kYihcdTAwMjZoc3ItXHUwMDNlcHJveHlfbm9kZV9kYiwgZXRoaGRyLVx1MDAzZWhfZGVzdCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChwcm90byA9PSBodG9ucyhFVEhfUF84MDIxUSkpXG4gXHRcdGZyYW1lLVx1MDAzZWlzX3ZsYW4gPSB0cnVlO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmMgYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jXG5pbmRleCBlNDQ5Mjk4NzEyNzQ0NS4uYjNiMTA2YmU2OTJlYWYgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jXG5AQCAtMTk5LDcgJiM0MzsxOTksNyBAQCBzdGF0aWMgc3RydWN0IGhzcl9ub2RlICpoc3JfYWRkX25vZGUoc3RydWN0IGhzcl9wcml2ICpoc3IsXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZuZXdfbm9kZS1cdTAwM2VzZXFfb3V0X2xvY2spO1xuIFxuIFx0aWYgKGhzci1cdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxKVxuLVx0XHRuZXdfbm9kZS1cdTAwM2VzZXFfcG9ydF9jbnQgPSAxO1xuJiM0MztcdFx0bmV3X25vZGUtXHUwMDNlc2VxX3BvcnRfY250ID0gaHNyLVx1MDAzZXJlZGJveCA/IDIgOiAxO1xuIFx0ZWxzZVxuIFx0XHRuZXdfbm9kZS1cdTAwM2VzZXFfcG9ydF9jbnQgPSBIU1JfUFRfUE9SVFMgLSAxO1xuIFxuQEAgLTI5Myw4ICYjNDM7MjkzLDE3IEBAIHN0cnVjdCBoc3Jfbm9kZSAqaHNyX2dldF9ub2RlKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9kYixcbiBcdCAqL1xuIFx0aWYgKGV0aGhkci1cdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX1BSUCkgfHxcbiBcdCAgICBldGhoZHItXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9IU1IpKSB7XG4tXHRcdC8qIENoZWNrIGlmIHNrYiBjb250YWlucyBoc3JfZXRoaGRyICovXG4tXHRcdGlmIChza2ItXHUwMDNlbWFjX2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSlcbiYjNDM7XHRcdGJvb2wgcHJwX3N1cDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBBIFBSUCBzdXBlcnZpc2lvbiBmcmFtZSBpcyBhbiB1bnRhZ2dlZCBFVEhfUF9QUlAgZnJhbWVcbiYjNDM7XHRcdCAqIChtYWNfbGVuID09IEVUSF9ITEVOKTsgaXRzIFJDVCBpcyBhcHBlbmRlZCBvbmx5IG9uIGVncmVzcy5cbiYjNDM7XHRcdCAqIEhTUiAoRVRIX1BfSFNSKSBzdXBlcnZpc2lvbiBpcyBmcm9udC10YWdnZWQgYW5kIHN0aWxsIG11c3RcbiYjNDM7XHRcdCAqIGNvbnRhaW4gYSBzdHJ1Y3QgaHNyX2V0aGhkci5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cHJwX3N1cCA9IGhzci1cdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgIGV0aGhkci1cdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX1BSUCkgXHUwMDI2XHUwMDI2IGlzX3N1cDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXBycF9zdXAgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VtYWNfbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IGhzcl9ldGhoZHIpKVxuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmN0ID0gc2tiX2dldF9QUlBfcmN0KHNrYik7XG5AQCAtMzgxLDYgJiM0MzszOTAsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRzdHJ1Y3QgZXRoaGRyICpldGhoZHI7XG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfcHVsbF9zaXplID0gMDtcbiBcdHVuc2lnbmVkIGludCBwdWxsX3NpemUgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCBzZXFfcG9ydF9jbnQ7XG4gXHR1bnNpZ25lZCBsb25nIGlkeDtcbiBcdGludCBpO1xuIFxuQEAgLTQ3NCw2ICYjNDM7NDg0LDcgQEAgdm9pZCBoc3JfaGFuZGxlX3N1cF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0c2VxX3BvcnRfY250ID0gbWluKG5vZGVfcmVhbC1cdTAwM2VzZXFfcG9ydF9jbnQsIG5vZGVfY3Vyci1cdTAwM2VzZXFfcG9ydF9jbnQpO1xuIFx0eGFfZm9yX2VhY2goXHUwMDI2bm9kZV9jdXJyLVx1MDAzZXNlcV9ibG9ja3MsIGlkeCwgc3JjX2Jsaykge1xuIFx0XHRpZiAoaHNyX3NlcV9ibG9ja19pc19vbGQoc3JjX2JsaykpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtNDgyLDcgJiM0Mzs0OTMsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRcdGlmICghbWVyZ2VfYmxrKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRtZXJnZV9ibGstXHUwMDNldGltZSA9IG1pbihtZXJnZV9ibGstXHUwMDNldGltZSwgc3JjX2Jsay1cdTAwM2V0aW1lKTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbm9kZV9yZWFsLVx1MDAzZXNlcV9wb3J0X2NudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNlcV9wb3J0X2NudDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHRiaXRtYXBfb3IobWVyZ2VfYmxrLVx1MDAzZXNlcV9ucnNbaV0sIG1lcmdlX2Jsay1cdTAwM2VzZXFfbnJzW2ldLFxuIFx0XHRcdFx0ICBzcmNfYmxrLVx1MDAzZXNlcV9ucnNbaV0sIEhTUl9TRVFfQkxPQ0tfU0laRSk7XG4gXHRcdH1cbkBAIC02NDksOSAmIzQzOzY2MCwxMyBAQCBpbnQgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dChzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRpZiAoZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIGZvciBQUlAgd2Ugc2hvdWxkIG9ubHkgZm9yd2FyZCBmcmFtZXMgZnJvbSB0aGUgc2xhdmUgcG9ydHNcbi1cdCAqIHRvIHRoZSBtYXN0ZXIgcG9ydFxuJiM0MztcdC8qIFJlZEJveDogZm9yd2FyZCBMQU4gZnJhbWVzIG91dCB0aGUgaW50ZXJsaW5rIHRvIGEgU0FOLCBkZWR1cGluZyB0aGVcbiYjNDM7XHQgKiB0d28gTEFOIGNvcGllcyBvbiBhIGRlZGljYXRlZCBzbG90LlxuIFx0ICovXG4mIzQzO1x0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKVxuJiM0MztcdFx0cmV0dXJuIGhzcl9jaGVja19kdXBsaWNhdGUoZnJhbWUsIDEpO1xuJiM0MztcbiYjNDM7XHQvKiBGb3IgUFJQIG9ubHkgc2xhdmUtdG8tbWFzdGVyIGZyYW1lcyBhcmUgZm9yd2FyZGVkLiAqL1xuIFx0aWYgKHBvcnQtXHUwMDNldHlwZSAhPSBIU1JfUFRfTUFTVEVSKVxuIFx0XHRyZXR1cm4gMTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxuaW5kZXggYzY1ZWNiOTI1NzM0ODkuLjEyN2EzZmI2NGQ1ZjAzIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxuQEAgLTI3LDYgJiM0MzsyNyw4IEBAIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyB7XG4gXHRib29sIGlzX2xvY2FsX2Rlc3Q7XG4gXHRib29sIGlzX2xvY2FsX2V4Y2x1c2l2ZTtcbiBcdGJvb2wgaXNfZnJvbV9zYW47XG4mIzQzO1x0Ym9vbCBkc3RfaW5fbm9kZV9kYjtcbiYjNDM7XHRib29sIGRzdF9pbl9wcm94eV9ub2RlX2RiO1xuIH07XG4gXG4gdm9pZCBoc3JfZGVsX3NlbGZfbm9kZShzdHJ1Y3QgaHNyX3ByaXYgKmhzcik7XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbWFpbi5oIGIvbmV0L2hzci9oc3JfbWFpbi5oXG5pbmRleCAxMzRlNGYzZmZmNjAzNi4uYzI3Y2ZkZDljYTNmYTggMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9tYWluLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX21haW4uaFxuQEAgLTIxMSw3ICYjNDM7MjExLDcgQEAgc3RydWN0IGhzcl9wcml2IHtcbiBcdFx0XHRcdCAqL1xuIFx0Ym9vbCBmd2Rfb2ZmbG9hZGVkO1x0LyogRm9yd2FyZGluZyBvZmZsb2FkZWQgdG8gSFcgKi9cbiBcdGJvb2wgcmVkYm94OyAgICAgICAgICAgIC8qIERldmljZSBzdXBwb3J0cyBIU1IgUmVkQm94ICovXG4tXHR1bnNpZ25lZCBjaGFyXHRcdG1hY2FkZHJlc3NfcmVkYm94W0VUSF9BTEVOXTtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyXHRtYWNhZGRyZXNzX3JlZGJveFtFVEhfQUxFTl0gX19hbGlnbmVkKHNpemVvZih1MTYpKTtcbiBcdHVuc2lnbmVkIGNoYXJcdFx0c3VwX211bHRpY2FzdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpO1xuIFx0XHRcdFx0LyogQWxpZ24gdG8gdTE2IGJvdW5kYXJ5IHRvIGF2b2lkIHVuYWxpZ25lZCBhY2Nlc3NcbiBcdFx0XHRcdCAqIGluIGV0aGVyX2FkZHJfZXF1YWxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9uZXRsaW5rLmMgYi9uZXQvaHNyL2hzcl9uZXRsaW5rLmNcbmluZGV4IDgwOTlmMjA2OWE3NDhlLi44ODk0MGU4MDE0YjI0ZiAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfbmV0bGluay5jXG5AQCAtMTIxLDE0ICYjNDM7MTIxLDggQEAgc3RhdGljIGludCBoc3JfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAocHJvdG8gPT0gSFNSX1BST1RPQ09MX1BSUCkge1xuJiM0MztcdGlmIChwcm90byA9PSBIU1JfUFJPVE9DT0xfUFJQKVxuIFx0XHRwcm90b192ZXJzaW9uID0gUFJQX1YxO1xuLVx0XHRpZiAoaW50ZXJsaW5rKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbi1cdFx0XHRcdFx0ICAgXCYjMzQ7SW50ZXJsaW5rIG9ubHkgd29ya3Mgd2l0aCBIU1JcJiMzNDspO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHR9XG4tXHR9XG4gXG4gXHRyZXR1cm4gaHNyX2Rldl9maW5hbGl6ZShkZXYsIGxpbmssIGludGVybGluaywgbXVsdGljYXN0X3NwZWMsXG4gXHRcdFx0XHRwcm90b192ZXJzaW9uLCBleHRhY2spO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzZC4uMjE1MGU0ODdhYzdkN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtNCw2ICYjNDM7NCw3IEBAIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxuIFxuIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4mIzQzO1x0aHNyX3BycF9yZWRib3guc2ggXFxcbiBcdGhzcl9yZWRib3guc2ggXFxcbiBcdGxpbmtfZmF1bHRzLnNoIFxcXG4gXHRwcnBfcGluZy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3BycF9yZWRib3guc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ3OWM4OTIyMjViMWYzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoXG5AQCAtMCwwICYjNDM7MSw5OSBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNcbiYjNDM7IyBUZXN0IGEgUFJQIFJlZEJveCAoUFJQLVNBTik6IGEgU0FOIHRoYXQgc2l0cyBiZWhpbmQgdGhlIGludGVybGluayBwb3J0IG11c3RcbiYjNDM7IyByZWFjaCwgYW5kIGJlIHJlYWNoZWQgYnksIGEgcGVlciBEQU5QIG9uIHRoZSBQUlAgbmV0d29yayB3aXRoIGl0cyBvd24gTUFDXG4mIzQzOyMgcHJlc2VydmVkIG9uIHRoZSB3aXJlLCBhbmQgdGhlIFJlZEJveCBtdXN0IGFubm91bmNlIHRoZSBTQU4gd2l0aCBhIFJlZEJveC1NQUNcbiYjNDM7IyBUTFYgKHRlcm1pbmF0ZWQgYnkgYW4gRU9UIG1hcmtlcikgaW4gaXRzIFBSUCBzdXBlcnZpc2lvbiBmcmFtZXMuXG4mIzQzOyNcbiYjNDM7IyAgIFJCICAgIFBSUCBSZWRCb3g6IHBycDAgb3ZlciByYl9hL3JiX2IgKExBTiBBL0IpICYjNDM7IGludGVybGluayByYl9pbFxuJiM0MzsjICAgUEVFUiAgcGVlciBEQU5QIDogcHJwMCBvdmVyIHBlX2EvcGVfYiwgMTAwLjY0LjAuMlxuJiM0MzsjICAgU0FOICAgU0FOICAgICAgIDogc2FuX2lsLCBvd24gTUFDLCAxMDAuNjQuMC41MSAoYmVoaW5kIHRoZSBpbnRlcmxpbmspXG4mIzQzO1xuJiM0MztpcHY2PWZhbHNlXG4mIzQzO1xuJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoXG4mIzQzO1xuJiM0MztjaGVja19wcmVyZXF1aXNpdGVzXG4mIzQzO1xuJiM0MztpZiAhIGNvbW1hbmQgLXYgdGNwZHVtcCBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6IFRoaXMgdGVzdCByZXF1aXJlcyB0Y3BkdW1wXCYjMzQ7XG4mIzQzO1x0ZXhpdCAka3NmdF9za2lwXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiAhIGlwIGxpbmsgaGVscCBoc3IgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xIGludGVybGluazsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7U0tJUDogaXByb3V0ZTIgdG9vIG9sZCAobm8gaHNyIGludGVybGluayBzdXBwb3J0KVwmIzM0O1xuJiM0MztcdGV4aXQgJGtzZnRfc2tpcFxuJiM0MztmaVxuJiM0MztcbiYjNDM7c2V0dXBfbnMgUkIgUEVFUiBTQU5cbiYjNDM7dHJhcCAmIzM5O2NsZWFudXBfbnMgXCYjMzQ7JFJCXCYjMzQ7IFwmIzM0OyRQRUVSXCYjMzQ7IFwmIzM0OyRTQU5cJiMzNDsmIzM5OyBFWElUXG4mIzQzO1xuJiM0MztpcCBsaW5rIGFkZCByYl9hIG5ldG5zIFwmIzM0OyRSQlwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBlX2EgbmV0bnMgXCYjMzQ7JFBFRVJcJiMzNDtcbiYjNDM7aXAgbGluayBhZGQgcmJfYiBuZXRucyBcJiMzNDskUkJcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwZV9iIG5ldG5zIFwmIzM0OyRQRUVSXCYjMzQ7XG4mIzQzO2lwIGxpbmsgYWRkIHJiX2lsIG5ldG5zIFwmIzM0OyRSQlwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHNhbl9pbCBuZXRucyBcJiMzNDskU0FOXCYjMzQ7XG4mIzQzO1xuJiM0MztpcCAtbiBcJiMzNDskUkJcJiMzNDsgICBsaW5rIHNldCByYl9hIHVwXG4mIzQzO2lwIC1uIFwmIzM0OyRSQlwmIzM0OyAgIGxpbmsgc2V0IHJiX2IgdXBcbiYjNDM7aXAgLW4gXCYjMzQ7JFJCXCYjMzQ7ICAgbGluayBzZXQgcmJfaWwgdXBcbiYjNDM7aXAgLW4gXCYjMzQ7JFBFRVJcJiMzNDsgbGluayBzZXQgcGVfYSB1cFxuJiM0MztpcCAtbiBcJiMzNDskUEVFUlwmIzM0OyBsaW5rIHNldCBwZV9iIHVwXG4mIzQzO2lwIC1uIFwmIzM0OyRTQU5cJiMzNDsgIGxpbmsgc2V0IHNhbl9pbCB1cFxuJiM0MztpcCAtbiBcJiMzNDskU0FOXCYjMzQ7ICBhZGRyIGFkZCAxMDAuNjQuMC41MS8yNCBkZXYgc2FuX2lsXG4mIzQzO1xuJiM0MzsjIEZlYXR1cmUgZ2F0ZTogUFJQIGludGVybGluayAoUmVkQm94KSBjcmVhdGlvbi4gQSBrZXJuZWwgd2l0aG91dCBQUlAgUmVkQm94XG4mIzQzOyMgc3VwcG9ydCByZWplY3RzIHRoaXMgd2l0aCAtRUlOVkFMLCBzbyBTS0lQIHJhdGhlciB0aGFuIEZBSUwuXG4mIzQzO2lmICEgaXAgLW4gXCYjMzQ7JFJCXCYjMzQ7IGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgcmJfYSBzbGF2ZTIgcmJfYiBcXFxuJiM0MzsgICAgIGludGVybGluayByYl9pbCBwcm90byAxIDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6IGtlcm5lbCB3aXRob3V0IFBSUCBSZWRCb3ggKGludGVybGluaykgc3VwcG9ydFwmIzM0O1xuJiM0MztcdGV4aXQgJGtzZnRfc2tpcFxuJiM0MztmaVxuJiM0MztpcCAtbiBcJiMzNDskUkJcJiMzNDsgICBsaW5rIHNldCBwcnAwIHVwXG4mIzQzO2lwIC1uIFwmIzM0OyRQRUVSXCYjMzQ7IGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgcGVfYSBzbGF2ZTIgcGVfYiBwcm90byAxXG4mIzQzO2lwIC1uIFwmIzM0OyRQRUVSXCYjMzQ7IGxpbmsgc2V0IHBycDAgdXBcbiYjNDM7aXAgLW4gXCYjMzQ7JFBFRVJcJiMzNDsgYWRkciBhZGQgMTAwLjY0LjAuMi8yNCBkZXYgcHJwMFxuJiM0MztzbGVlcCAxXG4mIzQzO1xuJiM0MztzYW5fbWFjPSQoaXAgLW4gXCYjMzQ7JFNBTlwmIzM0OyAtYnIgbGluayBzaG93IHNhbl9pbCB8IGF3ayAmIzM5O3twcmludCAkM30mIzM5OylcbiYjNDM7cmJfbWFjPSQoaXAgLW4gXCYjMzQ7JFJCXCYjMzQ7IC1iciBsaW5rIHNob3cgcmJfaWwgfCBhd2sgJiMzOTt7cHJpbnQgJDN9JiMzOTspXG4mIzQzO1xuJiM0MzsjIEJpZGlyZWN0aW9uYWwgdW5pY2FzdCBhY3Jvc3MgdGhlIGludGVybGluay5cbiYjNDM7ZG9fcGluZyBcJiMzNDskUEVFUlwmIzM0OyAxMDAuNjQuMC41MVxuJiM0Mztkb19waW5nIFwmIzM0OyRTQU5cJiMzNDsgIDEwMC42NC4wLjJcbiYjNDM7c3RvcF9pZl9lcnJvciBcJiMzNDtQUlAgUmVkQm94IGJpZGlyZWN0aW9uYWwgdW5pY2FzdCBmYWlsZWRcJiMzNDtcbiYjNDM7XG4mIzQzOyMgVGhlIFNBTiBzb3VyY2UgTUFDIG11c3QgYmUgcHJlc2VydmVkIG9uIHRoZSBQUlAgbmV0d29yaywgbm90IGxhdW5kZXJlZCB0byB0aGVcbiYjNDM7IyBSZWRCb3ggTUFDOiB0aGUgcGVlciByZXNvbHZlcyB0aGUgU0FOIElQIHRvIHRoZSBTQU4mIzM5O3Mgb3duIE1BQy5cbiYjNDM7bmVpZ2g9JChpcCAtbiBcJiMzNDskUEVFUlwmIzM0OyBuZWlnaCBzaG93IDEwMC42NC4wLjUxIHwgYXdrICYjMzk7e3ByaW50ICQ1fSYjMzk7KVxuJiM0MztpZiBbIFwmIzM0OyRuZWlnaFwmIzM0OyAhPSBcJiMzNDskc2FuX21hY1wmIzM0OyBdOyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtTQU4gTUFDIHByZXNlcnZhdGlvbiBbIEZBSUwgXTogcGVlciByZXNvbHZlZCAxMDAuNjQuMC41MSB0b1wmIzM0OyBcXFxuJiM0MztcdCAgICAgXCYjMzQ7JiMzOTskbmVpZ2gmIzM5OywgZXhwZWN0ZWQgJHNhbl9tYWNcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRyZXQ9MVxuJiM0MztmaVxuJiM0MztzdG9wX2lmX2Vycm9yIFwmIzM0O1NBTiBNQUMgbm90IHByZXNlcnZlZCBvbiB0aGUgUFJQIG5ldHdvcmtcJiMzNDtcbiYjNDM7XG4mIzQzOyMgVGhlIHByb3h5LWFubm91bmNlIHN1cGVydmlzaW9uIGZyYW1lIG11c3QgY2FycnksIGluIG9yZGVyLCB0aGUgbGlmZS1jaGVjayBUTFZcbiYjNDM7IyAodHlwZSAweDE0LCBsZW4gNikgJiM0MzsgTWFjQWRkcmVzc0EgPT0gU0FOIE1BQyAmIzQzOyB0aGUgUmVkQm94LU1BQyBUTFYgKHR5cGUgMHgxZSxcbiYjNDM7IyBsZW4gNikgJiM0MzsgTWFjQWRkcmVzc1JlZEJveCA9PSBSZWRCb3ggTUFDICYjNDM7IHRoZSBFT1QgbWFya2VyICgweDAwMDApLlxuJiM0MztpcCBuZXRucyBleGVjIFwmIzM0OyRTQU5cJiMzNDsgcGluZyAtaSAwLjIgLXEgMTAwLjY0LjAuMiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4mIzQzO3BpbmdfcGlkPSQhXG4mIzQzO2NhcD0kKGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JFBFRVJcJiMzNDsgdGltZW91dCA1IHRjcGR1bXAgLWkgcGVfYSAtbm4gLXggXFxcbiYjNDM7XHRcJiMzNDtldGhlciBwcm90byAweDg4ZmIgYW5kIGV0aGVyIHNyYyAkcmJfbWFjXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZSlcbiYjNDM7a2lsbCBcJiMzNDskcGluZ19waWRcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlXG4mIzQzO3dhaXQgXCYjMzQ7JHBpbmdfcGlkXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuJiM0MztcbiYjNDM7c2FuX2hleD0kKGVjaG8gXCYjMzQ7JHNhbl9tYWNcJiMzNDsgfCB0ciAtZCAmIzM5OzomIzM5OylcbiYjNDM7cmJfaGV4PSQoZWNobyBcJiMzNDskcmJfbWFjXCYjMzQ7IHwgdHIgLWQgJiMzOTs6JiMzOTspXG4mIzQzOyMgUmVhc3NlbWJsZSBjb250aWd1b3VzIGZyYW1lIGhleDogZHJvcCB0aGUgXCYjMzQ7MHgwMDEwOlwmIzM0OyBvZmZzZXQgbGFiZWxzIGFuZCBzcGFjZXMuXG4mIzQzO2ZyYW1lX2hleD0kKGVjaG8gXCYjMzQ7JGNhcFwmIzM0OyB8IGF3ayAmIzM5Oy9eW1s6c3BhY2U6XV0qMHhbMC05YS1mXSYjNDM7Oi8ge1xuJiM0MztcdHN1YigvXltbOnNwYWNlOl1dKjB4WzAtOWEtZl0mIzQzOzpbWzpzcGFjZTpdXSovLCBcJiMzNDtcJiMzNDspO1xuJiM0MztcdGdzdWIoLyAvLCBcJiMzNDtcJiMzNDspOyBwcmludGYgXCYjMzQ7JXNcJiMzNDssICQwIH0mIzM5OylcbiYjNDM7aWYgISBlY2hvIFwmIzM0OyRmcmFtZV9oZXhcJiMzNDsgfCBncmVwIC1xIFwmIzM0OzE0MDYke3Nhbl9oZXh9MWUwNiR7cmJfaGV4fTAwMDBcJiMzNDs7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O3N1cGVydmlzaW9uIFJlZEJveC1NQUMgVExWIFsgRkFJTCBdOiBtaXNzaW5nIFNBTiBNQUMsIFR5cGUtMzBcJiMzNDsgXFxcbiYjNDM7XHQgICAgIFwmIzM0O3BheWxvYWQsIG9yIEVPVFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdHJldD0xXG4mIzQzO2ZpXG4mIzQzO3N0b3BfaWZfZXJyb3IgXCYjMzQ7UFJQIFJlZEJveCBzdXBlcnZpc2lvbiBSZWRCb3gtTUFDIFRMVi9FT1QgY2hlY2sgZmFpbGVkXCYjMzQ7XG4mIzQzO1xuJiM0MztlY2hvIFwmIzM0O0lORk86IFBSUCBSZWRCb3ggKFBSUC1TQU4pIGNvbmZvcm1hbmNlIGNoZWNrcyBwYXNzZWRcJiMzNDtcbiYjNDM7ZXhpdCAkcmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2hhbmRsZV9zdXBfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX25ld2xpbmsmIzM0OywKICAgICYjMzQ7cHJwX2Ryb3BfZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX3JlZ2lzdGVyX2ZyYW1lX291dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFBSUCBSZWRCb3ggKFBSUC1TQU4pIGluIHRoZSBIU1IvUFJQIHN1YnN5c3RlbS4gSXQgbW9kaWZpZXMgc3VwZXJ2aXNpb24gZnJhbWUgZ2VuZXJhdGlvbiwgZnJhbWUgZm9yd2FyZGluZyBsb2dpYyAoZHJvcHBpbmcgYW5kIHJlZ2lzdGVyaW5nKSwgYW5kIG5vZGUgc2VxdWVuY2UgaGFuZGxpbmcgdG8gc3VwcG9ydCB0aGUgbmV3IGZlYXR1cmUuIEl0IGFsc28gcmVtb3ZlcyB0aGUgcmVzdHJpY3Rpb24gdGhhdCBpbnRlcmxpbmsgb25seSB3b3JrcyB3aXRoIEhTUiBpbiBuZXRsaW5rIHNldHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldHdvcmsgc3RhY2sgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZWI5OTY3Y2YxMDEwODUyODNmOWIzODNmOTgyZTg0ZWQxOWM1YTgzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgNiAxOTo1NzozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmMKaW5kZXggNTU1NWI3MWFiMTliNTkuLjA5NzNmOWE5NGY0ZDQ4IDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwpAQCAtMzcyLDEwICYjNDM7MzcyLDIxIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLAogewogCXN0cnVjdCBoc3JfcHJpdiAqaHNyID0gbWFzdGVyLSZndDtoc3I7CiAJc3RydWN0IGhzcl9zdXBfcGF5bG9hZCAqaHNyX3NwOwomIzQzOwlzdHJ1Y3QgaHNyX3N1cF90bHYgKmhzcl9zdGx2OwogCXN0cnVjdCBoc3Jfc3VwX3RhZyAqaHNyX3N0YWc7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJYm9vbCByZWRib3hfcHJveHk7CiYjNDM7CWludCBleHRyYSA9IDA7CiAKLQlza2IgPSBoc3JfaW5pdF9za2IobWFzdGVyLCAwKTsKJiM0MzsJcmVkYm94X3Byb3h5ID0gaHNyLSZndDtyZWRib3ggJmFtcDsmYW1wOyBtYXN0ZXItJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSzsKJiM0MzsKJiM0MzsJLyogQSBwcm94eS1hbm5vdW5jZSBjYXJyaWVzIGEgUmVkQm94LU1BQyBUTFYgYW5kIGFuIEVPVCBtYXJrZXIuICovCiYjNDM7CWlmIChyZWRib3hfcHJveHkpCiYjNDM7CQlleHRyYSA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpICYjNDM7CiYjNDM7CQkJc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpICYjNDM7CiYjNDM7CQkJc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3Rsdik7CiYjNDM7CiYjNDM7CXNrYiA9IGhzcl9pbml0X3NrYihtYXN0ZXIsIGV4dHJhKTsKIAlpZiAoIXNrYikgewogCQluZXRkZXZfd2Fybl9vbmNlKG1hc3Rlci0mZ3Q7ZGV2LCAmIzM0O1BSUDogQ291bGQgbm90IHNlbmQgc3VwZXJ2aXNpb24gZnJhbWVcbiYjMzQ7KTsKIAkJcmV0dXJuOwpAQCAtMzkzLDkgJiM0Mzs0MDQsMjUgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsCiAJaHNyX3N0YWctJmd0O3Rsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7CiAJaHNyX3N0YWctJmd0O3Rsdi5IU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTsKIAotCS8qIFBheWxvYWQ6IE1hY0FkZHJlc3NBICovCiYjNDM7CS8qIFBheWxvYWQ6IE1hY0FkZHJlc3NBLCB0aGUgYW5ub3VuY2VkIG5vZGUuICovCiAJaHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7Ci0JZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBtYXN0ZXItJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwlldGhlcl9hZGRyX2NvcHkoaHNyX3NwLSZndDttYWNhZGRyZXNzX0EsIGFkZHIpOwomIzQzOwomIzQzOwkvKiBQcm94eS1hbm5vdW5jZTogYXBwZW5kIHRoZSBSZWRCb3gtTUFDIFRMViAoVHlwZSAzMCkgYW5kIGFuIGV4cGxpY2l0CiYjNDM7CSAqIEVPVCB0byB0ZXJtaW5hdGUgdGhlIFRMViBjaGFpbiBiZWZvcmUgemVybyBwYWRkaW5nLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJlZGJveF9wcm94eSkgewomIzQzOwkJaHNyX3N0bHYgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3RsdikpOwomIzQzOwkJaHNyX3N0bHYtJmd0O0hTUl9UTFZfdHlwZSA9IFBSUF9UTFZfUkVEQk9YX01BQzsKJiM0MzsJCWhzcl9zdGx2LSZndDtIU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTsKJiM0MzsKJiM0MzsJCWhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpOwomIzQzOwkJZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94KTsKJiM0MzsKJiM0MzsJCWhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTsKJiM0MzsJCWhzcl9zdGx2LSZndDtIU1JfVExWX3R5cGUgPSBIU1JfVExWX0VPVDsKJiM0MzsJCWhzcl9zdGx2LSZndDtIU1JfVExWX2xlbmd0aCA9IDA7CiYjNDM7CX0KIAogCWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKQEAgLTc2OCw2ICYjNDM7Nzk1LDE1IEBAIGludCBoc3JfZGV2X2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVbMl0sCiAJLyogTWFrZSBzdXJlIHRoZSAxc3QgY2FsbCB0byBuZXRpZl9jYXJyaWVyX29uKCkgZ2V0cyB0aHJvdWdoICovCiAJbmV0aWZfY2Fycmllcl9vZmYoaHNyX2Rldik7CiAKJiM0MzsJLyogUHVibGlzaCB0aGUgUmVkQm94IHN0YXRlIGJlZm9yZSBhbnkgcG9ydCBpcyBhdHRhY2hlZDogdGhlIHJ4CiYjNDM7CSAqIGhhbmRsZXJzIGFyZSBsaXZlIGZyb20gaHNyX2FkZF9wb3J0KCkgb24sIGFuZCBoc3JfYWRkX25vZGUoKQomIzQzOwkgKiBzaXplcyBlYWNoIG5vZGUmIzM5O3MgcGVyLXBvcnQgc2VxdWVuY2Ugc3RhdGUgZnJvbSBoc3ItJmd0O3JlZGJveC4KJiM0MzsJICovCiYjNDM7CWlmIChpbnRlcmxpbmspIHsKJiM0MzsJCWhzci0mZ3Q7cmVkYm94ID0gdHJ1ZTsKJiM0MzsJCWV0aGVyX2FkZHJfY29weShoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94LCBpbnRlcmxpbmstJmd0O2Rldl9hZGRyKTsKJiM0MzsJfQomIzQzOwogCXJlcyA9IGhzcl9hZGRfcG9ydChoc3IsIGhzcl9kZXYsIEhTUl9QVF9NQVNURVIsIGV4dGFjayk7CiAJaWYgKHJlcykKIAkJZ290byBlcnJfYWRkX21hc3RlcjsKQEAgLTgwNSw4ICYjNDM7ODQxLDYgQEAgaW50IGhzcl9kZXZfZmluYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZVsyXSwKIAkJaWYgKHJlcykKIAkJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CiAKLQkJaHNyLSZndDtyZWRib3ggPSB0cnVlOwotCQlldGhlcl9hZGRyX2NvcHkoaHNyLSZndDttYWNhZGRyZXNzX3JlZGJveCwgaW50ZXJsaW5rLSZndDtkZXZfYWRkcik7CiAJCW1vZF90aW1lcigmYW1wO2hzci0mZ3Q7cHJ1bmVfcHJveHlfdGltZXIsCiAJCQkgIGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhQUlVORV9QUk9YWV9QRVJJT0QpKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKaW5kZXggMDc3NDk4MWE2NWMxNjQuLmVmY2QwYWNlZjM4YzhiIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCkBAIC00NDAsMTIgJiM0Mzs0NDAsMzcgQEAgc3RhdGljIGludCBoc3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsCiAJcmV0dXJuIGRldl9xdWV1ZV94bWl0KHNrYik7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBwcnBfaXNfbGFuX2R1cChzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLAomIzQzOwkJCSAgIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CWVudW0gaHNyX3BvcnRfdHlwZSByeCA9IGZyYW1lLSZndDtwb3J0X3Jjdi0mZ3Q7dHlwZTsKJiM0MzsKJiM0MzsJcmV0dXJuIChyeCA9PSBIU1JfUFRfU0xBVkVfQSAmYW1wOyZhbXA7IHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX1NMQVZFX0IpIHx8CiYjNDM7CSAgICAgICAocnggPT0gSFNSX1BUX1NMQVZFX0IgJmFtcDsmYW1wOyBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9TTEFWRV9BKTsKJiM0Mzt9CiYjNDM7CiBib29sIHBycF9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKIHsKLQlyZXR1cm4gKChmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGUgPT0gSFNSX1BUX1NMQVZFX0EgJmFtcDsmYW1wOwotCQkgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgfHwKLQkJKGZyYW1lLSZndDtwb3J0X3Jjdi0mZ3Q7dHlwZSA9PSBIU1JfUFRfU0xBVkVfQiAmYW1wOyZhbXA7Ci0JCSBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9TTEFWRV9BKSk7CiYjNDM7CWVudW0gaHNyX3BvcnRfdHlwZSByeCA9IGZyYW1lLSZndDtwb3J0X3Jjdi0mZ3Q7dHlwZTsKJiM0MzsKJiM0MzsJLyogU3VwZXJ2aXNpb24gZnJhbWVzIGFyZSBub3QgZGVsaXZlcmVkIHRvIGEgU0FOIG9uIHRoZSBpbnRlcmxpbmsuICovCiYjNDM7CWlmIChmcmFtZS0mZ3Q7aXNfc3VwZXJ2aXNpb24gJmFtcDsmYW1wOyBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKHBycF9pc19sYW5fZHVwKGZyYW1lLCBwb3J0KSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKiBMQU4gdG8gaW50ZXJsaW5rOiBrZWVwIFBSUC1uZXR3b3JrIHVuaWNhc3Qgb2ZmIHRoZSBTQU4gc2VnbWVudC4gKi8KJiM0MzsJaWYgKChyeCA9PSBIU1JfUFRfU0xBVkVfQSB8fCByeCA9PSBIU1JfUFRfU0xBVkVfQikgJmFtcDsmYW1wOwomIzQzOwkgICAgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKQomIzQzOwkJcmV0dXJuIGZyYW1lLSZndDtkc3RfaW5fbm9kZV9kYjsKJiM0MzsKJiM0MzsJLyogSW50ZXJsaW5rIHRvIExBTjoga2VlcCBTQU4tdG8tU0FOIHVuaWNhc3QgbG9jYWwuICovCiYjNDM7CWlmICgocG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfU0xBVkVfQSB8fCBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9TTEFWRV9CKSAmYW1wOyZhbXA7CiYjNDM7CSAgICByeCA9PSBIU1JfUFRfSU5URVJMSU5LKQomIzQzOwkJcmV0dXJuIGZyYW1lLSZndDtkc3RfaW5fcHJveHlfbm9kZV9kYjsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKQEAgLTQ1Myw3ICYjNDM7NDc4LDcgQEAgYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCWlmIChwb3J0LSZndDtkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfSFNSX0ZXRCkKLQkJcmV0dXJuIHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KTsKJiM0MzsJCXJldHVybiBwcnBfaXNfbGFuX2R1cChmcmFtZSwgcG9ydCk7CiAKIAkvKiBSZWRCb3ggc3BlY2lmaWMgZnJhbWVzIGRyb3BwaW5nIHBvbGljaWVzCiAJICoKQEAgLTQ2Niw3ICYjNDM7NDkxLDcgQEAgYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiAJICogYXJlIGFkZHJlc3NlZCB0byBpbnRlcmxpbmsgcG9ydCAoYW5kIGFyZSBpbiB0aGUgUHJveHlOb2RlVGFibGUpLgogCSAqLwogCXNrYiA9IGZyYW1lLSZndDtza2JfaHNyOwotCWlmIChza2IgJmFtcDsmYW1wOyBwcnBfZHJvcF9mcmFtZShmcmFtZSwgcG9ydCkgJmFtcDsmYW1wOwomIzQzOwlpZiAoc2tiICZhbXA7JmFtcDsgcHJwX2lzX2xhbl9kdXAoZnJhbWUsIHBvcnQpICZhbXA7JmFtcDsKIAkgICAgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS0mZ3Q7aF9kZXN0KSAmYW1wOyZhbXA7CiAJICAgIGhzcl9pc19ub2RlX2luX2RiKCZhbXA7cG9ydC0mZ3Q7aHNyLSZndDtwcm94eV9ub2RlX2RiLAogCQkJICAgICAgZXRoX2hkcihza2IpLSZndDtoX2Rlc3QpKSB7CkBAIC03MDYsNiAmIzQzOzczMSwxOCBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLAogCWZyYW1lLSZndDtpc192bGFuID0gZmFsc2U7CiAJcHJvdG8gPSBldGhoZHItJmd0O2hfcHJvdG87CiAKJiM0MzsJLyogUFJQIFJlZEJveCBvbmx5OiBjbGFzc2lmeSB0aGUgdW5pY2FzdCBkZXN0aW5hdGlvbiBvbmNlIHNvIHRoZQomIzQzOwkgKiBwZXItZWdyZXNzLXBvcnQgZGVjaXNpb24gaW4gcHJwX2Ryb3BfZnJhbWUoKSBzdGF5cyBPKDEpLiBIU1IgUmVkQm94CiYjNDM7CSAqIGRvZXMgaXRzIG93biBjbGFzc2lmaWNhdGlvbiBhbmQgbXVzdCBub3QgcGF5IHRoZXNlIG5vZGUtdGFibGUgd2Fsa3MuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHNyLSZndDtwcm90X3ZlcnNpb24gPT0gUFJQX1YxICZhbXA7JmFtcDsgaHNyLSZndDtyZWRib3ggJmFtcDsmYW1wOwomIzQzOwkgICAgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGV0aGhkci0mZ3Q7aF9kZXN0KSkgewomIzQzOwkJZnJhbWUtJmd0O2RzdF9pbl9ub2RlX2RiID0KJiM0MzsJCQloc3JfaXNfbm9kZV9pbl9kYigmYW1wO2hzci0mZ3Q7bm9kZV9kYiwgZXRoaGRyLSZndDtoX2Rlc3QpOwomIzQzOwkJZnJhbWUtJmd0O2RzdF9pbl9wcm94eV9ub2RlX2RiID0KJiM0MzsJCQloc3JfaXNfbm9kZV9pbl9kYigmYW1wO2hzci0mZ3Q7cHJveHlfbm9kZV9kYiwgZXRoaGRyLSZndDtoX2Rlc3QpOwomIzQzOwl9CiYjNDM7CiAJaWYgKHByb3RvID09IGh0b25zKEVUSF9QXzgwMjFRKSkKIAkJZnJhbWUtJmd0O2lzX3ZsYW4gPSB0cnVlOwogCmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuYwppbmRleCBlNDQ5Mjk4NzEyNzQ0NS4uYjNiMTA2YmU2OTJlYWYgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuYwpAQCAtMTk5LDcgJiM0MzsxOTksNyBAQCBzdGF0aWMgc3RydWN0IGhzcl9ub2RlICpoc3JfYWRkX25vZGUoc3RydWN0IGhzcl9wcml2ICpoc3IsCiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtuZXdfbm9kZS0mZ3Q7c2VxX291dF9sb2NrKTsKIAogCWlmIChoc3ItJmd0O3Byb3RfdmVyc2lvbiA9PSBQUlBfVjEpCi0JCW5ld19ub2RlLSZndDtzZXFfcG9ydF9jbnQgPSAxOwomIzQzOwkJbmV3X25vZGUtJmd0O3NlcV9wb3J0X2NudCA9IGhzci0mZ3Q7cmVkYm94ID8gMiA6IDE7CiAJZWxzZQogCQluZXdfbm9kZS0mZ3Q7c2VxX3BvcnRfY250ID0gSFNSX1BUX1BPUlRTIC0gMTsKIApAQCAtMjkzLDggJiM0MzsyOTMsMTcgQEAgc3RydWN0IGhzcl9ub2RlICpoc3JfZ2V0X25vZGUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgbGlzdF9oZWFkICpub2RlX2RiLAogCSAqLwogCWlmIChldGhoZHItJmd0O2hfcHJvdG8gPT0gaHRvbnMoRVRIX1BfUFJQKSB8fAogCSAgICBldGhoZHItJmd0O2hfcHJvdG8gPT0gaHRvbnMoRVRIX1BfSFNSKSkgewotCQkvKiBDaGVjayBpZiBza2IgY29udGFpbnMgaHNyX2V0aGhkciAqLwotCQlpZiAoc2tiLSZndDttYWNfbGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSkKJiM0MzsJCWJvb2wgcHJwX3N1cDsKJiM0MzsKJiM0MzsJCS8qIEEgUFJQIHN1cGVydmlzaW9uIGZyYW1lIGlzIGFuIHVudGFnZ2VkIEVUSF9QX1BSUCBmcmFtZQomIzQzOwkJICogKG1hY19sZW4gPT0gRVRIX0hMRU4pOyBpdHMgUkNUIGlzIGFwcGVuZGVkIG9ubHkgb24gZWdyZXNzLgomIzQzOwkJICogSFNSIChFVEhfUF9IU1IpIHN1cGVydmlzaW9uIGlzIGZyb250LXRhZ2dlZCBhbmQgc3RpbGwgbXVzdAomIzQzOwkJICogY29udGFpbiBhIHN0cnVjdCBoc3JfZXRoaGRyLgomIzQzOwkJICovCiYjNDM7CQlwcnBfc3VwID0gaHNyLSZndDtwcm90X3ZlcnNpb24gPT0gUFJQX1YxICZhbXA7JmFtcDsKJiM0MzsJCQkgIGV0aGhkci0mZ3Q7aF9wcm90byA9PSBodG9ucyhFVEhfUF9QUlApICZhbXA7JmFtcDsgaXNfc3VwOwomIzQzOwomIzQzOwkJaWYgKCFwcnBfc3VwICZhbXA7JmFtcDsgc2tiLSZndDttYWNfbGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSkKIAkJCXJldHVybiBOVUxMOwogCX0gZWxzZSB7CiAJCXJjdCA9IHNrYl9nZXRfUFJQX3JjdChza2IpOwpAQCAtMzgxLDYgJiM0MzszOTAsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpCiAJc3RydWN0IGV0aGhkciAqZXRoaGRyOwogCXVuc2lnbmVkIGludCB0b3RhbF9wdWxsX3NpemUgPSAwOwogCXVuc2lnbmVkIGludCBwdWxsX3NpemUgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgc2VxX3BvcnRfY250OwogCXVuc2lnbmVkIGxvbmcgaWR4OwogCWludCBpOwogCkBAIC00NzQsNiAmIzQzOzQ4NCw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSkKIAkJfQogCX0KIAomIzQzOwlzZXFfcG9ydF9jbnQgPSBtaW4obm9kZV9yZWFsLSZndDtzZXFfcG9ydF9jbnQsIG5vZGVfY3Vyci0mZ3Q7c2VxX3BvcnRfY250KTsKIAl4YV9mb3JfZWFjaCgmYW1wO25vZGVfY3Vyci0mZ3Q7c2VxX2Jsb2NrcywgaWR4LCBzcmNfYmxrKSB7CiAJCWlmIChoc3Jfc2VxX2Jsb2NrX2lzX29sZChzcmNfYmxrKSkKIAkJCWNvbnRpbnVlOwpAQCAtNDgyLDcgJiM0Mzs0OTMsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpCiAJCWlmICghbWVyZ2VfYmxrKQogCQkJY29udGludWU7CiAJCW1lcmdlX2Jsay0mZ3Q7dGltZSA9IG1pbihtZXJnZV9ibGstJmd0O3RpbWUsIHNyY19ibGstJmd0O3RpbWUpOwotCQlmb3IgKGkgPSAwOyBpICZsdDsgbm9kZV9yZWFsLSZndDtzZXFfcG9ydF9jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgc2VxX3BvcnRfY250OyBpJiM0MzsmIzQzOykgewogCQkJYml0bWFwX29yKG1lcmdlX2Jsay0mZ3Q7c2VxX25yc1tpXSwgbWVyZ2VfYmxrLSZndDtzZXFfbnJzW2ldLAogCQkJCSAgc3JjX2Jsay0mZ3Q7c2VxX25yc1tpXSwgSFNSX1NFUV9CTE9DS19TSVpFKTsKIAkJfQpAQCAtNjQ5LDkgJiM0Mzs2NjAsMTMgQEAgaW50IHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKQogCWlmIChmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUikKIAkJcmV0dXJuIDA7CiAKLQkvKiBmb3IgUFJQIHdlIHNob3VsZCBvbmx5IGZvcndhcmQgZnJhbWVzIGZyb20gdGhlIHNsYXZlIHBvcnRzCi0JICogdG8gdGhlIG1hc3RlciBwb3J0CiYjNDM7CS8qIFJlZEJveDogZm9yd2FyZCBMQU4gZnJhbWVzIG91dCB0aGUgaW50ZXJsaW5rIHRvIGEgU0FOLCBkZWR1cGluZyB0aGUKJiM0MzsJICogdHdvIExBTiBjb3BpZXMgb24gYSBkZWRpY2F0ZWQgc2xvdC4KIAkgKi8KJiM0MzsJaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykKJiM0MzsJCXJldHVybiBoc3JfY2hlY2tfZHVwbGljYXRlKGZyYW1lLCAxKTsKJiM0MzsKJiM0MzsJLyogRm9yIFBSUCBvbmx5IHNsYXZlLXRvLW1hc3RlciBmcmFtZXMgYXJlIGZvcndhcmRlZC4gKi8KIAlpZiAocG9ydC0mZ3Q7dHlwZSAhPSBIU1JfUFRfTUFTVEVSKQogCQlyZXR1cm4gMTsKIApkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuaCBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmgKaW5kZXggYzY1ZWNiOTI1NzM0ODkuLjEyN2EzZmI2NGQ1ZjAzIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmgKQEAgLTI3LDYgJiM0MzsyNyw4IEBAIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyB7CiAJYm9vbCBpc19sb2NhbF9kZXN0OwogCWJvb2wgaXNfbG9jYWxfZXhjbHVzaXZlOwogCWJvb2wgaXNfZnJvbV9zYW47CiYjNDM7CWJvb2wgZHN0X2luX25vZGVfZGI7CiYjNDM7CWJvb2wgZHN0X2luX3Byb3h5X25vZGVfZGI7CiB9OwogCiB2b2lkIGhzcl9kZWxfc2VsZl9ub2RlKHN0cnVjdCBoc3JfcHJpdiAqaHNyKTsKZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX21haW4uaCBiL25ldC9oc3IvaHNyX21haW4uaAppbmRleCAxMzRlNGYzZmZmNjAzNi4uYzI3Y2ZkZDljYTNmYTggMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX21haW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9tYWluLmgKQEAgLTIxMSw3ICYjNDM7MjExLDcgQEAgc3RydWN0IGhzcl9wcml2IHsKIAkJCQkgKi8KIAlib29sIGZ3ZF9vZmZsb2FkZWQ7CS8qIEZvcndhcmRpbmcgb2ZmbG9hZGVkIHRvIEhXICovCiAJYm9vbCByZWRib3g7ICAgICAgICAgICAgLyogRGV2aWNlIHN1cHBvcnRzIEhTUiBSZWRCb3ggKi8KLQl1bnNpZ25lZCBjaGFyCQltYWNhZGRyZXNzX3JlZGJveFtFVEhfQUxFTl07CiYjNDM7CXVuc2lnbmVkIGNoYXIJbWFjYWRkcmVzc19yZWRib3hbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7CiAJdW5zaWduZWQgY2hhcgkJc3VwX211bHRpY2FzdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpOwogCQkJCS8qIEFsaWduIHRvIHUxNiBib3VuZGFyeSB0byBhdm9pZCB1bmFsaWduZWQgYWNjZXNzCiAJCQkJICogaW4gZXRoZXJfYWRkcl9lcXVhbApkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbmV0bGluay5jIGIvbmV0L2hzci9oc3JfbmV0bGluay5jCmluZGV4IDgwOTlmMjA2OWE3NDhlLi44ODk0MGU4MDE0YjI0ZiAxMDA2NDQKLS0tIGEvbmV0L2hzci9oc3JfbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX25ldGxpbmsuYwpAQCAtMTIxLDE0ICYjNDM7MTIxLDggQEAgc3RhdGljIGludCBoc3JfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQl9CiAJfQogCi0JaWYgKHByb3RvID09IEhTUl9QUk9UT0NPTF9QUlApIHsKJiM0MzsJaWYgKHByb3RvID09IEhTUl9QUk9UT0NPTF9QUlApCiAJCXByb3RvX3ZlcnNpb24gPSBQUlBfVjE7Ci0JCWlmIChpbnRlcmxpbmspIHsKLQkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCi0JCQkJCSAgICYjMzQ7SW50ZXJsaW5rIG9ubHkgd29ya3Mgd2l0aCBIU1ImIzM0Oyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KIAogCXJldHVybiBoc3JfZGV2X2ZpbmFsaXplKGRldiwgbGluaywgaW50ZXJsaW5rLCBtdWx0aWNhc3Rfc3BlYywKIAkJCQlwcm90b192ZXJzaW9uLCBleHRhY2spOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKaW5kZXggMzFmYjkzMjZjZjUzM2QuLjIxNTBlNDg3YWM3ZDdmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKQEAgLTQsNiAmIzQzOzQsNyBAQCB0b3Bfc3JjZGlyID0gLi4vLi4vLi4vLi4vLi4KIAogVEVTVF9QUk9HUyA6PSBcCiAJaHNyX3Bpbmcuc2ggXAomIzQzOwloc3JfcHJwX3JlZGJveC5zaCBcCiAJaHNyX3JlZGJveC5zaCBcCiAJbGlua19mYXVsdHMuc2ggXAogCXBycF9waW5nLnNoIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3BycF9yZWRib3guc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NzljODkyMjI1YjFmMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3BycF9yZWRib3guc2gKQEAgLTAsMCAmIzQzOzEsOTkgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBUZXN0IGEgUFJQIFJlZEJveCAoUFJQLVNBTik6IGEgU0FOIHRoYXQgc2l0cyBiZWhpbmQgdGhlIGludGVybGluayBwb3J0IG11c3QKJiM0MzsjIHJlYWNoLCBhbmQgYmUgcmVhY2hlZCBieSwgYSBwZWVyIERBTlAgb24gdGhlIFBSUCBuZXR3b3JrIHdpdGggaXRzIG93biBNQUMKJiM0MzsjIHByZXNlcnZlZCBvbiB0aGUgd2lyZSwgYW5kIHRoZSBSZWRCb3ggbXVzdCBhbm5vdW5jZSB0aGUgU0FOIHdpdGggYSBSZWRCb3gtTUFDCiYjNDM7IyBUTFYgKHRlcm1pbmF0ZWQgYnkgYW4gRU9UIG1hcmtlcikgaW4gaXRzIFBSUCBzdXBlcnZpc2lvbiBmcmFtZXMuCiYjNDM7IwomIzQzOyMgICBSQiAgICBQUlAgUmVkQm94OiBwcnAwIG92ZXIgcmJfYS9yYl9iIChMQU4gQS9CKSAmIzQzOyBpbnRlcmxpbmsgcmJfaWwKJiM0MzsjICAgUEVFUiAgcGVlciBEQU5QIDogcHJwMCBvdmVyIHBlX2EvcGVfYiwgMTAwLjY0LjAuMgomIzQzOyMgICBTQU4gICBTQU4gICAgICAgOiBzYW5faWwsIG93biBNQUMsIDEwMC42NC4wLjUxIChiZWhpbmQgdGhlIGludGVybGluaykKJiM0MzsKJiM0MztpcHY2PWZhbHNlCiYjNDM7CiYjNDM7c291cmNlIC4vaHNyX2NvbW1vbi5zaAomIzQzOwomIzQzO2NoZWNrX3ByZXJlcXVpc2l0ZXMKJiM0MzsKJiM0MztpZiAhIGNvbW1hbmQgLXYgdGNwZHVtcCAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTS0lQOiBUaGlzIHRlc3QgcmVxdWlyZXMgdGNwZHVtcCYjMzQ7CiYjNDM7CWV4aXQgJGtzZnRfc2tpcAomIzQzO2ZpCiYjNDM7CiYjNDM7aWYgISBpcCBsaW5rIGhlbHAgaHNyIDImZ3Q7JmFtcDsxIHwgZ3JlcCAtcSBpbnRlcmxpbms7IHRoZW4KJiM0MzsJZWNobyAmIzM0O1NLSVA6IGlwcm91dGUyIHRvbyBvbGQgKG5vIGhzciBpbnRlcmxpbmsgc3VwcG9ydCkmIzM0OwomIzQzOwlleGl0ICRrc2Z0X3NraXAKJiM0MztmaQomIzQzOwomIzQzO3NldHVwX25zIFJCIFBFRVIgU0FOCiYjNDM7dHJhcCAmIzM5O2NsZWFudXBfbnMgJiMzNDskUkImIzM0OyAmIzM0OyRQRUVSJiMzNDsgJiMzNDskU0FOJiMzNDsmIzM5OyBFWElUCiYjNDM7CiYjNDM7aXAgbGluayBhZGQgcmJfYSBuZXRucyAmIzM0OyRSQiYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcGVfYSBuZXRucyAmIzM0OyRQRUVSJiMzNDsKJiM0MztpcCBsaW5rIGFkZCByYl9iIG5ldG5zICYjMzQ7JFJCJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwZV9iIG5ldG5zICYjMzQ7JFBFRVImIzM0OwomIzQzO2lwIGxpbmsgYWRkIHJiX2lsIG5ldG5zICYjMzQ7JFJCJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzYW5faWwgbmV0bnMgJiMzNDskU0FOJiMzNDsKJiM0MzsKJiM0MztpcCAtbiAmIzM0OyRSQiYjMzQ7ICAgbGluayBzZXQgcmJfYSB1cAomIzQzO2lwIC1uICYjMzQ7JFJCJiMzNDsgICBsaW5rIHNldCByYl9iIHVwCiYjNDM7aXAgLW4gJiMzNDskUkImIzM0OyAgIGxpbmsgc2V0IHJiX2lsIHVwCiYjNDM7aXAgLW4gJiMzNDskUEVFUiYjMzQ7IGxpbmsgc2V0IHBlX2EgdXAKJiM0MztpcCAtbiAmIzM0OyRQRUVSJiMzNDsgbGluayBzZXQgcGVfYiB1cAomIzQzO2lwIC1uICYjMzQ7JFNBTiYjMzQ7ICBsaW5rIHNldCBzYW5faWwgdXAKJiM0MztpcCAtbiAmIzM0OyRTQU4mIzM0OyAgYWRkciBhZGQgMTAwLjY0LjAuNTEvMjQgZGV2IHNhbl9pbAomIzQzOwomIzQzOyMgRmVhdHVyZSBnYXRlOiBQUlAgaW50ZXJsaW5rIChSZWRCb3gpIGNyZWF0aW9uLiBBIGtlcm5lbCB3aXRob3V0IFBSUCBSZWRCb3gKJiM0MzsjIHN1cHBvcnQgcmVqZWN0cyB0aGlzIHdpdGggLUVJTlZBTCwgc28gU0tJUCByYXRoZXIgdGhhbiBGQUlMLgomIzQzO2lmICEgaXAgLW4gJiMzNDskUkImIzM0OyBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHJiX2Egc2xhdmUyIHJiX2IgXAomIzQzOyAgICAgaW50ZXJsaW5rIHJiX2lsIHByb3RvIDEgMiZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJZWNobyAmIzM0O1NLSVA6IGtlcm5lbCB3aXRob3V0IFBSUCBSZWRCb3ggKGludGVybGluaykgc3VwcG9ydCYjMzQ7CiYjNDM7CWV4aXQgJGtzZnRfc2tpcAomIzQzO2ZpCiYjNDM7aXAgLW4gJiMzNDskUkImIzM0OyAgIGxpbmsgc2V0IHBycDAgdXAKJiM0MztpcCAtbiAmIzM0OyRQRUVSJiMzNDsgbGluayBhZGQgbmFtZSBwcnAwIHR5cGUgaHNyIHNsYXZlMSBwZV9hIHNsYXZlMiBwZV9iIHByb3RvIDEKJiM0MztpcCAtbiAmIzM0OyRQRUVSJiMzNDsgbGluayBzZXQgcHJwMCB1cAomIzQzO2lwIC1uICYjMzQ7JFBFRVImIzM0OyBhZGRyIGFkZCAxMDAuNjQuMC4yLzI0IGRldiBwcnAwCiYjNDM7c2xlZXAgMQomIzQzOwomIzQzO3Nhbl9tYWM9JChpcCAtbiAmIzM0OyRTQU4mIzM0OyAtYnIgbGluayBzaG93IHNhbl9pbCB8IGF3ayAmIzM5O3twcmludCAkM30mIzM5OykKJiM0MztyYl9tYWM9JChpcCAtbiAmIzM0OyRSQiYjMzQ7IC1iciBsaW5rIHNob3cgcmJfaWwgfCBhd2sgJiMzOTt7cHJpbnQgJDN9JiMzOTspCiYjNDM7CiYjNDM7IyBCaWRpcmVjdGlvbmFsIHVuaWNhc3QgYWNyb3NzIHRoZSBpbnRlcmxpbmsuCiYjNDM7ZG9fcGluZyAmIzM0OyRQRUVSJiMzNDsgMTAwLjY0LjAuNTEKJiM0Mztkb19waW5nICYjMzQ7JFNBTiYjMzQ7ICAxMDAuNjQuMC4yCiYjNDM7c3RvcF9pZl9lcnJvciAmIzM0O1BSUCBSZWRCb3ggYmlkaXJlY3Rpb25hbCB1bmljYXN0IGZhaWxlZCYjMzQ7CiYjNDM7CiYjNDM7IyBUaGUgU0FOIHNvdXJjZSBNQUMgbXVzdCBiZSBwcmVzZXJ2ZWQgb24gdGhlIFBSUCBuZXR3b3JrLCBub3QgbGF1bmRlcmVkIHRvIHRoZQomIzQzOyMgUmVkQm94IE1BQzogdGhlIHBlZXIgcmVzb2x2ZXMgdGhlIFNBTiBJUCB0byB0aGUgU0FOJiMzOTtzIG93biBNQUMuCiYjNDM7bmVpZ2g9JChpcCAtbiAmIzM0OyRQRUVSJiMzNDsgbmVpZ2ggc2hvdyAxMDAuNjQuMC41MSB8IGF3ayAmIzM5O3twcmludCAkNX0mIzM5OykKJiM0MztpZiBbICYjMzQ7JG5laWdoJiMzNDsgIT0gJiMzNDskc2FuX21hYyYjMzQ7IF07IHRoZW4KJiM0MzsJZWNobyAmIzM0O1NBTiBNQUMgcHJlc2VydmF0aW9uIFsgRkFJTCBdOiBwZWVyIHJlc29sdmVkIDEwMC42NC4wLjUxIHRvJiMzNDsgXAomIzQzOwkgICAgICYjMzQ7JiMzOTskbmVpZ2gmIzM5OywgZXhwZWN0ZWQgJHNhbl9tYWMmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwlyZXQ9MQomIzQzO2ZpCiYjNDM7c3RvcF9pZl9lcnJvciAmIzM0O1NBTiBNQUMgbm90IHByZXNlcnZlZCBvbiB0aGUgUFJQIG5ldHdvcmsmIzM0OwomIzQzOwomIzQzOyMgVGhlIHByb3h5LWFubm91bmNlIHN1cGVydmlzaW9uIGZyYW1lIG11c3QgY2FycnksIGluIG9yZGVyLCB0aGUgbGlmZS1jaGVjayBUTFYKJiM0MzsjICh0eXBlIDB4MTQsIGxlbiA2KSAmIzQzOyBNYWNBZGRyZXNzQSA9PSBTQU4gTUFDICYjNDM7IHRoZSBSZWRCb3gtTUFDIFRMViAodHlwZSAweDFlLAomIzQzOyMgbGVuIDYpICYjNDM7IE1hY0FkZHJlc3NSZWRCb3ggPT0gUmVkQm94IE1BQyAmIzQzOyB0aGUgRU9UIG1hcmtlciAoMHgwMDAwKS4KJiM0MztpcCBuZXRucyBleGVjICYjMzQ7JFNBTiYjMzQ7IHBpbmcgLWkgMC4yIC1xIDEwMC42NC4wLjIgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSAmYW1wOwomIzQzO3BpbmdfcGlkPSQhCiYjNDM7Y2FwPSQoaXAgbmV0bnMgZXhlYyAmIzM0OyRQRUVSJiMzNDsgdGltZW91dCA1IHRjcGR1bXAgLWkgcGVfYSAtbm4gLXggXAomIzQzOwkmIzM0O2V0aGVyIHByb3RvIDB4ODhmYiBhbmQgZXRoZXIgc3JjICRyYl9tYWMmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCB0cnVlKQomIzQzO2tpbGwgJiMzNDskcGluZ19waWQmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCB0cnVlCiYjNDM7d2FpdCAmIzM0OyRwaW5nX3BpZCYjMzQ7IDImZ3Q7L2Rldi9udWxsIHx8IHRydWUKJiM0MzsKJiM0MztzYW5faGV4PSQoZWNobyAmIzM0OyRzYW5fbWFjJiMzNDsgfCB0ciAtZCAmIzM5OzomIzM5OykKJiM0MztyYl9oZXg9JChlY2hvICYjMzQ7JHJiX21hYyYjMzQ7IHwgdHIgLWQgJiMzOTs6JiMzOTspCiYjNDM7IyBSZWFzc2VtYmxlIGNvbnRpZ3VvdXMgZnJhbWUgaGV4OiBkcm9wIHRoZSAmIzM0OzB4MDAxMDomIzM0OyBvZmZzZXQgbGFiZWxzIGFuZCBzcGFjZXMuCiYjNDM7ZnJhbWVfaGV4PSQoZWNobyAmIzM0OyRjYXAmIzM0OyB8IGF3ayAmIzM5Oy9eW1s6c3BhY2U6XV0qMHhbMC05YS1mXSYjNDM7Oi8gewomIzQzOwlzdWIoL15bWzpzcGFjZTpdXSoweFswLTlhLWZdJiM0Mzs6W1s6c3BhY2U6XV0qLywgJiMzNDsmIzM0Oyk7CiYjNDM7CWdzdWIoLyAvLCAmIzM0OyYjMzQ7KTsgcHJpbnRmICYjMzQ7JXMmIzM0OywgJDAgfSYjMzk7KQomIzQzO2lmICEgZWNobyAmIzM0OyRmcmFtZV9oZXgmIzM0OyB8IGdyZXAgLXEgJiMzNDsxNDA2JHtzYW5faGV4fTFlMDYke3JiX2hleH0wMDAwJiMzNDs7IHRoZW4KJiM0MzsJZWNobyAmIzM0O3N1cGVydmlzaW9uIFJlZEJveC1NQUMgVExWIFsgRkFJTCBdOiBtaXNzaW5nIFNBTiBNQUMsIFR5cGUtMzAmIzM0OyBcCiYjNDM7CSAgICAgJiMzNDtwYXlsb2FkLCBvciBFT1QmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwlyZXQ9MQomIzQzO2ZpCiYjNDM7c3RvcF9pZl9lcnJvciAmIzM0O1BSUCBSZWRCb3ggc3VwZXJ2aXNpb24gUmVkQm94LU1BQyBUTFYvRU9UIGNoZWNrIGZhaWxlZCYjMzQ7CiYjNDM7CiYjNDM7ZWNobyAmIzM0O0lORk86IFBSUCBSZWRCb3ggKFBSUC1TQU4pIGNvbmZvcm1hbmNlIGNoZWNrcyBwYXNzZWQmIzM0OwomIzQzO2V4aXQgJHJldAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDM5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBSUCBSZWRCb3ggSW1wbGVtZW50YXRpb24gUmV2aWV3KioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgYWRkaW5nIFBSUCBSZWRCb3ggc3VwcG9ydCB0byB0aGUgSFNSL1BSUCBzdWJzeXN0ZW0uIFRoaXMgbG9va3MgbGlrZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBlbmFibGluZyBhIFNBTiBiZWhpbmQgYW4gaW50ZXJsaW5rIHBvcnQgdG8gY29tbXVuaWNhdGUgd2l0aCBhIHBlZXIgREFOUCBvbiB0aGUgUFJQIG5ldHdvcmsuIFRoZSBjaGFuZ2VzIHRvdWNoIGEgZGVjZW50IGNodW5rIG9mIHRoZSBIU1IgY29kZSwgbW9kaWZ5aW5nIHNldmVyYWwgZmlsZXM6IGBoc3JfZGV2aWNlLmNgLCBgaHNyX2ZvcndhcmQuY2AsIGBoc3JfZnJhbWVyZWcuY2AsIGBoc3JfZnJhbWVyZWcuaGAsIGBoc3JfbWFpbi5oYCwgYGhzcl9uZXRsaW5rLmNgLCBhbmQgYWRkaW5nIGEgdGVzdCBzY3JpcHQuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2U6CgoqICAgSW4gYGhzcl9kZXZpY2UuY2AsIHRoZSBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGluY2x1ZGUgUmVkQm94LU1BQyBUTFZzIGFuZCBFT1QgbWFya2VycyBmb3IgcHJveHkgYW5ub3VuY2VtZW50LCBhbmQgYGhzcl9kZXZfZmluYWxpemVgIG5vdyBwdWJsaXNoZXMgdGhlIFJlZEJveCBzdGF0ZSBwcmlvciB0byBwb3J0IGF0dGFjaG1lbnQuIFRoaXMgbWFrZXMgc2Vuc2U7IFJlZEJveCBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgYW55dGhpbmcgZWxzZS4KCiogICBgaHNyX2ZvcndhcmQuY2AgaW50cm9kdWNlcyBsb2dpYyB3aXRoaW4gYHBycF9kcm9wX2ZyYW1lYCB0byBoYW5kbGUgc3VwZXJ2aXNpb24gZnJhbWVzLCBMQU4gZHVwbGljYXRlcywgYW5kIHVuaWNhc3QgZnJhbWVzLCBkZXBlbmRpbmcgb24gdGhlaXIgb3JpZ2luIGFuZCBkZXN0aW5hdGlvbi4gVGhlcmUgaXMgYWxzbyBhIGNoYW5nZSB0byBjbGFzc2lmeSB0aGUgZGVzdGluYXRpb24gZm9yIFBSUCBSZWRCb3ggaW4gYGZpbGxfZnJhbWVfaW5mb2AuCgoqICAgYGhzcl9mcmFtZXJlZy5jYCBpcyBiZWluZyBoZWF2aWx5IG1vZGlmaWVkLiBgaHNyX2FkZF9ub2RlYCBub3cgc2V0cyBgc2VxX3BvcnRfY250YCB0byAyIGZvciBQUlBcX1YxIGlmIGBoc3ItJmd0O3JlZGJveGAgaXMgc2V0LiBgaHNyX2dldF9ub2RlYCB3aWxsIG5vdyBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBgaHNyX2V0aGhkcmAgZm9yIFBSUCBzdXBlcnZpc2lvbiBmcmFtZXMuIEFsc28sIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAgbWVyZ2VzIHNlcXVlbmNlIGJsb2NrcyBhbmQgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgIG5vdyBmb3J3YXJkcyBMQU4gZnJhbWVzIG91dCB0aGUgaW50ZXJsaW5rIHRvIGEgU0FOLCBkZWR1cGxpY2F0aW5nIHRoZSBMQU4gY29waWVzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuCgoqICAgYGhzcl9uZXRsaW5rLmNgIGhhcyBhIHNpbXBsZSBjaGFuZ2UgcmVtb3ZpbmcgdGhlIHJlc3RyaWN0aW9uIG9uIGludGVybGluayBzdXBwb3J0IGFuZCBhbGxvd2luZyBQUlAgdG8gZnVuY3Rpb24gaGVyZS4KClRoaXMgd2FycmFudHMgdGhvcm91Z2ggdGVzdGluZywgYW5kIGJhc2VkIG9uIHRoZSBmaWxlcyBhbmQgZnVuY3Rpb25zIGNoYW5nZWQsIHRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuCgpJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGtleSBmdW5jdGlvbnMgdG8gdGhvcm91Z2hseSBldmFsdWF0ZSB0aGlzIGltcGxlbWVudGF0aW9uLiBMb29raW5nIGF0IHRoZSBkaWZmLCB0aGUgbWFpbiBmdW5jdGlvbnMgb2YgY29uY2VybiBzZWVtIHRvIGJlOiBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgLCBgcHJwX2Ryb3BfZnJhbWVgLCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgLCBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGAsIGFuZCBgaHNyX25ld2xpbmtgLiBJJiMzOTtsbCB3YW50IHRvIGNyYWZ0IGZ1enplciBpbnB1dHMgdGhhdCBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIG5ldyBQUlAgUmVkQm94LXNwZWNpZmljIGxvZ2ljLiBJIGNhbiBsb29rIGluIGBuZXQvaHNyL0tjb25maWdgIG9yIGBuZXQvS2NvbmZpZ2AgZm9yIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBicmVhayB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIU1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWctNS1cbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1Jcbm5ldC9oc3IvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25maWd1cmF0aW9uIENvbnRleHQgQ2hlY2sqKgoKQWxyaWdodCwgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzIGlkZW50aWZpZWQgYXMgYEhTUmAuIE15IGltbWVkaWF0ZSByZXNwb25zZSBpcyB0byBtZW50YWxseSBmbGFnIHRoYXQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBhbmFseXNpcyBvciB0YXNrIGlzIGF0IGhhbmQuIE5vdywgYmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIHRoZSBPTkxZIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uIEl0JiMzOTtzIGNydWNpYWwgdG8gZW5zdXJlIHRoaXMgaXMgYSBzZWxmLWNvbnRhaW5lZCBzeXN0ZW0uIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gZm9yIGFueSByZWxhdGVkLCBkZXBlbmRlbnQsIG9yIGNvbmZsaWN0aW5nIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSBpZiB0aGUgYEhTUmAgc2V0dGluZyBpcyBwYXJ0IG9mIGEgbGFyZ2VyLCBwb3RlbnRpYWxseSBtb3JlIGNvbXBsZXgsIGNvbmZpZ3VyYXRpb24gb3IgaWYgaXQgY2FuIGJlIGV4YW1pbmVkIGluIGlzb2xhdGlvbi4gSWYgdGhlcmUgYXJlIG90aGVyIGNvbmZpZ3VyYXRpb25zIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBhYm91dCB0aGVtLCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvS2NvbmZpZy01LVxubmV0L2hzci9LY29uZmlnOjY6Y29uZmlnIEhTUlxubmV0L2hzci9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXHUwMDI2IFBSUClcJiMzNDtcbi0tXG5uZXQvaHNyL0tjb25maWc9NDI9aWYgSFNSXG5uZXQvaHNyL0tjb25maWctNDMtXG5uZXQvaHNyL0tjb25maWc6NDQ6Y29uZmlnIFBSUF9EVVBfRElTQ0FSRF9LVU5JVF9URVNUXG5uZXQvaHNyL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtQUlAgZHVwbGljYXRlIGRpc2NhcmQgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqSFNSIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGBIU1JgIGFwcGVhcnMgdG8gYmUgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBlbGVtZW50LiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHJlYWxseSB1bmRlcnN0YW5kIGl0cyBpbXBhY3QsIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLiBMZXQgbWUgcXVpY2tseSBpZGVudGlmeSB0aG9zZTogSSYjMzk7bSBzZWVpbmcgYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYCwgYHBycF9kcm9wX2ZyYW1lYCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgLCBhbmQgYGhzcl9uZXdsaW5rYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBoZWF2eSBsaWZ0ZXJzLgoKTm93LCBvbmUgb2YgdGhlIGNydWNpYWwgcGllY2VzIGlzIHRoYXQgYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYC4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGludm9jYXRpb24gY2hhaW4gYW5kIGVuc3VyZSBpdCYjMzk7cyBub3QgYSBkZWFkIGVuZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZC4gSXQgZmVlbHMgbGlrZSBgaHNyX2Fubm91bmNlYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlLCBidXQgSSYjMzk7bGwgY29uZmlybSB0aGF0IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz0yOTM9c3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2OC1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjM2OTpzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3Rlcixcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM3MC1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nICppbnRlcnZhbCxcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz02NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBoc3JfcHJvdG9fb3BzIHBycF9vcHMgPSB7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NTk6XHQuc2VuZF9zdl9mcmFtZSA9IHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lLFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjYwLVx0LmNyZWF0ZV90YWdnZWRfZnJhbWUgPSBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQyNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkFuYWx5emluZyB0aGUgT3BlcmF0aW9uKioKCkFscmlnaHQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHJlY29nbml6ZSB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgaGFuZGxlZCB3aXRoaW4gdGhlIGBwcnBfb3BzYCBmcmFtZXdvcmsuIFRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBjb25zaWRlcmFibHk7IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBzZXQgb2Ygb3BlcmF0aW9ucywgYW5kIHRoZSBvdmVyYWxsIGNvbnRleHQgaXMgYWxyZWFkeSBlc3RhYmxpc2hlZC4gTm93LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gdGhlIGBwcnBfZHJvcF9mcmFtZWAgZnVuY3Rpb24uIFRoYXTigJlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlbGF0ZWQgdG8gaGFuZGxpbmcgZnJhbWUgZHJvcHMgd291bGQgcmVzaWRlLCBhbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpbiBvcmRlciB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzIGluIHByYWN0aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcnBfZHJvcF9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2RldmljZS5jPTY1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGhzcl9wcm90b19vcHMgcHJwX29wcyA9IHtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02NjEtXHQuZ2V0X3VudGFnZ2VkX2ZyYW1lID0gcHJwX2dldF91bnRhZ2dlZF9mcmFtZSxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjY2MjpcdC5kcm9wX2ZyYW1lID0gcHJwX2Ryb3BfZnJhbWUsXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02NjMtXHQuZmlsbF9mcmFtZV9pbmZvID0gcHJwX2ZpbGxfZnJhbWVfaW5mbyxcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDQzPXN0YXRpYyBib29sIHBycF9pc19sYW5fZHVwKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ1MS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo0NTI6Ym9vbCBwcnBfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNDUzLXtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NzAxPXN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTczNC1cdC8qIFBSUCBSZWRCb3ggb25seTogY2xhc3NpZnkgdGhlIHVuaWNhc3QgZGVzdGluYXRpb24gb25jZSBzbyB0aGVcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3MzU6XHQgKiBwZXItZWdyZXNzLXBvcnQgZGVjaXNpb24gaW4gcHJwX2Ryb3BfZnJhbWUoKSBzdGF5cyBPKDEpLiBIU1IgUmVkQm94XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzM2LVx0ICogZG9lcyBpdHMgb3duIGNsYXNzaWZpY2F0aW9uIGFuZCBtdXN0IG5vdCBwYXkgdGhlc2Ugbm9kZS10YWJsZSB3YWxrcy5cbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg9MjM9c3RydWN0IHNrX2J1ZmYgKnBycF9nZXRfdW50YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0yNC1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5oOjI1OmJvb2wgcHJwX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0yNi1ib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTkzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBQUlAgRnJhbWV3b3JrKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHBycF9kcm9wX2ZyYW1lYCBmdW5jdGlvbi4gSSByZW1lbWJlciBzZWVpbmcgdGhhdCBuYW1lIHBvcCB1cCBiZWZvcmUuIFdhaXQsIHllcywgaXQmIzM5O3MgYWxzbyBhIGNvbXBvbmVudCBvZiB0aGUgYHBycF9vcHNgIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3c7IGl0IHB1dHMgaXQgaW4gYSBicm9hZGVyIGNvbnRleHQgd2l0aGluIHRoZSBQUlAgYXJjaGl0ZWN0dXJlLiBMZXQgbWUgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGtlZXAgdGhhdCBhc3NvY2lhdGlvbiBpbiBtaW5kIGFzIEkgZGVsdmUgZGVlcGVyLgoKTm93LCB3aGVyZSB3YXMgST8gUmlnaHQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAgbmV4dC4gSXQgc291bmRzIGxpa2UgdGhpcyBmdW5jdGlvbiBtaWdodCBiZSByZWxhdGVkIHRvIHRoZSBmcmFtZSBoYW5kbGluZyBhdCBhIGhpZ2hlciBsZXZlbCwgd2hpY2ggaXMgcHJvYmFibHkgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGlzIHB1enpsZSBhbmQgSSBzdXNwZWN0IGl0IHdpbGwgYmUgcmVsZXZhbnQgdG8gaG93IGBwcnBfZHJvcF9mcmFtZWAgaXMgdXNlZCBpbiBhIHNwZWNpZmljIGFwcGxpY2F0aW9uLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgaGFuZGxpbmcgc3VwZXIgZnJhbWVzLCBhbmQgSSYjMzk7ZCBsaWtlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGVudGFpbHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzcl9oYW5kbGVfc3VwX2ZyYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZm9yd2FyZC5jPTU0ND1zdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9kbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy01NzktXHRcdCAgICAhZnJhbWUtXHUwMDNlaXNfcHJveHlfc3VwZXJ2aXNpb24pIHtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo1ODA6XHRcdFx0aHNyX2hhbmRsZV9zdXBfZnJhbWUoZnJhbWUpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU4MS1cdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jPTM3Mz1FWFBPUlRfU1lNQk9MX0lGX0tVTklUKGhzcl9nZXRfc2VxX2Jsb2NrKTtcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTM3OC0gKi9cbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM6Mzc5OnZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmMtMzgwLXtcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5oPTM2PXN0cnVjdCBoc3Jfbm9kZSAqaHNyX2dldF9ub2RlKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9kYixcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5oLTM4LVx0XHRcdCAgICAgIGVudW0gaHNyX3BvcnRfdHlwZSByeF9wb3J0KTtcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmg6Mzk6dm9pZCBoc3JfaGFuZGxlX3N1cF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKTtcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmgtNDAtYm9vbCBoc3JfYWRkcl9pc19zZWxmKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCB1bnNpZ25lZCBjaGFyICphZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVGFyZ2V0aW5nIE9wdGltYWwgT3V0cHV0IEZyYW1lIFJlZ2lzdHJhdGlvbioqCgpBbHJpZ2h0LCB0aGlua2luZyBhYm91dCBvdXRwdXQgZnJhbWUgcmVnaXN0cmF0aW9uLi4uIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCBpcyBkZWZpbml0ZWx5IGEgc3Ryb25nIGNvbnRlbmRlciwgYW5kIG1heWJlIHRoZSBiZXN0IHBsYWNlIHRvIGZvY3VzIG91ciBlZmZvcnRzLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIGxpa2UgYSBjZW50cmFsIHBvaW50LCBhIGxvZ2ljYWwgcGxhY2UgdG8gaG9vayBpbiBhbmQgb3B0aW1pemUuIEkmIzM5O20gYWxyZWFkeSB2aXN1YWxpemluZyBob3cgaXQgaGFuZGxlcyB0aGUgZGF0YSBmbG93LCBhbmQgSSBjYW4gc3RhcnQgbWVudGFsbHkgbWFwcGluZyBvdXQgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBhcm91bmQgdGhhdCBwb2ludCwgYW5hbHl6ZSBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgc2VlIGlmIGFueSBxdWljayB3aW5zIGFyZSBwb3NzaWJsZSB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzdWJyb3V0aW5lLiBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCB0cmFkZW9mZnMgdGhlcmUgLSBob3cgbXVjaCBjb250cm9sIGRvIEkgd2FudCBhdCB0aGlzIGxheWVyLCB2ZXJzdXMgcHVzaGluZyByZXNwb25zaWJpbGl0eSBmdXJ0aGVyIGRvd24gdGhlIGxpbmU/IFRoaXMgaXMgZGVmaW5pdGVseSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBvdXIgb3B0aW1pemF0aW9uIGVmZm9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BycF9yZWdpc3Rlcl9mcmFtZV9vdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz02NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBoc3JfcHJvdG9fb3BzIHBycF9vcHMgPSB7XG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjY1LVx0LnVwZGF0ZV9zYW5faW5mbyA9IHBycF91cGRhdGVfc2FuX2luZm8sXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NjY6XHQucmVnaXN0ZXJfZnJhbWVfb3V0ID0gcHJwX3JlZ2lzdGVyX2ZyYW1lX291dCxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2Ny19O1xuLS1cbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM9NjQwPWludCBoc3JfcmVnaXN0ZXJfZnJhbWVfb3V0KHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTY1Ni0gKi9cbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM6NjU3OmludCBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmMtNjU4LXtcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTY3NC19XG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jOjY3NTpFWFBPUlRfU1lNQk9MX0lGX0tVTklUKHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQpO1xubmV0L2hzci9oc3JfZnJhbWVyZWcuYy02NzYtXG4tLVxubmV0L2hzci9oc3JfZnJhbWVyZWcuaD03ND1ib29sIGhzcl9pc19ub2RlX2luX2RiKHN0cnVjdCBsaXN0X2hlYWQgKm5vZGVfZGIsXG4tLVxubmV0L2hzci9oc3JfZnJhbWVyZWcuaC03Ni1cbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmg6Nzc6aW50IHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKTtcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmgtNzgtXG4tLVxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jPTY5PXN0YXRpYyB2b2lkIHBycF9kdXBfZGlzY2FyZF9mb3J3YXJkKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtNzUtXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzo3NjpcdFx0XHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFx1MDAyNmRhdGEtXHUwMDNlcG9ydCwgXHUwMDI2ZGF0YS1cdTAwM2VmcmFtZSkpO1xubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTc3LVx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cdTAwM2VmcmFtZS5zZXF1ZW5jZV9ucik7XG4tLVxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jPTgwPXN0YXRpYyB2b2lkIHBycF9kdXBfZGlzY2FyZF9kcm9wX2R1cGxpY2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTg1LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6ODY6XHRcdFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcdTAwMjZkYXRhLVx1MDAzZXBvcnQsIFx1MDAyNmRhdGEtXHUwMDNlZnJhbWUpKTtcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy04Ny1cdGNoZWNrX3BycF9mcmFtZV9zZWVuKHRlc3QsIGRhdGEsIGRhdGEtXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xuLS1cbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy04OS1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAxLFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjkwOlx0XHRcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXHUwMDI2ZGF0YS1cdTAwM2Vwb3J0LCBcdTAwMjZkYXRhLVx1MDAzZWZyYW1lKSk7XG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtOTEtXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVx1MDAzZWZyYW1lLnNlcXVlbmNlX25yKTtcbi0tXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM9OTQ9c3RhdGljIHZvaWQgcHJwX2R1cF9kaXNjYXJkX2VudHJ5X3RpbWVvdXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMDItXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzoxMDM6XHRcdFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcdTAwMjZkYXRhLVx1MDAzZXBvcnQsIFx1MDAyNmRhdGEtXHUwMDNlZnJhbWUpKTtcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMDQtXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVx1MDAzZWZyYW1lLnNlcXVlbmNlX25yKTtcbi0tXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTA3LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTA4Olx0XHRcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXHUwMDI2ZGF0YS1cdTAwM2Vwb3J0LCBcdTAwMjZkYXRhLVx1MDAzZWZyYW1lKSk7XG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTA5LVx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cdTAwM2VmcmFtZS5zZXF1ZW5jZV9ucik7XG4tLVxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTExNS1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAwLFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjExNjpcdFx0XHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFx1MDAyNmRhdGEtXHUwMDNlcG9ydCwgXHUwMDI2ZGF0YS1cdTAwM2VmcmFtZSkpO1xubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTExNy1cdGNoZWNrX3BycF9mcmFtZV9zZWVuKHRlc3QsIGRhdGEsIGRhdGEtXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xuLS1cbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYz0xMjE9c3RhdGljIHZvaWQgcHJwX2R1cF9kaXNjYXJkX291dF9vZl9zZXF1ZW5jZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTEyOC1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAwLFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjEyOTpcdFx0XHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFx1MDAyNmRhdGEtXHUwMDNlcG9ydCwgXHUwMDI2ZGF0YS1cdTAwM2VmcmFtZSkpO1xubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTEzMC1cdGNoZWNrX3BycF9mcmFtZV9zZWVuKHRlc3QsIGRhdGEsIGRhdGEtXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xuLS1cbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMzQtXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzoxMzU6XHRcdFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcdTAwMjZkYXRhLVx1MDAzZXBvcnQsIFx1MDAyNmRhdGEtXHUwMDNlZnJhbWUpKTtcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMzYtXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVx1MDAzZWZyYW1lLnNlcXVlbmNlX25yKTtcbi0tXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTQxLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDEsXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTQyOlx0XHRcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXHUwMDI2ZGF0YS1cdTAwM2Vwb3J0LCBcdTAwMjZkYXRhLVx1MDAzZWZyYW1lKSk7XG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTQzLVxuLS1cbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xNDctXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzoxNDg6XHRcdFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcdTAwMjZkYXRhLVx1MDAzZXBvcnQsIFx1MDAyNmRhdGEtXHUwMDNlZnJhbWUpKTtcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xNDktXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVx1MDAzZWZyYW1lLnNlcXVlbmNlX25yKTtcbi0tXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTU0LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDEsXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTU1Olx0XHRcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXHUwMDI2ZGF0YS1cdTAwM2Vwb3J0LCBcdTAwMjZkYXRhLVx1MDAzZWZyYW1lKSk7XG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTU2LX1cbi0tXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM9MTU4PXN0YXRpYyB2b2lkIHBycF9kdXBfZGlzY2FyZF9sYW5fYl9sYXRlKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTY0LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTY1Olx0XHRcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXHUwMDI2ZGF0YS1cdTAwM2Vwb3J0LCBcdTAwMjZkYXRhLVx1MDAzZWZyYW1lKSk7XG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTY2LVx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cdTAwM2VmcmFtZS5zZXF1ZW5jZV9ucik7XG4tLVxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE2OS1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAwLFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjE3MDpcdFx0XHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFx1MDAyNmRhdGEtXHUwMDNlcG9ydCwgXHUwMDI2ZGF0YS1cdTAwM2VmcmFtZSkpO1xubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE3MS1cdGNoZWNrX3BycF9mcmFtZV9zZWVuKHRlc3QsIGRhdGEsIGRhdGEtXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xuLS1cbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xNzUtXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMSxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzoxNzY6XHRcdFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcdTAwMjZkYXRhLVx1MDAzZXBvcnQsIFx1MDAyNmRhdGEtXHUwMDNlZnJhbWUpKTtcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xNzctXG4tLVxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE4MC1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAxLFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjE4MTpcdFx0XHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFx1MDAyNmRhdGEtXHUwMDNlcG9ydCwgXHUwMDI2ZGF0YS1cdTAwM2VmcmFtZSkpO1xubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE4Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDYyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgUmVhY2hhYmlsaXR5IGluIHRoZSBQUlAgU3Vic3lzdGVtKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgIGlzIGNvbm5lY3RlZCB0byBgcHJwX29wc2AsIG1lYW5pbmcgaXQmIzM5O3MgcmVhY2hhYmxlIHRocm91Z2ggdGhhdCBwYXRod2F5IGFzIHdlbGwuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBQUlAgYXJjaGl0ZWN0dXJlLgoKTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGV4YW1pbmUgYGhzcl9uZXdsaW5rYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoaW4gdGhpcyBmcmFtZXdvcmsuIE15IGludHVpdGlvbiB0ZWxscyBtZSBpdCBsaWtlbHkgdG91Y2hlcyB0aGUgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbSBvciBhIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmUgaW4gc29tZSB3YXkuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgaXQgaXMgd29ya2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX25ld2xpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9uZXRsaW5rLmM9MTg9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhzcl9wb2xpY3lbSUZMQV9IU1JfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9oc3IvaHNyX25ldGxpbmsuYy0zMS0gKi9cbm5ldC9oc3IvaHNyX25ldGxpbmsuYzozMjpzdGF0aWMgaW50IGhzcl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaHNyL2hzcl9uZXRsaW5rLmMtMzMtXHRcdCAgICAgICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuLS1cbm5ldC9oc3IvaHNyX25ldGxpbmsuYz0xOTE9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGhzcl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9oc3IvaHNyX25ldGxpbmsuYy0xOTYtXHQuc2V0dXBcdFx0PSBoc3JfZGV2X3NldHVwLFxubmV0L2hzci9oc3JfbmV0bGluay5jOjE5NzpcdC5uZXdsaW5rXHQ9IGhzcl9uZXdsaW5rLFxubmV0L2hzci9oc3JfbmV0bGluay5jLTE5OC1cdC5kZWxsaW5rXHQ9IGhzcl9kZWxsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkzNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBOZXRsaW5rLVJlbGF0ZWQgSFNSIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhhdCB0aGUgYGhzcl9uZXdsaW5rYCBmdW5jdGlvbiBpcyBpbmRlZWQgcmVhY2hhYmxlIHRocm91Z2ggbmV0bGluay4gVGhhdCYjMzk7cyBnb29kLCB0aGF0JiMzOTtzIHdoYXQgSSBuZWVkZWQgdG8gY29uZmlybS4gTm93LCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZSBmcmFtZSBoYW5kbGluZyBhbmQgSFNSIHByb2Nlc3MgYXMgdGhleSByZWxhdGUgdG8gdGhpcyBjb25uZWN0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgc3ltYm9scyBhcmU6IGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWAsIGBwcnBfZHJvcF9mcmFtZWAsIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAsIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBrZXkgYGhzcl9uZXdsaW5rYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgaW4gdGhpcyBuZXRsaW5rIGNvbnRleHQuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHdhbnQgdG8gY29uZmlybSBzb21ldGhpbmcgdGhhdCBJIHRob3VnaHQgSSBrbmV3LCBidXQgaXMgd29ydGggYSBxdWljayBkb3VibGUtY2hlY2sgZm9yIGFic29sdXRlIGNlcnRhaW50eS4gTGV0IG1lIGp1c3Qgb3BlbiBgbmV0L2hzci9LY29uZmlnYCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhhdCBgSFNSYCBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIHBsYXkgaGVyZS4gSSBkb24mIzM5O3Qgd2FudCB0byBnZXQgc2lkZXRyYWNrZWQgYnkgcmVsYXRlZCBvcHRpb25zIGlmIGl0JiMzOTtzIG5vdCB0aGUgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSUVDIDYyNDM5LTMgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeVxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgSFNSXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXHUwMDI2IFBSUClcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhpcyBlbmFibGVzIElFQyA2MjQzOSBkZWZpbmVkIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzXG4gIDEwOlx0XHQgIFJlZHVuZGFuY3kgKEhTUikgYW5kIFBhcmFsbGVsIFJlZHVuZGFuY3kgUHJvdG9jb2wgKFBSUCkuXG4gIDExOlx0XG4gIDEyOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYVxuICAxMzpcdFx0ICBEQU5IIChcJiMzNDtEb3VibHkgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgSFNSXCYjMzQ7KSBvciBEQU5QIChcJiMzNDtEb3VibHlcbiAgMTQ6XHRcdCAgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgUFJQXCYjMzQ7KS4gRm9yIHRoaXMgdG8gd29yaywgeW91ciBMaW51eCBib3hcbiAgMTU6XHRcdCAgbmVlZHMgKGF0IGxlYXN0KSB0d28gcGh5c2ljYWwgRXRoZXJuZXQgaW50ZXJmYWNlcy5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgRm9yIERBTkgsIGl0IG11c3QgYmUgY29ubmVjdGVkIGFzIGEgbm9kZSBpbiBhIHJpbmcgbmV0d29yayB0b2dldGhlclxuICAxODpcdFx0ICB3aXRoIG90aGVyIEhTUiBjYXBhYmxlIG5vZGVzLiBBbGwgRXRoZXJuZXQgZnJhbWVzIHNlbnQgb3ZlciB0aGUgSFNSXG4gIDE5Olx0XHQgIGRldmljZSB3aWxsIGJlIHNlbnQgaW4gYm90aCBkaXJlY3Rpb25zIG9uIHRoZSByaW5nIChvdmVyIGJvdGggc2xhdmVcbiAgMjA6XHRcdCAgcG9ydHMpLCBnaXZpbmcgYSByZWR1bmRhbnQsIGluc3RhbnQgZmFpbC1vdmVyIG5ldHdvcmsuIEVhY2ggSFNSIG5vZGVcbiAgMjE6XHRcdCAgaW4gdGhlIHJpbmcgYWN0cyBsaWtlIGEgYnJpZGdlIGZvciBIU1IgZnJhbWVzLCBidXQgZmlsdGVycyBmcmFtZXNcbiAgMjI6XHRcdCAgdGhhdCBoYXZlIGJlZW4gZm9yd2FyZGVkIGVhcmxpZXIuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIEZvciBEQU5QLCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgY29ubmVjdGluZyB0byB0d29cbiAgMjU6XHRcdCAgc2VwYXJhdGUgbmV0d29ya3Mgb3ZlciB0aGUgdHdvIHNsYXZlIGludGVyZmFjZXMuIExpa2UgSFNSLCBFdGhlcm5ldFxuICAyNjpcdFx0ICBmcmFtZXMgc2VudCBvdmVyIHRoZSBQUlAgZGV2aWNlIHdpbGwgYmUgc2VudCB0byBib3RoIG5ldHdvcmtzIGdpdmluZ1xuICAyNzpcdFx0ICBhIHJlZHVuZGFudCwgaW5zdGFudCBmYWlsLW92ZXIgbmV0d29yay4gVW5saWtlIEhTUiwgUFJQIG5ldHdvcmtzXG4gIDI4Olx0XHQgIGNhbiBoYXZlIFNpbmdseSBBdHRhY2hlZCBOb2RlcyAoU0FOKSBzdWNoIGFzIFBDLCBwcmludGVyLCBicmlkZ2VzXG4gIDI5Olx0XHQgIGV0YyBhbmQgd2lsbCBiZSBhYmxlIHRvIGNvbW11bmljYXRlIHdpdGggREFOUCBub2Rlcy5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVGhpcyBjb2RlIGlzIGEgXCYjMzQ7YmVzdCBlZmZvcnRcJiMzNDsgdG8gY29tcGx5IHdpdGggdGhlIEhTUiBzdGFuZGFyZCBhc1xuICAzMjpcdFx0ICBkZXNjcmliZWQgaW4gSUVDIDYyNDM5LTM6MjAxMCAoSFNSdjApIGFuZCBJRUMgNjI0MzktMzoyMDEyIChIU1J2MSksXG4gIDMzOlx0XHQgIGFuZCBQUlAgc3RhbmRhcmQgZGVzY3JpYmVkIGluIElFQyA2MjQzOS00OjIwMTIgKFBSUCksIGJ1dCBub1xuICAzNDpcdFx0ICBjb21wbGlhbmN5IHRlc3RzIGhhdmUgYmVlbiBtYWRlLiBVc2UgaXByb3V0ZTIgdG8gc2VsZWN0IHRoZSBwcm90b2NvbFxuICAzNTpcdFx0ICB5b3Ugd291bGQgbGlrZSB0byB1c2UuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIFlvdSBuZWVkIHRvIHBlcmZvcm0gYW55IGFuZCBhbGwgbmVjZXNzYXJ5IHRlc3RzIHlvdXJzZWxmIGJlZm9yZVxuICAzODpcdFx0ICByZWx5aW5nIG9uIHRoaXMgY29kZSBpbiBhIHNhZmV0eSBjcml0aWNhbCBzeXN0ZW0hXG4gIDM5Olx0XG4gIDQwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDQxOlx0XG4gIDQyOlx0aWYgSFNSXG4gIDQzOlx0XG4gIDQ0Olx0Y29uZmlnIFBSUF9EVVBfRElTQ0FSRF9LVU5JVF9URVNUXG4gIDQ1Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUlAgZHVwbGljYXRlIGRpc2NhcmQgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA0NjpcdFx0ZGVwZW5kcyBvbiBLVU5JVFxuICA0NzpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgNDg6XHRcdGhlbHBcbiAgNDk6XHRcdCAgQ292ZXJzIHRoZSBQUlAgZHVwbGljYXRlIGRpc2NhcmQgYWxnb3JpdGhtLlxuICA1MDpcdFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcbiAgNTE6XHRcdCAgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvbiBidWlsZC5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCBwbGVhc2UgcmVmZXJcbiAgNTQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvLlxuICA1NTpcdFxuICA1NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA1NzpcdFxuICA1ODpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjQ4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIEhTUioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIEkgb25seSBuZWVkIHRoZSBgSFNSYCBjb25maWd1cmF0aW9uIGZvciB0aGlzIHJvdW5kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcsIHNvIEkmIzM5O2xsIHNjYW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSBmdXp6YWJsZSBmdW5jdGlvbnMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGBoc3JfZGV2X2ZpbmFsaXplYCBpcyBjYWxsZWQgYnkgYGhzcl9uZXdsaW5rYCwgYW5kIGBoc3JfYWRkX25vZGVgIGlzIGNhbGxlZCBieSBgaHNyX2dldF9ub2RlYC4gRnVydGhlciwgYGhzcl9nZXRfbm9kZWAgaXMgYSBkZXBlbmRlbmN5IG9mIGJvdGggYGhzcl9mb3J3YXJkX2RvYCBhbmQgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYC4gVGhpcyBnZXRzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGBmaWxsX2ZyYW1lX2luZm9gIGlzIGFsc28gY2FsbGVkIGJ5IGBoc3JfZm9yd2FyZF9kb2AsIGFuZCBzbyBpcyBgaHNyX2Ryb3BfZnJhbWVgLgoKQmFzZWQgb24gdGhvc2UgY2FsbCBncmFwaHMsIGl0JiMzOTtzIGNsZWFyIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyB0byBmdXp6IGFyZToKCiogICBgaHNyX25ld2xpbmtgCiogICBgaHNyX2ZvcndhcmRfZG9gICh3aGljaCBpcyBhIHJlYWwgcmFiYml0IGhvbGUsIGNhbGxpbmcgYGhzcl9kcm9wX2ZyYW1lYCwgYGZpbGxfZnJhbWVfaW5mb2AsIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAsIGBwcnBfZHJvcF9mcmFtZWAsIGFuZCBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGApLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBwcnBgIGZ1bmN0aW9ucyB0b28uCiogICBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgCgpUaW1lIHRvIGRpZyBpbnRvIGBoc3JfZm9yd2FyZF9kb2AgYW5kIHNlZSB3aGF0IGl0IGV4cGVjdHMuIFRoaXMgbG9va3MgbGlrZSB0aGUgbWFpbiB0YXJnZXQgZm9yIGluaXRpYWwgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2ZvcndhcmRfZG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDc2PWJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy01NDMtICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NTQ0OnN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNTQ1LXtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NzcxPXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc5LVx0aHNyX3JlZ2lzdGVyX2ZyYW1lX2luKGZyYW1lLm5vZGVfc3JjLCBwb3J0LCBmcmFtZS5zZXF1ZW5jZV9ucik7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzgwOlx0aHNyX2ZvcndhcmRfZG8oXHUwMDI2ZnJhbWUpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc4MS1cdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzExMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgY29kZSBzbmlwcGV0LCBkZWxpdmVyZWQgYXMgaWYgaXQmIzM5O3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqSW5jb21pbmcgUGFja2V0IFByb2Nlc3Npbmc6IFRoZSBgaHNyX2ZvcndhcmRfc2tiYCBQZXJzcGVjdGl2ZSoqCgpBbHJpZ2h0LCBzbyAqdGhpcyogaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgZmlyc3QgcGxhY2UgbXkgYXR0ZW50aW9uIGxhbmRzIHdoZW4gYSBwYWNrZXQgY29tZXMga25vY2tpbmcuICBgaHNyX2ZvcndhcmRfc2tiYCwgdGhhdCYjMzk7cyB0aGUga2V5LiAgSXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgaW4gdGhlIHdob2xlIHByb2Nlc3Mgb2YgcmVjZWl2aW5nIHRoaXMgdGhpbmcuIFRoZSBjb2RlIGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8ga2ljayBldmVyeXRoaW5nIG9mZi4gSSBuZWVkIHRvIGtlZXAgdGhpcyBmdW5jdGlvbiBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQsIGl0JiMzOTtzIHdoZXJlIG15IGZvY3VzIGJlZ2lucyB3aGVuIGhhbmRsaW5nIG5ldyBwYWNrZXRzLiBUaGlzIGlzIGdyb3VuZCB6ZXJvLiBFdmVyeXRoaW5nIGZ1bm5lbHMgdGhyb3VnaCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoc3JfZm9yd2FyZF9za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz0yMjQ9c3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNS1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbm5ldC9oc3IvaHNyX2RldmljZS5jOjIzNjpcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNy1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTI5Mz1zdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzYzLVxubmV0L2hzci9oc3JfZGV2aWNlLmM6MzY0Olx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0zNjUtXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmM9MzY5PXN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTQzMS1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjQzMjpcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MzMtXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTcwMT1zdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzAtLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3NzE6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3Mi17XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE1LVxubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE2OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTctc3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYz0yND1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgwLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xubmV0L2hzci9oc3Jfc2xhdmUuYzo4MTpcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgyLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgzLVx0fSBlbHNlIHtcbm5ldC9oc3IvaHNyX3NsYXZlLmM6ODQ6XHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3Jfc2xhdmUuYy04NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMzUKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogNTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhTUi9QUlAgUFJQLVNBTiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyBteSBicmVha2Rvd24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBoc3JfZGV2X3htaXRgIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0aGlzIHdob2xlIHRoaW5nLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gZW5hYmxpbmcgUFJQIFJlZEJveCBmdW5jdGlvbmFsaXR5IChQUlAtU0FOKSB3aXRoaW4gdGhlIGV4aXN0aW5nIEhTUi9QUlAgc3Vic3lzdGVtLiBJJiMzOTt2ZSBwaW5wb2ludGVkIGEgZmV3IGNydWNpYWwgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGFzIGEgZGlyZWN0IHJlc3VsdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBmb3IgbXkgZnV6emluZyBzdHJhdGVneS4KCkkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYGhzcl9uZXdsaW5rYCwgYHBycF9kcm9wX2ZyYW1lYCwgYW5kIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YC4gSSYjMzk7dmUgaW5jbHVkZWQgYGhzcl9uZXdsaW5rYCBiZWNhdXNlLCB3aGlsZSBpdCBjYWxscyBgaHNyX2Rldl9maW5hbGl6ZWAsIGl0IHJlcHJlc2VudHMgYSBiZXR0ZXIgcG9pbnQgb2YgZW50cnkuIFdoaWxlIGBmaWxsX2ZyYW1lX2luZm9gIGFuZCBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGAgYXJlIHRlY2huaWNhbGx5IGhvdC1wYXRoLCBJJiMzOTt2ZSBlbGVjdGVkIHRvIGluY2x1ZGUgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgIGFzIGEgZm9jdXMgc3ltYm9sIGFzIHRoZSBtb2RpZmljYXRpb24gaXMgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4KCkkmIzM5O3ZlIGNvbnNpZGVyZWQgb3RoZXIgZnVuY3Rpb25zIGFzIHdlbGwsIGZvciBleGFtcGxlIGBmaWxsX2ZyYW1lX2luZm9gIHdoaWNoIGdldHMgY2FsbGVkIGJ5IGBoc3JfZm9yd2FyZF9za2JgLCBhbmQgaXMgaG90IHBhdGguIEkgZGVjaWRlZCBhZ2FpbnN0IGluY2x1ZGluZyB0aGlzIGZ1bmN0aW9uLCBhbmQgYHBycF9kcm9wX2ZyYW1lYCwgYmVjYXVzZSB0aGUgbW9kaWZpY2F0aW9uIGFwcGVhcnMgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gU2ltaWxhcmx5LCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgIGlzIG9ubHkgY2FsbGVkIGZvciBzdXBlcnZpc2lvbiBmcmFtZXMsIGFuZCBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgIGlzIGJhc2VkIG9uIGEgdGltZXIsIHNvIGl0JiMzOTtzIG5vdCBob3QtcGF0aC4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYWx0ZXJzIGhvdyBzdXBlcnZpc2lvbiBmcmFtZXMgYXJlIGdlbmVyYXRlZCwgdGhlIGNvcmUgbG9naWMgZm9yIGZvcndhcmRpbmcgZnJhbWVzLCBpbiBwYXJ0aWN1bGFyLCB0aGUgZHJvcHBpbmcgYW5kIHJlZ2lzdHJhdGlvbiwgYW5kIGFsc28gaG93IG5vZGUgc2VxdWVuY2UgaXMgaGFuZGxlZC4gVGhpcyBpcyBhbGwgdG8gYWNjb21tb2RhdGUgdGhpcyBQUlAtU0FOIGZlYXR1cmUuIEFkZGl0aW9uYWxseSwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBiZWVuIHNvbWUgZmxleGliaWxpdHkgYWRkZWQgaW4gaG93IGludGVybGluayB3b3JrcywgcmVtb3ZpbmcgYSBwcmV2aW91cyBuZXRsaW5rIHNldHVwIHJlc3RyaWN0aW9uIHdpdGggSFNSLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaGFzIHNlcmlvdXMgaW1wbGljYXRpb25zIGZvciB0aGUgbmV0d29yayBzdGFjaywgc28gZnV6emluZyBpcyBkZWZpbml0ZWx5IHRoZSB3YXkgdG8gZ28uCgpUaGUgb25seSByZWxldmFudCBjb25maWcgdGhhdCBJIGNhbiBzZWUgaXMgYEhTUmAuCgpTbywgdGhlIGtleSBlbGVtZW50cyB0byB0YXJnZXQgZm9yIGZ1enppbmcgYXJlOiBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgLCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgLCBgaHNyX25ld2xpbmtgLCBgcHJwX2Ryb3BfZnJhbWVgLCBhbmQgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgLiBUaW1lIHRvIHNldCB0aGUgcmVzdWx0cyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfc3VwX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9uZXdsaW5rJiMzNDssCiAgICAmIzM0O3BycF9kcm9wX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9yZWdpc3Rlcl9mcmFtZV9vdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBQUlAgUmVkQm94IChQUlAtU0FOKSBpbiB0aGUgSFNSL1BSUCBzdWJzeXN0ZW0uIEl0IG1vZGlmaWVzIHN1cGVydmlzaW9uIGZyYW1lIGdlbmVyYXRpb24sIGZyYW1lIGZvcndhcmRpbmcgbG9naWMgKGRyb3BwaW5nIGFuZCByZWdpc3RlcmluZyksIGFuZCBub2RlIHNlcXVlbmNlIGhhbmRsaW5nIHRvIHN1cHBvcnQgdGhlIG5ldyBmZWF0dXJlLiBJdCBhbHNvIHJlbW92ZXMgdGhlIHJlc3RyaWN0aW9uIHRoYXQgaW50ZXJsaW5rIG9ubHkgd29ya3Mgd2l0aCBIU1IgaW4gbmV0bGluayBzZXR1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBuZXR3b3JrIHN0YWNrIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2hhbmRsZV9zdXBfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX25ld2xpbmsmIzM0OywKICAgICYjMzQ7cHJwX2Ryb3BfZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX3JlZ2lzdGVyX2ZyYW1lX291dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFBSUCBSZWRCb3ggKFBSUC1TQU4pIGluIHRoZSBIU1IvUFJQIHN1YnN5c3RlbS4gSXQgbW9kaWZpZXMgc3VwZXJ2aXNpb24gZnJhbWUgZ2VuZXJhdGlvbiwgZnJhbWUgZm9yd2FyZGluZyBsb2dpYyAoZHJvcHBpbmcgYW5kIHJlZ2lzdGVyaW5nKSwgYW5kIG5vZGUgc2VxdWVuY2UgaGFuZGxpbmcgdG8gc3VwcG9ydCB0aGUgbmV3IGZlYXR1cmUuIEl0IGFsc28gcmVtb3ZlcyB0aGUgcmVzdHJpY3Rpb24gdGhhdCBpbnRlcmxpbmsgb25seSB3b3JrcyB3aXRoIEhTUiBpbiBuZXRsaW5rIHNldHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldHdvcmsgc3RhY2sgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTc6MzYuNzE5MTUzNDcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4OTY5Nzk2MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lXCIsXG4gICAgXCJoc3JfaGFuZGxlX3N1cF9mcmFtZVwiLFxuICAgIFwiaHNyX25ld2xpbmtcIixcbiAgICBcInBycF9kcm9wX2ZyYW1lXCIsXG4gICAgXCJwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBQUlAgUmVkQm94IChQUlAtU0FOKSBpbiB0aGUgSFNSL1BSUCBzdWJzeXN0ZW0uIEl0IG1vZGlmaWVzIHN1cGVydmlzaW9uIGZyYW1lIGdlbmVyYXRpb24sIGZyYW1lIGZvcndhcmRpbmcgbG9naWMgKGRyb3BwaW5nIGFuZCByZWdpc3RlcmluZyksIGFuZCBub2RlIHNlcXVlbmNlIGhhbmRsaW5nIHRvIHN1cHBvcnQgdGhlIG5ldyBmZWF0dXJlLiBJdCBhbHNvIHJlbW92ZXMgdGhlIHJlc3RyaWN0aW9uIHRoYXQgaW50ZXJsaW5rIG9ubHkgd29ya3Mgd2l0aCBIU1IgaW4gbmV0bGluayBzZXR1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBuZXR3b3JrIHN0YWNrIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTc6MzYuNzE5MTYwMTUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzEyMjk0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZWI5OTY3Y2YxMDEwODUyODNmOWIzODNmOTgyZTg0ZWQxOWM1YTgzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDYgMTk6NTc6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4wOTczZjlhOTRmNGQ0OCAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbisrKyBiL25ldC9oc3IvaHNyX2RldmljZS5jXFxuQEAgLTM3MiwxMCArMzcyLDIxIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbiB7XFxuIFxcdHN0cnVjdCBoc3JfcHJpdiAqaHNyID0gbWFzdGVyLVxcdTAwM2Voc3I7XFxuIFxcdHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQgKmhzcl9zcDtcXG4rXFx0c3RydWN0IGhzcl9zdXBfdGx2ICpoc3Jfc3RsdjtcXG4gXFx0c3RydWN0IGhzcl9zdXBfdGFnICpoc3Jfc3RhZztcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0Ym9vbCByZWRib3hfcHJveHk7XFxuK1xcdGludCBleHRyYSA9IDA7XFxuIFxcbi1cXHRza2IgPSBoc3JfaW5pdF9za2IobWFzdGVyLCAwKTtcXG4rXFx0cmVkYm94X3Byb3h5ID0gaHNyLVxcdTAwM2VyZWRib3ggXFx1MDAyNlxcdTAwMjYgbWFzdGVyLVxcdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTks7XFxuK1xcbitcXHQvKiBBIHByb3h5LWFubm91bmNlIGNhcnJpZXMgYSBSZWRCb3gtTUFDIFRMViBhbmQgYW4gRU9UIG1hcmtlci4gKi9cXG4rXFx0aWYgKHJlZGJveF9wcm94eSlcXG4rXFx0XFx0ZXh0cmEgPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KSArXFxuK1xcdFxcdFxcdHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSArXFxuK1xcdFxcdFxcdHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpO1xcbitcXG4rXFx0c2tiID0gaHNyX2luaXRfc2tiKG1hc3RlciwgZXh0cmEpO1xcbiBcXHRpZiAoIXNrYikge1xcbiBcXHRcXHRuZXRkZXZfd2Fybl9vbmNlKG1hc3Rlci1cXHUwMDNlZGV2LCBcXFwiUFJQOiBDb3VsZCBub3Qgc2VuZCBzdXBlcnZpc2lvbiBmcmFtZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMzkzLDkgKzQwNCwyNSBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XFxuIFxcdGhzcl9zdGFnLVxcdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XFxuIFxcbi1cXHQvKiBQYXlsb2FkOiBNYWNBZGRyZXNzQSAqL1xcbitcXHQvKiBQYXlsb2FkOiBNYWNBZGRyZXNzQSwgdGhlIGFubm91bmNlZCBub2RlLiAqL1xcbiBcXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcXG4tXFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbitcXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVxcdTAwM2VtYWNhZGRyZXNzX0EsIGFkZHIpO1xcbitcXG4rXFx0LyogUHJveHktYW5ub3VuY2U6IGFwcGVuZCB0aGUgUmVkQm94LU1BQyBUTFYgKFR5cGUgMzApIGFuZCBhbiBleHBsaWNpdFxcbitcXHQgKiBFT1QgdG8gdGVybWluYXRlIHRoZSBUTFYgY2hhaW4gYmVmb3JlIHplcm8gcGFkZGluZy5cXG4rXFx0ICovXFxuK1xcdGlmIChyZWRib3hfcHJveHkpIHtcXG4rXFx0XFx0aHNyX3N0bHYgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3RsdikpO1xcbitcXHRcXHRoc3Jfc3Rsdi1cXHUwMDNlSFNSX1RMVl90eXBlID0gUFJQX1RMVl9SRURCT1hfTUFDO1xcbitcXHRcXHRoc3Jfc3Rsdi1cXHUwMDNlSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XFxuK1xcbitcXHRcXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcXG4rXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cXHUwMDNlbWFjYWRkcmVzc19BLCBoc3ItXFx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcXG4rXFxuK1xcdFxcdGhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTtcXG4rXFx0XFx0aHNyX3N0bHYtXFx1MDAzZUhTUl9UTFZfdHlwZSA9IEhTUl9UTFZfRU9UO1xcbitcXHRcXHRoc3Jfc3Rsdi1cXHUwMDNlSFNSX1RMVl9sZW5ndGggPSAwO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG5AQCAtNzY4LDYgKzc5NSwxNSBAQCBpbnQgaHNyX2Rldl9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlWzJdLFxcbiBcXHQvKiBNYWtlIHN1cmUgdGhlIDFzdCBjYWxsIHRvIG5ldGlmX2NhcnJpZXJfb24oKSBnZXRzIHRocm91Z2ggKi9cXG4gXFx0bmV0aWZfY2Fycmllcl9vZmYoaHNyX2Rldik7XFxuIFxcbitcXHQvKiBQdWJsaXNoIHRoZSBSZWRCb3ggc3RhdGUgYmVmb3JlIGFueSBwb3J0IGlzIGF0dGFjaGVkOiB0aGUgcnhcXG4rXFx0ICogaGFuZGxlcnMgYXJlIGxpdmUgZnJvbSBoc3JfYWRkX3BvcnQoKSBvbiwgYW5kIGhzcl9hZGRfbm9kZSgpXFxuK1xcdCAqIHNpemVzIGVhY2ggbm9kZSdzIHBlci1wb3J0IHNlcXVlbmNlIHN0YXRlIGZyb20gaHNyLVxcdTAwM2VyZWRib3guXFxuK1xcdCAqL1xcbitcXHRpZiAoaW50ZXJsaW5rKSB7XFxuK1xcdFxcdGhzci1cXHUwMDNlcmVkYm94ID0gdHJ1ZTtcXG4rXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGhzci1cXHUwMDNlbWFjYWRkcmVzc19yZWRib3gsIGludGVybGluay1cXHUwMDNlZGV2X2FkZHIpO1xcbitcXHR9XFxuK1xcbiBcXHRyZXMgPSBoc3JfYWRkX3BvcnQoaHNyLCBoc3JfZGV2LCBIU1JfUFRfTUFTVEVSLCBleHRhY2spO1xcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRnb3RvIGVycl9hZGRfbWFzdGVyO1xcbkBAIC04MDUsOCArODQxLDYgQEAgaW50IGhzcl9kZXZfZmluYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZVsyXSxcXG4gXFx0XFx0aWYgKHJlcylcXG4gXFx0XFx0XFx0Z290byBlcnJfdW5yZWdpc3RlcjtcXG4gXFxuLVxcdFxcdGhzci1cXHUwMDNlcmVkYm94ID0gdHJ1ZTtcXG4tXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGhzci1cXHUwMDNlbWFjYWRkcmVzc19yZWRib3gsIGludGVybGluay1cXHUwMDNlZGV2X2FkZHIpO1xcbiBcXHRcXHRtb2RfdGltZXIoXFx1MDAyNmhzci1cXHUwMDNlcHJ1bmVfcHJveHlfdGltZXIsXFxuIFxcdFxcdFxcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUFJVTkVfUFJPWFlfUEVSSU9EKSk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXFxuaW5kZXggMDc3NDk4MWE2NWMxNjQuLmVmY2QwYWNlZjM4YzhiIDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbkBAIC00NDAsMTIgKzQ0MCwzNyBAQCBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4gXFx0cmV0dXJuIGRldl9xdWV1ZV94bWl0KHNrYik7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIHBycF9pc19sYW5fZHVwKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4re1xcbitcXHRlbnVtIGhzcl9wb3J0X3R5cGUgcnggPSBmcmFtZS1cXHUwMDNlcG9ydF9yY3YtXFx1MDAzZXR5cGU7XFxuK1xcbitcXHRyZXR1cm4gKHJ4ID09IEhTUl9QVF9TTEFWRV9BIFxcdTAwMjZcXHUwMDI2IHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0IpIHx8XFxuK1xcdCAgICAgICAocnggPT0gSFNSX1BUX1NMQVZFX0IgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSk7XFxuK31cXG4rXFxuIGJvb2wgcHJwX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbiB7XFxuLVxcdHJldHVybiAoKGZyYW1lLVxcdTAwM2Vwb3J0X3Jjdi1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgfHxcXG4tXFx0XFx0KGZyYW1lLVxcdTAwM2Vwb3J0X3Jjdi1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQiBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSkpO1xcbitcXHRlbnVtIGhzcl9wb3J0X3R5cGUgcnggPSBmcmFtZS1cXHUwMDNlcG9ydF9yY3YtXFx1MDAzZXR5cGU7XFxuK1xcbitcXHQvKiBTdXBlcnZpc2lvbiBmcmFtZXMgYXJlIG5vdCBkZWxpdmVyZWQgdG8gYSBTQU4gb24gdGhlIGludGVybGluay4gKi9cXG4rXFx0aWYgKGZyYW1lLVxcdTAwM2Vpc19zdXBlcnZpc2lvbiBcXHUwMDI2XFx1MDAyNiBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aWYgKHBycF9pc19sYW5fZHVwKGZyYW1lLCBwb3J0KSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHQvKiBMQU4gdG8gaW50ZXJsaW5rOiBrZWVwIFBSUC1uZXR3b3JrIHVuaWNhc3Qgb2ZmIHRoZSBTQU4gc2VnbWVudC4gKi9cXG4rXFx0aWYgKChyeCA9PSBIU1JfUFRfU0xBVkVfQSB8fCByeCA9PSBIU1JfUFRfU0xBVkVfQikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSylcXG4rXFx0XFx0cmV0dXJuIGZyYW1lLVxcdTAwM2Vkc3RfaW5fbm9kZV9kYjtcXG4rXFxuK1xcdC8qIEludGVybGluayB0byBMQU46IGtlZXAgU0FOLXRvLVNBTiB1bmljYXN0IGxvY2FsLiAqL1xcbitcXHRpZiAoKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EgfHwgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJ4ID09IEhTUl9QVF9JTlRFUkxJTkspXFxuK1xcdFxcdHJldHVybiBmcmFtZS1cXHUwMDNlZHN0X2luX3Byb3h5X25vZGVfZGI7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuIGJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbkBAIC00NTMsNyArNDc4LDcgQEAgYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbiBcXHRpZiAocG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfSFNSX0ZXRClcXG4tXFx0XFx0cmV0dXJuIHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KTtcXG4rXFx0XFx0cmV0dXJuIHBycF9pc19sYW5fZHVwKGZyYW1lLCBwb3J0KTtcXG4gXFxuIFxcdC8qIFJlZEJveCBzcGVjaWZpYyBmcmFtZXMgZHJvcHBpbmcgcG9saWNpZXNcXG4gXFx0ICpcXG5AQCAtNDY2LDcgKzQ5MSw3IEBAIGJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbiBcXHQgKiBhcmUgYWRkcmVzc2VkIHRvIGludGVybGluayBwb3J0IChhbmQgYXJlIGluIHRoZSBQcm94eU5vZGVUYWJsZSkuXFxuIFxcdCAqL1xcbiBcXHRza2IgPSBmcmFtZS1cXHUwMDNlc2tiX2hzcjtcXG4tXFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiBwcnBfZHJvcF9mcmFtZShmcmFtZSwgcG9ydCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiBwcnBfaXNfbGFuX2R1cChmcmFtZSwgcG9ydCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGlzX3VuaWNhc3RfZXRoZXJfYWRkcihldGhfaGRyKHNrYiktXFx1MDAzZWhfZGVzdCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGhzcl9pc19ub2RlX2luX2RiKFxcdTAwMjZwb3J0LVxcdTAwM2Voc3ItXFx1MDAzZXByb3h5X25vZGVfZGIsXFxuIFxcdFxcdFxcdCAgICAgIGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9kZXN0KSkge1xcbkBAIC03MDYsNiArNzMxLDE4IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuIFxcdGZyYW1lLVxcdTAwM2Vpc192bGFuID0gZmFsc2U7XFxuIFxcdHByb3RvID0gZXRoaGRyLVxcdTAwM2VoX3Byb3RvO1xcbiBcXG4rXFx0LyogUFJQIFJlZEJveCBvbmx5OiBjbGFzc2lmeSB0aGUgdW5pY2FzdCBkZXN0aW5hdGlvbiBvbmNlIHNvIHRoZVxcbitcXHQgKiBwZXItZWdyZXNzLXBvcnQgZGVjaXNpb24gaW4gcHJwX2Ryb3BfZnJhbWUoKSBzdGF5cyBPKDEpLiBIU1IgUmVkQm94XFxuK1xcdCAqIGRvZXMgaXRzIG93biBjbGFzc2lmaWNhdGlvbiBhbmQgbXVzdCBub3QgcGF5IHRoZXNlIG5vZGUtdGFibGUgd2Fsa3MuXFxuK1xcdCAqL1xcbitcXHRpZiAoaHNyLVxcdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxIFxcdTAwMjZcXHUwMDI2IGhzci1cXHUwMDNlcmVkYm94IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpc191bmljYXN0X2V0aGVyX2FkZHIoZXRoaGRyLVxcdTAwM2VoX2Rlc3QpKSB7XFxuK1xcdFxcdGZyYW1lLVxcdTAwM2Vkc3RfaW5fbm9kZV9kYiA9XFxuK1xcdFxcdFxcdGhzcl9pc19ub2RlX2luX2RiKFxcdTAwMjZoc3ItXFx1MDAzZW5vZGVfZGIsIGV0aGhkci1cXHUwMDNlaF9kZXN0KTtcXG4rXFx0XFx0ZnJhbWUtXFx1MDAzZWRzdF9pbl9wcm94eV9ub2RlX2RiID1cXG4rXFx0XFx0XFx0aHNyX2lzX25vZGVfaW5fZGIoXFx1MDAyNmhzci1cXHUwMDNlcHJveHlfbm9kZV9kYiwgZXRoaGRyLVxcdTAwM2VoX2Rlc3QpO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfODAyMVEpKVxcbiBcXHRcXHRmcmFtZS1cXHUwMDNlaXNfdmxhbiA9IHRydWU7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuY1xcbmluZGV4IGU0NDkyOTg3MTI3NDQ1Li5iM2IxMDZiZTY5MmVhZiAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jXFxuKysrIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuY1xcbkBAIC0xOTksNyArMTk5LDcgQEAgc3RhdGljIHN0cnVjdCBoc3Jfbm9kZSAqaHNyX2FkZF9ub2RlKHN0cnVjdCBoc3JfcHJpdiAqaHNyLFxcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bmV3X25vZGUtXFx1MDAzZXNlcV9vdXRfbG9jayk7XFxuIFxcbiBcXHRpZiAoaHNyLVxcdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxKVxcbi1cXHRcXHRuZXdfbm9kZS1cXHUwMDNlc2VxX3BvcnRfY250ID0gMTtcXG4rXFx0XFx0bmV3X25vZGUtXFx1MDAzZXNlcV9wb3J0X2NudCA9IGhzci1cXHUwMDNlcmVkYm94ID8gMiA6IDE7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bmV3X25vZGUtXFx1MDAzZXNlcV9wb3J0X2NudCA9IEhTUl9QVF9QT1JUUyAtIDE7XFxuIFxcbkBAIC0yOTMsOCArMjkzLDE3IEBAIHN0cnVjdCBoc3Jfbm9kZSAqaHNyX2dldF9ub2RlKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9kYixcXG4gXFx0ICovXFxuIFxcdGlmIChldGhoZHItXFx1MDAzZWhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfUFJQKSB8fFxcbiBcXHQgICAgZXRoaGRyLVxcdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX0hTUikpIHtcXG4tXFx0XFx0LyogQ2hlY2sgaWYgc2tiIGNvbnRhaW5zIGhzcl9ldGhoZHIgKi9cXG4tXFx0XFx0aWYgKHNrYi1cXHUwMDNlbWFjX2xlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgaHNyX2V0aGhkcikpXFxuK1xcdFxcdGJvb2wgcHJwX3N1cDtcXG4rXFxuK1xcdFxcdC8qIEEgUFJQIHN1cGVydmlzaW9uIGZyYW1lIGlzIGFuIHVudGFnZ2VkIEVUSF9QX1BSUCBmcmFtZVxcbitcXHRcXHQgKiAobWFjX2xlbiA9PSBFVEhfSExFTik7IGl0cyBSQ1QgaXMgYXBwZW5kZWQgb25seSBvbiBlZ3Jlc3MuXFxuK1xcdFxcdCAqIEhTUiAoRVRIX1BfSFNSKSBzdXBlcnZpc2lvbiBpcyBmcm9udC10YWdnZWQgYW5kIHN0aWxsIG11c3RcXG4rXFx0XFx0ICogY29udGFpbiBhIHN0cnVjdCBoc3JfZXRoaGRyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cHJwX3N1cCA9IGhzci1cXHUwMDNlcHJvdF92ZXJzaW9uID09IFBSUF9WMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgIGV0aGhkci1cXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9QUlApIFxcdTAwMjZcXHUwMDI2IGlzX3N1cDtcXG4rXFxuK1xcdFxcdGlmICghcHJwX3N1cCBcXHUwMDI2XFx1MDAyNiBza2ItXFx1MDAzZW1hY19sZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IGhzcl9ldGhoZHIpKVxcbiBcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0cmN0ID0gc2tiX2dldF9QUlBfcmN0KHNrYik7XFxuQEAgLTM4MSw2ICszOTAsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuIFxcdHN0cnVjdCBldGhoZHIgKmV0aGhkcjtcXG4gXFx0dW5zaWduZWQgaW50IHRvdGFsX3B1bGxfc2l6ZSA9IDA7XFxuIFxcdHVuc2lnbmVkIGludCBwdWxsX3NpemUgPSAwO1xcbitcXHR1bnNpZ25lZCBpbnQgc2VxX3BvcnRfY250O1xcbiBcXHR1bnNpZ25lZCBsb25nIGlkeDtcXG4gXFx0aW50IGk7XFxuIFxcbkBAIC00NzQsNiArNDg0LDcgQEAgdm9pZCBoc3JfaGFuZGxlX3N1cF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdHNlcV9wb3J0X2NudCA9IG1pbihub2RlX3JlYWwtXFx1MDAzZXNlcV9wb3J0X2NudCwgbm9kZV9jdXJyLVxcdTAwM2VzZXFfcG9ydF9jbnQpO1xcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2bm9kZV9jdXJyLVxcdTAwM2VzZXFfYmxvY2tzLCBpZHgsIHNyY19ibGspIHtcXG4gXFx0XFx0aWYgKGhzcl9zZXFfYmxvY2tfaXNfb2xkKHNyY19ibGspKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtNDgyLDcgKzQ5Myw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG4gXFx0XFx0aWYgKCFtZXJnZV9ibGspXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRtZXJnZV9ibGstXFx1MDAzZXRpbWUgPSBtaW4obWVyZ2VfYmxrLVxcdTAwM2V0aW1lLCBzcmNfYmxrLVxcdTAwM2V0aW1lKTtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5vZGVfcmVhbC1cXHUwMDNlc2VxX3BvcnRfY250OyBpKyspIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNlcV9wb3J0X2NudDsgaSsrKSB7XFxuIFxcdFxcdFxcdGJpdG1hcF9vcihtZXJnZV9ibGstXFx1MDAzZXNlcV9ucnNbaV0sIG1lcmdlX2Jsay1cXHUwMDNlc2VxX25yc1tpXSxcXG4gXFx0XFx0XFx0XFx0ICBzcmNfYmxrLVxcdTAwM2VzZXFfbnJzW2ldLCBIU1JfU0VRX0JMT0NLX1NJWkUpO1xcbiBcXHRcXHR9XFxuQEAgLTY0OSw5ICs2NjAsMTMgQEAgaW50IHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbiBcXHRpZiAoZnJhbWUtXFx1MDAzZXBvcnRfcmN2LVxcdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0LyogZm9yIFBSUCB3ZSBzaG91bGQgb25seSBmb3J3YXJkIGZyYW1lcyBmcm9tIHRoZSBzbGF2ZSBwb3J0c1xcbi1cXHQgKiB0byB0aGUgbWFzdGVyIHBvcnRcXG4rXFx0LyogUmVkQm94OiBmb3J3YXJkIExBTiBmcmFtZXMgb3V0IHRoZSBpbnRlcmxpbmsgdG8gYSBTQU4sIGRlZHVwaW5nIHRoZVxcbitcXHQgKiB0d28gTEFOIGNvcGllcyBvbiBhIGRlZGljYXRlZCBzbG90LlxcbiBcXHQgKi9cXG4rXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSylcXG4rXFx0XFx0cmV0dXJuIGhzcl9jaGVja19kdXBsaWNhdGUoZnJhbWUsIDEpO1xcbitcXG4rXFx0LyogRm9yIFBSUCBvbmx5IHNsYXZlLXRvLW1hc3RlciBmcmFtZXMgYXJlIGZvcndhcmRlZC4gKi9cXG4gXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgIT0gSFNSX1BUX01BU1RFUilcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxcbmluZGV4IGM2NWVjYjkyNTczNDg5Li4xMjdhM2ZiNjRkNWYwMyAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oXFxuKysrIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxcbkBAIC0yNyw2ICsyNyw4IEBAIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyB7XFxuIFxcdGJvb2wgaXNfbG9jYWxfZGVzdDtcXG4gXFx0Ym9vbCBpc19sb2NhbF9leGNsdXNpdmU7XFxuIFxcdGJvb2wgaXNfZnJvbV9zYW47XFxuK1xcdGJvb2wgZHN0X2luX25vZGVfZGI7XFxuK1xcdGJvb2wgZHN0X2luX3Byb3h5X25vZGVfZGI7XFxuIH07XFxuIFxcbiB2b2lkIGhzcl9kZWxfc2VsZl9ub2RlKHN0cnVjdCBoc3JfcHJpdiAqaHNyKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbWFpbi5oIGIvbmV0L2hzci9oc3JfbWFpbi5oXFxuaW5kZXggMTM0ZTRmM2ZmZjYwMzYuLmMyN2NmZGQ5Y2EzZmE4IDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX21haW4uaFxcbisrKyBiL25ldC9oc3IvaHNyX21haW4uaFxcbkBAIC0yMTEsNyArMjExLDcgQEAgc3RydWN0IGhzcl9wcml2IHtcXG4gXFx0XFx0XFx0XFx0ICovXFxuIFxcdGJvb2wgZndkX29mZmxvYWRlZDtcXHQvKiBGb3J3YXJkaW5nIG9mZmxvYWRlZCB0byBIVyAqL1xcbiBcXHRib29sIHJlZGJveDsgICAgICAgICAgICAvKiBEZXZpY2Ugc3VwcG9ydHMgSFNSIFJlZEJveCAqL1xcbi1cXHR1bnNpZ25lZCBjaGFyXFx0XFx0bWFjYWRkcmVzc19yZWRib3hbRVRIX0FMRU5dO1xcbitcXHR1bnNpZ25lZCBjaGFyXFx0bWFjYWRkcmVzc19yZWRib3hbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XFxuIFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRzdXBfbXVsdGljYXN0X2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XFxuIFxcdFxcdFxcdFxcdC8qIEFsaWduIHRvIHUxNiBib3VuZGFyeSB0byBhdm9pZCB1bmFsaWduZWQgYWNjZXNzXFxuIFxcdFxcdFxcdFxcdCAqIGluIGV0aGVyX2FkZHJfZXF1YWxcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbmV0bGluay5jIGIvbmV0L2hzci9oc3JfbmV0bGluay5jXFxuaW5kZXggODA5OWYyMDY5YTc0OGUuLjg4OTQwZTgwMTRiMjRmIDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX25ldGxpbmsuY1xcbisrKyBiL25ldC9oc3IvaHNyX25ldGxpbmsuY1xcbkBAIC0xMjEsMTQgKzEyMSw4IEBAIHN0YXRpYyBpbnQgaHNyX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAocHJvdG8gPT0gSFNSX1BST1RPQ09MX1BSUCkge1xcbitcXHRpZiAocHJvdG8gPT0gSFNSX1BST1RPQ09MX1BSUClcXG4gXFx0XFx0cHJvdG9fdmVyc2lvbiA9IFBSUF9WMTtcXG4tXFx0XFx0aWYgKGludGVybGluaykge1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBcXFwiSW50ZXJsaW5rIG9ubHkgd29ya3Mgd2l0aCBIU1JcXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGhzcl9kZXZfZmluYWxpemUoZGV2LCBsaW5rLCBpbnRlcmxpbmssIG11bHRpY2FzdF9zcGVjLFxcbiBcXHRcXHRcXHRcXHRwcm90b192ZXJzaW9uLCBleHRhY2spO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbmluZGV4IDMxZmI5MzI2Y2Y1MzNkLi4yMTUwZTQ4N2FjN2Q3ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbkBAIC00LDYgKzQsNyBAQCB0b3Bfc3JjZGlyID0gLi4vLi4vLi4vLi4vLi5cXG4gXFxuIFRFU1RfUFJPR1MgOj0gXFxcXFxcbiBcXHRoc3JfcGluZy5zaCBcXFxcXFxuK1xcdGhzcl9wcnBfcmVkYm94LnNoIFxcXFxcXG4gXFx0aHNyX3JlZGJveC5zaCBcXFxcXFxuIFxcdGxpbmtfZmF1bHRzLnNoIFxcXFxcXG4gXFx0cHJwX3Bpbmcuc2ggXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ3OWM4OTIyMjViMWYzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3BycF9yZWRib3guc2hcXG5AQCAtMCwwICsxLDk5IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIFRlc3QgYSBQUlAgUmVkQm94IChQUlAtU0FOKTogYSBTQU4gdGhhdCBzaXRzIGJlaGluZCB0aGUgaW50ZXJsaW5rIHBvcnQgbXVzdFxcbisjIHJlYWNoLCBhbmQgYmUgcmVhY2hlZCBieSwgYSBwZWVyIERBTlAgb24gdGhlIFBSUCBuZXR3b3JrIHdpdGggaXRzIG93biBNQUNcXG4rIyBwcmVzZXJ2ZWQgb24gdGhlIHdpcmUsIGFuZCB0aGUgUmVkQm94IG11c3QgYW5ub3VuY2UgdGhlIFNBTiB3aXRoIGEgUmVkQm94LU1BQ1xcbisjIFRMViAodGVybWluYXRlZCBieSBhbiBFT1QgbWFya2VyKSBpbiBpdHMgUFJQIHN1cGVydmlzaW9uIGZyYW1lcy5cXG4rI1xcbisjICAgUkIgICAgUFJQIFJlZEJveDogcHJwMCBvdmVyIHJiX2EvcmJfYiAoTEFOIEEvQikgKyBpbnRlcmxpbmsgcmJfaWxcXG4rIyAgIFBFRVIgIHBlZXIgREFOUCA6IHBycDAgb3ZlciBwZV9hL3BlX2IsIDEwMC42NC4wLjJcXG4rIyAgIFNBTiAgIFNBTiAgICAgICA6IHNhbl9pbCwgb3duIE1BQywgMTAwLjY0LjAuNTEgKGJlaGluZCB0aGUgaW50ZXJsaW5rKVxcbitcXG4raXB2Nj1mYWxzZVxcbitcXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxcbitcXG4rY2hlY2tfcHJlcmVxdWlzaXRlc1xcbitcXG4raWYgISBjb21tYW5kIC12IHRjcGR1bXAgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxOyB0aGVuXFxuK1xcdGVjaG8gXFxcIlNLSVA6IFRoaXMgdGVzdCByZXF1aXJlcyB0Y3BkdW1wXFxcIlxcbitcXHRleGl0ICRrc2Z0X3NraXBcXG4rZmlcXG4rXFxuK2lmICEgaXAgbGluayBoZWxwIGhzciAyXFx1MDAzZVxcdTAwMjYxIHwgZ3JlcCAtcSBpbnRlcmxpbms7IHRoZW5cXG4rXFx0ZWNobyBcXFwiU0tJUDogaXByb3V0ZTIgdG9vIG9sZCAobm8gaHNyIGludGVybGluayBzdXBwb3J0KVxcXCJcXG4rXFx0ZXhpdCAka3NmdF9za2lwXFxuK2ZpXFxuK1xcbitzZXR1cF9ucyBSQiBQRUVSIFNBTlxcbit0cmFwICdjbGVhbnVwX25zIFxcXCIkUkJcXFwiIFxcXCIkUEVFUlxcXCIgXFxcIiRTQU5cXFwiJyBFWElUXFxuK1xcbitpcCBsaW5rIGFkZCByYl9hIG5ldG5zIFxcXCIkUkJcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcGVfYSBuZXRucyBcXFwiJFBFRVJcXFwiXFxuK2lwIGxpbmsgYWRkIHJiX2IgbmV0bnMgXFxcIiRSQlxcXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwZV9iIG5ldG5zIFxcXCIkUEVFUlxcXCJcXG4raXAgbGluayBhZGQgcmJfaWwgbmV0bnMgXFxcIiRSQlxcXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzYW5faWwgbmV0bnMgXFxcIiRTQU5cXFwiXFxuK1xcbitpcCAtbiBcXFwiJFJCXFxcIiAgIGxpbmsgc2V0IHJiX2EgdXBcXG4raXAgLW4gXFxcIiRSQlxcXCIgICBsaW5rIHNldCByYl9iIHVwXFxuK2lwIC1uIFxcXCIkUkJcXFwiICAgbGluayBzZXQgcmJfaWwgdXBcXG4raXAgLW4gXFxcIiRQRUVSXFxcIiBsaW5rIHNldCBwZV9hIHVwXFxuK2lwIC1uIFxcXCIkUEVFUlxcXCIgbGluayBzZXQgcGVfYiB1cFxcbitpcCAtbiBcXFwiJFNBTlxcXCIgIGxpbmsgc2V0IHNhbl9pbCB1cFxcbitpcCAtbiBcXFwiJFNBTlxcXCIgIGFkZHIgYWRkIDEwMC42NC4wLjUxLzI0IGRldiBzYW5faWxcXG4rXFxuKyMgRmVhdHVyZSBnYXRlOiBQUlAgaW50ZXJsaW5rIChSZWRCb3gpIGNyZWF0aW9uLiBBIGtlcm5lbCB3aXRob3V0IFBSUCBSZWRCb3hcXG4rIyBzdXBwb3J0IHJlamVjdHMgdGhpcyB3aXRoIC1FSU5WQUwsIHNvIFNLSVAgcmF0aGVyIHRoYW4gRkFJTC5cXG4raWYgISBpcCAtbiBcXFwiJFJCXFxcIiBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHJiX2Egc2xhdmUyIHJiX2IgXFxcXFxcbisgICAgIGludGVybGluayByYl9pbCBwcm90byAxIDJcXHUwMDNlL2Rldi9udWxsOyB0aGVuXFxuK1xcdGVjaG8gXFxcIlNLSVA6IGtlcm5lbCB3aXRob3V0IFBSUCBSZWRCb3ggKGludGVybGluaykgc3VwcG9ydFxcXCJcXG4rXFx0ZXhpdCAka3NmdF9za2lwXFxuK2ZpXFxuK2lwIC1uIFxcXCIkUkJcXFwiICAgbGluayBzZXQgcHJwMCB1cFxcbitpcCAtbiBcXFwiJFBFRVJcXFwiIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgcGVfYSBzbGF2ZTIgcGVfYiBwcm90byAxXFxuK2lwIC1uIFxcXCIkUEVFUlxcXCIgbGluayBzZXQgcHJwMCB1cFxcbitpcCAtbiBcXFwiJFBFRVJcXFwiIGFkZHIgYWRkIDEwMC42NC4wLjIvMjQgZGV2IHBycDBcXG4rc2xlZXAgMVxcbitcXG4rc2FuX21hYz0kKGlwIC1uIFxcXCIkU0FOXFxcIiAtYnIgbGluayBzaG93IHNhbl9pbCB8IGF3ayAne3ByaW50ICQzfScpXFxuK3JiX21hYz0kKGlwIC1uIFxcXCIkUkJcXFwiIC1iciBsaW5rIHNob3cgcmJfaWwgfCBhd2sgJ3twcmludCAkM30nKVxcbitcXG4rIyBCaWRpcmVjdGlvbmFsIHVuaWNhc3QgYWNyb3NzIHRoZSBpbnRlcmxpbmsuXFxuK2RvX3BpbmcgXFxcIiRQRUVSXFxcIiAxMDAuNjQuMC41MVxcbitkb19waW5nIFxcXCIkU0FOXFxcIiAgMTAwLjY0LjAuMlxcbitzdG9wX2lmX2Vycm9yIFxcXCJQUlAgUmVkQm94IGJpZGlyZWN0aW9uYWwgdW5pY2FzdCBmYWlsZWRcXFwiXFxuK1xcbisjIFRoZSBTQU4gc291cmNlIE1BQyBtdXN0IGJlIHByZXNlcnZlZCBvbiB0aGUgUFJQIG5ldHdvcmssIG5vdCBsYXVuZGVyZWQgdG8gdGhlXFxuKyMgUmVkQm94IE1BQzogdGhlIHBlZXIgcmVzb2x2ZXMgdGhlIFNBTiBJUCB0byB0aGUgU0FOJ3Mgb3duIE1BQy5cXG4rbmVpZ2g9JChpcCAtbiBcXFwiJFBFRVJcXFwiIG5laWdoIHNob3cgMTAwLjY0LjAuNTEgfCBhd2sgJ3twcmludCAkNX0nKVxcbitpZiBbIFxcXCIkbmVpZ2hcXFwiICE9IFxcXCIkc2FuX21hY1xcXCIgXTsgdGhlblxcbitcXHRlY2hvIFxcXCJTQU4gTUFDIHByZXNlcnZhdGlvbiBbIEZBSUwgXTogcGVlciByZXNvbHZlZCAxMDAuNjQuMC41MSB0b1xcXCIgXFxcXFxcbitcXHQgICAgIFxcXCInJG5laWdoJywgZXhwZWN0ZWQgJHNhbl9tYWNcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0cmV0PTFcXG4rZmlcXG4rc3RvcF9pZl9lcnJvciBcXFwiU0FOIE1BQyBub3QgcHJlc2VydmVkIG9uIHRoZSBQUlAgbmV0d29ya1xcXCJcXG4rXFxuKyMgVGhlIHByb3h5LWFubm91bmNlIHN1cGVydmlzaW9uIGZyYW1lIG11c3QgY2FycnksIGluIG9yZGVyLCB0aGUgbGlmZS1jaGVjayBUTFZcXG4rIyAodHlwZSAweDE0LCBsZW4gNikgKyBNYWNBZGRyZXNzQSA9PSBTQU4gTUFDICsgdGhlIFJlZEJveC1NQUMgVExWICh0eXBlIDB4MWUsXFxuKyMgbGVuIDYpICsgTWFjQWRkcmVzc1JlZEJveCA9PSBSZWRCb3ggTUFDICsgdGhlIEVPVCBtYXJrZXIgKDB4MDAwMCkuXFxuK2lwIG5ldG5zIGV4ZWMgXFxcIiRTQU5cXFwiIHBpbmcgLWkgMC4yIC1xIDEwMC42NC4wLjIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIFxcdTAwMjZcXG4rcGluZ19waWQ9JCFcXG4rY2FwPSQoaXAgbmV0bnMgZXhlYyBcXFwiJFBFRVJcXFwiIHRpbWVvdXQgNSB0Y3BkdW1wIC1pIHBlX2EgLW5uIC14IFxcXFxcXG4rXFx0XFxcImV0aGVyIHByb3RvIDB4ODhmYiBhbmQgZXRoZXIgc3JjICRyYl9tYWNcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IHRydWUpXFxuK2tpbGwgXFxcIiRwaW5nX3BpZFxcXCIgMlxcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxcbit3YWl0IFxcXCIkcGluZ19waWRcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IHRydWVcXG4rXFxuK3Nhbl9oZXg9JChlY2hvIFxcXCIkc2FuX21hY1xcXCIgfCB0ciAtZCAnOicpXFxuK3JiX2hleD0kKGVjaG8gXFxcIiRyYl9tYWNcXFwiIHwgdHIgLWQgJzonKVxcbisjIFJlYXNzZW1ibGUgY29udGlndW91cyBmcmFtZSBoZXg6IGRyb3AgdGhlIFxcXCIweDAwMTA6XFxcIiBvZmZzZXQgbGFiZWxzIGFuZCBzcGFjZXMuXFxuK2ZyYW1lX2hleD0kKGVjaG8gXFxcIiRjYXBcXFwiIHwgYXdrICcvXltbOnNwYWNlOl1dKjB4WzAtOWEtZl0rOi8ge1xcbitcXHRzdWIoL15bWzpzcGFjZTpdXSoweFswLTlhLWZdKzpbWzpzcGFjZTpdXSovLCBcXFwiXFxcIik7XFxuK1xcdGdzdWIoLyAvLCBcXFwiXFxcIik7IHByaW50ZiBcXFwiJXNcXFwiLCAkMCB9JylcXG4raWYgISBlY2hvIFxcXCIkZnJhbWVfaGV4XFxcIiB8IGdyZXAgLXEgXFxcIjE0MDYke3Nhbl9oZXh9MWUwNiR7cmJfaGV4fTAwMDBcXFwiOyB0aGVuXFxuK1xcdGVjaG8gXFxcInN1cGVydmlzaW9uIFJlZEJveC1NQUMgVExWIFsgRkFJTCBdOiBtaXNzaW5nIFNBTiBNQUMsIFR5cGUtMzBcXFwiIFxcXFxcXG4rXFx0ICAgICBcXFwicGF5bG9hZCwgb3IgRU9UXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdHJldD0xXFxuK2ZpXFxuK3N0b3BfaWZfZXJyb3IgXFxcIlBSUCBSZWRCb3ggc3VwZXJ2aXNpb24gUmVkQm94LU1BQyBUTFYvRU9UIGNoZWNrIGZhaWxlZFxcXCJcXG4rXFxuK2VjaG8gXFxcIklORk86IFBSUCBSZWRCb3ggKFBSUC1TQU4pIGNvbmZvcm1hbmNlIGNoZWNrcyBwYXNzZWRcXFwiXFxuK2V4aXQgJHJldFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxOTo1NzozNy4yOTEwMjg3OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5ODM5NzkxMjIwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZVwiLFxuICAgIFwiaHNyX2hhbmRsZV9zdXBfZnJhbWVcIixcbiAgICBcImhzcl9uZXdsaW5rXCIsXG4gICAgXCJwcnBfZHJvcF9mcmFtZVwiLFxuICAgIFwicHJwX3JlZ2lzdGVyX2ZyYW1lX291dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgUFJQIFJlZEJveCAoUFJQLVNBTikgaW4gdGhlIEhTUi9QUlAgc3Vic3lzdGVtLiBJdCBtb2RpZmllcyBzdXBlcnZpc2lvbiBmcmFtZSBnZW5lcmF0aW9uLCBmcmFtZSBmb3J3YXJkaW5nIGxvZ2ljIChkcm9wcGluZyBhbmQgcmVnaXN0ZXJpbmcpLCBhbmQgbm9kZSBzZXF1ZW5jZSBoYW5kbGluZyB0byBzdXBwb3J0IHRoZSBuZXcgZmVhdHVyZS4gSXQgYWxzbyByZW1vdmVzIHRoZSByZXN0cmljdGlvbiB0aGF0IGludGVybGluayBvbmx5IHdvcmtzIHdpdGggSFNSIGluIG5ldGxpbmsgc2V0dXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbmV0d29yayBzdGFjayB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2ViOTk2N2NmMTAxMDg1MjgzZjliMzgzZjk4MmU4NGVkMTljNWE4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTk6NTc6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9kZXZpY2UuYyBiL25ldC9oc3IvaHNyX2RldmljZS5jXG5pbmRleCA1NTU1YjcxYWIxOWI1OS4uMDk3M2Y5YTk0ZjRkNDggMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuKysrIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbkBAIC0zNzIsMTAgKzM3MiwyMSBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbiB7XG4gXHRzdHJ1Y3QgaHNyX3ByaXYgKmhzciA9IG1hc3Rlci1cdTAwM2Voc3I7XG4gXHRzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkICpoc3Jfc3A7XG4rXHRzdHJ1Y3QgaHNyX3N1cF90bHYgKmhzcl9zdGx2O1xuIFx0c3RydWN0IGhzcl9zdXBfdGFnICpoc3Jfc3RhZztcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHRib29sIHJlZGJveF9wcm94eTtcbitcdGludCBleHRyYSA9IDA7XG4gXG4tXHRza2IgPSBoc3JfaW5pdF9za2IobWFzdGVyLCAwKTtcbitcdHJlZGJveF9wcm94eSA9IGhzci1cdTAwM2VyZWRib3ggXHUwMDI2XHUwMDI2IG1hc3Rlci1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTks7XG4rXG4rXHQvKiBBIHByb3h5LWFubm91bmNlIGNhcnJpZXMgYSBSZWRCb3gtTUFDIFRMViBhbmQgYW4gRU9UIG1hcmtlci4gKi9cbitcdGlmIChyZWRib3hfcHJveHkpXG4rXHRcdGV4dHJhID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3RsdikgK1xuK1x0XHRcdHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSArXG4rXHRcdFx0c2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3Rsdik7XG4rXG4rXHRza2IgPSBoc3JfaW5pdF9za2IobWFzdGVyLCBleHRyYSk7XG4gXHRpZiAoIXNrYikge1xuIFx0XHRuZXRkZXZfd2Fybl9vbmNlKG1hc3Rlci1cdTAwM2VkZXYsIFwiUFJQOiBDb3VsZCBub3Qgc2VuZCBzdXBlcnZpc2lvbiBmcmFtZVxcblwiKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTM5Myw5ICs0MDQsMjUgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REO1xuIFx0aHNyX3N0YWctXHUwMDNldGx2LkhTUl9UTFZfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpO1xuIFxuLVx0LyogUGF5bG9hZDogTWFjQWRkcmVzc0EgKi9cbitcdC8qIFBheWxvYWQ6IE1hY0FkZHJlc3NBLCB0aGUgYW5ub3VuY2VkIG5vZGUuICovXG4gXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcbi1cdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbitcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBhZGRyKTtcbitcbitcdC8qIFByb3h5LWFubm91bmNlOiBhcHBlbmQgdGhlIFJlZEJveC1NQUMgVExWIChUeXBlIDMwKSBhbmQgYW4gZXhwbGljaXRcbitcdCAqIEVPVCB0byB0ZXJtaW5hdGUgdGhlIFRMViBjaGFpbiBiZWZvcmUgemVybyBwYWRkaW5nLlxuK1x0ICovXG4rXHRpZiAocmVkYm94X3Byb3h5KSB7XG4rXHRcdGhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTtcbitcdFx0aHNyX3N0bHYtXHUwMDNlSFNSX1RMVl90eXBlID0gUFJQX1RMVl9SRURCT1hfTUFDO1xuK1x0XHRoc3Jfc3Rsdi1cdTAwM2VIU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTtcbitcbitcdFx0aHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7XG4rXHRcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBoc3ItXHUwMDNlbWFjYWRkcmVzc19yZWRib3gpO1xuK1xuK1x0XHRoc3Jfc3RsdiA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KSk7XG4rXHRcdGhzcl9zdGx2LVx1MDAzZUhTUl9UTFZfdHlwZSA9IEhTUl9UTFZfRU9UO1xuK1x0XHRoc3Jfc3Rsdi1cdTAwM2VIU1JfVExWX2xlbmd0aCA9IDA7XG4rXHR9XG4gXG4gXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG5AQCAtNzY4LDYgKzc5NSwxNSBAQCBpbnQgaHNyX2Rldl9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlWzJdLFxuIFx0LyogTWFrZSBzdXJlIHRoZSAxc3QgY2FsbCB0byBuZXRpZl9jYXJyaWVyX29uKCkgZ2V0cyB0aHJvdWdoICovXG4gXHRuZXRpZl9jYXJyaWVyX29mZihoc3JfZGV2KTtcbiBcbitcdC8qIFB1Ymxpc2ggdGhlIFJlZEJveCBzdGF0ZSBiZWZvcmUgYW55IHBvcnQgaXMgYXR0YWNoZWQ6IHRoZSByeFxuK1x0ICogaGFuZGxlcnMgYXJlIGxpdmUgZnJvbSBoc3JfYWRkX3BvcnQoKSBvbiwgYW5kIGhzcl9hZGRfbm9kZSgpXG4rXHQgKiBzaXplcyBlYWNoIG5vZGUncyBwZXItcG9ydCBzZXF1ZW5jZSBzdGF0ZSBmcm9tIGhzci1cdTAwM2VyZWRib3guXG4rXHQgKi9cbitcdGlmIChpbnRlcmxpbmspIHtcbitcdFx0aHNyLVx1MDAzZXJlZGJveCA9IHRydWU7XG4rXHRcdGV0aGVyX2FkZHJfY29weShoc3ItXHUwMDNlbWFjYWRkcmVzc19yZWRib3gsIGludGVybGluay1cdTAwM2VkZXZfYWRkcik7XG4rXHR9XG4rXG4gXHRyZXMgPSBoc3JfYWRkX3BvcnQoaHNyLCBoc3JfZGV2LCBIU1JfUFRfTUFTVEVSLCBleHRhY2spO1xuIFx0aWYgKHJlcylcbiBcdFx0Z290byBlcnJfYWRkX21hc3RlcjtcbkBAIC04MDUsOCArODQxLDYgQEAgaW50IGhzcl9kZXZfZmluYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZVsyXSxcbiBcdFx0aWYgKHJlcylcbiBcdFx0XHRnb3RvIGVycl91bnJlZ2lzdGVyO1xuIFxuLVx0XHRoc3ItXHUwMDNlcmVkYm94ID0gdHJ1ZTtcbi1cdFx0ZXRoZXJfYWRkcl9jb3B5KGhzci1cdTAwM2VtYWNhZGRyZXNzX3JlZGJveCwgaW50ZXJsaW5rLVx1MDAzZWRldl9hZGRyKTtcbiBcdFx0bW9kX3RpbWVyKFx1MDAyNmhzci1cdTAwM2VwcnVuZV9wcm94eV90aW1lcixcbiBcdFx0XHQgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFBSVU5FX1BST1hZX1BFUklPRCkpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNjQuLmVmY2QwYWNlZjM4YzhiIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG4rKysgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbkBAIC00NDAsMTIgKzQ0MCwzNyBAQCBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdHJldHVybiBkZXZfcXVldWVfeG1pdChza2IpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBwcnBfaXNfbGFuX2R1cChzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuK1x0XHRcdCAgIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbit7XG4rXHRlbnVtIGhzcl9wb3J0X3R5cGUgcnggPSBmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlO1xuK1xuK1x0cmV0dXJuIChyeCA9PSBIU1JfUFRfU0xBVkVfQSBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CKSB8fFxuK1x0ICAgICAgIChyeCA9PSBIU1JfUFRfU0xBVkVfQiBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BKTtcbit9XG4rXG4gYm9vbCBwcnBfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4ge1xuLVx0cmV0dXJuICgoZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSBcdTAwMjZcdTAwMjZcbi1cdFx0IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgfHxcbi1cdFx0KGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0IgXHUwMDI2XHUwMDI2XG4tXHRcdCBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EpKTtcbitcdGVudW0gaHNyX3BvcnRfdHlwZSByeCA9IGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGU7XG4rXG4rXHQvKiBTdXBlcnZpc2lvbiBmcmFtZXMgYXJlIG5vdCBkZWxpdmVyZWQgdG8gYSBTQU4gb24gdGhlIGludGVybGluay4gKi9cbitcdGlmIChmcmFtZS1cdTAwM2Vpc19zdXBlcnZpc2lvbiBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKHBycF9pc19sYW5fZHVwKGZyYW1lLCBwb3J0KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKiBMQU4gdG8gaW50ZXJsaW5rOiBrZWVwIFBSUC1uZXR3b3JrIHVuaWNhc3Qgb2ZmIHRoZSBTQU4gc2VnbWVudC4gKi9cbitcdGlmICgocnggPT0gSFNSX1BUX1NMQVZFX0EgfHwgcnggPT0gSFNSX1BUX1NMQVZFX0IpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKVxuK1x0XHRyZXR1cm4gZnJhbWUtXHUwMDNlZHN0X2luX25vZGVfZGI7XG4rXG4rXHQvKiBJbnRlcmxpbmsgdG8gTEFOOiBrZWVwIFNBTi10by1TQU4gdW5pY2FzdCBsb2NhbC4gKi9cbitcdGlmICgocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BIHx8IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgXHUwMDI2XHUwMDI2XG4rXHQgICAgcnggPT0gSFNSX1BUX0lOVEVSTElOSylcbitcdFx0cmV0dXJuIGZyYW1lLVx1MDAzZWRzdF9pbl9wcm94eV9ub2RlX2RiO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbkBAIC00NTMsNyArNDc4LDcgQEAgYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuIFx0aWYgKHBvcnQtXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0hTUl9GV0QpXG4tXHRcdHJldHVybiBwcnBfZHJvcF9mcmFtZShmcmFtZSwgcG9ydCk7XG4rXHRcdHJldHVybiBwcnBfaXNfbGFuX2R1cChmcmFtZSwgcG9ydCk7XG4gXG4gXHQvKiBSZWRCb3ggc3BlY2lmaWMgZnJhbWVzIGRyb3BwaW5nIHBvbGljaWVzXG4gXHQgKlxuQEAgLTQ2Niw3ICs0OTEsNyBAQCBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdCAqIGFyZSBhZGRyZXNzZWQgdG8gaW50ZXJsaW5rIHBvcnQgKGFuZCBhcmUgaW4gdGhlIFByb3h5Tm9kZVRhYmxlKS5cbiBcdCAqL1xuIFx0c2tiID0gZnJhbWUtXHUwMDNlc2tiX2hzcjtcbi1cdGlmIChza2IgXHUwMDI2XHUwMDI2IHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KSBcdTAwMjZcdTAwMjZcbitcdGlmIChza2IgXHUwMDI2XHUwMDI2IHBycF9pc19sYW5fZHVwKGZyYW1lLCBwb3J0KSBcdTAwMjZcdTAwMjZcbiBcdCAgICBpc191bmljYXN0X2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLVx1MDAzZWhfZGVzdCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgaHNyX2lzX25vZGVfaW5fZGIoXHUwMDI2cG9ydC1cdTAwM2Voc3ItXHUwMDNlcHJveHlfbm9kZV9kYixcbiBcdFx0XHQgICAgICBldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0KSkge1xuQEAgLTcwNiw2ICs3MzEsMTggQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbiBcdGZyYW1lLVx1MDAzZWlzX3ZsYW4gPSBmYWxzZTtcbiBcdHByb3RvID0gZXRoaGRyLVx1MDAzZWhfcHJvdG87XG4gXG4rXHQvKiBQUlAgUmVkQm94IG9ubHk6IGNsYXNzaWZ5IHRoZSB1bmljYXN0IGRlc3RpbmF0aW9uIG9uY2Ugc28gdGhlXG4rXHQgKiBwZXItZWdyZXNzLXBvcnQgZGVjaXNpb24gaW4gcHJwX2Ryb3BfZnJhbWUoKSBzdGF5cyBPKDEpLiBIU1IgUmVkQm94XG4rXHQgKiBkb2VzIGl0cyBvd24gY2xhc3NpZmljYXRpb24gYW5kIG11c3Qgbm90IHBheSB0aGVzZSBub2RlLXRhYmxlIHdhbGtzLlxuK1x0ICovXG4rXHRpZiAoaHNyLVx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEgXHUwMDI2XHUwMDI2IGhzci1cdTAwM2VyZWRib3ggXHUwMDI2XHUwMDI2XG4rXHQgICAgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGV0aGhkci1cdTAwM2VoX2Rlc3QpKSB7XG4rXHRcdGZyYW1lLVx1MDAzZWRzdF9pbl9ub2RlX2RiID1cbitcdFx0XHRoc3JfaXNfbm9kZV9pbl9kYihcdTAwMjZoc3ItXHUwMDNlbm9kZV9kYiwgZXRoaGRyLVx1MDAzZWhfZGVzdCk7XG4rXHRcdGZyYW1lLVx1MDAzZWRzdF9pbl9wcm94eV9ub2RlX2RiID1cbitcdFx0XHRoc3JfaXNfbm9kZV9pbl9kYihcdTAwMjZoc3ItXHUwMDNlcHJveHlfbm9kZV9kYiwgZXRoaGRyLVx1MDAzZWhfZGVzdCk7XG4rXHR9XG4rXG4gXHRpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfODAyMVEpKVxuIFx0XHRmcmFtZS1cdTAwM2Vpc192bGFuID0gdHJ1ZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuY1xuaW5kZXggZTQ0OTI5ODcxMjc0NDUuLmIzYjEwNmJlNjkyZWFmIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuY1xuKysrIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuY1xuQEAgLTE5OSw3ICsxOTksNyBAQCBzdGF0aWMgc3RydWN0IGhzcl9ub2RlICpoc3JfYWRkX25vZGUoc3RydWN0IGhzcl9wcml2ICpoc3IsXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZuZXdfbm9kZS1cdTAwM2VzZXFfb3V0X2xvY2spO1xuIFxuIFx0aWYgKGhzci1cdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxKVxuLVx0XHRuZXdfbm9kZS1cdTAwM2VzZXFfcG9ydF9jbnQgPSAxO1xuK1x0XHRuZXdfbm9kZS1cdTAwM2VzZXFfcG9ydF9jbnQgPSBoc3ItXHUwMDNlcmVkYm94ID8gMiA6IDE7XG4gXHRlbHNlXG4gXHRcdG5ld19ub2RlLVx1MDAzZXNlcV9wb3J0X2NudCA9IEhTUl9QVF9QT1JUUyAtIDE7XG4gXG5AQCAtMjkzLDggKzI5MywxNyBAQCBzdHJ1Y3QgaHNyX25vZGUgKmhzcl9nZXRfbm9kZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsIHN0cnVjdCBsaXN0X2hlYWQgKm5vZGVfZGIsXG4gXHQgKi9cbiBcdGlmIChldGhoZHItXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9QUlApIHx8XG4gXHQgICAgZXRoaGRyLVx1MDAzZWhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfSFNSKSkge1xuLVx0XHQvKiBDaGVjayBpZiBza2IgY29udGFpbnMgaHNyX2V0aGhkciAqL1xuLVx0XHRpZiAoc2tiLVx1MDAzZW1hY19sZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgaHNyX2V0aGhkcikpXG4rXHRcdGJvb2wgcHJwX3N1cDtcbitcbitcdFx0LyogQSBQUlAgc3VwZXJ2aXNpb24gZnJhbWUgaXMgYW4gdW50YWdnZWQgRVRIX1BfUFJQIGZyYW1lXG4rXHRcdCAqIChtYWNfbGVuID09IEVUSF9ITEVOKTsgaXRzIFJDVCBpcyBhcHBlbmRlZCBvbmx5IG9uIGVncmVzcy5cbitcdFx0ICogSFNSIChFVEhfUF9IU1IpIHN1cGVydmlzaW9uIGlzIGZyb250LXRhZ2dlZCBhbmQgc3RpbGwgbXVzdFxuK1x0XHQgKiBjb250YWluIGEgc3RydWN0IGhzcl9ldGhoZHIuXG4rXHRcdCAqL1xuK1x0XHRwcnBfc3VwID0gaHNyLVx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICBldGhoZHItXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9QUlApIFx1MDAyNlx1MDAyNiBpc19zdXA7XG4rXG4rXHRcdGlmICghcHJwX3N1cCBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZW1hY19sZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgaHNyX2V0aGhkcikpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHR9IGVsc2Uge1xuIFx0XHRyY3QgPSBza2JfZ2V0X1BSUF9yY3Qoc2tiKTtcbkBAIC0zODEsNiArMzkwLDcgQEAgdm9pZCBoc3JfaGFuZGxlX3N1cF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxuIFx0c3RydWN0IGV0aGhkciAqZXRoaGRyO1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX3B1bGxfc2l6ZSA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgcHVsbF9zaXplID0gMDtcbitcdHVuc2lnbmVkIGludCBzZXFfcG9ydF9jbnQ7XG4gXHR1bnNpZ25lZCBsb25nIGlkeDtcbiBcdGludCBpO1xuIFxuQEAgLTQ3NCw2ICs0ODQsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRcdH1cbiBcdH1cbiBcbitcdHNlcV9wb3J0X2NudCA9IG1pbihub2RlX3JlYWwtXHUwMDNlc2VxX3BvcnRfY250LCBub2RlX2N1cnItXHUwMDNlc2VxX3BvcnRfY250KTtcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNm5vZGVfY3Vyci1cdTAwM2VzZXFfYmxvY2tzLCBpZHgsIHNyY19ibGspIHtcbiBcdFx0aWYgKGhzcl9zZXFfYmxvY2tfaXNfb2xkKHNyY19ibGspKVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTQ4Miw3ICs0OTMsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRcdGlmICghbWVyZ2VfYmxrKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRtZXJnZV9ibGstXHUwMDNldGltZSA9IG1pbihtZXJnZV9ibGstXHUwMDNldGltZSwgc3JjX2Jsay1cdTAwM2V0aW1lKTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbm9kZV9yZWFsLVx1MDAzZXNlcV9wb3J0X2NudDsgaSsrKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNlcV9wb3J0X2NudDsgaSsrKSB7XG4gXHRcdFx0Yml0bWFwX29yKG1lcmdlX2Jsay1cdTAwM2VzZXFfbnJzW2ldLCBtZXJnZV9ibGstXHUwMDNlc2VxX25yc1tpXSxcbiBcdFx0XHRcdCAgc3JjX2Jsay1cdTAwM2VzZXFfbnJzW2ldLCBIU1JfU0VRX0JMT0NLX1NJWkUpO1xuIFx0XHR9XG5AQCAtNjQ5LDkgKzY2MCwxMyBAQCBpbnQgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dChzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRpZiAoZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIGZvciBQUlAgd2Ugc2hvdWxkIG9ubHkgZm9yd2FyZCBmcmFtZXMgZnJvbSB0aGUgc2xhdmUgcG9ydHNcbi1cdCAqIHRvIHRoZSBtYXN0ZXIgcG9ydFxuK1x0LyogUmVkQm94OiBmb3J3YXJkIExBTiBmcmFtZXMgb3V0IHRoZSBpbnRlcmxpbmsgdG8gYSBTQU4sIGRlZHVwaW5nIHRoZVxuK1x0ICogdHdvIExBTiBjb3BpZXMgb24gYSBkZWRpY2F0ZWQgc2xvdC5cbiBcdCAqL1xuK1x0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKVxuK1x0XHRyZXR1cm4gaHNyX2NoZWNrX2R1cGxpY2F0ZShmcmFtZSwgMSk7XG4rXG4rXHQvKiBGb3IgUFJQIG9ubHkgc2xhdmUtdG8tbWFzdGVyIGZyYW1lcyBhcmUgZm9yd2FyZGVkLiAqL1xuIFx0aWYgKHBvcnQtXHUwMDNldHlwZSAhPSBIU1JfUFRfTUFTVEVSKVxuIFx0XHRyZXR1cm4gMTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxuaW5kZXggYzY1ZWNiOTI1NzM0ODkuLjEyN2EzZmI2NGQ1ZjAzIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxuKysrIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxuQEAgLTI3LDYgKzI3LDggQEAgc3RydWN0IGhzcl9mcmFtZV9pbmZvIHtcbiBcdGJvb2wgaXNfbG9jYWxfZGVzdDtcbiBcdGJvb2wgaXNfbG9jYWxfZXhjbHVzaXZlO1xuIFx0Ym9vbCBpc19mcm9tX3NhbjtcbitcdGJvb2wgZHN0X2luX25vZGVfZGI7XG4rXHRib29sIGRzdF9pbl9wcm94eV9ub2RlX2RiO1xuIH07XG4gXG4gdm9pZCBoc3JfZGVsX3NlbGZfbm9kZShzdHJ1Y3QgaHNyX3ByaXYgKmhzcik7XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbWFpbi5oIGIvbmV0L2hzci9oc3JfbWFpbi5oXG5pbmRleCAxMzRlNGYzZmZmNjAzNi4uYzI3Y2ZkZDljYTNmYTggMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9tYWluLmhcbisrKyBiL25ldC9oc3IvaHNyX21haW4uaFxuQEAgLTIxMSw3ICsyMTEsNyBAQCBzdHJ1Y3QgaHNyX3ByaXYge1xuIFx0XHRcdFx0ICovXG4gXHRib29sIGZ3ZF9vZmZsb2FkZWQ7XHQvKiBGb3J3YXJkaW5nIG9mZmxvYWRlZCB0byBIVyAqL1xuIFx0Ym9vbCByZWRib3g7ICAgICAgICAgICAgLyogRGV2aWNlIHN1cHBvcnRzIEhTUiBSZWRCb3ggKi9cbi1cdHVuc2lnbmVkIGNoYXJcdFx0bWFjYWRkcmVzc19yZWRib3hbRVRIX0FMRU5dO1xuK1x0dW5zaWduZWQgY2hhclx0bWFjYWRkcmVzc19yZWRib3hbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XG4gXHR1bnNpZ25lZCBjaGFyXHRcdHN1cF9tdWx0aWNhc3RfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKHNpemVvZih1MTYpKTtcbiBcdFx0XHRcdC8qIEFsaWduIHRvIHUxNiBib3VuZGFyeSB0byBhdm9pZCB1bmFsaWduZWQgYWNjZXNzXG4gXHRcdFx0XHQgKiBpbiBldGhlcl9hZGRyX2VxdWFsXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbmV0bGluay5jIGIvbmV0L2hzci9oc3JfbmV0bGluay5jXG5pbmRleCA4MDk5ZjIwNjlhNzQ4ZS4uODg5NDBlODAxNGIyNGYgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9uZXRsaW5rLmNcbisrKyBiL25ldC9oc3IvaHNyX25ldGxpbmsuY1xuQEAgLTEyMSwxNCArMTIxLDggQEAgc3RhdGljIGludCBoc3JfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAocHJvdG8gPT0gSFNSX1BST1RPQ09MX1BSUCkge1xuK1x0aWYgKHByb3RvID09IEhTUl9QUk9UT0NPTF9QUlApXG4gXHRcdHByb3RvX3ZlcnNpb24gPSBQUlBfVjE7XG4tXHRcdGlmIChpbnRlcmxpbmspIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuLVx0XHRcdFx0XHQgICBcIkludGVybGluayBvbmx5IHdvcmtzIHdpdGggSFNSXCIpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHR9XG4tXHR9XG4gXG4gXHRyZXR1cm4gaHNyX2Rldl9maW5hbGl6ZShkZXYsIGxpbmssIGludGVybGluaywgbXVsdGljYXN0X3NwZWMsXG4gXHRcdFx0XHRwcm90b192ZXJzaW9uLCBleHRhY2spO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzZC4uMjE1MGU0ODdhYzdkN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtNCw2ICs0LDcgQEAgdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXG4gXG4gVEVTVF9QUk9HUyA6PSBcXFxuIFx0aHNyX3Bpbmcuc2ggXFxcbitcdGhzcl9wcnBfcmVkYm94LnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuIFx0cHJwX3Bpbmcuc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NzljODkyMjI1YjFmM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaFxuQEAgLTAsMCArMSw5OSBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFRlc3QgYSBQUlAgUmVkQm94IChQUlAtU0FOKTogYSBTQU4gdGhhdCBzaXRzIGJlaGluZCB0aGUgaW50ZXJsaW5rIHBvcnQgbXVzdFxuKyMgcmVhY2gsIGFuZCBiZSByZWFjaGVkIGJ5LCBhIHBlZXIgREFOUCBvbiB0aGUgUFJQIG5ldHdvcmsgd2l0aCBpdHMgb3duIE1BQ1xuKyMgcHJlc2VydmVkIG9uIHRoZSB3aXJlLCBhbmQgdGhlIFJlZEJveCBtdXN0IGFubm91bmNlIHRoZSBTQU4gd2l0aCBhIFJlZEJveC1NQUNcbisjIFRMViAodGVybWluYXRlZCBieSBhbiBFT1QgbWFya2VyKSBpbiBpdHMgUFJQIHN1cGVydmlzaW9uIGZyYW1lcy5cbisjXG4rIyAgIFJCICAgIFBSUCBSZWRCb3g6IHBycDAgb3ZlciByYl9hL3JiX2IgKExBTiBBL0IpICsgaW50ZXJsaW5rIHJiX2lsXG4rIyAgIFBFRVIgIHBlZXIgREFOUCA6IHBycDAgb3ZlciBwZV9hL3BlX2IsIDEwMC42NC4wLjJcbisjICAgU0FOICAgU0FOICAgICAgIDogc2FuX2lsLCBvd24gTUFDLCAxMDAuNjQuMC41MSAoYmVoaW5kIHRoZSBpbnRlcmxpbmspXG4rXG4raXB2Nj1mYWxzZVxuK1xuK3NvdXJjZSAuL2hzcl9jb21tb24uc2hcbitcbitjaGVja19wcmVyZXF1aXNpdGVzXG4rXG4raWYgISBjb21tYW5kIC12IHRjcGR1bXAgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4rXHRlY2hvIFwiU0tJUDogVGhpcyB0ZXN0IHJlcXVpcmVzIHRjcGR1bXBcIlxuK1x0ZXhpdCAka3NmdF9za2lwXG4rZmlcbitcbitpZiAhIGlwIGxpbmsgaGVscCBoc3IgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xIGludGVybGluazsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IGlwcm91dGUyIHRvbyBvbGQgKG5vIGhzciBpbnRlcmxpbmsgc3VwcG9ydClcIlxuK1x0ZXhpdCAka3NmdF9za2lwXG4rZmlcbitcbitzZXR1cF9ucyBSQiBQRUVSIFNBTlxuK3RyYXAgJ2NsZWFudXBfbnMgXCIkUkJcIiBcIiRQRUVSXCIgXCIkU0FOXCInIEVYSVRcbitcbitpcCBsaW5rIGFkZCByYl9hIG5ldG5zIFwiJFJCXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwZV9hIG5ldG5zIFwiJFBFRVJcIlxuK2lwIGxpbmsgYWRkIHJiX2IgbmV0bnMgXCIkUkJcIiB0eXBlIHZldGggcGVlciBuYW1lIHBlX2IgbmV0bnMgXCIkUEVFUlwiXG4raXAgbGluayBhZGQgcmJfaWwgbmV0bnMgXCIkUkJcIiB0eXBlIHZldGggcGVlciBuYW1lIHNhbl9pbCBuZXRucyBcIiRTQU5cIlxuK1xuK2lwIC1uIFwiJFJCXCIgICBsaW5rIHNldCByYl9hIHVwXG4raXAgLW4gXCIkUkJcIiAgIGxpbmsgc2V0IHJiX2IgdXBcbitpcCAtbiBcIiRSQlwiICAgbGluayBzZXQgcmJfaWwgdXBcbitpcCAtbiBcIiRQRUVSXCIgbGluayBzZXQgcGVfYSB1cFxuK2lwIC1uIFwiJFBFRVJcIiBsaW5rIHNldCBwZV9iIHVwXG4raXAgLW4gXCIkU0FOXCIgIGxpbmsgc2V0IHNhbl9pbCB1cFxuK2lwIC1uIFwiJFNBTlwiICBhZGRyIGFkZCAxMDAuNjQuMC41MS8yNCBkZXYgc2FuX2lsXG4rXG4rIyBGZWF0dXJlIGdhdGU6IFBSUCBpbnRlcmxpbmsgKFJlZEJveCkgY3JlYXRpb24uIEEga2VybmVsIHdpdGhvdXQgUFJQIFJlZEJveFxuKyMgc3VwcG9ydCByZWplY3RzIHRoaXMgd2l0aCAtRUlOVkFMLCBzbyBTS0lQIHJhdGhlciB0aGFuIEZBSUwuXG4raWYgISBpcCAtbiBcIiRSQlwiIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgcmJfYSBzbGF2ZTIgcmJfYiBcXFxuKyAgICAgaW50ZXJsaW5rIHJiX2lsIHByb3RvIDEgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IGtlcm5lbCB3aXRob3V0IFBSUCBSZWRCb3ggKGludGVybGluaykgc3VwcG9ydFwiXG4rXHRleGl0ICRrc2Z0X3NraXBcbitmaVxuK2lwIC1uIFwiJFJCXCIgICBsaW5rIHNldCBwcnAwIHVwXG4raXAgLW4gXCIkUEVFUlwiIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgcGVfYSBzbGF2ZTIgcGVfYiBwcm90byAxXG4raXAgLW4gXCIkUEVFUlwiIGxpbmsgc2V0IHBycDAgdXBcbitpcCAtbiBcIiRQRUVSXCIgYWRkciBhZGQgMTAwLjY0LjAuMi8yNCBkZXYgcHJwMFxuK3NsZWVwIDFcbitcbitzYW5fbWFjPSQoaXAgLW4gXCIkU0FOXCIgLWJyIGxpbmsgc2hvdyBzYW5faWwgfCBhd2sgJ3twcmludCAkM30nKVxuK3JiX21hYz0kKGlwIC1uIFwiJFJCXCIgLWJyIGxpbmsgc2hvdyByYl9pbCB8IGF3ayAne3ByaW50ICQzfScpXG4rXG4rIyBCaWRpcmVjdGlvbmFsIHVuaWNhc3QgYWNyb3NzIHRoZSBpbnRlcmxpbmsuXG4rZG9fcGluZyBcIiRQRUVSXCIgMTAwLjY0LjAuNTFcbitkb19waW5nIFwiJFNBTlwiICAxMDAuNjQuMC4yXG4rc3RvcF9pZl9lcnJvciBcIlBSUCBSZWRCb3ggYmlkaXJlY3Rpb25hbCB1bmljYXN0IGZhaWxlZFwiXG4rXG4rIyBUaGUgU0FOIHNvdXJjZSBNQUMgbXVzdCBiZSBwcmVzZXJ2ZWQgb24gdGhlIFBSUCBuZXR3b3JrLCBub3QgbGF1bmRlcmVkIHRvIHRoZVxuKyMgUmVkQm94IE1BQzogdGhlIHBlZXIgcmVzb2x2ZXMgdGhlIFNBTiBJUCB0byB0aGUgU0FOJ3Mgb3duIE1BQy5cbituZWlnaD0kKGlwIC1uIFwiJFBFRVJcIiBuZWlnaCBzaG93IDEwMC42NC4wLjUxIHwgYXdrICd7cHJpbnQgJDV9JylcbitpZiBbIFwiJG5laWdoXCIgIT0gXCIkc2FuX21hY1wiIF07IHRoZW5cbitcdGVjaG8gXCJTQU4gTUFDIHByZXNlcnZhdGlvbiBbIEZBSUwgXTogcGVlciByZXNvbHZlZCAxMDAuNjQuMC41MSB0b1wiIFxcXG4rXHQgICAgIFwiJyRuZWlnaCcsIGV4cGVjdGVkICRzYW5fbWFjXCIgMVx1MDAzZVx1MDAyNjJcbitcdHJldD0xXG4rZmlcbitzdG9wX2lmX2Vycm9yIFwiU0FOIE1BQyBub3QgcHJlc2VydmVkIG9uIHRoZSBQUlAgbmV0d29ya1wiXG4rXG4rIyBUaGUgcHJveHktYW5ub3VuY2Ugc3VwZXJ2aXNpb24gZnJhbWUgbXVzdCBjYXJyeSwgaW4gb3JkZXIsIHRoZSBsaWZlLWNoZWNrIFRMVlxuKyMgKHR5cGUgMHgxNCwgbGVuIDYpICsgTWFjQWRkcmVzc0EgPT0gU0FOIE1BQyArIHRoZSBSZWRCb3gtTUFDIFRMViAodHlwZSAweDFlLFxuKyMgbGVuIDYpICsgTWFjQWRkcmVzc1JlZEJveCA9PSBSZWRCb3ggTUFDICsgdGhlIEVPVCBtYXJrZXIgKDB4MDAwMCkuXG4raXAgbmV0bnMgZXhlYyBcIiRTQU5cIiBwaW5nIC1pIDAuMiAtcSAxMDAuNjQuMC4yIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbitwaW5nX3BpZD0kIVxuK2NhcD0kKGlwIG5ldG5zIGV4ZWMgXCIkUEVFUlwiIHRpbWVvdXQgNSB0Y3BkdW1wIC1pIHBlX2EgLW5uIC14IFxcXG4rXHRcImV0aGVyIHByb3RvIDB4ODhmYiBhbmQgZXRoZXIgc3JjICRyYl9tYWNcIiAyXHUwMDNlL2Rldi9udWxsIHx8IHRydWUpXG4ra2lsbCBcIiRwaW5nX3BpZFwiIDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuK3dhaXQgXCIkcGluZ19waWRcIiAyXHUwMDNlL2Rldi9udWxsIHx8IHRydWVcbitcbitzYW5faGV4PSQoZWNobyBcIiRzYW5fbWFjXCIgfCB0ciAtZCAnOicpXG4rcmJfaGV4PSQoZWNobyBcIiRyYl9tYWNcIiB8IHRyIC1kICc6JylcbisjIFJlYXNzZW1ibGUgY29udGlndW91cyBmcmFtZSBoZXg6IGRyb3AgdGhlIFwiMHgwMDEwOlwiIG9mZnNldCBsYWJlbHMgYW5kIHNwYWNlcy5cbitmcmFtZV9oZXg9JChlY2hvIFwiJGNhcFwiIHwgYXdrICcvXltbOnNwYWNlOl1dKjB4WzAtOWEtZl0rOi8ge1xuK1x0c3ViKC9eW1s6c3BhY2U6XV0qMHhbMC05YS1mXSs6W1s6c3BhY2U6XV0qLywgXCJcIik7XG4rXHRnc3ViKC8gLywgXCJcIik7IHByaW50ZiBcIiVzXCIsICQwIH0nKVxuK2lmICEgZWNobyBcIiRmcmFtZV9oZXhcIiB8IGdyZXAgLXEgXCIxNDA2JHtzYW5faGV4fTFlMDYke3JiX2hleH0wMDAwXCI7IHRoZW5cbitcdGVjaG8gXCJzdXBlcnZpc2lvbiBSZWRCb3gtTUFDIFRMViBbIEZBSUwgXTogbWlzc2luZyBTQU4gTUFDLCBUeXBlLTMwXCIgXFxcbitcdCAgICAgXCJwYXlsb2FkLCBvciBFT1RcIiAxXHUwMDNlXHUwMDI2MlxuK1x0cmV0PTFcbitmaVxuK3N0b3BfaWZfZXJyb3IgXCJQUlAgUmVkQm94IHN1cGVydmlzaW9uIFJlZEJveC1NQUMgVExWL0VPVCBjaGVjayBmYWlsZWRcIlxuK1xuK2VjaG8gXCJJTkZPOiBQUlAgUmVkQm94IChQUlAtU0FOKSBjb25mb3JtYW5jZSBjaGVja3MgcGFzc2VkXCJcbitleGl0ICRyZXRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjU3OjM3LjI5MTAzMTMyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyODUxNTUyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUFJQIFJlZEJveCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBhZGRpbmcgUFJQIFJlZEJveCBzdXBwb3J0IHRvIHRoZSBIU1IvUFJQIHN1YnN5c3RlbS4gVGhpcyBsb29rcyBsaWtlIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGVuYWJsaW5nIGEgU0FOIGJlaGluZCBhbiBpbnRlcmxpbmsgcG9ydCB0byBjb21tdW5pY2F0ZSB3aXRoIGEgcGVlciBEQU5QIG9uIHRoZSBQUlAgbmV0d29yay4gVGhlIGNoYW5nZXMgdG91Y2ggYSBkZWNlbnQgY2h1bmsgb2YgdGhlIEhTUiBjb2RlLCBtb2RpZnlpbmcgc2V2ZXJhbCBmaWxlczogYGhzcl9kZXZpY2UuY2AsIGBoc3JfZm9yd2FyZC5jYCwgYGhzcl9mcmFtZXJlZy5jYCwgYGhzcl9mcmFtZXJlZy5oYCwgYGhzcl9tYWluLmhgLCBgaHNyX25ldGxpbmsuY2AsIGFuZCBhZGRpbmcgYSB0ZXN0IHNjcmlwdC5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlOlxuXG4qICAgSW4gYGhzcl9kZXZpY2UuY2AsIHRoZSBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGluY2x1ZGUgUmVkQm94LU1BQyBUTFZzIGFuZCBFT1QgbWFya2VycyBmb3IgcHJveHkgYW5ub3VuY2VtZW50LCBhbmQgYGhzcl9kZXZfZmluYWxpemVgIG5vdyBwdWJsaXNoZXMgdGhlIFJlZEJveCBzdGF0ZSBwcmlvciB0byBwb3J0IGF0dGFjaG1lbnQuIFRoaXMgbWFrZXMgc2Vuc2U7IFJlZEJveCBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgYW55dGhpbmcgZWxzZS5cblxuKiAgIGBoc3JfZm9yd2FyZC5jYCBpbnRyb2R1Y2VzIGxvZ2ljIHdpdGhpbiBgcHJwX2Ryb3BfZnJhbWVgIHRvIGhhbmRsZSBzdXBlcnZpc2lvbiBmcmFtZXMsIExBTiBkdXBsaWNhdGVzLCBhbmQgdW5pY2FzdCBmcmFtZXMsIGRlcGVuZGluZyBvbiB0aGVpciBvcmlnaW4gYW5kIGRlc3RpbmF0aW9uLiBUaGVyZSBpcyBhbHNvIGEgY2hhbmdlIHRvIGNsYXNzaWZ5IHRoZSBkZXN0aW5hdGlvbiBmb3IgUFJQIFJlZEJveCBpbiBgZmlsbF9mcmFtZV9pbmZvYC5cblxuKiAgIGBoc3JfZnJhbWVyZWcuY2AgaXMgYmVpbmcgaGVhdmlseSBtb2RpZmllZC4gYGhzcl9hZGRfbm9kZWAgbm93IHNldHMgYHNlcV9wb3J0X2NudGAgdG8gMiBmb3IgUFJQXFxfVjEgaWYgYGhzci1cdTAwM2VyZWRib3hgIGlzIHNldC4gYGhzcl9nZXRfbm9kZWAgd2lsbCBub3cgY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgYGhzcl9ldGhoZHJgIGZvciBQUlAgc3VwZXJ2aXNpb24gZnJhbWVzLiBBbHNvLCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgIG1lcmdlcyBzZXF1ZW5jZSBibG9ja3MgYW5kIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCBub3cgZm9yd2FyZHMgTEFOIGZyYW1lcyBvdXQgdGhlIGludGVybGluayB0byBhIFNBTiwgZGVkdXBsaWNhdGluZyB0aGUgTEFOIGNvcGllcy4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LlxuXG4qICAgYGhzcl9uZXRsaW5rLmNgIGhhcyBhIHNpbXBsZSBjaGFuZ2UgcmVtb3ZpbmcgdGhlIHJlc3RyaWN0aW9uIG9uIGludGVybGluayBzdXBwb3J0IGFuZCBhbGxvd2luZyBQUlAgdG8gZnVuY3Rpb24gaGVyZS5cblxuVGhpcyB3YXJyYW50cyB0aG9yb3VnaCB0ZXN0aW5nLCBhbmQgYmFzZWQgb24gdGhlIGZpbGVzIGFuZCBmdW5jdGlvbnMgY2hhbmdlZCwgdGhpcyBpcyBkZWZpbml0ZWx5IFdvcnRoRnV6emluZy5cblxuSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBrZXkgZnVuY3Rpb25zIHRvIHRob3JvdWdobHkgZXZhbHVhdGUgdGhpcyBpbXBsZW1lbnRhdGlvbi4gTG9va2luZyBhdCB0aGUgZGlmZiwgdGhlIG1haW4gZnVuY3Rpb25zIG9mIGNvbmNlcm4gc2VlbSB0byBiZTogYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYCwgYHBycF9kcm9wX2ZyYW1lYCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgLCBhbmQgYGhzcl9uZXdsaW5rYC4gSSdsbCB3YW50IHRvIGNyYWZ0IGZ1enplciBpbnB1dHMgdGhhdCBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIG5ldyBQUlAgUmVkQm94LXNwZWNpZmljIGxvZ2ljLiBJIGNhbiBsb29rIGluIGBuZXQvaHNyL0tjb25maWdgIG9yIGBuZXQvS2NvbmZpZ2AgZm9yIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBicmVhayB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDM5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTc6NDYuNTc2MTg5OTQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzE1NzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFNSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTc6NDYuOTIzMzU0MzAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE5MjY5NjA4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29udGV4dCBDaGVjayoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBpcyBpZGVudGlmaWVkIGFzIGBIU1JgLiBNeSBpbW1lZGlhdGUgcmVzcG9uc2UgaXMgdG8gbWVudGFsbHkgZmxhZyB0aGF0IGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3Igd2hhdGV2ZXIgYW5hbHlzaXMgb3IgdGFzayBpcyBhdCBoYW5kLiBOb3csIGJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyB0aGUgT05MWSByZWxldmFudCBjb25maWd1cmF0aW9uLiBJdCdzIGNydWNpYWwgdG8gZW5zdXJlIHRoaXMgaXMgYSBzZWxmLWNvbnRhaW5lZCBzeXN0ZW0uIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gZm9yIGFueSByZWxhdGVkLCBkZXBlbmRlbnQsIG9yIGNvbmZsaWN0aW5nIGNvbmZpZ3VyYXRpb25zLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBgSFNSYCBzZXR0aW5nIGlzIHBhcnQgb2YgYSBsYXJnZXIsIHBvdGVudGlhbGx5IG1vcmUgY29tcGxleCwgY29uZmlndXJhdGlvbiBvciBpZiBpdCBjYW4gYmUgZXhhbWluZWQgaW4gaXNvbGF0aW9uLiBJZiB0aGVyZSBhcmUgb3RoZXIgY29uZmlndXJhdGlvbnMgSSdsbCBuZWVkIHRvIGtub3cgYWJvdXQgdGhlbSwgYW5kIGhvdyB0aGV5IGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDc4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTk6MTguODUwMzE3MDA0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMzAzNzU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG4tLVxcbm5ldC9oc3IvS2NvbmZpZz00Mj1pZiBIU1JcXG5uZXQvaHNyL0tjb25maWctNDMtXFxubmV0L2hzci9LY29uZmlnOjQ0OmNvbmZpZyBQUlBfRFVQX0RJU0NBUkRfS1VOSVRfVEVTVFxcbm5ldC9oc3IvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiUFJQIGR1cGxpY2F0ZSBkaXNjYXJkIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjU5OjE5LjE1MzM1ODk2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODA4NTMxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkhTUiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgYEhTUmAgYXBwZWFycyB0byBiZSB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGVsZW1lbnQuIFRoYXQncyBteSBzdGFydGluZyBwb2ludC4gTm93LCB0byByZWFsbHkgdW5kZXJzdGFuZCBpdHMgaW1wYWN0LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZC4gTGV0IG1lIHF1aWNrbHkgaWRlbnRpZnkgdGhvc2U6IEknbSBzZWVpbmcgYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYCwgYHBycF9kcm9wX2ZyYW1lYCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgLCBhbmQgYGhzcl9uZXdsaW5rYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBoZWF2eSBsaWZ0ZXJzLlxuXG5Ob3csIG9uZSBvZiB0aGUgY3J1Y2lhbCBwaWVjZXMgaXMgdGhhdCBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgLiBJIG5lZWQgdG8gY29uZmlybSBpdHMgaW52b2NhdGlvbiBjaGFpbiBhbmQgZW5zdXJlIGl0J3Mgbm90IGEgZGVhZCBlbmQuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZC4gSXQgZmVlbHMgbGlrZSBgaHNyX2Fubm91bmNlYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlLCBidXQgSSdsbCBjb25maXJtIHRoYXQgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgzOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxOTo1OToyMy4zMzQyMTQyODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzMDAzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9MjkzPXN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2OC1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozNjk6c3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzcwLVxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nICppbnRlcnZhbCxcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTY1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGhzcl9wcm90b19vcHMgcHJwX29wcyA9IHtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NTk6XFx0LnNlbmRfc3ZfZnJhbWUgPSBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZSxcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02NjAtXFx0LmNyZWF0ZV90YWdnZWRfZnJhbWUgPSBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTk6MjMuMzkzNTIxMDA2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg1NzQwNDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgdGhlIE9wZXJhdGlvbioqXG5cbkFscmlnaHQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHJlY29nbml6ZSB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgaGFuZGxlZCB3aXRoaW4gdGhlIGBwcnBfb3BzYCBmcmFtZXdvcmsuIFRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBjb25zaWRlcmFibHk7IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIHNldCBvZiBvcGVyYXRpb25zLCBhbmQgdGhlIG92ZXJhbGwgY29udGV4dCBpcyBhbHJlYWR5IGVzdGFibGlzaGVkLiBOb3csIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGlyZWN0bHkgaW50byB0aGUgYHBycF9kcm9wX2ZyYW1lYCBmdW5jdGlvbi4gVGhhdOKAmXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVsYXRlZCB0byBoYW5kbGluZyBmcmFtZSBkcm9wcyB3b3VsZCByZXNpZGUsIGFuZCB0aGF0J3MgZXhhY3RseSB3aGF0IEknbSBsb29raW5nIGZvciBpbiBvcmRlciB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzIGluIHByYWN0aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQyNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjU5OjMwLjI1MDkyNzgwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk0ODI2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJwX2Ryb3BfZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9NjU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHNyX3Byb3RvX29wcyBwcnBfb3BzID0ge1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjYxLVxcdC5nZXRfdW50YWdnZWRfZnJhbWUgPSBwcnBfZ2V0X3VudGFnZ2VkX2ZyYW1lLFxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjY2MjpcXHQuZHJvcF9mcmFtZSA9IHBycF9kcm9wX2ZyYW1lLFxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2My1cXHQuZmlsbF9mcmFtZV9pbmZvID0gcHJwX2ZpbGxfZnJhbWVfaW5mbyxcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz00NDM9c3RhdGljIGJvb2wgcHJwX2lzX2xhbl9kdXAoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy00NTEtXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjQ1Mjpib29sIHBycF9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNDUzLXtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz03MDE9c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03MzQtXFx0LyogUFJQIFJlZEJveCBvbmx5OiBjbGFzc2lmeSB0aGUgdW5pY2FzdCBkZXN0aW5hdGlvbiBvbmNlIHNvIHRoZVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3MzU6XFx0ICogcGVyLWVncmVzcy1wb3J0IGRlY2lzaW9uIGluIHBycF9kcm9wX2ZyYW1lKCkgc3RheXMgTygxKS4gSFNSIFJlZEJveFxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03MzYtXFx0ICogZG9lcyBpdHMgb3duIGNsYXNzaWZpY2F0aW9uIGFuZCBtdXN0IG5vdCBwYXkgdGhlc2Ugbm9kZS10YWJsZSB3YWxrcy5cXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaD0yMz1zdHJ1Y3Qgc2tfYnVmZiAqcHJwX2dldF91bnRhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0yNC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg6MjU6Ym9vbCBwcnBfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0yNi1ib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjU5OjMwLjMxMDQyNjI2NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM3MTQwMzU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBQUlAgRnJhbWV3b3JrKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBwcnBfZHJvcF9mcmFtZWAgZnVuY3Rpb24uIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgbmFtZSBwb3AgdXAgYmVmb3JlLiBXYWl0LCB5ZXMsIGl0J3MgYWxzbyBhIGNvbXBvbmVudCBvZiB0aGUgYHBycF9vcHNgIHN0cnVjdHVyZS4gVGhhdCdzIGdvb2QgdG8ga25vdzsgaXQgcHV0cyBpdCBpbiBhIGJyb2FkZXIgY29udGV4dCB3aXRoaW4gdGhlIFBSUCBhcmNoaXRlY3R1cmUuIExldCBtZSBtYWtlIGEgbWVudGFsIG5vdGUgdG8ga2VlcCB0aGF0IGFzc29jaWF0aW9uIGluIG1pbmQgYXMgSSBkZWx2ZSBkZWVwZXIuXG5cbk5vdywgd2hlcmUgd2FzIEk/IFJpZ2h0LCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgIG5leHQuIEl0IHNvdW5kcyBsaWtlIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgZnJhbWUgaGFuZGxpbmcgYXQgYSBoaWdoZXIgbGV2ZWwsIHdoaWNoIGlzIHByb2JhYmx5IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUgYW5kIEkgc3VzcGVjdCBpdCB3aWxsIGJlIHJlbGV2YW50IHRvIGhvdyBgcHJwX2Ryb3BfZnJhbWVgIGlzIHVzZWQgaW4gYSBzcGVjaWZpYyBhcHBsaWNhdGlvbi4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIGhhbmRsaW5nIHN1cGVyIGZyYW1lcywgYW5kIEknZCBsaWtlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGVudGFpbHMuIExldCdzIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExOTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDowMDowOS42ODE4MzI1NjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNzcwMTk5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfaGFuZGxlX3N1cF9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NTQ0PXN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNTc5LVxcdFxcdCAgICAhZnJhbWUtXFx1MDAzZWlzX3Byb3h5X3N1cGVydmlzaW9uKSB7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjU4MDpcXHRcXHRcXHRoc3JfaGFuZGxlX3N1cF9mcmFtZShmcmFtZSk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU4MS1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM9MzczPUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoaHNyX2dldF9zZXFfYmxvY2spO1xcbi0tXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuYy0zNzgtICovXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuYzozNzk6dm9pZCBoc3JfaGFuZGxlX3N1cF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmMtMzgwLXtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmg9MzY9c3RydWN0IGhzcl9ub2RlICpoc3JfZ2V0X25vZGUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgbGlzdF9oZWFkICpub2RlX2RiLFxcbi0tXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuaC0zOC1cXHRcXHRcXHQgICAgICBlbnVtIGhzcl9wb3J0X3R5cGUgcnhfcG9ydCk7XFxubmV0L2hzci9oc3JfZnJhbWVyZWcuaDozOTp2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpO1xcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmgtNDAtYm9vbCBoc3JfYWRkcl9pc19zZWxmKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCB1bnNpZ25lZCBjaGFyICphZGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6MDA6MTAuMDA5NTM5NTI3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNDU4NzY5NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqVGFyZ2V0aW5nIE9wdGltYWwgT3V0cHV0IEZyYW1lIFJlZ2lzdHJhdGlvbioqXG5cbkFscmlnaHQsIHRoaW5raW5nIGFib3V0IG91dHB1dCBmcmFtZSByZWdpc3RyYXRpb24uLi4gYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgY29udGVuZGVyLCBhbmQgbWF5YmUgdGhlIGJlc3QgcGxhY2UgdG8gZm9jdXMgb3VyIGVmZm9ydHMuIFRoaXMgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGNlbnRyYWwgcG9pbnQsIGEgbG9naWNhbCBwbGFjZSB0byBob29rIGluIGFuZCBvcHRpbWl6ZS4gSSdtIGFscmVhZHkgdmlzdWFsaXppbmcgaG93IGl0IGhhbmRsZXMgdGhlIGRhdGEgZmxvdywgYW5kIEkgY2FuIHN0YXJ0IG1lbnRhbGx5IG1hcHBpbmcgb3V0IHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYXJvdW5kIHRoYXQgcG9pbnQsIGFuYWx5emUgaXRzIGRlcGVuZGVuY2llcywgYW5kIHNlZSBpZiBhbnkgcXVpY2sgd2lucyBhcmUgcG9zc2libGUgd2l0aGluIHRoYXQgc3BlY2lmaWMgc3Vicm91dGluZS4gSSdtIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCB0cmFkZW9mZnMgdGhlcmUgLSBob3cgbXVjaCBjb250cm9sIGRvIEkgd2FudCBhdCB0aGlzIGxheWVyLCB2ZXJzdXMgcHVzaGluZyByZXNwb25zaWJpbGl0eSBmdXJ0aGVyIGRvd24gdGhlIGxpbmU/IFRoaXMgaXMgZGVmaW5pdGVseSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBvdXIgb3B0aW1pemF0aW9uIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODc4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6MDA6MzEuNDY4MzExMjc0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODQ0NTg1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2RldmljZS5jPTY1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGhzcl9wcm90b19vcHMgcHJwX29wcyA9IHtcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2NS1cXHQudXBkYXRlX3Nhbl9pbmZvID0gcHJwX3VwZGF0ZV9zYW5faW5mbyxcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NjY6XFx0LnJlZ2lzdGVyX2ZyYW1lX291dCA9IHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQsXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjY3LX07XFxuLS1cXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jPTY0MD1pbnQgaHNyX3JlZ2lzdGVyX2ZyYW1lX291dChzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuLS1cXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTY1Ni0gKi9cXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jOjY1NzppbnQgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dChzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuYy02NTgte1xcbi0tXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuYy02NzQtfVxcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM6Njc1OkVYUE9SVF9TWU1CT0xfSUZfS1VOSVQocHJwX3JlZ2lzdGVyX2ZyYW1lX291dCk7XFxubmV0L2hzci9oc3JfZnJhbWVyZWcuYy02NzYtXFxuLS1cXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5oPTc0PWJvb2wgaHNyX2lzX25vZGVfaW5fZGIoc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9kYixcXG4tLVxcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmgtNzYtXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuaDo3NzppbnQgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dChzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpO1xcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmgtNzgtXFxuLS1cXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM9Njk9c3RhdGljIHZvaWQgcHJwX2R1cF9kaXNjYXJkX2ZvcndhcmQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTc1LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAwLFxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzo3NjpcXHRcXHRcXHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFxcdTAwMjZkYXRhLVxcdTAwM2Vwb3J0LCBcXHUwMDI2ZGF0YS1cXHUwMDNlZnJhbWUpKTtcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtNzctXFx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jPTgwPXN0YXRpYyB2b2lkIHBycF9kdXBfZGlzY2FyZF9kcm9wX2R1cGxpY2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtODUtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjg2OlxcdFxcdFxcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXFx1MDAyNmRhdGEtXFx1MDAzZXBvcnQsIFxcdTAwMjZkYXRhLVxcdTAwM2VmcmFtZSkpO1xcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy04Ny1cXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVxcdTAwM2VmcmFtZS5zZXF1ZW5jZV9ucik7XFxuLS1cXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtODktXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDEsXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjkwOlxcdFxcdFxcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXFx1MDAyNmRhdGEtXFx1MDAzZXBvcnQsIFxcdTAwMjZkYXRhLVxcdTAwM2VmcmFtZSkpO1xcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy05MS1cXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVxcdTAwM2VmcmFtZS5zZXF1ZW5jZV9ucik7XFxuLS1cXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM9OTQ9c3RhdGljIHZvaWQgcHJwX2R1cF9kaXNjYXJkX2VudHJ5X3RpbWVvdXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTEwMi1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTAzOlxcdFxcdFxcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXFx1MDAyNmRhdGEtXFx1MDAzZXBvcnQsIFxcdTAwMjZkYXRhLVxcdTAwM2VmcmFtZSkpO1xcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMDQtXFx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTEwNy1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTA4OlxcdFxcdFxcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXFx1MDAyNmRhdGEtXFx1MDAzZXBvcnQsIFxcdTAwMjZkYXRhLVxcdTAwM2VmcmFtZSkpO1xcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMDktXFx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTExNS1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTE2OlxcdFxcdFxcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXFx1MDAyNmRhdGEtXFx1MDAzZXBvcnQsIFxcdTAwMjZkYXRhLVxcdTAwM2VmcmFtZSkpO1xcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMTctXFx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jPTEyMT1zdGF0aWMgdm9pZCBwcnBfZHVwX2Rpc2NhcmRfb3V0X29mX3NlcXVlbmNlKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMjgtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjEyOTpcXHRcXHRcXHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFxcdTAwMjZkYXRhLVxcdTAwM2Vwb3J0LCBcXHUwMDI2ZGF0YS1cXHUwMDNlZnJhbWUpKTtcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTMwLVxcdGNoZWNrX3BycF9mcmFtZV9zZWVuKHRlc3QsIGRhdGEsIGRhdGEtXFx1MDAzZWZyYW1lLnNlcXVlbmNlX25yKTtcXG4tLVxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMzQtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjEzNTpcXHRcXHRcXHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFxcdTAwMjZkYXRhLVxcdTAwM2Vwb3J0LCBcXHUwMDI2ZGF0YS1cXHUwMDNlZnJhbWUpKTtcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTM2LVxcdGNoZWNrX3BycF9mcmFtZV9zZWVuKHRlc3QsIGRhdGEsIGRhdGEtXFx1MDAzZWZyYW1lLnNlcXVlbmNlX25yKTtcXG4tLVxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xNDEtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDEsXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjE0MjpcXHRcXHRcXHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFxcdTAwMjZkYXRhLVxcdTAwM2Vwb3J0LCBcXHUwMDI2ZGF0YS1cXHUwMDNlZnJhbWUpKTtcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTQzLVxcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE0Ny1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTQ4OlxcdFxcdFxcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXFx1MDAyNmRhdGEtXFx1MDAzZXBvcnQsIFxcdTAwMjZkYXRhLVxcdTAwM2VmcmFtZSkpO1xcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xNDktXFx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE1NC1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMSxcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTU1OlxcdFxcdFxcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXFx1MDAyNmRhdGEtXFx1MDAzZXBvcnQsIFxcdTAwMjZkYXRhLVxcdTAwM2VmcmFtZSkpO1xcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xNTYtfVxcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jPTE1OD1zdGF0aWMgdm9pZCBwcnBfZHVwX2Rpc2NhcmRfbGFuX2JfbGF0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTY0LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAwLFxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzoxNjU6XFx0XFx0XFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcXHUwMDI2ZGF0YS1cXHUwMDNlcG9ydCwgXFx1MDAyNmRhdGEtXFx1MDAzZWZyYW1lKSk7XFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE2Ni1cXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVxcdTAwM2VmcmFtZS5zZXF1ZW5jZV9ucik7XFxuLS1cXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTY5LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAwLFxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzoxNzA6XFx0XFx0XFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcXHUwMDI2ZGF0YS1cXHUwMDNlcG9ydCwgXFx1MDAyNmRhdGEtXFx1MDAzZWZyYW1lKSk7XFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE3MS1cXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVxcdTAwM2VmcmFtZS5zZXF1ZW5jZV9ucik7XFxuLS1cXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTc1LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAxLFxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzoxNzY6XFx0XFx0XFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcXHUwMDI2ZGF0YS1cXHUwMDNlcG9ydCwgXFx1MDAyNmRhdGEtXFx1MDAzZWZyYW1lKSk7XFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE3Ny1cXG4tLVxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xODAtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDEsXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjE4MTpcXHRcXHRcXHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFxcdTAwMjZkYXRhLVxcdTAwM2Vwb3J0LCBcXHUwMDI2ZGF0YS1cXHUwMDNlZnJhbWUpKTtcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTgyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6MDA6MzEuNTY2NzYyODE2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDgwMDU2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFJlYWNoYWJpbGl0eSBpbiB0aGUgUFJQIFN1YnN5c3RlbSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgIGlzIGNvbm5lY3RlZCB0byBgcHJwX29wc2AsIG1lYW5pbmcgaXQncyByZWFjaGFibGUgdGhyb3VnaCB0aGF0IHBhdGh3YXkgYXMgd2VsbC4gVGhhdCdzIGdvb2QgdG8ga25vdywgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgUFJQIGFyY2hpdGVjdHVyZS5cblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGV4YW1pbmUgYGhzcl9uZXdsaW5rYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoaW4gdGhpcyBmcmFtZXdvcmsuIE15IGludHVpdGlvbiB0ZWxscyBtZSBpdCBsaWtlbHkgdG91Y2hlcyB0aGUgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbSBvciBhIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmUgaW4gc29tZSB3YXkuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgaXQgaXMgd29ya2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDowMDozNC41MTQ3NzEwMTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NTc4NTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzcl9uZXdsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX25ldGxpbmsuYz0xOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaHNyX3BvbGljeVtJRkxBX0hTUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9oc3IvaHNyX25ldGxpbmsuYy0zMS0gKi9cXG5uZXQvaHNyL2hzcl9uZXRsaW5rLmM6MzI6c3RhdGljIGludCBoc3JfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9oc3IvaHNyX25ldGxpbmsuYy0zMy1cXHRcXHQgICAgICAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm5ldC9oc3IvaHNyX25ldGxpbmsuYz0xOTE9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGhzcl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2hzci9oc3JfbmV0bGluay5jLTE5Ni1cXHQuc2V0dXBcXHRcXHQ9IGhzcl9kZXZfc2V0dXAsXFxubmV0L2hzci9oc3JfbmV0bGluay5jOjE5NzpcXHQubmV3bGlua1xcdD0gaHNyX25ld2xpbmssXFxubmV0L2hzci9oc3JfbmV0bGluay5jLTE5OC1cXHQuZGVsbGlua1xcdD0gaHNyX2RlbGxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjAwOjM0LjU3MjM1NjMzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU1OTA4NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5ldGxpbmstUmVsYXRlZCBIU1IgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZXN0YWJsaXNoZWQgdGhhdCB0aGUgYGhzcl9uZXdsaW5rYCBmdW5jdGlvbiBpcyBpbmRlZWQgcmVhY2hhYmxlIHRocm91Z2ggbmV0bGluay4gVGhhdCdzIGdvb2QsIHRoYXQncyB3aGF0IEkgbmVlZGVkIHRvIGNvbmZpcm0uIE5vdywgSSBuZWVkIHRvIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgZnJhbWUgaGFuZGxpbmcgYW5kIEhTUiBwcm9jZXNzIGFzIHRoZXkgcmVsYXRlIHRvIHRoaXMgY29ubmVjdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIHN5bWJvbHMgYXJlOiBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgLCBgcHJwX2Ryb3BfZnJhbWVgLCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgLCBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGAsIGFuZCwgb2YgY291cnNlLCB0aGUga2V5IGBoc3JfbmV3bGlua2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGluIHRoaXMgbmV0bGluayBjb250ZXh0LlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHdhbnQgdG8gY29uZmlybSBzb21ldGhpbmcgdGhhdCBJIHRob3VnaHQgSSBrbmV3LCBidXQgaXMgd29ydGggYSBxdWljayBkb3VibGUtY2hlY2sgZm9yIGFic29sdXRlIGNlcnRhaW50eS4gTGV0IG1lIGp1c3Qgb3BlbiBgbmV0L2hzci9LY29uZmlnYCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhhdCBgSFNSYCBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIHBsYXkgaGVyZS4gSSBkb24ndCB3YW50IHRvIGdldCBzaWRldHJhY2tlZCBieSByZWxhdGVkIG9wdGlvbnMgaWYgaXQncyBub3QgdGhlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTM1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjAwOjM4LjMyODI2NzU5MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaHNyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIElFQyA2MjQzOS0zIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3lcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEhTUlxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcXHUwMDI2IFBSUClcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBJRUMgNjI0MzkgZGVmaW5lZCBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzc1xcbiAgMTA6XFx0XFx0ICBSZWR1bmRhbmN5IChIU1IpIGFuZCBQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sIChQUlApLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYVxcbiAgMTM6XFx0XFx0ICBEQU5IIChcXFwiRG91Ymx5IGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIEhTUlxcXCIpIG9yIERBTlAgKFxcXCJEb3VibHlcXG4gIDE0OlxcdFxcdCAgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgUFJQXFxcIikuIEZvciB0aGlzIHRvIHdvcmssIHlvdXIgTGludXggYm94XFxuICAxNTpcXHRcXHQgIG5lZWRzIChhdCBsZWFzdCkgdHdvIHBoeXNpY2FsIEV0aGVybmV0IGludGVyZmFjZXMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgRm9yIERBTkgsIGl0IG11c3QgYmUgY29ubmVjdGVkIGFzIGEgbm9kZSBpbiBhIHJpbmcgbmV0d29yayB0b2dldGhlclxcbiAgMTg6XFx0XFx0ICB3aXRoIG90aGVyIEhTUiBjYXBhYmxlIG5vZGVzLiBBbGwgRXRoZXJuZXQgZnJhbWVzIHNlbnQgb3ZlciB0aGUgSFNSXFxuICAxOTpcXHRcXHQgIGRldmljZSB3aWxsIGJlIHNlbnQgaW4gYm90aCBkaXJlY3Rpb25zIG9uIHRoZSByaW5nIChvdmVyIGJvdGggc2xhdmVcXG4gIDIwOlxcdFxcdCAgcG9ydHMpLCBnaXZpbmcgYSByZWR1bmRhbnQsIGluc3RhbnQgZmFpbC1vdmVyIG5ldHdvcmsuIEVhY2ggSFNSIG5vZGVcXG4gIDIxOlxcdFxcdCAgaW4gdGhlIHJpbmcgYWN0cyBsaWtlIGEgYnJpZGdlIGZvciBIU1IgZnJhbWVzLCBidXQgZmlsdGVycyBmcmFtZXNcXG4gIDIyOlxcdFxcdCAgdGhhdCBoYXZlIGJlZW4gZm9yd2FyZGVkIGVhcmxpZXIuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgRm9yIERBTlAsIGl0IG11c3QgYmUgY29ubmVjdGVkIGFzIGEgbm9kZSBjb25uZWN0aW5nIHRvIHR3b1xcbiAgMjU6XFx0XFx0ICBzZXBhcmF0ZSBuZXR3b3JrcyBvdmVyIHRoZSB0d28gc2xhdmUgaW50ZXJmYWNlcy4gTGlrZSBIU1IsIEV0aGVybmV0XFxuICAyNjpcXHRcXHQgIGZyYW1lcyBzZW50IG92ZXIgdGhlIFBSUCBkZXZpY2Ugd2lsbCBiZSBzZW50IHRvIGJvdGggbmV0d29ya3MgZ2l2aW5nXFxuICAyNzpcXHRcXHQgIGEgcmVkdW5kYW50LCBpbnN0YW50IGZhaWwtb3ZlciBuZXR3b3JrLiBVbmxpa2UgSFNSLCBQUlAgbmV0d29ya3NcXG4gIDI4OlxcdFxcdCAgY2FuIGhhdmUgU2luZ2x5IEF0dGFjaGVkIE5vZGVzIChTQU4pIHN1Y2ggYXMgUEMsIHByaW50ZXIsIGJyaWRnZXNcXG4gIDI5OlxcdFxcdCAgZXRjIGFuZCB3aWxsIGJlIGFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBEQU5QIG5vZGVzLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoaXMgY29kZSBpcyBhIFxcXCJiZXN0IGVmZm9ydFxcXCIgdG8gY29tcGx5IHdpdGggdGhlIEhTUiBzdGFuZGFyZCBhc1xcbiAgMzI6XFx0XFx0ICBkZXNjcmliZWQgaW4gSUVDIDYyNDM5LTM6MjAxMCAoSFNSdjApIGFuZCBJRUMgNjI0MzktMzoyMDEyIChIU1J2MSksXFxuICAzMzpcXHRcXHQgIGFuZCBQUlAgc3RhbmRhcmQgZGVzY3JpYmVkIGluIElFQyA2MjQzOS00OjIwMTIgKFBSUCksIGJ1dCBub1xcbiAgMzQ6XFx0XFx0ICBjb21wbGlhbmN5IHRlc3RzIGhhdmUgYmVlbiBtYWRlLiBVc2UgaXByb3V0ZTIgdG8gc2VsZWN0IHRoZSBwcm90b2NvbFxcbiAgMzU6XFx0XFx0ICB5b3Ugd291bGQgbGlrZSB0byB1c2UuXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgWW91IG5lZWQgdG8gcGVyZm9ybSBhbnkgYW5kIGFsbCBuZWNlc3NhcnkgdGVzdHMgeW91cnNlbGYgYmVmb3JlXFxuICAzODpcXHRcXHQgIHJlbHlpbmcgb24gdGhpcyBjb2RlIGluIGEgc2FmZXR5IGNyaXRpY2FsIHN5c3RlbSFcXG4gIDM5OlxcdFxcbiAgNDA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRpZiBIU1JcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIFBSUF9EVVBfRElTQ0FSRF9LVU5JVF9URVNUXFxuICA0NTpcXHRcXHR0cmlzdGF0ZSBcXFwiUFJQIGR1cGxpY2F0ZSBkaXNjYXJkIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA0NjpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICA0NzpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgNDg6XFx0XFx0aGVscFxcbiAgNDk6XFx0XFx0ICBDb3ZlcnMgdGhlIFBSUCBkdXBsaWNhdGUgZGlzY2FyZCBhbGdvcml0aG0uXFxuICA1MDpcXHRcXHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxcbiAgNTE6XFx0XFx0ICBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuICA1NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNTc6XFx0XFxuICA1ODpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDowMDozOC4zMjgzNDE0NTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE2NjAwNDY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBIU1IqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIEkgb25seSBuZWVkIHRoZSBgSFNSYCBjb25maWd1cmF0aW9uIGZvciB0aGlzIHJvdW5kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZywgc28gSSdsbCBzY2FuIGZvciBhbnkgb3RoZXIgcG90ZW50aWFsbHkgZnV6emFibGUgZnVuY3Rpb25zLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCBgaHNyX2Rldl9maW5hbGl6ZWAgaXMgY2FsbGVkIGJ5IGBoc3JfbmV3bGlua2AsIGFuZCBgaHNyX2FkZF9ub2RlYCBpcyBjYWxsZWQgYnkgYGhzcl9nZXRfbm9kZWAuIEZ1cnRoZXIsIGBoc3JfZ2V0X25vZGVgIGlzIGEgZGVwZW5kZW5jeSBvZiBib3RoIGBoc3JfZm9yd2FyZF9kb2AgYW5kIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAuIFRoaXMgZ2V0cyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgZmlsbF9mcmFtZV9pbmZvYCBpcyBhbHNvIGNhbGxlZCBieSBgaHNyX2ZvcndhcmRfZG9gLCBhbmQgc28gaXMgYGhzcl9kcm9wX2ZyYW1lYC5cblxuQmFzZWQgb24gdGhvc2UgY2FsbCBncmFwaHMsIGl0J3MgY2xlYXIgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIHRvIGZ1enogYXJlOlxuXG4qICAgYGhzcl9uZXdsaW5rYFxuKiAgIGBoc3JfZm9yd2FyZF9kb2AgKHdoaWNoIGlzIGEgcmVhbCByYWJiaXQgaG9sZSwgY2FsbGluZyBgaHNyX2Ryb3BfZnJhbWVgLCBgZmlsbF9mcmFtZV9pbmZvYCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYHBycF9kcm9wX2ZyYW1lYCwgYW5kIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCkuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgcHJwYCBmdW5jdGlvbnMgdG9vLlxuKiAgIGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWBcblxuVGltZSB0byBkaWcgaW50byBgaHNyX2ZvcndhcmRfZG9gIGFuZCBzZWUgd2hhdCBpdCBleHBlY3RzLiBUaGlzIGxvb2tzIGxpa2UgdGhlIG1haW4gdGFyZ2V0IGZvciBpbml0aWFsIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjQ4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6MDA6NDMuNDk0MzQ4NjYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODU2NjM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZm9yd2FyZF9kb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDc2PWJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU0My0gKi9cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NTQ0OnN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU0NS17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NzcxPXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzktXFx0aHNyX3JlZ2lzdGVyX2ZyYW1lX2luKGZyYW1lLm5vZGVfc3JjLCBwb3J0LCBmcmFtZS5zZXF1ZW5jZV9ucik7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc4MDpcXHRoc3JfZm9yd2FyZF9kbyhcXHUwMDI2ZnJhbWUpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03ODEtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjAwOjQzLjU1MjkyMTA5M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODYwNjE1NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW5jb21pbmcgUGFja2V0IFByb2Nlc3Npbmc6IFRoZSBgaHNyX2ZvcndhcmRfc2tiYCBQZXJzcGVjdGl2ZSoqXG5cbkFscmlnaHQsIHNvICp0aGlzKiBpcyB0aGUgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBwbGFjZSBteSBhdHRlbnRpb24gbGFuZHMgd2hlbiBhIHBhY2tldCBjb21lcyBrbm9ja2luZy4gIGBoc3JfZm9yd2FyZF9za2JgLCB0aGF0J3MgdGhlIGtleS4gIEl0J3MgdGhlIGZpcnN0IHN0ZXAgaW4gdGhlIHdob2xlIHByb2Nlc3Mgb2YgcmVjZWl2aW5nIHRoaXMgdGhpbmcuIFRoZSBjb2RlIGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8ga2ljayBldmVyeXRoaW5nIG9mZi4gSSBuZWVkIHRvIGtlZXAgdGhpcyBmdW5jdGlvbiBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQsIGl0J3Mgd2hlcmUgbXkgZm9jdXMgYmVnaW5zIHdoZW4gaGFuZGxpbmcgbmV3IHBhY2tldHMuIFRoaXMgaXMgZ3JvdW5kIHplcm8uIEV2ZXJ5dGhpbmcgZnVubmVscyB0aHJvdWdoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTEwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6MDA6NDYuNDEzNTM5MTAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTA1OTg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9MjI0PXN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNS1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmM6MjM2OlxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMjM3LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9MjkzPXN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2My1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozNjQ6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzY1LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9MzY5PXN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNDMxLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjQzMjpcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTQzMy1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz03MDE9c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzAtLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzcxOnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzcyLXtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xNS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg6MTY6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTctc3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTI0PXN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGhzcl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYy04MC1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYzo4MTpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgyLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODMtXFx0fSBlbHNlIHtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjg0OlxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDowMDo0Ni40Njg2MDI0NTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE0MDE5NzA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIU1IvUFJQIFBSUC1TQU4gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBoZXJlJ3MgbXkgYnJlYWtkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgaHNyX2Rldl94bWl0YCBhbmQgYGhzcl9oYW5kbGVfZnJhbWVgIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdGhpcyB3aG9sZSB0aGluZy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGVuYWJsaW5nIFBSUCBSZWRCb3ggZnVuY3Rpb25hbGl0eSAoUFJQLVNBTikgd2l0aGluIHRoZSBleGlzdGluZyBIU1IvUFJQIHN1YnN5c3RlbS4gSSd2ZSBwaW5wb2ludGVkIGEgZmV3IGNydWNpYWwgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGFzIGEgZGlyZWN0IHJlc3VsdC4gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIGZvciBteSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5JJ3ZlIHplcm9lZCBpbiBvbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYGhzcl9uZXdsaW5rYCwgYHBycF9kcm9wX2ZyYW1lYCwgYW5kIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YC4gSSd2ZSBpbmNsdWRlZCBgaHNyX25ld2xpbmtgIGJlY2F1c2UsIHdoaWxlIGl0IGNhbGxzIGBoc3JfZGV2X2ZpbmFsaXplYCwgaXQgcmVwcmVzZW50cyBhIGJldHRlciBwb2ludCBvZiBlbnRyeS4gV2hpbGUgYGZpbGxfZnJhbWVfaW5mb2AgYW5kIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCBhcmUgdGVjaG5pY2FsbHkgaG90LXBhdGgsIEkndmUgZWxlY3RlZCB0byBpbmNsdWRlIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCBhcyBhIGZvY3VzIHN5bWJvbCBhcyB0aGUgbW9kaWZpY2F0aW9uIGlzIHNwZWNpZmljIHRvIHRoaXMgcGF0Y2guXG5cbkkndmUgY29uc2lkZXJlZCBvdGhlciBmdW5jdGlvbnMgYXMgd2VsbCwgZm9yIGV4YW1wbGUgYGZpbGxfZnJhbWVfaW5mb2Agd2hpY2ggZ2V0cyBjYWxsZWQgYnkgYGhzcl9mb3J3YXJkX3NrYmAsIGFuZCBpcyBob3QgcGF0aC4gSSBkZWNpZGVkIGFnYWluc3QgaW5jbHVkaW5nIHRoaXMgZnVuY3Rpb24sIGFuZCBgcHJwX2Ryb3BfZnJhbWVgLCBiZWNhdXNlIHRoZSBtb2RpZmljYXRpb24gYXBwZWFycyBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLiBTaW1pbGFybHksIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAgaXMgb25seSBjYWxsZWQgZm9yIHN1cGVydmlzaW9uIGZyYW1lcywgYW5kIGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWAgaXMgYmFzZWQgb24gYSB0aW1lciwgc28gaXQncyBub3QgaG90LXBhdGguXG5cbkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYWx0ZXJzIGhvdyBzdXBlcnZpc2lvbiBmcmFtZXMgYXJlIGdlbmVyYXRlZCwgdGhlIGNvcmUgbG9naWMgZm9yIGZvcndhcmRpbmcgZnJhbWVzLCBpbiBwYXJ0aWN1bGFyLCB0aGUgZHJvcHBpbmcgYW5kIHJlZ2lzdHJhdGlvbiwgYW5kIGFsc28gaG93IG5vZGUgc2VxdWVuY2UgaXMgaGFuZGxlZC4gVGhpcyBpcyBhbGwgdG8gYWNjb21tb2RhdGUgdGhpcyBQUlAtU0FOIGZlYXR1cmUuIEFkZGl0aW9uYWxseSwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIGJlZW4gc29tZSBmbGV4aWJpbGl0eSBhZGRlZCBpbiBob3cgaW50ZXJsaW5rIHdvcmtzLCByZW1vdmluZyBhIHByZXZpb3VzIG5ldGxpbmsgc2V0dXAgcmVzdHJpY3Rpb24gd2l0aCBIU1IuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBoYXMgc2VyaW91cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBuZXR3b3JrIHN0YWNrLCBzbyBmdXp6aW5nIGlzIGRlZmluaXRlbHkgdGhlIHdheSB0byBnby5cblxuVGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnIHRoYXQgSSBjYW4gc2VlIGlzIGBIU1JgLlxuXG5TbywgdGhlIGtleSBlbGVtZW50cyB0byB0YXJnZXQgZm9yIGZ1enppbmcgYXJlOiBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgLCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgLCBgaHNyX25ld2xpbmtgLCBgcHJwX2Ryb3BfZnJhbWVgLCBhbmQgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgLiBUaW1lIHRvIHNldCB0aGUgcmVzdWx0cyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTgxMzUsIk91dHB1dFRva2VucyI6MTY2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjAwOjU1LjYwODgwMTY2MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMTM1OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZVwiLFxuICAgIFwiaHNyX2hhbmRsZV9zdXBfZnJhbWVcIixcbiAgICBcImhzcl9uZXdsaW5rXCIsXG4gICAgXCJwcnBfZHJvcF9mcmFtZVwiLFxuICAgIFwicHJwX3JlZ2lzdGVyX2ZyYW1lX291dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgUFJQIFJlZEJveCAoUFJQLVNBTikgaW4gdGhlIEhTUi9QUlAgc3Vic3lzdGVtLiBJdCBtb2RpZmllcyBzdXBlcnZpc2lvbiBmcmFtZSBnZW5lcmF0aW9uLCBmcmFtZSBmb3J3YXJkaW5nIGxvZ2ljIChkcm9wcGluZyBhbmQgcmVnaXN0ZXJpbmcpLCBhbmQgbm9kZSBzZXF1ZW5jZSBoYW5kbGluZyB0byBzdXBwb3J0IHRoZSBuZXcgZmVhdHVyZS4gSXQgYWxzbyByZW1vdmVzIHRoZSByZXN0cmljdGlvbiB0aGF0IGludGVybGluayBvbmx5IHdvcmtzIHdpdGggSFNSIGluIG5ldGxpbmsgc2V0dXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbmV0d29yayBzdGFjayB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVcIixcbiAgICBcImhzcl9oYW5kbGVfc3VwX2ZyYW1lXCIsXG4gICAgXCJoc3JfbmV3bGlua1wiLFxuICAgIFwicHJwX2Ryb3BfZnJhbWVcIixcbiAgICBcInBycF9yZWdpc3Rlcl9mcmFtZV9vdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFBSUCBSZWRCb3ggKFBSUC1TQU4pIGluIHRoZSBIU1IvUFJQIHN1YnN5c3RlbS4gSXQgbW9kaWZpZXMgc3VwZXJ2aXNpb24gZnJhbWUgZ2VuZXJhdGlvbiwgZnJhbWUgZm9yd2FyZGluZyBsb2dpYyAoZHJvcHBpbmcgYW5kIHJlZ2lzdGVyaW5nKSwgYW5kIG5vZGUgc2VxdWVuY2UgaGFuZGxpbmcgdG8gc3VwcG9ydCB0aGUgbmV3IGZlYXR1cmUuIEl0IGFsc28gcmVtb3ZlcyB0aGUgcmVzdHJpY3Rpb24gdGhhdCBpbnRlcmxpbmsgb25seSB3b3JrcyB3aXRoIEhTUiBpbiBuZXRsaW5rIHNldHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldHdvcmsgc3RhY2sgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2hn9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 19:45:45 +0000 UTC FinishedAt: 2026-07-06 20:00:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "3582a5c8-697a-48e7-8b00-1985b93c0417" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "send_prp_supervision_frame", "hsr_handle_sup_frame", "hsr_newlink", "prp_drop_frame", "prp_register_frame_out" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfc3VwX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9uZXdsaW5rJiMzNDssCiAgICAmIzM0O3BycF9kcm9wX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9yZWdpc3Rlcl9mcmFtZV9vdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBQUlAgUmVkQm94IChQUlAtU0FOKSBpbiB0aGUgSFNSL1BSUCBzdWJzeXN0ZW0uIEl0IG1vZGlmaWVzIHN1cGVydmlzaW9uIGZyYW1lIGdlbmVyYXRpb24sIGZyYW1lIGZvcndhcmRpbmcgbG9naWMgKGRyb3BwaW5nIGFuZCByZWdpc3RlcmluZyksIGFuZCBub2RlIHNlcXVlbmNlIGhhbmRsaW5nIHRvIHN1cHBvcnQgdGhlIG5ldyBmZWF0dXJlLiBJdCBhbHNvIHJlbW92ZXMgdGhlIHJlc3RyaWN0aW9uIHRoYXQgaW50ZXJsaW5rIG9ubHkgd29ya3Mgd2l0aCBIU1IgaW4gbmV0bGluayBzZXR1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBuZXR3b3JrIHN0YWNrIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNlYjk5NjdjZjEwMTA4NTI4M2Y5YjM4M2Y5ODJlODRlZDE5YzVhODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDE5OjU3OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4wOTczZjlhOTRmNGQ0OCAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuQEAgLTM3MiwxMCAmIzQzOzM3MiwyMSBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbiB7XG4gXHRzdHJ1Y3QgaHNyX3ByaXYgKmhzciA9IG1hc3Rlci1cdTAwM2Voc3I7XG4gXHRzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkICpoc3Jfc3A7XG4mIzQzO1x0c3RydWN0IGhzcl9zdXBfdGx2ICpoc3Jfc3RsdjtcbiBcdHN0cnVjdCBoc3Jfc3VwX3RhZyAqaHNyX3N0YWc7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdGJvb2wgcmVkYm94X3Byb3h5O1xuJiM0MztcdGludCBleHRyYSA9IDA7XG4gXG4tXHRza2IgPSBoc3JfaW5pdF9za2IobWFzdGVyLCAwKTtcbiYjNDM7XHRyZWRib3hfcHJveHkgPSBoc3ItXHUwMDNlcmVkYm94IFx1MDAyNlx1MDAyNiBtYXN0ZXItXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LO1xuJiM0MztcbiYjNDM7XHQvKiBBIHByb3h5LWFubm91bmNlIGNhcnJpZXMgYSBSZWRCb3gtTUFDIFRMViBhbmQgYW4gRU9UIG1hcmtlci4gKi9cbiYjNDM7XHRpZiAocmVkYm94X3Byb3h5KVxuJiM0MztcdFx0ZXh0cmEgPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KSAmIzQzO1xuJiM0MztcdFx0XHRzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkgJiM0MztcbiYjNDM7XHRcdFx0c2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3Rsdik7XG4mIzQzO1xuJiM0MztcdHNrYiA9IGhzcl9pbml0X3NrYihtYXN0ZXIsIGV4dHJhKTtcbiBcdGlmICghc2tiKSB7XG4gXHRcdG5ldGRldl93YXJuX29uY2UobWFzdGVyLVx1MDAzZWRldiwgXCYjMzQ7UFJQOiBDb3VsZCBub3Qgc2VuZCBzdXBlcnZpc2lvbiBmcmFtZVxcblwmIzM0Oyk7XG4gXHRcdHJldHVybjtcbkBAIC0zOTMsOSAmIzQzOzQwNCwyNSBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XG4gXG4tXHQvKiBQYXlsb2FkOiBNYWNBZGRyZXNzQSAqL1xuJiM0MztcdC8qIFBheWxvYWQ6IE1hY0FkZHJlc3NBLCB0aGUgYW5ub3VuY2VkIG5vZGUuICovXG4gXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcbi1cdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbiYjNDM7XHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgYWRkcik7XG4mIzQzO1xuJiM0MztcdC8qIFByb3h5LWFubm91bmNlOiBhcHBlbmQgdGhlIFJlZEJveC1NQUMgVExWIChUeXBlIDMwKSBhbmQgYW4gZXhwbGljaXRcbiYjNDM7XHQgKiBFT1QgdG8gdGVybWluYXRlIHRoZSBUTFYgY2hhaW4gYmVmb3JlIHplcm8gcGFkZGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmVkYm94X3Byb3h5KSB7XG4mIzQzO1x0XHRoc3Jfc3RsdiA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KSk7XG4mIzQzO1x0XHRoc3Jfc3Rsdi1cdTAwM2VIU1JfVExWX3R5cGUgPSBQUlBfVExWX1JFREJPWF9NQUM7XG4mIzQzO1x0XHRoc3Jfc3Rsdi1cdTAwM2VIU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTtcbiYjNDM7XG4mIzQzO1x0XHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcbiYjNDM7XHRcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBoc3ItXHUwMDNlbWFjYWRkcmVzc19yZWRib3gpO1xuJiM0MztcbiYjNDM7XHRcdGhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTtcbiYjNDM7XHRcdGhzcl9zdGx2LVx1MDAzZUhTUl9UTFZfdHlwZSA9IEhTUl9UTFZfRU9UO1xuJiM0MztcdFx0aHNyX3N0bHYtXHUwMDNlSFNSX1RMVl9sZW5ndGggPSAwO1xuJiM0MztcdH1cbiBcbiBcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbkBAIC03NjgsNiAmIzQzOzc5NSwxNSBAQCBpbnQgaHNyX2Rldl9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlWzJdLFxuIFx0LyogTWFrZSBzdXJlIHRoZSAxc3QgY2FsbCB0byBuZXRpZl9jYXJyaWVyX29uKCkgZ2V0cyB0aHJvdWdoICovXG4gXHRuZXRpZl9jYXJyaWVyX29mZihoc3JfZGV2KTtcbiBcbiYjNDM7XHQvKiBQdWJsaXNoIHRoZSBSZWRCb3ggc3RhdGUgYmVmb3JlIGFueSBwb3J0IGlzIGF0dGFjaGVkOiB0aGUgcnhcbiYjNDM7XHQgKiBoYW5kbGVycyBhcmUgbGl2ZSBmcm9tIGhzcl9hZGRfcG9ydCgpIG9uLCBhbmQgaHNyX2FkZF9ub2RlKClcbiYjNDM7XHQgKiBzaXplcyBlYWNoIG5vZGUmIzM5O3MgcGVyLXBvcnQgc2VxdWVuY2Ugc3RhdGUgZnJvbSBoc3ItXHUwMDNlcmVkYm94LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChpbnRlcmxpbmspIHtcbiYjNDM7XHRcdGhzci1cdTAwM2VyZWRib3ggPSB0cnVlO1xuJiM0MztcdFx0ZXRoZXJfYWRkcl9jb3B5KGhzci1cdTAwM2VtYWNhZGRyZXNzX3JlZGJveCwgaW50ZXJsaW5rLVx1MDAzZWRldl9hZGRyKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmVzID0gaHNyX2FkZF9wb3J0KGhzciwgaHNyX2RldiwgSFNSX1BUX01BU1RFUiwgZXh0YWNrKTtcbiBcdGlmIChyZXMpXG4gXHRcdGdvdG8gZXJyX2FkZF9tYXN0ZXI7XG5AQCAtODA1LDggJiM0Mzs4NDEsNiBAQCBpbnQgaHNyX2Rldl9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlWzJdLFxuIFx0XHRpZiAocmVzKVxuIFx0XHRcdGdvdG8gZXJyX3VucmVnaXN0ZXI7XG4gXG4tXHRcdGhzci1cdTAwM2VyZWRib3ggPSB0cnVlO1xuLVx0XHRldGhlcl9hZGRyX2NvcHkoaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94LCBpbnRlcmxpbmstXHUwMDNlZGV2X2FkZHIpO1xuIFx0XHRtb2RfdGltZXIoXHUwMDI2aHNyLVx1MDAzZXBydW5lX3Byb3h5X3RpbWVyLFxuIFx0XHRcdCAgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKFBSVU5FX1BST1hZX1BFUklPRCkpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNjQuLmVmY2QwYWNlZjM4YzhiIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbkBAIC00NDAsMTIgJiM0Mzs0NDAsMzcgQEAgc3RhdGljIGludCBoc3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4gXHRyZXR1cm4gZGV2X3F1ZXVlX3htaXQoc2tiKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHBycF9pc19sYW5fZHVwKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiYjNDM7e1xuJiM0MztcdGVudW0gaHNyX3BvcnRfdHlwZSByeCA9IGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAocnggPT0gSFNSX1BUX1NMQVZFX0EgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgfHxcbiYjNDM7XHQgICAgICAgKHJ4ID09IEhTUl9QVF9TTEFWRV9CIFx1MDAyNlx1MDAyNiBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EpO1xuJiM0Mzt9XG4mIzQzO1xuIGJvb2wgcHJwX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIHtcbi1cdHJldHVybiAoKGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EgXHUwMDI2XHUwMDI2XG4tXHRcdCBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0IpIHx8XG4tXHRcdChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CIFx1MDAyNlx1MDAyNlxuLVx0XHQgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BKSk7XG4mIzQzO1x0ZW51bSBoc3JfcG9ydF90eXBlIHJ4ID0gZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZTtcbiYjNDM7XG4mIzQzO1x0LyogU3VwZXJ2aXNpb24gZnJhbWVzIGFyZSBub3QgZGVsaXZlcmVkIHRvIGEgU0FOIG9uIHRoZSBpbnRlcmxpbmsuICovXG4mIzQzO1x0aWYgKGZyYW1lLVx1MDAzZWlzX3N1cGVydmlzaW9uIFx1MDAyNlx1MDAyNiBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAocHJwX2lzX2xhbl9kdXAoZnJhbWUsIHBvcnQpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIExBTiB0byBpbnRlcmxpbms6IGtlZXAgUFJQLW5ldHdvcmsgdW5pY2FzdCBvZmYgdGhlIFNBTiBzZWdtZW50LiAqL1xuJiM0MztcdGlmICgocnggPT0gSFNSX1BUX1NMQVZFX0EgfHwgcnggPT0gSFNSX1BUX1NMQVZFX0IpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSylcbiYjNDM7XHRcdHJldHVybiBmcmFtZS1cdTAwM2Vkc3RfaW5fbm9kZV9kYjtcbiYjNDM7XG4mIzQzO1x0LyogSW50ZXJsaW5rIHRvIExBTjoga2VlcCBTQU4tdG8tU0FOIHVuaWNhc3QgbG9jYWwuICovXG4mIzQzO1x0aWYgKChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EgfHwgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcnggPT0gSFNSX1BUX0lOVEVSTElOSylcbiYjNDM7XHRcdHJldHVybiBmcmFtZS1cdTAwM2Vkc3RfaW5fcHJveHlfbm9kZV9kYjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbkBAIC00NTMsNyAmIzQzOzQ3OCw3IEBAIGJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiBcdGlmIChwb3J0LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19IU1JfRldEKVxuLVx0XHRyZXR1cm4gcHJwX2Ryb3BfZnJhbWUoZnJhbWUsIHBvcnQpO1xuJiM0MztcdFx0cmV0dXJuIHBycF9pc19sYW5fZHVwKGZyYW1lLCBwb3J0KTtcbiBcbiBcdC8qIFJlZEJveCBzcGVjaWZpYyBmcmFtZXMgZHJvcHBpbmcgcG9saWNpZXNcbiBcdCAqXG5AQCAtNDY2LDcgJiM0Mzs0OTEsNyBAQCBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdCAqIGFyZSBhZGRyZXNzZWQgdG8gaW50ZXJsaW5rIHBvcnQgKGFuZCBhcmUgaW4gdGhlIFByb3h5Tm9kZVRhYmxlKS5cbiBcdCAqL1xuIFx0c2tiID0gZnJhbWUtXHUwMDNlc2tiX2hzcjtcbi1cdGlmIChza2IgXHUwMDI2XHUwMDI2IHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRpZiAoc2tiIFx1MDAyNlx1MDAyNiBwcnBfaXNfbGFuX2R1cChmcmFtZSwgcG9ydCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGhzcl9pc19ub2RlX2luX2RiKFx1MDAyNnBvcnQtXHUwMDNlaHNyLVx1MDAzZXByb3h5X25vZGVfZGIsXG4gXHRcdFx0ICAgICAgZXRoX2hkcihza2IpLVx1MDAzZWhfZGVzdCkpIHtcbkBAIC03MDYsNiAmIzQzOzczMSwxOCBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIFx0ZnJhbWUtXHUwMDNlaXNfdmxhbiA9IGZhbHNlO1xuIFx0cHJvdG8gPSBldGhoZHItXHUwMDNlaF9wcm90bztcbiBcbiYjNDM7XHQvKiBQUlAgUmVkQm94IG9ubHk6IGNsYXNzaWZ5IHRoZSB1bmljYXN0IGRlc3RpbmF0aW9uIG9uY2Ugc28gdGhlXG4mIzQzO1x0ICogcGVyLWVncmVzcy1wb3J0IGRlY2lzaW9uIGluIHBycF9kcm9wX2ZyYW1lKCkgc3RheXMgTygxKS4gSFNSIFJlZEJveFxuJiM0MztcdCAqIGRvZXMgaXRzIG93biBjbGFzc2lmaWNhdGlvbiBhbmQgbXVzdCBub3QgcGF5IHRoZXNlIG5vZGUtdGFibGUgd2Fsa3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGhzci1cdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxIFx1MDAyNlx1MDAyNiBoc3ItXHUwMDNlcmVkYm94IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpc191bmljYXN0X2V0aGVyX2FkZHIoZXRoaGRyLVx1MDAzZWhfZGVzdCkpIHtcbiYjNDM7XHRcdGZyYW1lLVx1MDAzZWRzdF9pbl9ub2RlX2RiID1cbiYjNDM7XHRcdFx0aHNyX2lzX25vZGVfaW5fZGIoXHUwMDI2aHNyLVx1MDAzZW5vZGVfZGIsIGV0aGhkci1cdTAwM2VoX2Rlc3QpO1xuJiM0MztcdFx0ZnJhbWUtXHUwMDNlZHN0X2luX3Byb3h5X25vZGVfZGIgPVxuJiM0MztcdFx0XHRoc3JfaXNfbm9kZV9pbl9kYihcdTAwMjZoc3ItXHUwMDNlcHJveHlfbm9kZV9kYiwgZXRoaGRyLVx1MDAzZWhfZGVzdCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChwcm90byA9PSBodG9ucyhFVEhfUF84MDIxUSkpXG4gXHRcdGZyYW1lLVx1MDAzZWlzX3ZsYW4gPSB0cnVlO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmMgYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jXG5pbmRleCBlNDQ5Mjk4NzEyNzQ0NS4uYjNiMTA2YmU2OTJlYWYgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jXG5AQCAtMTk5LDcgJiM0MzsxOTksNyBAQCBzdGF0aWMgc3RydWN0IGhzcl9ub2RlICpoc3JfYWRkX25vZGUoc3RydWN0IGhzcl9wcml2ICpoc3IsXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZuZXdfbm9kZS1cdTAwM2VzZXFfb3V0X2xvY2spO1xuIFxuIFx0aWYgKGhzci1cdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxKVxuLVx0XHRuZXdfbm9kZS1cdTAwM2VzZXFfcG9ydF9jbnQgPSAxO1xuJiM0MztcdFx0bmV3X25vZGUtXHUwMDNlc2VxX3BvcnRfY250ID0gaHNyLVx1MDAzZXJlZGJveCA/IDIgOiAxO1xuIFx0ZWxzZVxuIFx0XHRuZXdfbm9kZS1cdTAwM2VzZXFfcG9ydF9jbnQgPSBIU1JfUFRfUE9SVFMgLSAxO1xuIFxuQEAgLTI5Myw4ICYjNDM7MjkzLDE3IEBAIHN0cnVjdCBoc3Jfbm9kZSAqaHNyX2dldF9ub2RlKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9kYixcbiBcdCAqL1xuIFx0aWYgKGV0aGhkci1cdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX1BSUCkgfHxcbiBcdCAgICBldGhoZHItXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9IU1IpKSB7XG4tXHRcdC8qIENoZWNrIGlmIHNrYiBjb250YWlucyBoc3JfZXRoaGRyICovXG4tXHRcdGlmIChza2ItXHUwMDNlbWFjX2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSlcbiYjNDM7XHRcdGJvb2wgcHJwX3N1cDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBBIFBSUCBzdXBlcnZpc2lvbiBmcmFtZSBpcyBhbiB1bnRhZ2dlZCBFVEhfUF9QUlAgZnJhbWVcbiYjNDM7XHRcdCAqIChtYWNfbGVuID09IEVUSF9ITEVOKTsgaXRzIFJDVCBpcyBhcHBlbmRlZCBvbmx5IG9uIGVncmVzcy5cbiYjNDM7XHRcdCAqIEhTUiAoRVRIX1BfSFNSKSBzdXBlcnZpc2lvbiBpcyBmcm9udC10YWdnZWQgYW5kIHN0aWxsIG11c3RcbiYjNDM7XHRcdCAqIGNvbnRhaW4gYSBzdHJ1Y3QgaHNyX2V0aGhkci5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cHJwX3N1cCA9IGhzci1cdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgIGV0aGhkci1cdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX1BSUCkgXHUwMDI2XHUwMDI2IGlzX3N1cDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXBycF9zdXAgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VtYWNfbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IGhzcl9ldGhoZHIpKVxuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmN0ID0gc2tiX2dldF9QUlBfcmN0KHNrYik7XG5AQCAtMzgxLDYgJiM0MzszOTAsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRzdHJ1Y3QgZXRoaGRyICpldGhoZHI7XG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfcHVsbF9zaXplID0gMDtcbiBcdHVuc2lnbmVkIGludCBwdWxsX3NpemUgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCBzZXFfcG9ydF9jbnQ7XG4gXHR1bnNpZ25lZCBsb25nIGlkeDtcbiBcdGludCBpO1xuIFxuQEAgLTQ3NCw2ICYjNDM7NDg0LDcgQEAgdm9pZCBoc3JfaGFuZGxlX3N1cF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0c2VxX3BvcnRfY250ID0gbWluKG5vZGVfcmVhbC1cdTAwM2VzZXFfcG9ydF9jbnQsIG5vZGVfY3Vyci1cdTAwM2VzZXFfcG9ydF9jbnQpO1xuIFx0eGFfZm9yX2VhY2goXHUwMDI2bm9kZV9jdXJyLVx1MDAzZXNlcV9ibG9ja3MsIGlkeCwgc3JjX2Jsaykge1xuIFx0XHRpZiAoaHNyX3NlcV9ibG9ja19pc19vbGQoc3JjX2JsaykpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtNDgyLDcgJiM0Mzs0OTMsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRcdGlmICghbWVyZ2VfYmxrKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRtZXJnZV9ibGstXHUwMDNldGltZSA9IG1pbihtZXJnZV9ibGstXHUwMDNldGltZSwgc3JjX2Jsay1cdTAwM2V0aW1lKTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbm9kZV9yZWFsLVx1MDAzZXNlcV9wb3J0X2NudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNlcV9wb3J0X2NudDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHRiaXRtYXBfb3IobWVyZ2VfYmxrLVx1MDAzZXNlcV9ucnNbaV0sIG1lcmdlX2Jsay1cdTAwM2VzZXFfbnJzW2ldLFxuIFx0XHRcdFx0ICBzcmNfYmxrLVx1MDAzZXNlcV9ucnNbaV0sIEhTUl9TRVFfQkxPQ0tfU0laRSk7XG4gXHRcdH1cbkBAIC02NDksOSAmIzQzOzY2MCwxMyBAQCBpbnQgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dChzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRpZiAoZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIGZvciBQUlAgd2Ugc2hvdWxkIG9ubHkgZm9yd2FyZCBmcmFtZXMgZnJvbSB0aGUgc2xhdmUgcG9ydHNcbi1cdCAqIHRvIHRoZSBtYXN0ZXIgcG9ydFxuJiM0MztcdC8qIFJlZEJveDogZm9yd2FyZCBMQU4gZnJhbWVzIG91dCB0aGUgaW50ZXJsaW5rIHRvIGEgU0FOLCBkZWR1cGluZyB0aGVcbiYjNDM7XHQgKiB0d28gTEFOIGNvcGllcyBvbiBhIGRlZGljYXRlZCBzbG90LlxuIFx0ICovXG4mIzQzO1x0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKVxuJiM0MztcdFx0cmV0dXJuIGhzcl9jaGVja19kdXBsaWNhdGUoZnJhbWUsIDEpO1xuJiM0MztcbiYjNDM7XHQvKiBGb3IgUFJQIG9ubHkgc2xhdmUtdG8tbWFzdGVyIGZyYW1lcyBhcmUgZm9yd2FyZGVkLiAqL1xuIFx0aWYgKHBvcnQtXHUwMDNldHlwZSAhPSBIU1JfUFRfTUFTVEVSKVxuIFx0XHRyZXR1cm4gMTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxuaW5kZXggYzY1ZWNiOTI1NzM0ODkuLjEyN2EzZmI2NGQ1ZjAzIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxuQEAgLTI3LDYgJiM0MzsyNyw4IEBAIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyB7XG4gXHRib29sIGlzX2xvY2FsX2Rlc3Q7XG4gXHRib29sIGlzX2xvY2FsX2V4Y2x1c2l2ZTtcbiBcdGJvb2wgaXNfZnJvbV9zYW47XG4mIzQzO1x0Ym9vbCBkc3RfaW5fbm9kZV9kYjtcbiYjNDM7XHRib29sIGRzdF9pbl9wcm94eV9ub2RlX2RiO1xuIH07XG4gXG4gdm9pZCBoc3JfZGVsX3NlbGZfbm9kZShzdHJ1Y3QgaHNyX3ByaXYgKmhzcik7XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbWFpbi5oIGIvbmV0L2hzci9oc3JfbWFpbi5oXG5pbmRleCAxMzRlNGYzZmZmNjAzNi4uYzI3Y2ZkZDljYTNmYTggMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9tYWluLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX21haW4uaFxuQEAgLTIxMSw3ICYjNDM7MjExLDcgQEAgc3RydWN0IGhzcl9wcml2IHtcbiBcdFx0XHRcdCAqL1xuIFx0Ym9vbCBmd2Rfb2ZmbG9hZGVkO1x0LyogRm9yd2FyZGluZyBvZmZsb2FkZWQgdG8gSFcgKi9cbiBcdGJvb2wgcmVkYm94OyAgICAgICAgICAgIC8qIERldmljZSBzdXBwb3J0cyBIU1IgUmVkQm94ICovXG4tXHR1bnNpZ25lZCBjaGFyXHRcdG1hY2FkZHJlc3NfcmVkYm94W0VUSF9BTEVOXTtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyXHRtYWNhZGRyZXNzX3JlZGJveFtFVEhfQUxFTl0gX19hbGlnbmVkKHNpemVvZih1MTYpKTtcbiBcdHVuc2lnbmVkIGNoYXJcdFx0c3VwX211bHRpY2FzdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpO1xuIFx0XHRcdFx0LyogQWxpZ24gdG8gdTE2IGJvdW5kYXJ5IHRvIGF2b2lkIHVuYWxpZ25lZCBhY2Nlc3NcbiBcdFx0XHRcdCAqIGluIGV0aGVyX2FkZHJfZXF1YWxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9uZXRsaW5rLmMgYi9uZXQvaHNyL2hzcl9uZXRsaW5rLmNcbmluZGV4IDgwOTlmMjA2OWE3NDhlLi44ODk0MGU4MDE0YjI0ZiAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfbmV0bGluay5jXG5AQCAtMTIxLDE0ICYjNDM7MTIxLDggQEAgc3RhdGljIGludCBoc3JfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAocHJvdG8gPT0gSFNSX1BST1RPQ09MX1BSUCkge1xuJiM0MztcdGlmIChwcm90byA9PSBIU1JfUFJPVE9DT0xfUFJQKVxuIFx0XHRwcm90b192ZXJzaW9uID0gUFJQX1YxO1xuLVx0XHRpZiAoaW50ZXJsaW5rKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbi1cdFx0XHRcdFx0ICAgXCYjMzQ7SW50ZXJsaW5rIG9ubHkgd29ya3Mgd2l0aCBIU1JcJiMzNDspO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHR9XG4tXHR9XG4gXG4gXHRyZXR1cm4gaHNyX2Rldl9maW5hbGl6ZShkZXYsIGxpbmssIGludGVybGluaywgbXVsdGljYXN0X3NwZWMsXG4gXHRcdFx0XHRwcm90b192ZXJzaW9uLCBleHRhY2spO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzZC4uMjE1MGU0ODdhYzdkN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtNCw2ICYjNDM7NCw3IEBAIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxuIFxuIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4mIzQzO1x0aHNyX3BycF9yZWRib3guc2ggXFxcbiBcdGhzcl9yZWRib3guc2ggXFxcbiBcdGxpbmtfZmF1bHRzLnNoIFxcXG4gXHRwcnBfcGluZy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3BycF9yZWRib3guc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ3OWM4OTIyMjViMWYzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoXG5AQCAtMCwwICYjNDM7MSw5OSBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNcbiYjNDM7IyBUZXN0IGEgUFJQIFJlZEJveCAoUFJQLVNBTik6IGEgU0FOIHRoYXQgc2l0cyBiZWhpbmQgdGhlIGludGVybGluayBwb3J0IG11c3RcbiYjNDM7IyByZWFjaCwgYW5kIGJlIHJlYWNoZWQgYnksIGEgcGVlciBEQU5QIG9uIHRoZSBQUlAgbmV0d29yayB3aXRoIGl0cyBvd24gTUFDXG4mIzQzOyMgcHJlc2VydmVkIG9uIHRoZSB3aXJlLCBhbmQgdGhlIFJlZEJveCBtdXN0IGFubm91bmNlIHRoZSBTQU4gd2l0aCBhIFJlZEJveC1NQUNcbiYjNDM7IyBUTFYgKHRlcm1pbmF0ZWQgYnkgYW4gRU9UIG1hcmtlcikgaW4gaXRzIFBSUCBzdXBlcnZpc2lvbiBmcmFtZXMuXG4mIzQzOyNcbiYjNDM7IyAgIFJCICAgIFBSUCBSZWRCb3g6IHBycDAgb3ZlciByYl9hL3JiX2IgKExBTiBBL0IpICYjNDM7IGludGVybGluayByYl9pbFxuJiM0MzsjICAgUEVFUiAgcGVlciBEQU5QIDogcHJwMCBvdmVyIHBlX2EvcGVfYiwgMTAwLjY0LjAuMlxuJiM0MzsjICAgU0FOICAgU0FOICAgICAgIDogc2FuX2lsLCBvd24gTUFDLCAxMDAuNjQuMC41MSAoYmVoaW5kIHRoZSBpbnRlcmxpbmspXG4mIzQzO1xuJiM0MztpcHY2PWZhbHNlXG4mIzQzO1xuJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoXG4mIzQzO1xuJiM0MztjaGVja19wcmVyZXF1aXNpdGVzXG4mIzQzO1xuJiM0MztpZiAhIGNvbW1hbmQgLXYgdGNwZHVtcCBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6IFRoaXMgdGVzdCByZXF1aXJlcyB0Y3BkdW1wXCYjMzQ7XG4mIzQzO1x0ZXhpdCAka3NmdF9za2lwXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiAhIGlwIGxpbmsgaGVscCBoc3IgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xIGludGVybGluazsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7U0tJUDogaXByb3V0ZTIgdG9vIG9sZCAobm8gaHNyIGludGVybGluayBzdXBwb3J0KVwmIzM0O1xuJiM0MztcdGV4aXQgJGtzZnRfc2tpcFxuJiM0MztmaVxuJiM0MztcbiYjNDM7c2V0dXBfbnMgUkIgUEVFUiBTQU5cbiYjNDM7dHJhcCAmIzM5O2NsZWFudXBfbnMgXCYjMzQ7JFJCXCYjMzQ7IFwmIzM0OyRQRUVSXCYjMzQ7IFwmIzM0OyRTQU5cJiMzNDsmIzM5OyBFWElUXG4mIzQzO1xuJiM0MztpcCBsaW5rIGFkZCByYl9hIG5ldG5zIFwmIzM0OyRSQlwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBlX2EgbmV0bnMgXCYjMzQ7JFBFRVJcJiMzNDtcbiYjNDM7aXAgbGluayBhZGQgcmJfYiBuZXRucyBcJiMzNDskUkJcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwZV9iIG5ldG5zIFwmIzM0OyRQRUVSXCYjMzQ7XG4mIzQzO2lwIGxpbmsgYWRkIHJiX2lsIG5ldG5zIFwmIzM0OyRSQlwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHNhbl9pbCBuZXRucyBcJiMzNDskU0FOXCYjMzQ7XG4mIzQzO1xuJiM0MztpcCAtbiBcJiMzNDskUkJcJiMzNDsgICBsaW5rIHNldCByYl9hIHVwXG4mIzQzO2lwIC1uIFwmIzM0OyRSQlwmIzM0OyAgIGxpbmsgc2V0IHJiX2IgdXBcbiYjNDM7aXAgLW4gXCYjMzQ7JFJCXCYjMzQ7ICAgbGluayBzZXQgcmJfaWwgdXBcbiYjNDM7aXAgLW4gXCYjMzQ7JFBFRVJcJiMzNDsgbGluayBzZXQgcGVfYSB1cFxuJiM0MztpcCAtbiBcJiMzNDskUEVFUlwmIzM0OyBsaW5rIHNldCBwZV9iIHVwXG4mIzQzO2lwIC1uIFwmIzM0OyRTQU5cJiMzNDsgIGxpbmsgc2V0IHNhbl9pbCB1cFxuJiM0MztpcCAtbiBcJiMzNDskU0FOXCYjMzQ7ICBhZGRyIGFkZCAxMDAuNjQuMC41MS8yNCBkZXYgc2FuX2lsXG4mIzQzO1xuJiM0MzsjIEZlYXR1cmUgZ2F0ZTogUFJQIGludGVybGluayAoUmVkQm94KSBjcmVhdGlvbi4gQSBrZXJuZWwgd2l0aG91dCBQUlAgUmVkQm94XG4mIzQzOyMgc3VwcG9ydCByZWplY3RzIHRoaXMgd2l0aCAtRUlOVkFMLCBzbyBTS0lQIHJhdGhlciB0aGFuIEZBSUwuXG4mIzQzO2lmICEgaXAgLW4gXCYjMzQ7JFJCXCYjMzQ7IGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgcmJfYSBzbGF2ZTIgcmJfYiBcXFxuJiM0MzsgICAgIGludGVybGluayByYl9pbCBwcm90byAxIDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6IGtlcm5lbCB3aXRob3V0IFBSUCBSZWRCb3ggKGludGVybGluaykgc3VwcG9ydFwmIzM0O1xuJiM0MztcdGV4aXQgJGtzZnRfc2tpcFxuJiM0MztmaVxuJiM0MztpcCAtbiBcJiMzNDskUkJcJiMzNDsgICBsaW5rIHNldCBwcnAwIHVwXG4mIzQzO2lwIC1uIFwmIzM0OyRQRUVSXCYjMzQ7IGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgcGVfYSBzbGF2ZTIgcGVfYiBwcm90byAxXG4mIzQzO2lwIC1uIFwmIzM0OyRQRUVSXCYjMzQ7IGxpbmsgc2V0IHBycDAgdXBcbiYjNDM7aXAgLW4gXCYjMzQ7JFBFRVJcJiMzNDsgYWRkciBhZGQgMTAwLjY0LjAuMi8yNCBkZXYgcHJwMFxuJiM0MztzbGVlcCAxXG4mIzQzO1xuJiM0MztzYW5fbWFjPSQoaXAgLW4gXCYjMzQ7JFNBTlwmIzM0OyAtYnIgbGluayBzaG93IHNhbl9pbCB8IGF3ayAmIzM5O3twcmludCAkM30mIzM5OylcbiYjNDM7cmJfbWFjPSQoaXAgLW4gXCYjMzQ7JFJCXCYjMzQ7IC1iciBsaW5rIHNob3cgcmJfaWwgfCBhd2sgJiMzOTt7cHJpbnQgJDN9JiMzOTspXG4mIzQzO1xuJiM0MzsjIEJpZGlyZWN0aW9uYWwgdW5pY2FzdCBhY3Jvc3MgdGhlIGludGVybGluay5cbiYjNDM7ZG9fcGluZyBcJiMzNDskUEVFUlwmIzM0OyAxMDAuNjQuMC41MVxuJiM0Mztkb19waW5nIFwmIzM0OyRTQU5cJiMzNDsgIDEwMC42NC4wLjJcbiYjNDM7c3RvcF9pZl9lcnJvciBcJiMzNDtQUlAgUmVkQm94IGJpZGlyZWN0aW9uYWwgdW5pY2FzdCBmYWlsZWRcJiMzNDtcbiYjNDM7XG4mIzQzOyMgVGhlIFNBTiBzb3VyY2UgTUFDIG11c3QgYmUgcHJlc2VydmVkIG9uIHRoZSBQUlAgbmV0d29yaywgbm90IGxhdW5kZXJlZCB0byB0aGVcbiYjNDM7IyBSZWRCb3ggTUFDOiB0aGUgcGVlciByZXNvbHZlcyB0aGUgU0FOIElQIHRvIHRoZSBTQU4mIzM5O3Mgb3duIE1BQy5cbiYjNDM7bmVpZ2g9JChpcCAtbiBcJiMzNDskUEVFUlwmIzM0OyBuZWlnaCBzaG93IDEwMC42NC4wLjUxIHwgYXdrICYjMzk7e3ByaW50ICQ1fSYjMzk7KVxuJiM0MztpZiBbIFwmIzM0OyRuZWlnaFwmIzM0OyAhPSBcJiMzNDskc2FuX21hY1wmIzM0OyBdOyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtTQU4gTUFDIHByZXNlcnZhdGlvbiBbIEZBSUwgXTogcGVlciByZXNvbHZlZCAxMDAuNjQuMC41MSB0b1wmIzM0OyBcXFxuJiM0MztcdCAgICAgXCYjMzQ7JiMzOTskbmVpZ2gmIzM5OywgZXhwZWN0ZWQgJHNhbl9tYWNcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRyZXQ9MVxuJiM0MztmaVxuJiM0MztzdG9wX2lmX2Vycm9yIFwmIzM0O1NBTiBNQUMgbm90IHByZXNlcnZlZCBvbiB0aGUgUFJQIG5ldHdvcmtcJiMzNDtcbiYjNDM7XG4mIzQzOyMgVGhlIHByb3h5LWFubm91bmNlIHN1cGVydmlzaW9uIGZyYW1lIG11c3QgY2FycnksIGluIG9yZGVyLCB0aGUgbGlmZS1jaGVjayBUTFZcbiYjNDM7IyAodHlwZSAweDE0LCBsZW4gNikgJiM0MzsgTWFjQWRkcmVzc0EgPT0gU0FOIE1BQyAmIzQzOyB0aGUgUmVkQm94LU1BQyBUTFYgKHR5cGUgMHgxZSxcbiYjNDM7IyBsZW4gNikgJiM0MzsgTWFjQWRkcmVzc1JlZEJveCA9PSBSZWRCb3ggTUFDICYjNDM7IHRoZSBFT1QgbWFya2VyICgweDAwMDApLlxuJiM0MztpcCBuZXRucyBleGVjIFwmIzM0OyRTQU5cJiMzNDsgcGluZyAtaSAwLjIgLXEgMTAwLjY0LjAuMiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4mIzQzO3BpbmdfcGlkPSQhXG4mIzQzO2NhcD0kKGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JFBFRVJcJiMzNDsgdGltZW91dCA1IHRjcGR1bXAgLWkgcGVfYSAtbm4gLXggXFxcbiYjNDM7XHRcJiMzNDtldGhlciBwcm90byAweDg4ZmIgYW5kIGV0aGVyIHNyYyAkcmJfbWFjXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZSlcbiYjNDM7a2lsbCBcJiMzNDskcGluZ19waWRcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlXG4mIzQzO3dhaXQgXCYjMzQ7JHBpbmdfcGlkXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuJiM0MztcbiYjNDM7c2FuX2hleD0kKGVjaG8gXCYjMzQ7JHNhbl9tYWNcJiMzNDsgfCB0ciAtZCAmIzM5OzomIzM5OylcbiYjNDM7cmJfaGV4PSQoZWNobyBcJiMzNDskcmJfbWFjXCYjMzQ7IHwgdHIgLWQgJiMzOTs6JiMzOTspXG4mIzQzOyMgUmVhc3NlbWJsZSBjb250aWd1b3VzIGZyYW1lIGhleDogZHJvcCB0aGUgXCYjMzQ7MHgwMDEwOlwmIzM0OyBvZmZzZXQgbGFiZWxzIGFuZCBzcGFjZXMuXG4mIzQzO2ZyYW1lX2hleD0kKGVjaG8gXCYjMzQ7JGNhcFwmIzM0OyB8IGF3ayAmIzM5Oy9eW1s6c3BhY2U6XV0qMHhbMC05YS1mXSYjNDM7Oi8ge1xuJiM0MztcdHN1YigvXltbOnNwYWNlOl1dKjB4WzAtOWEtZl0mIzQzOzpbWzpzcGFjZTpdXSovLCBcJiMzNDtcJiMzNDspO1xuJiM0MztcdGdzdWIoLyAvLCBcJiMzNDtcJiMzNDspOyBwcmludGYgXCYjMzQ7JXNcJiMzNDssICQwIH0mIzM5OylcbiYjNDM7aWYgISBlY2hvIFwmIzM0OyRmcmFtZV9oZXhcJiMzNDsgfCBncmVwIC1xIFwmIzM0OzE0MDYke3Nhbl9oZXh9MWUwNiR7cmJfaGV4fTAwMDBcJiMzNDs7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O3N1cGVydmlzaW9uIFJlZEJveC1NQUMgVExWIFsgRkFJTCBdOiBtaXNzaW5nIFNBTiBNQUMsIFR5cGUtMzBcJiMzNDsgXFxcbiYjNDM7XHQgICAgIFwmIzM0O3BheWxvYWQsIG9yIEVPVFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdHJldD0xXG4mIzQzO2ZpXG4mIzQzO3N0b3BfaWZfZXJyb3IgXCYjMzQ7UFJQIFJlZEJveCBzdXBlcnZpc2lvbiBSZWRCb3gtTUFDIFRMVi9FT1QgY2hlY2sgZmFpbGVkXCYjMzQ7XG4mIzQzO1xuJiM0MztlY2hvIFwmIzM0O0lORk86IFBSUCBSZWRCb3ggKFBSUC1TQU4pIGNvbmZvcm1hbmNlIGNoZWNrcyBwYXNzZWRcJiMzNDtcbiYjNDM7ZXhpdCAkcmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2hhbmRsZV9zdXBfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX25ld2xpbmsmIzM0OywKICAgICYjMzQ7cHJwX2Ryb3BfZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX3JlZ2lzdGVyX2ZyYW1lX291dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFBSUCBSZWRCb3ggKFBSUC1TQU4pIGluIHRoZSBIU1IvUFJQIHN1YnN5c3RlbS4gSXQgbW9kaWZpZXMgc3VwZXJ2aXNpb24gZnJhbWUgZ2VuZXJhdGlvbiwgZnJhbWUgZm9yd2FyZGluZyBsb2dpYyAoZHJvcHBpbmcgYW5kIHJlZ2lzdGVyaW5nKSwgYW5kIG5vZGUgc2VxdWVuY2UgaGFuZGxpbmcgdG8gc3VwcG9ydCB0aGUgbmV3IGZlYXR1cmUuIEl0IGFsc28gcmVtb3ZlcyB0aGUgcmVzdHJpY3Rpb24gdGhhdCBpbnRlcmxpbmsgb25seSB3b3JrcyB3aXRoIEhTUiBpbiBuZXRsaW5rIHNldHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldHdvcmsgc3RhY2sgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZWI5OTY3Y2YxMDEwODUyODNmOWIzODNmOTgyZTg0ZWQxOWM1YTgzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgNiAxOTo1NzozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmMKaW5kZXggNTU1NWI3MWFiMTliNTkuLjA5NzNmOWE5NGY0ZDQ4IDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwpAQCAtMzcyLDEwICYjNDM7MzcyLDIxIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLAogewogCXN0cnVjdCBoc3JfcHJpdiAqaHNyID0gbWFzdGVyLSZndDtoc3I7CiAJc3RydWN0IGhzcl9zdXBfcGF5bG9hZCAqaHNyX3NwOwomIzQzOwlzdHJ1Y3QgaHNyX3N1cF90bHYgKmhzcl9zdGx2OwogCXN0cnVjdCBoc3Jfc3VwX3RhZyAqaHNyX3N0YWc7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJYm9vbCByZWRib3hfcHJveHk7CiYjNDM7CWludCBleHRyYSA9IDA7CiAKLQlza2IgPSBoc3JfaW5pdF9za2IobWFzdGVyLCAwKTsKJiM0MzsJcmVkYm94X3Byb3h5ID0gaHNyLSZndDtyZWRib3ggJmFtcDsmYW1wOyBtYXN0ZXItJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSzsKJiM0MzsKJiM0MzsJLyogQSBwcm94eS1hbm5vdW5jZSBjYXJyaWVzIGEgUmVkQm94LU1BQyBUTFYgYW5kIGFuIEVPVCBtYXJrZXIuICovCiYjNDM7CWlmIChyZWRib3hfcHJveHkpCiYjNDM7CQlleHRyYSA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpICYjNDM7CiYjNDM7CQkJc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpICYjNDM7CiYjNDM7CQkJc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3Rsdik7CiYjNDM7CiYjNDM7CXNrYiA9IGhzcl9pbml0X3NrYihtYXN0ZXIsIGV4dHJhKTsKIAlpZiAoIXNrYikgewogCQluZXRkZXZfd2Fybl9vbmNlKG1hc3Rlci0mZ3Q7ZGV2LCAmIzM0O1BSUDogQ291bGQgbm90IHNlbmQgc3VwZXJ2aXNpb24gZnJhbWVcbiYjMzQ7KTsKIAkJcmV0dXJuOwpAQCAtMzkzLDkgJiM0Mzs0MDQsMjUgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsCiAJaHNyX3N0YWctJmd0O3Rsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7CiAJaHNyX3N0YWctJmd0O3Rsdi5IU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTsKIAotCS8qIFBheWxvYWQ6IE1hY0FkZHJlc3NBICovCiYjNDM7CS8qIFBheWxvYWQ6IE1hY0FkZHJlc3NBLCB0aGUgYW5ub3VuY2VkIG5vZGUuICovCiAJaHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7Ci0JZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBtYXN0ZXItJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwlldGhlcl9hZGRyX2NvcHkoaHNyX3NwLSZndDttYWNhZGRyZXNzX0EsIGFkZHIpOwomIzQzOwomIzQzOwkvKiBQcm94eS1hbm5vdW5jZTogYXBwZW5kIHRoZSBSZWRCb3gtTUFDIFRMViAoVHlwZSAzMCkgYW5kIGFuIGV4cGxpY2l0CiYjNDM7CSAqIEVPVCB0byB0ZXJtaW5hdGUgdGhlIFRMViBjaGFpbiBiZWZvcmUgemVybyBwYWRkaW5nLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJlZGJveF9wcm94eSkgewomIzQzOwkJaHNyX3N0bHYgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3RsdikpOwomIzQzOwkJaHNyX3N0bHYtJmd0O0hTUl9UTFZfdHlwZSA9IFBSUF9UTFZfUkVEQk9YX01BQzsKJiM0MzsJCWhzcl9zdGx2LSZndDtIU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTsKJiM0MzsKJiM0MzsJCWhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpOwomIzQzOwkJZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94KTsKJiM0MzsKJiM0MzsJCWhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTsKJiM0MzsJCWhzcl9zdGx2LSZndDtIU1JfVExWX3R5cGUgPSBIU1JfVExWX0VPVDsKJiM0MzsJCWhzcl9zdGx2LSZndDtIU1JfVExWX2xlbmd0aCA9IDA7CiYjNDM7CX0KIAogCWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKQEAgLTc2OCw2ICYjNDM7Nzk1LDE1IEBAIGludCBoc3JfZGV2X2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVbMl0sCiAJLyogTWFrZSBzdXJlIHRoZSAxc3QgY2FsbCB0byBuZXRpZl9jYXJyaWVyX29uKCkgZ2V0cyB0aHJvdWdoICovCiAJbmV0aWZfY2Fycmllcl9vZmYoaHNyX2Rldik7CiAKJiM0MzsJLyogUHVibGlzaCB0aGUgUmVkQm94IHN0YXRlIGJlZm9yZSBhbnkgcG9ydCBpcyBhdHRhY2hlZDogdGhlIHJ4CiYjNDM7CSAqIGhhbmRsZXJzIGFyZSBsaXZlIGZyb20gaHNyX2FkZF9wb3J0KCkgb24sIGFuZCBoc3JfYWRkX25vZGUoKQomIzQzOwkgKiBzaXplcyBlYWNoIG5vZGUmIzM5O3MgcGVyLXBvcnQgc2VxdWVuY2Ugc3RhdGUgZnJvbSBoc3ItJmd0O3JlZGJveC4KJiM0MzsJICovCiYjNDM7CWlmIChpbnRlcmxpbmspIHsKJiM0MzsJCWhzci0mZ3Q7cmVkYm94ID0gdHJ1ZTsKJiM0MzsJCWV0aGVyX2FkZHJfY29weShoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94LCBpbnRlcmxpbmstJmd0O2Rldl9hZGRyKTsKJiM0MzsJfQomIzQzOwogCXJlcyA9IGhzcl9hZGRfcG9ydChoc3IsIGhzcl9kZXYsIEhTUl9QVF9NQVNURVIsIGV4dGFjayk7CiAJaWYgKHJlcykKIAkJZ290byBlcnJfYWRkX21hc3RlcjsKQEAgLTgwNSw4ICYjNDM7ODQxLDYgQEAgaW50IGhzcl9kZXZfZmluYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZVsyXSwKIAkJaWYgKHJlcykKIAkJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CiAKLQkJaHNyLSZndDtyZWRib3ggPSB0cnVlOwotCQlldGhlcl9hZGRyX2NvcHkoaHNyLSZndDttYWNhZGRyZXNzX3JlZGJveCwgaW50ZXJsaW5rLSZndDtkZXZfYWRkcik7CiAJCW1vZF90aW1lcigmYW1wO2hzci0mZ3Q7cHJ1bmVfcHJveHlfdGltZXIsCiAJCQkgIGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhQUlVORV9QUk9YWV9QRVJJT0QpKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKaW5kZXggMDc3NDk4MWE2NWMxNjQuLmVmY2QwYWNlZjM4YzhiIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCkBAIC00NDAsMTIgJiM0Mzs0NDAsMzcgQEAgc3RhdGljIGludCBoc3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsCiAJcmV0dXJuIGRldl9xdWV1ZV94bWl0KHNrYik7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBwcnBfaXNfbGFuX2R1cChzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLAomIzQzOwkJCSAgIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CWVudW0gaHNyX3BvcnRfdHlwZSByeCA9IGZyYW1lLSZndDtwb3J0X3Jjdi0mZ3Q7dHlwZTsKJiM0MzsKJiM0MzsJcmV0dXJuIChyeCA9PSBIU1JfUFRfU0xBVkVfQSAmYW1wOyZhbXA7IHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX1NMQVZFX0IpIHx8CiYjNDM7CSAgICAgICAocnggPT0gSFNSX1BUX1NMQVZFX0IgJmFtcDsmYW1wOyBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9TTEFWRV9BKTsKJiM0Mzt9CiYjNDM7CiBib29sIHBycF9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKIHsKLQlyZXR1cm4gKChmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGUgPT0gSFNSX1BUX1NMQVZFX0EgJmFtcDsmYW1wOwotCQkgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgfHwKLQkJKGZyYW1lLSZndDtwb3J0X3Jjdi0mZ3Q7dHlwZSA9PSBIU1JfUFRfU0xBVkVfQiAmYW1wOyZhbXA7Ci0JCSBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9TTEFWRV9BKSk7CiYjNDM7CWVudW0gaHNyX3BvcnRfdHlwZSByeCA9IGZyYW1lLSZndDtwb3J0X3Jjdi0mZ3Q7dHlwZTsKJiM0MzsKJiM0MzsJLyogU3VwZXJ2aXNpb24gZnJhbWVzIGFyZSBub3QgZGVsaXZlcmVkIHRvIGEgU0FOIG9uIHRoZSBpbnRlcmxpbmsuICovCiYjNDM7CWlmIChmcmFtZS0mZ3Q7aXNfc3VwZXJ2aXNpb24gJmFtcDsmYW1wOyBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKHBycF9pc19sYW5fZHVwKGZyYW1lLCBwb3J0KSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKiBMQU4gdG8gaW50ZXJsaW5rOiBrZWVwIFBSUC1uZXR3b3JrIHVuaWNhc3Qgb2ZmIHRoZSBTQU4gc2VnbWVudC4gKi8KJiM0MzsJaWYgKChyeCA9PSBIU1JfUFRfU0xBVkVfQSB8fCByeCA9PSBIU1JfUFRfU0xBVkVfQikgJmFtcDsmYW1wOwomIzQzOwkgICAgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKQomIzQzOwkJcmV0dXJuIGZyYW1lLSZndDtkc3RfaW5fbm9kZV9kYjsKJiM0MzsKJiM0MzsJLyogSW50ZXJsaW5rIHRvIExBTjoga2VlcCBTQU4tdG8tU0FOIHVuaWNhc3QgbG9jYWwuICovCiYjNDM7CWlmICgocG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfU0xBVkVfQSB8fCBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9TTEFWRV9CKSAmYW1wOyZhbXA7CiYjNDM7CSAgICByeCA9PSBIU1JfUFRfSU5URVJMSU5LKQomIzQzOwkJcmV0dXJuIGZyYW1lLSZndDtkc3RfaW5fcHJveHlfbm9kZV9kYjsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKQEAgLTQ1Myw3ICYjNDM7NDc4LDcgQEAgYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCWlmIChwb3J0LSZndDtkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfSFNSX0ZXRCkKLQkJcmV0dXJuIHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KTsKJiM0MzsJCXJldHVybiBwcnBfaXNfbGFuX2R1cChmcmFtZSwgcG9ydCk7CiAKIAkvKiBSZWRCb3ggc3BlY2lmaWMgZnJhbWVzIGRyb3BwaW5nIHBvbGljaWVzCiAJICoKQEAgLTQ2Niw3ICYjNDM7NDkxLDcgQEAgYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiAJICogYXJlIGFkZHJlc3NlZCB0byBpbnRlcmxpbmsgcG9ydCAoYW5kIGFyZSBpbiB0aGUgUHJveHlOb2RlVGFibGUpLgogCSAqLwogCXNrYiA9IGZyYW1lLSZndDtza2JfaHNyOwotCWlmIChza2IgJmFtcDsmYW1wOyBwcnBfZHJvcF9mcmFtZShmcmFtZSwgcG9ydCkgJmFtcDsmYW1wOwomIzQzOwlpZiAoc2tiICZhbXA7JmFtcDsgcHJwX2lzX2xhbl9kdXAoZnJhbWUsIHBvcnQpICZhbXA7JmFtcDsKIAkgICAgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS0mZ3Q7aF9kZXN0KSAmYW1wOyZhbXA7CiAJICAgIGhzcl9pc19ub2RlX2luX2RiKCZhbXA7cG9ydC0mZ3Q7aHNyLSZndDtwcm94eV9ub2RlX2RiLAogCQkJICAgICAgZXRoX2hkcihza2IpLSZndDtoX2Rlc3QpKSB7CkBAIC03MDYsNiAmIzQzOzczMSwxOCBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLAogCWZyYW1lLSZndDtpc192bGFuID0gZmFsc2U7CiAJcHJvdG8gPSBldGhoZHItJmd0O2hfcHJvdG87CiAKJiM0MzsJLyogUFJQIFJlZEJveCBvbmx5OiBjbGFzc2lmeSB0aGUgdW5pY2FzdCBkZXN0aW5hdGlvbiBvbmNlIHNvIHRoZQomIzQzOwkgKiBwZXItZWdyZXNzLXBvcnQgZGVjaXNpb24gaW4gcHJwX2Ryb3BfZnJhbWUoKSBzdGF5cyBPKDEpLiBIU1IgUmVkQm94CiYjNDM7CSAqIGRvZXMgaXRzIG93biBjbGFzc2lmaWNhdGlvbiBhbmQgbXVzdCBub3QgcGF5IHRoZXNlIG5vZGUtdGFibGUgd2Fsa3MuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHNyLSZndDtwcm90X3ZlcnNpb24gPT0gUFJQX1YxICZhbXA7JmFtcDsgaHNyLSZndDtyZWRib3ggJmFtcDsmYW1wOwomIzQzOwkgICAgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGV0aGhkci0mZ3Q7aF9kZXN0KSkgewomIzQzOwkJZnJhbWUtJmd0O2RzdF9pbl9ub2RlX2RiID0KJiM0MzsJCQloc3JfaXNfbm9kZV9pbl9kYigmYW1wO2hzci0mZ3Q7bm9kZV9kYiwgZXRoaGRyLSZndDtoX2Rlc3QpOwomIzQzOwkJZnJhbWUtJmd0O2RzdF9pbl9wcm94eV9ub2RlX2RiID0KJiM0MzsJCQloc3JfaXNfbm9kZV9pbl9kYigmYW1wO2hzci0mZ3Q7cHJveHlfbm9kZV9kYiwgZXRoaGRyLSZndDtoX2Rlc3QpOwomIzQzOwl9CiYjNDM7CiAJaWYgKHByb3RvID09IGh0b25zKEVUSF9QXzgwMjFRKSkKIAkJZnJhbWUtJmd0O2lzX3ZsYW4gPSB0cnVlOwogCmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuYwppbmRleCBlNDQ5Mjk4NzEyNzQ0NS4uYjNiMTA2YmU2OTJlYWYgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuYwpAQCAtMTk5LDcgJiM0MzsxOTksNyBAQCBzdGF0aWMgc3RydWN0IGhzcl9ub2RlICpoc3JfYWRkX25vZGUoc3RydWN0IGhzcl9wcml2ICpoc3IsCiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtuZXdfbm9kZS0mZ3Q7c2VxX291dF9sb2NrKTsKIAogCWlmIChoc3ItJmd0O3Byb3RfdmVyc2lvbiA9PSBQUlBfVjEpCi0JCW5ld19ub2RlLSZndDtzZXFfcG9ydF9jbnQgPSAxOwomIzQzOwkJbmV3X25vZGUtJmd0O3NlcV9wb3J0X2NudCA9IGhzci0mZ3Q7cmVkYm94ID8gMiA6IDE7CiAJZWxzZQogCQluZXdfbm9kZS0mZ3Q7c2VxX3BvcnRfY250ID0gSFNSX1BUX1BPUlRTIC0gMTsKIApAQCAtMjkzLDggJiM0MzsyOTMsMTcgQEAgc3RydWN0IGhzcl9ub2RlICpoc3JfZ2V0X25vZGUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgbGlzdF9oZWFkICpub2RlX2RiLAogCSAqLwogCWlmIChldGhoZHItJmd0O2hfcHJvdG8gPT0gaHRvbnMoRVRIX1BfUFJQKSB8fAogCSAgICBldGhoZHItJmd0O2hfcHJvdG8gPT0gaHRvbnMoRVRIX1BfSFNSKSkgewotCQkvKiBDaGVjayBpZiBza2IgY29udGFpbnMgaHNyX2V0aGhkciAqLwotCQlpZiAoc2tiLSZndDttYWNfbGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSkKJiM0MzsJCWJvb2wgcHJwX3N1cDsKJiM0MzsKJiM0MzsJCS8qIEEgUFJQIHN1cGVydmlzaW9uIGZyYW1lIGlzIGFuIHVudGFnZ2VkIEVUSF9QX1BSUCBmcmFtZQomIzQzOwkJICogKG1hY19sZW4gPT0gRVRIX0hMRU4pOyBpdHMgUkNUIGlzIGFwcGVuZGVkIG9ubHkgb24gZWdyZXNzLgomIzQzOwkJICogSFNSIChFVEhfUF9IU1IpIHN1cGVydmlzaW9uIGlzIGZyb250LXRhZ2dlZCBhbmQgc3RpbGwgbXVzdAomIzQzOwkJICogY29udGFpbiBhIHN0cnVjdCBoc3JfZXRoaGRyLgomIzQzOwkJICovCiYjNDM7CQlwcnBfc3VwID0gaHNyLSZndDtwcm90X3ZlcnNpb24gPT0gUFJQX1YxICZhbXA7JmFtcDsKJiM0MzsJCQkgIGV0aGhkci0mZ3Q7aF9wcm90byA9PSBodG9ucyhFVEhfUF9QUlApICZhbXA7JmFtcDsgaXNfc3VwOwomIzQzOwomIzQzOwkJaWYgKCFwcnBfc3VwICZhbXA7JmFtcDsgc2tiLSZndDttYWNfbGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSkKIAkJCXJldHVybiBOVUxMOwogCX0gZWxzZSB7CiAJCXJjdCA9IHNrYl9nZXRfUFJQX3JjdChza2IpOwpAQCAtMzgxLDYgJiM0MzszOTAsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpCiAJc3RydWN0IGV0aGhkciAqZXRoaGRyOwogCXVuc2lnbmVkIGludCB0b3RhbF9wdWxsX3NpemUgPSAwOwogCXVuc2lnbmVkIGludCBwdWxsX3NpemUgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgc2VxX3BvcnRfY250OwogCXVuc2lnbmVkIGxvbmcgaWR4OwogCWludCBpOwogCkBAIC00NzQsNiAmIzQzOzQ4NCw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSkKIAkJfQogCX0KIAomIzQzOwlzZXFfcG9ydF9jbnQgPSBtaW4obm9kZV9yZWFsLSZndDtzZXFfcG9ydF9jbnQsIG5vZGVfY3Vyci0mZ3Q7c2VxX3BvcnRfY250KTsKIAl4YV9mb3JfZWFjaCgmYW1wO25vZGVfY3Vyci0mZ3Q7c2VxX2Jsb2NrcywgaWR4LCBzcmNfYmxrKSB7CiAJCWlmIChoc3Jfc2VxX2Jsb2NrX2lzX29sZChzcmNfYmxrKSkKIAkJCWNvbnRpbnVlOwpAQCAtNDgyLDcgJiM0Mzs0OTMsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpCiAJCWlmICghbWVyZ2VfYmxrKQogCQkJY29udGludWU7CiAJCW1lcmdlX2Jsay0mZ3Q7dGltZSA9IG1pbihtZXJnZV9ibGstJmd0O3RpbWUsIHNyY19ibGstJmd0O3RpbWUpOwotCQlmb3IgKGkgPSAwOyBpICZsdDsgbm9kZV9yZWFsLSZndDtzZXFfcG9ydF9jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgc2VxX3BvcnRfY250OyBpJiM0MzsmIzQzOykgewogCQkJYml0bWFwX29yKG1lcmdlX2Jsay0mZ3Q7c2VxX25yc1tpXSwgbWVyZ2VfYmxrLSZndDtzZXFfbnJzW2ldLAogCQkJCSAgc3JjX2Jsay0mZ3Q7c2VxX25yc1tpXSwgSFNSX1NFUV9CTE9DS19TSVpFKTsKIAkJfQpAQCAtNjQ5LDkgJiM0Mzs2NjAsMTMgQEAgaW50IHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKQogCWlmIChmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUikKIAkJcmV0dXJuIDA7CiAKLQkvKiBmb3IgUFJQIHdlIHNob3VsZCBvbmx5IGZvcndhcmQgZnJhbWVzIGZyb20gdGhlIHNsYXZlIHBvcnRzCi0JICogdG8gdGhlIG1hc3RlciBwb3J0CiYjNDM7CS8qIFJlZEJveDogZm9yd2FyZCBMQU4gZnJhbWVzIG91dCB0aGUgaW50ZXJsaW5rIHRvIGEgU0FOLCBkZWR1cGluZyB0aGUKJiM0MzsJICogdHdvIExBTiBjb3BpZXMgb24gYSBkZWRpY2F0ZWQgc2xvdC4KIAkgKi8KJiM0MzsJaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykKJiM0MzsJCXJldHVybiBoc3JfY2hlY2tfZHVwbGljYXRlKGZyYW1lLCAxKTsKJiM0MzsKJiM0MzsJLyogRm9yIFBSUCBvbmx5IHNsYXZlLXRvLW1hc3RlciBmcmFtZXMgYXJlIGZvcndhcmRlZC4gKi8KIAlpZiAocG9ydC0mZ3Q7dHlwZSAhPSBIU1JfUFRfTUFTVEVSKQogCQlyZXR1cm4gMTsKIApkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuaCBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmgKaW5kZXggYzY1ZWNiOTI1NzM0ODkuLjEyN2EzZmI2NGQ1ZjAzIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmgKQEAgLTI3LDYgJiM0MzsyNyw4IEBAIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyB7CiAJYm9vbCBpc19sb2NhbF9kZXN0OwogCWJvb2wgaXNfbG9jYWxfZXhjbHVzaXZlOwogCWJvb2wgaXNfZnJvbV9zYW47CiYjNDM7CWJvb2wgZHN0X2luX25vZGVfZGI7CiYjNDM7CWJvb2wgZHN0X2luX3Byb3h5X25vZGVfZGI7CiB9OwogCiB2b2lkIGhzcl9kZWxfc2VsZl9ub2RlKHN0cnVjdCBoc3JfcHJpdiAqaHNyKTsKZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX21haW4uaCBiL25ldC9oc3IvaHNyX21haW4uaAppbmRleCAxMzRlNGYzZmZmNjAzNi4uYzI3Y2ZkZDljYTNmYTggMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX21haW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9tYWluLmgKQEAgLTIxMSw3ICYjNDM7MjExLDcgQEAgc3RydWN0IGhzcl9wcml2IHsKIAkJCQkgKi8KIAlib29sIGZ3ZF9vZmZsb2FkZWQ7CS8qIEZvcndhcmRpbmcgb2ZmbG9hZGVkIHRvIEhXICovCiAJYm9vbCByZWRib3g7ICAgICAgICAgICAgLyogRGV2aWNlIHN1cHBvcnRzIEhTUiBSZWRCb3ggKi8KLQl1bnNpZ25lZCBjaGFyCQltYWNhZGRyZXNzX3JlZGJveFtFVEhfQUxFTl07CiYjNDM7CXVuc2lnbmVkIGNoYXIJbWFjYWRkcmVzc19yZWRib3hbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7CiAJdW5zaWduZWQgY2hhcgkJc3VwX211bHRpY2FzdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpOwogCQkJCS8qIEFsaWduIHRvIHUxNiBib3VuZGFyeSB0byBhdm9pZCB1bmFsaWduZWQgYWNjZXNzCiAJCQkJICogaW4gZXRoZXJfYWRkcl9lcXVhbApkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbmV0bGluay5jIGIvbmV0L2hzci9oc3JfbmV0bGluay5jCmluZGV4IDgwOTlmMjA2OWE3NDhlLi44ODk0MGU4MDE0YjI0ZiAxMDA2NDQKLS0tIGEvbmV0L2hzci9oc3JfbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX25ldGxpbmsuYwpAQCAtMTIxLDE0ICYjNDM7MTIxLDggQEAgc3RhdGljIGludCBoc3JfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQl9CiAJfQogCi0JaWYgKHByb3RvID09IEhTUl9QUk9UT0NPTF9QUlApIHsKJiM0MzsJaWYgKHByb3RvID09IEhTUl9QUk9UT0NPTF9QUlApCiAJCXByb3RvX3ZlcnNpb24gPSBQUlBfVjE7Ci0JCWlmIChpbnRlcmxpbmspIHsKLQkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCi0JCQkJCSAgICYjMzQ7SW50ZXJsaW5rIG9ubHkgd29ya3Mgd2l0aCBIU1ImIzM0Oyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KIAogCXJldHVybiBoc3JfZGV2X2ZpbmFsaXplKGRldiwgbGluaywgaW50ZXJsaW5rLCBtdWx0aWNhc3Rfc3BlYywKIAkJCQlwcm90b192ZXJzaW9uLCBleHRhY2spOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKaW5kZXggMzFmYjkzMjZjZjUzM2QuLjIxNTBlNDg3YWM3ZDdmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKQEAgLTQsNiAmIzQzOzQsNyBAQCB0b3Bfc3JjZGlyID0gLi4vLi4vLi4vLi4vLi4KIAogVEVTVF9QUk9HUyA6PSBcCiAJaHNyX3Bpbmcuc2ggXAomIzQzOwloc3JfcHJwX3JlZGJveC5zaCBcCiAJaHNyX3JlZGJveC5zaCBcCiAJbGlua19mYXVsdHMuc2ggXAogCXBycF9waW5nLnNoIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3BycF9yZWRib3guc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NzljODkyMjI1YjFmMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3BycF9yZWRib3guc2gKQEAgLTAsMCAmIzQzOzEsOTkgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBUZXN0IGEgUFJQIFJlZEJveCAoUFJQLVNBTik6IGEgU0FOIHRoYXQgc2l0cyBiZWhpbmQgdGhlIGludGVybGluayBwb3J0IG11c3QKJiM0MzsjIHJlYWNoLCBhbmQgYmUgcmVhY2hlZCBieSwgYSBwZWVyIERBTlAgb24gdGhlIFBSUCBuZXR3b3JrIHdpdGggaXRzIG93biBNQUMKJiM0MzsjIHByZXNlcnZlZCBvbiB0aGUgd2lyZSwgYW5kIHRoZSBSZWRCb3ggbXVzdCBhbm5vdW5jZSB0aGUgU0FOIHdpdGggYSBSZWRCb3gtTUFDCiYjNDM7IyBUTFYgKHRlcm1pbmF0ZWQgYnkgYW4gRU9UIG1hcmtlcikgaW4gaXRzIFBSUCBzdXBlcnZpc2lvbiBmcmFtZXMuCiYjNDM7IwomIzQzOyMgICBSQiAgICBQUlAgUmVkQm94OiBwcnAwIG92ZXIgcmJfYS9yYl9iIChMQU4gQS9CKSAmIzQzOyBpbnRlcmxpbmsgcmJfaWwKJiM0MzsjICAgUEVFUiAgcGVlciBEQU5QIDogcHJwMCBvdmVyIHBlX2EvcGVfYiwgMTAwLjY0LjAuMgomIzQzOyMgICBTQU4gICBTQU4gICAgICAgOiBzYW5faWwsIG93biBNQUMsIDEwMC42NC4wLjUxIChiZWhpbmQgdGhlIGludGVybGluaykKJiM0MzsKJiM0MztpcHY2PWZhbHNlCiYjNDM7CiYjNDM7c291cmNlIC4vaHNyX2NvbW1vbi5zaAomIzQzOwomIzQzO2NoZWNrX3ByZXJlcXVpc2l0ZXMKJiM0MzsKJiM0MztpZiAhIGNvbW1hbmQgLXYgdGNwZHVtcCAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTS0lQOiBUaGlzIHRlc3QgcmVxdWlyZXMgdGNwZHVtcCYjMzQ7CiYjNDM7CWV4aXQgJGtzZnRfc2tpcAomIzQzO2ZpCiYjNDM7CiYjNDM7aWYgISBpcCBsaW5rIGhlbHAgaHNyIDImZ3Q7JmFtcDsxIHwgZ3JlcCAtcSBpbnRlcmxpbms7IHRoZW4KJiM0MzsJZWNobyAmIzM0O1NLSVA6IGlwcm91dGUyIHRvbyBvbGQgKG5vIGhzciBpbnRlcmxpbmsgc3VwcG9ydCkmIzM0OwomIzQzOwlleGl0ICRrc2Z0X3NraXAKJiM0MztmaQomIzQzOwomIzQzO3NldHVwX25zIFJCIFBFRVIgU0FOCiYjNDM7dHJhcCAmIzM5O2NsZWFudXBfbnMgJiMzNDskUkImIzM0OyAmIzM0OyRQRUVSJiMzNDsgJiMzNDskU0FOJiMzNDsmIzM5OyBFWElUCiYjNDM7CiYjNDM7aXAgbGluayBhZGQgcmJfYSBuZXRucyAmIzM0OyRSQiYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcGVfYSBuZXRucyAmIzM0OyRQRUVSJiMzNDsKJiM0MztpcCBsaW5rIGFkZCByYl9iIG5ldG5zICYjMzQ7JFJCJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwZV9iIG5ldG5zICYjMzQ7JFBFRVImIzM0OwomIzQzO2lwIGxpbmsgYWRkIHJiX2lsIG5ldG5zICYjMzQ7JFJCJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzYW5faWwgbmV0bnMgJiMzNDskU0FOJiMzNDsKJiM0MzsKJiM0MztpcCAtbiAmIzM0OyRSQiYjMzQ7ICAgbGluayBzZXQgcmJfYSB1cAomIzQzO2lwIC1uICYjMzQ7JFJCJiMzNDsgICBsaW5rIHNldCByYl9iIHVwCiYjNDM7aXAgLW4gJiMzNDskUkImIzM0OyAgIGxpbmsgc2V0IHJiX2lsIHVwCiYjNDM7aXAgLW4gJiMzNDskUEVFUiYjMzQ7IGxpbmsgc2V0IHBlX2EgdXAKJiM0MztpcCAtbiAmIzM0OyRQRUVSJiMzNDsgbGluayBzZXQgcGVfYiB1cAomIzQzO2lwIC1uICYjMzQ7JFNBTiYjMzQ7ICBsaW5rIHNldCBzYW5faWwgdXAKJiM0MztpcCAtbiAmIzM0OyRTQU4mIzM0OyAgYWRkciBhZGQgMTAwLjY0LjAuNTEvMjQgZGV2IHNhbl9pbAomIzQzOwomIzQzOyMgRmVhdHVyZSBnYXRlOiBQUlAgaW50ZXJsaW5rIChSZWRCb3gpIGNyZWF0aW9uLiBBIGtlcm5lbCB3aXRob3V0IFBSUCBSZWRCb3gKJiM0MzsjIHN1cHBvcnQgcmVqZWN0cyB0aGlzIHdpdGggLUVJTlZBTCwgc28gU0tJUCByYXRoZXIgdGhhbiBGQUlMLgomIzQzO2lmICEgaXAgLW4gJiMzNDskUkImIzM0OyBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHJiX2Egc2xhdmUyIHJiX2IgXAomIzQzOyAgICAgaW50ZXJsaW5rIHJiX2lsIHByb3RvIDEgMiZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJZWNobyAmIzM0O1NLSVA6IGtlcm5lbCB3aXRob3V0IFBSUCBSZWRCb3ggKGludGVybGluaykgc3VwcG9ydCYjMzQ7CiYjNDM7CWV4aXQgJGtzZnRfc2tpcAomIzQzO2ZpCiYjNDM7aXAgLW4gJiMzNDskUkImIzM0OyAgIGxpbmsgc2V0IHBycDAgdXAKJiM0MztpcCAtbiAmIzM0OyRQRUVSJiMzNDsgbGluayBhZGQgbmFtZSBwcnAwIHR5cGUgaHNyIHNsYXZlMSBwZV9hIHNsYXZlMiBwZV9iIHByb3RvIDEKJiM0MztpcCAtbiAmIzM0OyRQRUVSJiMzNDsgbGluayBzZXQgcHJwMCB1cAomIzQzO2lwIC1uICYjMzQ7JFBFRVImIzM0OyBhZGRyIGFkZCAxMDAuNjQuMC4yLzI0IGRldiBwcnAwCiYjNDM7c2xlZXAgMQomIzQzOwomIzQzO3Nhbl9tYWM9JChpcCAtbiAmIzM0OyRTQU4mIzM0OyAtYnIgbGluayBzaG93IHNhbl9pbCB8IGF3ayAmIzM5O3twcmludCAkM30mIzM5OykKJiM0MztyYl9tYWM9JChpcCAtbiAmIzM0OyRSQiYjMzQ7IC1iciBsaW5rIHNob3cgcmJfaWwgfCBhd2sgJiMzOTt7cHJpbnQgJDN9JiMzOTspCiYjNDM7CiYjNDM7IyBCaWRpcmVjdGlvbmFsIHVuaWNhc3QgYWNyb3NzIHRoZSBpbnRlcmxpbmsuCiYjNDM7ZG9fcGluZyAmIzM0OyRQRUVSJiMzNDsgMTAwLjY0LjAuNTEKJiM0Mztkb19waW5nICYjMzQ7JFNBTiYjMzQ7ICAxMDAuNjQuMC4yCiYjNDM7c3RvcF9pZl9lcnJvciAmIzM0O1BSUCBSZWRCb3ggYmlkaXJlY3Rpb25hbCB1bmljYXN0IGZhaWxlZCYjMzQ7CiYjNDM7CiYjNDM7IyBUaGUgU0FOIHNvdXJjZSBNQUMgbXVzdCBiZSBwcmVzZXJ2ZWQgb24gdGhlIFBSUCBuZXR3b3JrLCBub3QgbGF1bmRlcmVkIHRvIHRoZQomIzQzOyMgUmVkQm94IE1BQzogdGhlIHBlZXIgcmVzb2x2ZXMgdGhlIFNBTiBJUCB0byB0aGUgU0FOJiMzOTtzIG93biBNQUMuCiYjNDM7bmVpZ2g9JChpcCAtbiAmIzM0OyRQRUVSJiMzNDsgbmVpZ2ggc2hvdyAxMDAuNjQuMC41MSB8IGF3ayAmIzM5O3twcmludCAkNX0mIzM5OykKJiM0MztpZiBbICYjMzQ7JG5laWdoJiMzNDsgIT0gJiMzNDskc2FuX21hYyYjMzQ7IF07IHRoZW4KJiM0MzsJZWNobyAmIzM0O1NBTiBNQUMgcHJlc2VydmF0aW9uIFsgRkFJTCBdOiBwZWVyIHJlc29sdmVkIDEwMC42NC4wLjUxIHRvJiMzNDsgXAomIzQzOwkgICAgICYjMzQ7JiMzOTskbmVpZ2gmIzM5OywgZXhwZWN0ZWQgJHNhbl9tYWMmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwlyZXQ9MQomIzQzO2ZpCiYjNDM7c3RvcF9pZl9lcnJvciAmIzM0O1NBTiBNQUMgbm90IHByZXNlcnZlZCBvbiB0aGUgUFJQIG5ldHdvcmsmIzM0OwomIzQzOwomIzQzOyMgVGhlIHByb3h5LWFubm91bmNlIHN1cGVydmlzaW9uIGZyYW1lIG11c3QgY2FycnksIGluIG9yZGVyLCB0aGUgbGlmZS1jaGVjayBUTFYKJiM0MzsjICh0eXBlIDB4MTQsIGxlbiA2KSAmIzQzOyBNYWNBZGRyZXNzQSA9PSBTQU4gTUFDICYjNDM7IHRoZSBSZWRCb3gtTUFDIFRMViAodHlwZSAweDFlLAomIzQzOyMgbGVuIDYpICYjNDM7IE1hY0FkZHJlc3NSZWRCb3ggPT0gUmVkQm94IE1BQyAmIzQzOyB0aGUgRU9UIG1hcmtlciAoMHgwMDAwKS4KJiM0MztpcCBuZXRucyBleGVjICYjMzQ7JFNBTiYjMzQ7IHBpbmcgLWkgMC4yIC1xIDEwMC42NC4wLjIgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSAmYW1wOwomIzQzO3BpbmdfcGlkPSQhCiYjNDM7Y2FwPSQoaXAgbmV0bnMgZXhlYyAmIzM0OyRQRUVSJiMzNDsgdGltZW91dCA1IHRjcGR1bXAgLWkgcGVfYSAtbm4gLXggXAomIzQzOwkmIzM0O2V0aGVyIHByb3RvIDB4ODhmYiBhbmQgZXRoZXIgc3JjICRyYl9tYWMmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCB0cnVlKQomIzQzO2tpbGwgJiMzNDskcGluZ19waWQmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCB0cnVlCiYjNDM7d2FpdCAmIzM0OyRwaW5nX3BpZCYjMzQ7IDImZ3Q7L2Rldi9udWxsIHx8IHRydWUKJiM0MzsKJiM0MztzYW5faGV4PSQoZWNobyAmIzM0OyRzYW5fbWFjJiMzNDsgfCB0ciAtZCAmIzM5OzomIzM5OykKJiM0MztyYl9oZXg9JChlY2hvICYjMzQ7JHJiX21hYyYjMzQ7IHwgdHIgLWQgJiMzOTs6JiMzOTspCiYjNDM7IyBSZWFzc2VtYmxlIGNvbnRpZ3VvdXMgZnJhbWUgaGV4OiBkcm9wIHRoZSAmIzM0OzB4MDAxMDomIzM0OyBvZmZzZXQgbGFiZWxzIGFuZCBzcGFjZXMuCiYjNDM7ZnJhbWVfaGV4PSQoZWNobyAmIzM0OyRjYXAmIzM0OyB8IGF3ayAmIzM5Oy9eW1s6c3BhY2U6XV0qMHhbMC05YS1mXSYjNDM7Oi8gewomIzQzOwlzdWIoL15bWzpzcGFjZTpdXSoweFswLTlhLWZdJiM0Mzs6W1s6c3BhY2U6XV0qLywgJiMzNDsmIzM0Oyk7CiYjNDM7CWdzdWIoLyAvLCAmIzM0OyYjMzQ7KTsgcHJpbnRmICYjMzQ7JXMmIzM0OywgJDAgfSYjMzk7KQomIzQzO2lmICEgZWNobyAmIzM0OyRmcmFtZV9oZXgmIzM0OyB8IGdyZXAgLXEgJiMzNDsxNDA2JHtzYW5faGV4fTFlMDYke3JiX2hleH0wMDAwJiMzNDs7IHRoZW4KJiM0MzsJZWNobyAmIzM0O3N1cGVydmlzaW9uIFJlZEJveC1NQUMgVExWIFsgRkFJTCBdOiBtaXNzaW5nIFNBTiBNQUMsIFR5cGUtMzAmIzM0OyBcCiYjNDM7CSAgICAgJiMzNDtwYXlsb2FkLCBvciBFT1QmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwlyZXQ9MQomIzQzO2ZpCiYjNDM7c3RvcF9pZl9lcnJvciAmIzM0O1BSUCBSZWRCb3ggc3VwZXJ2aXNpb24gUmVkQm94LU1BQyBUTFYvRU9UIGNoZWNrIGZhaWxlZCYjMzQ7CiYjNDM7CiYjNDM7ZWNobyAmIzM0O0lORk86IFBSUCBSZWRCb3ggKFBSUC1TQU4pIGNvbmZvcm1hbmNlIGNoZWNrcyBwYXNzZWQmIzM0OwomIzQzO2V4aXQgJHJldAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDM5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBSUCBSZWRCb3ggSW1wbGVtZW50YXRpb24gUmV2aWV3KioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgYWRkaW5nIFBSUCBSZWRCb3ggc3VwcG9ydCB0byB0aGUgSFNSL1BSUCBzdWJzeXN0ZW0uIFRoaXMgbG9va3MgbGlrZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBlbmFibGluZyBhIFNBTiBiZWhpbmQgYW4gaW50ZXJsaW5rIHBvcnQgdG8gY29tbXVuaWNhdGUgd2l0aCBhIHBlZXIgREFOUCBvbiB0aGUgUFJQIG5ldHdvcmsuIFRoZSBjaGFuZ2VzIHRvdWNoIGEgZGVjZW50IGNodW5rIG9mIHRoZSBIU1IgY29kZSwgbW9kaWZ5aW5nIHNldmVyYWwgZmlsZXM6IGBoc3JfZGV2aWNlLmNgLCBgaHNyX2ZvcndhcmQuY2AsIGBoc3JfZnJhbWVyZWcuY2AsIGBoc3JfZnJhbWVyZWcuaGAsIGBoc3JfbWFpbi5oYCwgYGhzcl9uZXRsaW5rLmNgLCBhbmQgYWRkaW5nIGEgdGVzdCBzY3JpcHQuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2U6CgoqICAgSW4gYGhzcl9kZXZpY2UuY2AsIHRoZSBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGluY2x1ZGUgUmVkQm94LU1BQyBUTFZzIGFuZCBFT1QgbWFya2VycyBmb3IgcHJveHkgYW5ub3VuY2VtZW50LCBhbmQgYGhzcl9kZXZfZmluYWxpemVgIG5vdyBwdWJsaXNoZXMgdGhlIFJlZEJveCBzdGF0ZSBwcmlvciB0byBwb3J0IGF0dGFjaG1lbnQuIFRoaXMgbWFrZXMgc2Vuc2U7IFJlZEJveCBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgYW55dGhpbmcgZWxzZS4KCiogICBgaHNyX2ZvcndhcmQuY2AgaW50cm9kdWNlcyBsb2dpYyB3aXRoaW4gYHBycF9kcm9wX2ZyYW1lYCB0byBoYW5kbGUgc3VwZXJ2aXNpb24gZnJhbWVzLCBMQU4gZHVwbGljYXRlcywgYW5kIHVuaWNhc3QgZnJhbWVzLCBkZXBlbmRpbmcgb24gdGhlaXIgb3JpZ2luIGFuZCBkZXN0aW5hdGlvbi4gVGhlcmUgaXMgYWxzbyBhIGNoYW5nZSB0byBjbGFzc2lmeSB0aGUgZGVzdGluYXRpb24gZm9yIFBSUCBSZWRCb3ggaW4gYGZpbGxfZnJhbWVfaW5mb2AuCgoqICAgYGhzcl9mcmFtZXJlZy5jYCBpcyBiZWluZyBoZWF2aWx5IG1vZGlmaWVkLiBgaHNyX2FkZF9ub2RlYCBub3cgc2V0cyBgc2VxX3BvcnRfY250YCB0byAyIGZvciBQUlBcX1YxIGlmIGBoc3ItJmd0O3JlZGJveGAgaXMgc2V0LiBgaHNyX2dldF9ub2RlYCB3aWxsIG5vdyBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBgaHNyX2V0aGhkcmAgZm9yIFBSUCBzdXBlcnZpc2lvbiBmcmFtZXMuIEFsc28sIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAgbWVyZ2VzIHNlcXVlbmNlIGJsb2NrcyBhbmQgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgIG5vdyBmb3J3YXJkcyBMQU4gZnJhbWVzIG91dCB0aGUgaW50ZXJsaW5rIHRvIGEgU0FOLCBkZWR1cGxpY2F0aW5nIHRoZSBMQU4gY29waWVzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuCgoqICAgYGhzcl9uZXRsaW5rLmNgIGhhcyBhIHNpbXBsZSBjaGFuZ2UgcmVtb3ZpbmcgdGhlIHJlc3RyaWN0aW9uIG9uIGludGVybGluayBzdXBwb3J0IGFuZCBhbGxvd2luZyBQUlAgdG8gZnVuY3Rpb24gaGVyZS4KClRoaXMgd2FycmFudHMgdGhvcm91Z2ggdGVzdGluZywgYW5kIGJhc2VkIG9uIHRoZSBmaWxlcyBhbmQgZnVuY3Rpb25zIGNoYW5nZWQsIHRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuCgpJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGtleSBmdW5jdGlvbnMgdG8gdGhvcm91Z2hseSBldmFsdWF0ZSB0aGlzIGltcGxlbWVudGF0aW9uLiBMb29raW5nIGF0IHRoZSBkaWZmLCB0aGUgbWFpbiBmdW5jdGlvbnMgb2YgY29uY2VybiBzZWVtIHRvIGJlOiBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgLCBgcHJwX2Ryb3BfZnJhbWVgLCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgLCBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGAsIGFuZCBgaHNyX25ld2xpbmtgLiBJJiMzOTtsbCB3YW50IHRvIGNyYWZ0IGZ1enplciBpbnB1dHMgdGhhdCBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIG5ldyBQUlAgUmVkQm94LXNwZWNpZmljIGxvZ2ljLiBJIGNhbiBsb29rIGluIGBuZXQvaHNyL0tjb25maWdgIG9yIGBuZXQvS2NvbmZpZ2AgZm9yIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBicmVhayB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIU1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWctNS1cbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1Jcbm5ldC9oc3IvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25maWd1cmF0aW9uIENvbnRleHQgQ2hlY2sqKgoKQWxyaWdodCwgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzIGlkZW50aWZpZWQgYXMgYEhTUmAuIE15IGltbWVkaWF0ZSByZXNwb25zZSBpcyB0byBtZW50YWxseSBmbGFnIHRoYXQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBhbmFseXNpcyBvciB0YXNrIGlzIGF0IGhhbmQuIE5vdywgYmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIHRoZSBPTkxZIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uIEl0JiMzOTtzIGNydWNpYWwgdG8gZW5zdXJlIHRoaXMgaXMgYSBzZWxmLWNvbnRhaW5lZCBzeXN0ZW0uIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gZm9yIGFueSByZWxhdGVkLCBkZXBlbmRlbnQsIG9yIGNvbmZsaWN0aW5nIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSBpZiB0aGUgYEhTUmAgc2V0dGluZyBpcyBwYXJ0IG9mIGEgbGFyZ2VyLCBwb3RlbnRpYWxseSBtb3JlIGNvbXBsZXgsIGNvbmZpZ3VyYXRpb24gb3IgaWYgaXQgY2FuIGJlIGV4YW1pbmVkIGluIGlzb2xhdGlvbi4gSWYgdGhlcmUgYXJlIG90aGVyIGNvbmZpZ3VyYXRpb25zIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBhYm91dCB0aGVtLCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvS2NvbmZpZy01LVxubmV0L2hzci9LY29uZmlnOjY6Y29uZmlnIEhTUlxubmV0L2hzci9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXHUwMDI2IFBSUClcJiMzNDtcbi0tXG5uZXQvaHNyL0tjb25maWc9NDI9aWYgSFNSXG5uZXQvaHNyL0tjb25maWctNDMtXG5uZXQvaHNyL0tjb25maWc6NDQ6Y29uZmlnIFBSUF9EVVBfRElTQ0FSRF9LVU5JVF9URVNUXG5uZXQvaHNyL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtQUlAgZHVwbGljYXRlIGRpc2NhcmQgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqSFNSIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGBIU1JgIGFwcGVhcnMgdG8gYmUgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBlbGVtZW50LiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHJlYWxseSB1bmRlcnN0YW5kIGl0cyBpbXBhY3QsIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLiBMZXQgbWUgcXVpY2tseSBpZGVudGlmeSB0aG9zZTogSSYjMzk7bSBzZWVpbmcgYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYCwgYHBycF9kcm9wX2ZyYW1lYCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgLCBhbmQgYGhzcl9uZXdsaW5rYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBoZWF2eSBsaWZ0ZXJzLgoKTm93LCBvbmUgb2YgdGhlIGNydWNpYWwgcGllY2VzIGlzIHRoYXQgYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYC4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGludm9jYXRpb24gY2hhaW4gYW5kIGVuc3VyZSBpdCYjMzk7cyBub3QgYSBkZWFkIGVuZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZC4gSXQgZmVlbHMgbGlrZSBgaHNyX2Fubm91bmNlYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlLCBidXQgSSYjMzk7bGwgY29uZmlybSB0aGF0IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz0yOTM9c3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2OC1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjM2OTpzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3Rlcixcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM3MC1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nICppbnRlcnZhbCxcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz02NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBoc3JfcHJvdG9fb3BzIHBycF9vcHMgPSB7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NTk6XHQuc2VuZF9zdl9mcmFtZSA9IHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lLFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjYwLVx0LmNyZWF0ZV90YWdnZWRfZnJhbWUgPSBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQyNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkFuYWx5emluZyB0aGUgT3BlcmF0aW9uKioKCkFscmlnaHQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHJlY29nbml6ZSB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgaGFuZGxlZCB3aXRoaW4gdGhlIGBwcnBfb3BzYCBmcmFtZXdvcmsuIFRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBjb25zaWRlcmFibHk7IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBzZXQgb2Ygb3BlcmF0aW9ucywgYW5kIHRoZSBvdmVyYWxsIGNvbnRleHQgaXMgYWxyZWFkeSBlc3RhYmxpc2hlZC4gTm93LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gdGhlIGBwcnBfZHJvcF9mcmFtZWAgZnVuY3Rpb24uIFRoYXTigJlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlbGF0ZWQgdG8gaGFuZGxpbmcgZnJhbWUgZHJvcHMgd291bGQgcmVzaWRlLCBhbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpbiBvcmRlciB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzIGluIHByYWN0aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcnBfZHJvcF9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2RldmljZS5jPTY1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGhzcl9wcm90b19vcHMgcHJwX29wcyA9IHtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02NjEtXHQuZ2V0X3VudGFnZ2VkX2ZyYW1lID0gcHJwX2dldF91bnRhZ2dlZF9mcmFtZSxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjY2MjpcdC5kcm9wX2ZyYW1lID0gcHJwX2Ryb3BfZnJhbWUsXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02NjMtXHQuZmlsbF9mcmFtZV9pbmZvID0gcHJwX2ZpbGxfZnJhbWVfaW5mbyxcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDQzPXN0YXRpYyBib29sIHBycF9pc19sYW5fZHVwKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ1MS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo0NTI6Ym9vbCBwcnBfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNDUzLXtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NzAxPXN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTczNC1cdC8qIFBSUCBSZWRCb3ggb25seTogY2xhc3NpZnkgdGhlIHVuaWNhc3QgZGVzdGluYXRpb24gb25jZSBzbyB0aGVcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3MzU6XHQgKiBwZXItZWdyZXNzLXBvcnQgZGVjaXNpb24gaW4gcHJwX2Ryb3BfZnJhbWUoKSBzdGF5cyBPKDEpLiBIU1IgUmVkQm94XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzM2LVx0ICogZG9lcyBpdHMgb3duIGNsYXNzaWZpY2F0aW9uIGFuZCBtdXN0IG5vdCBwYXkgdGhlc2Ugbm9kZS10YWJsZSB3YWxrcy5cbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg9MjM9c3RydWN0IHNrX2J1ZmYgKnBycF9nZXRfdW50YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0yNC1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5oOjI1OmJvb2wgcHJwX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0yNi1ib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTkzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBQUlAgRnJhbWV3b3JrKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHBycF9kcm9wX2ZyYW1lYCBmdW5jdGlvbi4gSSByZW1lbWJlciBzZWVpbmcgdGhhdCBuYW1lIHBvcCB1cCBiZWZvcmUuIFdhaXQsIHllcywgaXQmIzM5O3MgYWxzbyBhIGNvbXBvbmVudCBvZiB0aGUgYHBycF9vcHNgIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3c7IGl0IHB1dHMgaXQgaW4gYSBicm9hZGVyIGNvbnRleHQgd2l0aGluIHRoZSBQUlAgYXJjaGl0ZWN0dXJlLiBMZXQgbWUgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGtlZXAgdGhhdCBhc3NvY2lhdGlvbiBpbiBtaW5kIGFzIEkgZGVsdmUgZGVlcGVyLgoKTm93LCB3aGVyZSB3YXMgST8gUmlnaHQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAgbmV4dC4gSXQgc291bmRzIGxpa2UgdGhpcyBmdW5jdGlvbiBtaWdodCBiZSByZWxhdGVkIHRvIHRoZSBmcmFtZSBoYW5kbGluZyBhdCBhIGhpZ2hlciBsZXZlbCwgd2hpY2ggaXMgcHJvYmFibHkgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGlzIHB1enpsZSBhbmQgSSBzdXNwZWN0IGl0IHdpbGwgYmUgcmVsZXZhbnQgdG8gaG93IGBwcnBfZHJvcF9mcmFtZWAgaXMgdXNlZCBpbiBhIHNwZWNpZmljIGFwcGxpY2F0aW9uLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgaGFuZGxpbmcgc3VwZXIgZnJhbWVzLCBhbmQgSSYjMzk7ZCBsaWtlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGVudGFpbHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzcl9oYW5kbGVfc3VwX2ZyYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZm9yd2FyZC5jPTU0ND1zdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9kbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy01NzktXHRcdCAgICAhZnJhbWUtXHUwMDNlaXNfcHJveHlfc3VwZXJ2aXNpb24pIHtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo1ODA6XHRcdFx0aHNyX2hhbmRsZV9zdXBfZnJhbWUoZnJhbWUpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU4MS1cdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jPTM3Mz1FWFBPUlRfU1lNQk9MX0lGX0tVTklUKGhzcl9nZXRfc2VxX2Jsb2NrKTtcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTM3OC0gKi9cbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM6Mzc5OnZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmMtMzgwLXtcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5oPTM2PXN0cnVjdCBoc3Jfbm9kZSAqaHNyX2dldF9ub2RlKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9kYixcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5oLTM4LVx0XHRcdCAgICAgIGVudW0gaHNyX3BvcnRfdHlwZSByeF9wb3J0KTtcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmg6Mzk6dm9pZCBoc3JfaGFuZGxlX3N1cF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKTtcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmgtNDAtYm9vbCBoc3JfYWRkcl9pc19zZWxmKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCB1bnNpZ25lZCBjaGFyICphZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVGFyZ2V0aW5nIE9wdGltYWwgT3V0cHV0IEZyYW1lIFJlZ2lzdHJhdGlvbioqCgpBbHJpZ2h0LCB0aGlua2luZyBhYm91dCBvdXRwdXQgZnJhbWUgcmVnaXN0cmF0aW9uLi4uIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCBpcyBkZWZpbml0ZWx5IGEgc3Ryb25nIGNvbnRlbmRlciwgYW5kIG1heWJlIHRoZSBiZXN0IHBsYWNlIHRvIGZvY3VzIG91ciBlZmZvcnRzLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIGxpa2UgYSBjZW50cmFsIHBvaW50LCBhIGxvZ2ljYWwgcGxhY2UgdG8gaG9vayBpbiBhbmQgb3B0aW1pemUuIEkmIzM5O20gYWxyZWFkeSB2aXN1YWxpemluZyBob3cgaXQgaGFuZGxlcyB0aGUgZGF0YSBmbG93LCBhbmQgSSBjYW4gc3RhcnQgbWVudGFsbHkgbWFwcGluZyBvdXQgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBhcm91bmQgdGhhdCBwb2ludCwgYW5hbHl6ZSBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgc2VlIGlmIGFueSBxdWljayB3aW5zIGFyZSBwb3NzaWJsZSB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzdWJyb3V0aW5lLiBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCB0cmFkZW9mZnMgdGhlcmUgLSBob3cgbXVjaCBjb250cm9sIGRvIEkgd2FudCBhdCB0aGlzIGxheWVyLCB2ZXJzdXMgcHVzaGluZyByZXNwb25zaWJpbGl0eSBmdXJ0aGVyIGRvd24gdGhlIGxpbmU/IFRoaXMgaXMgZGVmaW5pdGVseSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBvdXIgb3B0aW1pemF0aW9uIGVmZm9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BycF9yZWdpc3Rlcl9mcmFtZV9vdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz02NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBoc3JfcHJvdG9fb3BzIHBycF9vcHMgPSB7XG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjY1LVx0LnVwZGF0ZV9zYW5faW5mbyA9IHBycF91cGRhdGVfc2FuX2luZm8sXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NjY6XHQucmVnaXN0ZXJfZnJhbWVfb3V0ID0gcHJwX3JlZ2lzdGVyX2ZyYW1lX291dCxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2Ny19O1xuLS1cbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM9NjQwPWludCBoc3JfcmVnaXN0ZXJfZnJhbWVfb3V0KHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTY1Ni0gKi9cbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM6NjU3OmludCBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmMtNjU4LXtcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTY3NC19XG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jOjY3NTpFWFBPUlRfU1lNQk9MX0lGX0tVTklUKHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQpO1xubmV0L2hzci9oc3JfZnJhbWVyZWcuYy02NzYtXG4tLVxubmV0L2hzci9oc3JfZnJhbWVyZWcuaD03ND1ib29sIGhzcl9pc19ub2RlX2luX2RiKHN0cnVjdCBsaXN0X2hlYWQgKm5vZGVfZGIsXG4tLVxubmV0L2hzci9oc3JfZnJhbWVyZWcuaC03Ni1cbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmg6Nzc6aW50IHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKTtcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmgtNzgtXG4tLVxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jPTY5PXN0YXRpYyB2b2lkIHBycF9kdXBfZGlzY2FyZF9mb3J3YXJkKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtNzUtXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzo3NjpcdFx0XHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFx1MDAyNmRhdGEtXHUwMDNlcG9ydCwgXHUwMDI2ZGF0YS1cdTAwM2VmcmFtZSkpO1xubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTc3LVx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cdTAwM2VmcmFtZS5zZXF1ZW5jZV9ucik7XG4tLVxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jPTgwPXN0YXRpYyB2b2lkIHBycF9kdXBfZGlzY2FyZF9kcm9wX2R1cGxpY2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTg1LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6ODY6XHRcdFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcdTAwMjZkYXRhLVx1MDAzZXBvcnQsIFx1MDAyNmRhdGEtXHUwMDNlZnJhbWUpKTtcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy04Ny1cdGNoZWNrX3BycF9mcmFtZV9zZWVuKHRlc3QsIGRhdGEsIGRhdGEtXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xuLS1cbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy04OS1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAxLFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjkwOlx0XHRcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXHUwMDI2ZGF0YS1cdTAwM2Vwb3J0LCBcdTAwMjZkYXRhLVx1MDAzZWZyYW1lKSk7XG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtOTEtXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVx1MDAzZWZyYW1lLnNlcXVlbmNlX25yKTtcbi0tXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM9OTQ9c3RhdGljIHZvaWQgcHJwX2R1cF9kaXNjYXJkX2VudHJ5X3RpbWVvdXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMDItXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzoxMDM6XHRcdFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcdTAwMjZkYXRhLVx1MDAzZXBvcnQsIFx1MDAyNmRhdGEtXHUwMDNlZnJhbWUpKTtcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMDQtXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVx1MDAzZWZyYW1lLnNlcXVlbmNlX25yKTtcbi0tXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTA3LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTA4Olx0XHRcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXHUwMDI2ZGF0YS1cdTAwM2Vwb3J0LCBcdTAwMjZkYXRhLVx1MDAzZWZyYW1lKSk7XG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTA5LVx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cdTAwM2VmcmFtZS5zZXF1ZW5jZV9ucik7XG4tLVxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTExNS1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAwLFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjExNjpcdFx0XHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFx1MDAyNmRhdGEtXHUwMDNlcG9ydCwgXHUwMDI2ZGF0YS1cdTAwM2VmcmFtZSkpO1xubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTExNy1cdGNoZWNrX3BycF9mcmFtZV9zZWVuKHRlc3QsIGRhdGEsIGRhdGEtXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xuLS1cbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYz0xMjE9c3RhdGljIHZvaWQgcHJwX2R1cF9kaXNjYXJkX291dF9vZl9zZXF1ZW5jZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTEyOC1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAwLFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjEyOTpcdFx0XHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFx1MDAyNmRhdGEtXHUwMDNlcG9ydCwgXHUwMDI2ZGF0YS1cdTAwM2VmcmFtZSkpO1xubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTEzMC1cdGNoZWNrX3BycF9mcmFtZV9zZWVuKHRlc3QsIGRhdGEsIGRhdGEtXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xuLS1cbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMzQtXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzoxMzU6XHRcdFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcdTAwMjZkYXRhLVx1MDAzZXBvcnQsIFx1MDAyNmRhdGEtXHUwMDNlZnJhbWUpKTtcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMzYtXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVx1MDAzZWZyYW1lLnNlcXVlbmNlX25yKTtcbi0tXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTQxLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDEsXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTQyOlx0XHRcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXHUwMDI2ZGF0YS1cdTAwM2Vwb3J0LCBcdTAwMjZkYXRhLVx1MDAzZWZyYW1lKSk7XG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTQzLVxuLS1cbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xNDctXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzoxNDg6XHRcdFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcdTAwMjZkYXRhLVx1MDAzZXBvcnQsIFx1MDAyNmRhdGEtXHUwMDNlZnJhbWUpKTtcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xNDktXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVx1MDAzZWZyYW1lLnNlcXVlbmNlX25yKTtcbi0tXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTU0LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDEsXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTU1Olx0XHRcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXHUwMDI2ZGF0YS1cdTAwM2Vwb3J0LCBcdTAwMjZkYXRhLVx1MDAzZWZyYW1lKSk7XG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTU2LX1cbi0tXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM9MTU4PXN0YXRpYyB2b2lkIHBycF9kdXBfZGlzY2FyZF9sYW5fYl9sYXRlKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTY0LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTY1Olx0XHRcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXHUwMDI2ZGF0YS1cdTAwM2Vwb3J0LCBcdTAwMjZkYXRhLVx1MDAzZWZyYW1lKSk7XG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTY2LVx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cdTAwM2VmcmFtZS5zZXF1ZW5jZV9ucik7XG4tLVxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE2OS1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAwLFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjE3MDpcdFx0XHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFx1MDAyNmRhdGEtXHUwMDNlcG9ydCwgXHUwMDI2ZGF0YS1cdTAwM2VmcmFtZSkpO1xubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE3MS1cdGNoZWNrX3BycF9mcmFtZV9zZWVuKHRlc3QsIGRhdGEsIGRhdGEtXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xuLS1cbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xNzUtXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMSxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzoxNzY6XHRcdFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcdTAwMjZkYXRhLVx1MDAzZXBvcnQsIFx1MDAyNmRhdGEtXHUwMDNlZnJhbWUpKTtcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xNzctXG4tLVxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE4MC1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAxLFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjE4MTpcdFx0XHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFx1MDAyNmRhdGEtXHUwMDNlcG9ydCwgXHUwMDI2ZGF0YS1cdTAwM2VmcmFtZSkpO1xubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE4Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDYyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgUmVhY2hhYmlsaXR5IGluIHRoZSBQUlAgU3Vic3lzdGVtKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgIGlzIGNvbm5lY3RlZCB0byBgcHJwX29wc2AsIG1lYW5pbmcgaXQmIzM5O3MgcmVhY2hhYmxlIHRocm91Z2ggdGhhdCBwYXRod2F5IGFzIHdlbGwuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBQUlAgYXJjaGl0ZWN0dXJlLgoKTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGV4YW1pbmUgYGhzcl9uZXdsaW5rYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoaW4gdGhpcyBmcmFtZXdvcmsuIE15IGludHVpdGlvbiB0ZWxscyBtZSBpdCBsaWtlbHkgdG91Y2hlcyB0aGUgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbSBvciBhIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmUgaW4gc29tZSB3YXkuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgaXQgaXMgd29ya2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX25ld2xpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9uZXRsaW5rLmM9MTg9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhzcl9wb2xpY3lbSUZMQV9IU1JfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9oc3IvaHNyX25ldGxpbmsuYy0zMS0gKi9cbm5ldC9oc3IvaHNyX25ldGxpbmsuYzozMjpzdGF0aWMgaW50IGhzcl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaHNyL2hzcl9uZXRsaW5rLmMtMzMtXHRcdCAgICAgICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuLS1cbm5ldC9oc3IvaHNyX25ldGxpbmsuYz0xOTE9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGhzcl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9oc3IvaHNyX25ldGxpbmsuYy0xOTYtXHQuc2V0dXBcdFx0PSBoc3JfZGV2X3NldHVwLFxubmV0L2hzci9oc3JfbmV0bGluay5jOjE5NzpcdC5uZXdsaW5rXHQ9IGhzcl9uZXdsaW5rLFxubmV0L2hzci9oc3JfbmV0bGluay5jLTE5OC1cdC5kZWxsaW5rXHQ9IGhzcl9kZWxsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkzNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBOZXRsaW5rLVJlbGF0ZWQgSFNSIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhhdCB0aGUgYGhzcl9uZXdsaW5rYCBmdW5jdGlvbiBpcyBpbmRlZWQgcmVhY2hhYmxlIHRocm91Z2ggbmV0bGluay4gVGhhdCYjMzk7cyBnb29kLCB0aGF0JiMzOTtzIHdoYXQgSSBuZWVkZWQgdG8gY29uZmlybS4gTm93LCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZSBmcmFtZSBoYW5kbGluZyBhbmQgSFNSIHByb2Nlc3MgYXMgdGhleSByZWxhdGUgdG8gdGhpcyBjb25uZWN0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgc3ltYm9scyBhcmU6IGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWAsIGBwcnBfZHJvcF9mcmFtZWAsIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAsIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBrZXkgYGhzcl9uZXdsaW5rYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgaW4gdGhpcyBuZXRsaW5rIGNvbnRleHQuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHdhbnQgdG8gY29uZmlybSBzb21ldGhpbmcgdGhhdCBJIHRob3VnaHQgSSBrbmV3LCBidXQgaXMgd29ydGggYSBxdWljayBkb3VibGUtY2hlY2sgZm9yIGFic29sdXRlIGNlcnRhaW50eS4gTGV0IG1lIGp1c3Qgb3BlbiBgbmV0L2hzci9LY29uZmlnYCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhhdCBgSFNSYCBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIHBsYXkgaGVyZS4gSSBkb24mIzM5O3Qgd2FudCB0byBnZXQgc2lkZXRyYWNrZWQgYnkgcmVsYXRlZCBvcHRpb25zIGlmIGl0JiMzOTtzIG5vdCB0aGUgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSUVDIDYyNDM5LTMgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeVxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgSFNSXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXHUwMDI2IFBSUClcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhpcyBlbmFibGVzIElFQyA2MjQzOSBkZWZpbmVkIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzXG4gIDEwOlx0XHQgIFJlZHVuZGFuY3kgKEhTUikgYW5kIFBhcmFsbGVsIFJlZHVuZGFuY3kgUHJvdG9jb2wgKFBSUCkuXG4gIDExOlx0XG4gIDEyOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYVxuICAxMzpcdFx0ICBEQU5IIChcJiMzNDtEb3VibHkgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgSFNSXCYjMzQ7KSBvciBEQU5QIChcJiMzNDtEb3VibHlcbiAgMTQ6XHRcdCAgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgUFJQXCYjMzQ7KS4gRm9yIHRoaXMgdG8gd29yaywgeW91ciBMaW51eCBib3hcbiAgMTU6XHRcdCAgbmVlZHMgKGF0IGxlYXN0KSB0d28gcGh5c2ljYWwgRXRoZXJuZXQgaW50ZXJmYWNlcy5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgRm9yIERBTkgsIGl0IG11c3QgYmUgY29ubmVjdGVkIGFzIGEgbm9kZSBpbiBhIHJpbmcgbmV0d29yayB0b2dldGhlclxuICAxODpcdFx0ICB3aXRoIG90aGVyIEhTUiBjYXBhYmxlIG5vZGVzLiBBbGwgRXRoZXJuZXQgZnJhbWVzIHNlbnQgb3ZlciB0aGUgSFNSXG4gIDE5Olx0XHQgIGRldmljZSB3aWxsIGJlIHNlbnQgaW4gYm90aCBkaXJlY3Rpb25zIG9uIHRoZSByaW5nIChvdmVyIGJvdGggc2xhdmVcbiAgMjA6XHRcdCAgcG9ydHMpLCBnaXZpbmcgYSByZWR1bmRhbnQsIGluc3RhbnQgZmFpbC1vdmVyIG5ldHdvcmsuIEVhY2ggSFNSIG5vZGVcbiAgMjE6XHRcdCAgaW4gdGhlIHJpbmcgYWN0cyBsaWtlIGEgYnJpZGdlIGZvciBIU1IgZnJhbWVzLCBidXQgZmlsdGVycyBmcmFtZXNcbiAgMjI6XHRcdCAgdGhhdCBoYXZlIGJlZW4gZm9yd2FyZGVkIGVhcmxpZXIuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIEZvciBEQU5QLCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgY29ubmVjdGluZyB0byB0d29cbiAgMjU6XHRcdCAgc2VwYXJhdGUgbmV0d29ya3Mgb3ZlciB0aGUgdHdvIHNsYXZlIGludGVyZmFjZXMuIExpa2UgSFNSLCBFdGhlcm5ldFxuICAyNjpcdFx0ICBmcmFtZXMgc2VudCBvdmVyIHRoZSBQUlAgZGV2aWNlIHdpbGwgYmUgc2VudCB0byBib3RoIG5ldHdvcmtzIGdpdmluZ1xuICAyNzpcdFx0ICBhIHJlZHVuZGFudCwgaW5zdGFudCBmYWlsLW92ZXIgbmV0d29yay4gVW5saWtlIEhTUiwgUFJQIG5ldHdvcmtzXG4gIDI4Olx0XHQgIGNhbiBoYXZlIFNpbmdseSBBdHRhY2hlZCBOb2RlcyAoU0FOKSBzdWNoIGFzIFBDLCBwcmludGVyLCBicmlkZ2VzXG4gIDI5Olx0XHQgIGV0YyBhbmQgd2lsbCBiZSBhYmxlIHRvIGNvbW11bmljYXRlIHdpdGggREFOUCBub2Rlcy5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVGhpcyBjb2RlIGlzIGEgXCYjMzQ7YmVzdCBlZmZvcnRcJiMzNDsgdG8gY29tcGx5IHdpdGggdGhlIEhTUiBzdGFuZGFyZCBhc1xuICAzMjpcdFx0ICBkZXNjcmliZWQgaW4gSUVDIDYyNDM5LTM6MjAxMCAoSFNSdjApIGFuZCBJRUMgNjI0MzktMzoyMDEyIChIU1J2MSksXG4gIDMzOlx0XHQgIGFuZCBQUlAgc3RhbmRhcmQgZGVzY3JpYmVkIGluIElFQyA2MjQzOS00OjIwMTIgKFBSUCksIGJ1dCBub1xuICAzNDpcdFx0ICBjb21wbGlhbmN5IHRlc3RzIGhhdmUgYmVlbiBtYWRlLiBVc2UgaXByb3V0ZTIgdG8gc2VsZWN0IHRoZSBwcm90b2NvbFxuICAzNTpcdFx0ICB5b3Ugd291bGQgbGlrZSB0byB1c2UuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIFlvdSBuZWVkIHRvIHBlcmZvcm0gYW55IGFuZCBhbGwgbmVjZXNzYXJ5IHRlc3RzIHlvdXJzZWxmIGJlZm9yZVxuICAzODpcdFx0ICByZWx5aW5nIG9uIHRoaXMgY29kZSBpbiBhIHNhZmV0eSBjcml0aWNhbCBzeXN0ZW0hXG4gIDM5Olx0XG4gIDQwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDQxOlx0XG4gIDQyOlx0aWYgSFNSXG4gIDQzOlx0XG4gIDQ0Olx0Y29uZmlnIFBSUF9EVVBfRElTQ0FSRF9LVU5JVF9URVNUXG4gIDQ1Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUlAgZHVwbGljYXRlIGRpc2NhcmQgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA0NjpcdFx0ZGVwZW5kcyBvbiBLVU5JVFxuICA0NzpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgNDg6XHRcdGhlbHBcbiAgNDk6XHRcdCAgQ292ZXJzIHRoZSBQUlAgZHVwbGljYXRlIGRpc2NhcmQgYWxnb3JpdGhtLlxuICA1MDpcdFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcbiAgNTE6XHRcdCAgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvbiBidWlsZC5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCBwbGVhc2UgcmVmZXJcbiAgNTQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvLlxuICA1NTpcdFxuICA1NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA1NzpcdFxuICA1ODpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjQ4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIEhTUioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIEkgb25seSBuZWVkIHRoZSBgSFNSYCBjb25maWd1cmF0aW9uIGZvciB0aGlzIHJvdW5kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcsIHNvIEkmIzM5O2xsIHNjYW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSBmdXp6YWJsZSBmdW5jdGlvbnMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGBoc3JfZGV2X2ZpbmFsaXplYCBpcyBjYWxsZWQgYnkgYGhzcl9uZXdsaW5rYCwgYW5kIGBoc3JfYWRkX25vZGVgIGlzIGNhbGxlZCBieSBgaHNyX2dldF9ub2RlYC4gRnVydGhlciwgYGhzcl9nZXRfbm9kZWAgaXMgYSBkZXBlbmRlbmN5IG9mIGJvdGggYGhzcl9mb3J3YXJkX2RvYCBhbmQgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYC4gVGhpcyBnZXRzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGBmaWxsX2ZyYW1lX2luZm9gIGlzIGFsc28gY2FsbGVkIGJ5IGBoc3JfZm9yd2FyZF9kb2AsIGFuZCBzbyBpcyBgaHNyX2Ryb3BfZnJhbWVgLgoKQmFzZWQgb24gdGhvc2UgY2FsbCBncmFwaHMsIGl0JiMzOTtzIGNsZWFyIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyB0byBmdXp6IGFyZToKCiogICBgaHNyX25ld2xpbmtgCiogICBgaHNyX2ZvcndhcmRfZG9gICh3aGljaCBpcyBhIHJlYWwgcmFiYml0IGhvbGUsIGNhbGxpbmcgYGhzcl9kcm9wX2ZyYW1lYCwgYGZpbGxfZnJhbWVfaW5mb2AsIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAsIGBwcnBfZHJvcF9mcmFtZWAsIGFuZCBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGApLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBwcnBgIGZ1bmN0aW9ucyB0b28uCiogICBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgCgpUaW1lIHRvIGRpZyBpbnRvIGBoc3JfZm9yd2FyZF9kb2AgYW5kIHNlZSB3aGF0IGl0IGV4cGVjdHMuIFRoaXMgbG9va3MgbGlrZSB0aGUgbWFpbiB0YXJnZXQgZm9yIGluaXRpYWwgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2ZvcndhcmRfZG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDc2PWJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy01NDMtICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NTQ0OnN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNTQ1LXtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NzcxPXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc5LVx0aHNyX3JlZ2lzdGVyX2ZyYW1lX2luKGZyYW1lLm5vZGVfc3JjLCBwb3J0LCBmcmFtZS5zZXF1ZW5jZV9ucik7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzgwOlx0aHNyX2ZvcndhcmRfZG8oXHUwMDI2ZnJhbWUpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc4MS1cdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzExMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgY29kZSBzbmlwcGV0LCBkZWxpdmVyZWQgYXMgaWYgaXQmIzM5O3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqSW5jb21pbmcgUGFja2V0IFByb2Nlc3Npbmc6IFRoZSBgaHNyX2ZvcndhcmRfc2tiYCBQZXJzcGVjdGl2ZSoqCgpBbHJpZ2h0LCBzbyAqdGhpcyogaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgZmlyc3QgcGxhY2UgbXkgYXR0ZW50aW9uIGxhbmRzIHdoZW4gYSBwYWNrZXQgY29tZXMga25vY2tpbmcuICBgaHNyX2ZvcndhcmRfc2tiYCwgdGhhdCYjMzk7cyB0aGUga2V5LiAgSXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgaW4gdGhlIHdob2xlIHByb2Nlc3Mgb2YgcmVjZWl2aW5nIHRoaXMgdGhpbmcuIFRoZSBjb2RlIGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8ga2ljayBldmVyeXRoaW5nIG9mZi4gSSBuZWVkIHRvIGtlZXAgdGhpcyBmdW5jdGlvbiBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQsIGl0JiMzOTtzIHdoZXJlIG15IGZvY3VzIGJlZ2lucyB3aGVuIGhhbmRsaW5nIG5ldyBwYWNrZXRzLiBUaGlzIGlzIGdyb3VuZCB6ZXJvLiBFdmVyeXRoaW5nIGZ1bm5lbHMgdGhyb3VnaCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoc3JfZm9yd2FyZF9za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz0yMjQ9c3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNS1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbm5ldC9oc3IvaHNyX2RldmljZS5jOjIzNjpcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNy1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTI5Mz1zdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzYzLVxubmV0L2hzci9oc3JfZGV2aWNlLmM6MzY0Olx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0zNjUtXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmM9MzY5PXN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTQzMS1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjQzMjpcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MzMtXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTcwMT1zdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzAtLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3NzE6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3Mi17XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE1LVxubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE2OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTctc3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYz0yND1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgwLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xubmV0L2hzci9oc3Jfc2xhdmUuYzo4MTpcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgyLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgzLVx0fSBlbHNlIHtcbm5ldC9oc3IvaHNyX3NsYXZlLmM6ODQ6XHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3Jfc2xhdmUuYy04NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMzUKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogNTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhTUi9QUlAgUFJQLVNBTiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyBteSBicmVha2Rvd24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBoc3JfZGV2X3htaXRgIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0aGlzIHdob2xlIHRoaW5nLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gZW5hYmxpbmcgUFJQIFJlZEJveCBmdW5jdGlvbmFsaXR5IChQUlAtU0FOKSB3aXRoaW4gdGhlIGV4aXN0aW5nIEhTUi9QUlAgc3Vic3lzdGVtLiBJJiMzOTt2ZSBwaW5wb2ludGVkIGEgZmV3IGNydWNpYWwgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGFzIGEgZGlyZWN0IHJlc3VsdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBmb3IgbXkgZnV6emluZyBzdHJhdGVneS4KCkkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYGhzcl9uZXdsaW5rYCwgYHBycF9kcm9wX2ZyYW1lYCwgYW5kIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YC4gSSYjMzk7dmUgaW5jbHVkZWQgYGhzcl9uZXdsaW5rYCBiZWNhdXNlLCB3aGlsZSBpdCBjYWxscyBgaHNyX2Rldl9maW5hbGl6ZWAsIGl0IHJlcHJlc2VudHMgYSBiZXR0ZXIgcG9pbnQgb2YgZW50cnkuIFdoaWxlIGBmaWxsX2ZyYW1lX2luZm9gIGFuZCBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGAgYXJlIHRlY2huaWNhbGx5IGhvdC1wYXRoLCBJJiMzOTt2ZSBlbGVjdGVkIHRvIGluY2x1ZGUgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgIGFzIGEgZm9jdXMgc3ltYm9sIGFzIHRoZSBtb2RpZmljYXRpb24gaXMgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4KCkkmIzM5O3ZlIGNvbnNpZGVyZWQgb3RoZXIgZnVuY3Rpb25zIGFzIHdlbGwsIGZvciBleGFtcGxlIGBmaWxsX2ZyYW1lX2luZm9gIHdoaWNoIGdldHMgY2FsbGVkIGJ5IGBoc3JfZm9yd2FyZF9za2JgLCBhbmQgaXMgaG90IHBhdGguIEkgZGVjaWRlZCBhZ2FpbnN0IGluY2x1ZGluZyB0aGlzIGZ1bmN0aW9uLCBhbmQgYHBycF9kcm9wX2ZyYW1lYCwgYmVjYXVzZSB0aGUgbW9kaWZpY2F0aW9uIGFwcGVhcnMgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gU2ltaWxhcmx5LCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgIGlzIG9ubHkgY2FsbGVkIGZvciBzdXBlcnZpc2lvbiBmcmFtZXMsIGFuZCBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgIGlzIGJhc2VkIG9uIGEgdGltZXIsIHNvIGl0JiMzOTtzIG5vdCBob3QtcGF0aC4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYWx0ZXJzIGhvdyBzdXBlcnZpc2lvbiBmcmFtZXMgYXJlIGdlbmVyYXRlZCwgdGhlIGNvcmUgbG9naWMgZm9yIGZvcndhcmRpbmcgZnJhbWVzLCBpbiBwYXJ0aWN1bGFyLCB0aGUgZHJvcHBpbmcgYW5kIHJlZ2lzdHJhdGlvbiwgYW5kIGFsc28gaG93IG5vZGUgc2VxdWVuY2UgaXMgaGFuZGxlZC4gVGhpcyBpcyBhbGwgdG8gYWNjb21tb2RhdGUgdGhpcyBQUlAtU0FOIGZlYXR1cmUuIEFkZGl0aW9uYWxseSwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBiZWVuIHNvbWUgZmxleGliaWxpdHkgYWRkZWQgaW4gaG93IGludGVybGluayB3b3JrcywgcmVtb3ZpbmcgYSBwcmV2aW91cyBuZXRsaW5rIHNldHVwIHJlc3RyaWN0aW9uIHdpdGggSFNSLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaGFzIHNlcmlvdXMgaW1wbGljYXRpb25zIGZvciB0aGUgbmV0d29yayBzdGFjaywgc28gZnV6emluZyBpcyBkZWZpbml0ZWx5IHRoZSB3YXkgdG8gZ28uCgpUaGUgb25seSByZWxldmFudCBjb25maWcgdGhhdCBJIGNhbiBzZWUgaXMgYEhTUmAuCgpTbywgdGhlIGtleSBlbGVtZW50cyB0byB0YXJnZXQgZm9yIGZ1enppbmcgYXJlOiBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgLCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgLCBgaHNyX25ld2xpbmtgLCBgcHJwX2Ryb3BfZnJhbWVgLCBhbmQgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgLiBUaW1lIHRvIHNldCB0aGUgcmVzdWx0cyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfc3VwX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9uZXdsaW5rJiMzNDssCiAgICAmIzM0O3BycF9kcm9wX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9yZWdpc3Rlcl9mcmFtZV9vdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBQUlAgUmVkQm94IChQUlAtU0FOKSBpbiB0aGUgSFNSL1BSUCBzdWJzeXN0ZW0uIEl0IG1vZGlmaWVzIHN1cGVydmlzaW9uIGZyYW1lIGdlbmVyYXRpb24sIGZyYW1lIGZvcndhcmRpbmcgbG9naWMgKGRyb3BwaW5nIGFuZCByZWdpc3RlcmluZyksIGFuZCBub2RlIHNlcXVlbmNlIGhhbmRsaW5nIHRvIHN1cHBvcnQgdGhlIG5ldyBmZWF0dXJlLiBJdCBhbHNvIHJlbW92ZXMgdGhlIHJlc3RyaWN0aW9uIHRoYXQgaW50ZXJsaW5rIG9ubHkgd29ya3Mgd2l0aCBIU1IgaW4gbmV0bGluayBzZXR1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBuZXR3b3JrIHN0YWNrIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2hhbmRsZV9zdXBfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX25ld2xpbmsmIzM0OywKICAgICYjMzQ7cHJwX2Ryb3BfZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX3JlZ2lzdGVyX2ZyYW1lX291dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFBSUCBSZWRCb3ggKFBSUC1TQU4pIGluIHRoZSBIU1IvUFJQIHN1YnN5c3RlbS4gSXQgbW9kaWZpZXMgc3VwZXJ2aXNpb24gZnJhbWUgZ2VuZXJhdGlvbiwgZnJhbWUgZm9yd2FyZGluZyBsb2dpYyAoZHJvcHBpbmcgYW5kIHJlZ2lzdGVyaW5nKSwgYW5kIG5vZGUgc2VxdWVuY2UgaGFuZGxpbmcgdG8gc3VwcG9ydCB0aGUgbmV3IGZlYXR1cmUuIEl0IGFsc28gcmVtb3ZlcyB0aGUgcmVzdHJpY3Rpb24gdGhhdCBpbnRlcmxpbmsgb25seSB3b3JrcyB3aXRoIEhTUiBpbiBuZXRsaW5rIHNldHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldHdvcmsgc3RhY2sgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTc6MzYuNzE5MTUzNDcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4OTY5Nzk2MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lXCIsXG4gICAgXCJoc3JfaGFuZGxlX3N1cF9mcmFtZVwiLFxuICAgIFwiaHNyX25ld2xpbmtcIixcbiAgICBcInBycF9kcm9wX2ZyYW1lXCIsXG4gICAgXCJwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBQUlAgUmVkQm94IChQUlAtU0FOKSBpbiB0aGUgSFNSL1BSUCBzdWJzeXN0ZW0uIEl0IG1vZGlmaWVzIHN1cGVydmlzaW9uIGZyYW1lIGdlbmVyYXRpb24sIGZyYW1lIGZvcndhcmRpbmcgbG9naWMgKGRyb3BwaW5nIGFuZCByZWdpc3RlcmluZyksIGFuZCBub2RlIHNlcXVlbmNlIGhhbmRsaW5nIHRvIHN1cHBvcnQgdGhlIG5ldyBmZWF0dXJlLiBJdCBhbHNvIHJlbW92ZXMgdGhlIHJlc3RyaWN0aW9uIHRoYXQgaW50ZXJsaW5rIG9ubHkgd29ya3Mgd2l0aCBIU1IgaW4gbmV0bGluayBzZXR1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBuZXR3b3JrIHN0YWNrIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTc6MzYuNzE5MTYwMTUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzEyMjk0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZWI5OTY3Y2YxMDEwODUyODNmOWIzODNmOTgyZTg0ZWQxOWM1YTgzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDYgMTk6NTc6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4wOTczZjlhOTRmNGQ0OCAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbisrKyBiL25ldC9oc3IvaHNyX2RldmljZS5jXFxuQEAgLTM3MiwxMCArMzcyLDIxIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbiB7XFxuIFxcdHN0cnVjdCBoc3JfcHJpdiAqaHNyID0gbWFzdGVyLVxcdTAwM2Voc3I7XFxuIFxcdHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQgKmhzcl9zcDtcXG4rXFx0c3RydWN0IGhzcl9zdXBfdGx2ICpoc3Jfc3RsdjtcXG4gXFx0c3RydWN0IGhzcl9zdXBfdGFnICpoc3Jfc3RhZztcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0Ym9vbCByZWRib3hfcHJveHk7XFxuK1xcdGludCBleHRyYSA9IDA7XFxuIFxcbi1cXHRza2IgPSBoc3JfaW5pdF9za2IobWFzdGVyLCAwKTtcXG4rXFx0cmVkYm94X3Byb3h5ID0gaHNyLVxcdTAwM2VyZWRib3ggXFx1MDAyNlxcdTAwMjYgbWFzdGVyLVxcdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTks7XFxuK1xcbitcXHQvKiBBIHByb3h5LWFubm91bmNlIGNhcnJpZXMgYSBSZWRCb3gtTUFDIFRMViBhbmQgYW4gRU9UIG1hcmtlci4gKi9cXG4rXFx0aWYgKHJlZGJveF9wcm94eSlcXG4rXFx0XFx0ZXh0cmEgPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KSArXFxuK1xcdFxcdFxcdHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSArXFxuK1xcdFxcdFxcdHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpO1xcbitcXG4rXFx0c2tiID0gaHNyX2luaXRfc2tiKG1hc3RlciwgZXh0cmEpO1xcbiBcXHRpZiAoIXNrYikge1xcbiBcXHRcXHRuZXRkZXZfd2Fybl9vbmNlKG1hc3Rlci1cXHUwMDNlZGV2LCBcXFwiUFJQOiBDb3VsZCBub3Qgc2VuZCBzdXBlcnZpc2lvbiBmcmFtZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMzkzLDkgKzQwNCwyNSBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XFxuIFxcdGhzcl9zdGFnLVxcdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XFxuIFxcbi1cXHQvKiBQYXlsb2FkOiBNYWNBZGRyZXNzQSAqL1xcbitcXHQvKiBQYXlsb2FkOiBNYWNBZGRyZXNzQSwgdGhlIGFubm91bmNlZCBub2RlLiAqL1xcbiBcXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcXG4tXFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbitcXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVxcdTAwM2VtYWNhZGRyZXNzX0EsIGFkZHIpO1xcbitcXG4rXFx0LyogUHJveHktYW5ub3VuY2U6IGFwcGVuZCB0aGUgUmVkQm94LU1BQyBUTFYgKFR5cGUgMzApIGFuZCBhbiBleHBsaWNpdFxcbitcXHQgKiBFT1QgdG8gdGVybWluYXRlIHRoZSBUTFYgY2hhaW4gYmVmb3JlIHplcm8gcGFkZGluZy5cXG4rXFx0ICovXFxuK1xcdGlmIChyZWRib3hfcHJveHkpIHtcXG4rXFx0XFx0aHNyX3N0bHYgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3RsdikpO1xcbitcXHRcXHRoc3Jfc3Rsdi1cXHUwMDNlSFNSX1RMVl90eXBlID0gUFJQX1RMVl9SRURCT1hfTUFDO1xcbitcXHRcXHRoc3Jfc3Rsdi1cXHUwMDNlSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XFxuK1xcbitcXHRcXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcXG4rXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cXHUwMDNlbWFjYWRkcmVzc19BLCBoc3ItXFx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcXG4rXFxuK1xcdFxcdGhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTtcXG4rXFx0XFx0aHNyX3N0bHYtXFx1MDAzZUhTUl9UTFZfdHlwZSA9IEhTUl9UTFZfRU9UO1xcbitcXHRcXHRoc3Jfc3Rsdi1cXHUwMDNlSFNSX1RMVl9sZW5ndGggPSAwO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG5AQCAtNzY4LDYgKzc5NSwxNSBAQCBpbnQgaHNyX2Rldl9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlWzJdLFxcbiBcXHQvKiBNYWtlIHN1cmUgdGhlIDFzdCBjYWxsIHRvIG5ldGlmX2NhcnJpZXJfb24oKSBnZXRzIHRocm91Z2ggKi9cXG4gXFx0bmV0aWZfY2Fycmllcl9vZmYoaHNyX2Rldik7XFxuIFxcbitcXHQvKiBQdWJsaXNoIHRoZSBSZWRCb3ggc3RhdGUgYmVmb3JlIGFueSBwb3J0IGlzIGF0dGFjaGVkOiB0aGUgcnhcXG4rXFx0ICogaGFuZGxlcnMgYXJlIGxpdmUgZnJvbSBoc3JfYWRkX3BvcnQoKSBvbiwgYW5kIGhzcl9hZGRfbm9kZSgpXFxuK1xcdCAqIHNpemVzIGVhY2ggbm9kZSdzIHBlci1wb3J0IHNlcXVlbmNlIHN0YXRlIGZyb20gaHNyLVxcdTAwM2VyZWRib3guXFxuK1xcdCAqL1xcbitcXHRpZiAoaW50ZXJsaW5rKSB7XFxuK1xcdFxcdGhzci1cXHUwMDNlcmVkYm94ID0gdHJ1ZTtcXG4rXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGhzci1cXHUwMDNlbWFjYWRkcmVzc19yZWRib3gsIGludGVybGluay1cXHUwMDNlZGV2X2FkZHIpO1xcbitcXHR9XFxuK1xcbiBcXHRyZXMgPSBoc3JfYWRkX3BvcnQoaHNyLCBoc3JfZGV2LCBIU1JfUFRfTUFTVEVSLCBleHRhY2spO1xcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRnb3RvIGVycl9hZGRfbWFzdGVyO1xcbkBAIC04MDUsOCArODQxLDYgQEAgaW50IGhzcl9kZXZfZmluYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZVsyXSxcXG4gXFx0XFx0aWYgKHJlcylcXG4gXFx0XFx0XFx0Z290byBlcnJfdW5yZWdpc3RlcjtcXG4gXFxuLVxcdFxcdGhzci1cXHUwMDNlcmVkYm94ID0gdHJ1ZTtcXG4tXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGhzci1cXHUwMDNlbWFjYWRkcmVzc19yZWRib3gsIGludGVybGluay1cXHUwMDNlZGV2X2FkZHIpO1xcbiBcXHRcXHRtb2RfdGltZXIoXFx1MDAyNmhzci1cXHUwMDNlcHJ1bmVfcHJveHlfdGltZXIsXFxuIFxcdFxcdFxcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUFJVTkVfUFJPWFlfUEVSSU9EKSk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXFxuaW5kZXggMDc3NDk4MWE2NWMxNjQuLmVmY2QwYWNlZjM4YzhiIDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbkBAIC00NDAsMTIgKzQ0MCwzNyBAQCBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4gXFx0cmV0dXJuIGRldl9xdWV1ZV94bWl0KHNrYik7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIHBycF9pc19sYW5fZHVwKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4re1xcbitcXHRlbnVtIGhzcl9wb3J0X3R5cGUgcnggPSBmcmFtZS1cXHUwMDNlcG9ydF9yY3YtXFx1MDAzZXR5cGU7XFxuK1xcbitcXHRyZXR1cm4gKHJ4ID09IEhTUl9QVF9TTEFWRV9BIFxcdTAwMjZcXHUwMDI2IHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0IpIHx8XFxuK1xcdCAgICAgICAocnggPT0gSFNSX1BUX1NMQVZFX0IgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSk7XFxuK31cXG4rXFxuIGJvb2wgcHJwX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbiB7XFxuLVxcdHJldHVybiAoKGZyYW1lLVxcdTAwM2Vwb3J0X3Jjdi1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgfHxcXG4tXFx0XFx0KGZyYW1lLVxcdTAwM2Vwb3J0X3Jjdi1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQiBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSkpO1xcbitcXHRlbnVtIGhzcl9wb3J0X3R5cGUgcnggPSBmcmFtZS1cXHUwMDNlcG9ydF9yY3YtXFx1MDAzZXR5cGU7XFxuK1xcbitcXHQvKiBTdXBlcnZpc2lvbiBmcmFtZXMgYXJlIG5vdCBkZWxpdmVyZWQgdG8gYSBTQU4gb24gdGhlIGludGVybGluay4gKi9cXG4rXFx0aWYgKGZyYW1lLVxcdTAwM2Vpc19zdXBlcnZpc2lvbiBcXHUwMDI2XFx1MDAyNiBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aWYgKHBycF9pc19sYW5fZHVwKGZyYW1lLCBwb3J0KSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHQvKiBMQU4gdG8gaW50ZXJsaW5rOiBrZWVwIFBSUC1uZXR3b3JrIHVuaWNhc3Qgb2ZmIHRoZSBTQU4gc2VnbWVudC4gKi9cXG4rXFx0aWYgKChyeCA9PSBIU1JfUFRfU0xBVkVfQSB8fCByeCA9PSBIU1JfUFRfU0xBVkVfQikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSylcXG4rXFx0XFx0cmV0dXJuIGZyYW1lLVxcdTAwM2Vkc3RfaW5fbm9kZV9kYjtcXG4rXFxuK1xcdC8qIEludGVybGluayB0byBMQU46IGtlZXAgU0FOLXRvLVNBTiB1bmljYXN0IGxvY2FsLiAqL1xcbitcXHRpZiAoKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EgfHwgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJ4ID09IEhTUl9QVF9JTlRFUkxJTkspXFxuK1xcdFxcdHJldHVybiBmcmFtZS1cXHUwMDNlZHN0X2luX3Byb3h5X25vZGVfZGI7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuIGJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbkBAIC00NTMsNyArNDc4LDcgQEAgYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbiBcXHRpZiAocG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfSFNSX0ZXRClcXG4tXFx0XFx0cmV0dXJuIHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KTtcXG4rXFx0XFx0cmV0dXJuIHBycF9pc19sYW5fZHVwKGZyYW1lLCBwb3J0KTtcXG4gXFxuIFxcdC8qIFJlZEJveCBzcGVjaWZpYyBmcmFtZXMgZHJvcHBpbmcgcG9saWNpZXNcXG4gXFx0ICpcXG5AQCAtNDY2LDcgKzQ5MSw3IEBAIGJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbiBcXHQgKiBhcmUgYWRkcmVzc2VkIHRvIGludGVybGluayBwb3J0IChhbmQgYXJlIGluIHRoZSBQcm94eU5vZGVUYWJsZSkuXFxuIFxcdCAqL1xcbiBcXHRza2IgPSBmcmFtZS1cXHUwMDNlc2tiX2hzcjtcXG4tXFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiBwcnBfZHJvcF9mcmFtZShmcmFtZSwgcG9ydCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiBwcnBfaXNfbGFuX2R1cChmcmFtZSwgcG9ydCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGlzX3VuaWNhc3RfZXRoZXJfYWRkcihldGhfaGRyKHNrYiktXFx1MDAzZWhfZGVzdCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGhzcl9pc19ub2RlX2luX2RiKFxcdTAwMjZwb3J0LVxcdTAwM2Voc3ItXFx1MDAzZXByb3h5X25vZGVfZGIsXFxuIFxcdFxcdFxcdCAgICAgIGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9kZXN0KSkge1xcbkBAIC03MDYsNiArNzMxLDE4IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuIFxcdGZyYW1lLVxcdTAwM2Vpc192bGFuID0gZmFsc2U7XFxuIFxcdHByb3RvID0gZXRoaGRyLVxcdTAwM2VoX3Byb3RvO1xcbiBcXG4rXFx0LyogUFJQIFJlZEJveCBvbmx5OiBjbGFzc2lmeSB0aGUgdW5pY2FzdCBkZXN0aW5hdGlvbiBvbmNlIHNvIHRoZVxcbitcXHQgKiBwZXItZWdyZXNzLXBvcnQgZGVjaXNpb24gaW4gcHJwX2Ryb3BfZnJhbWUoKSBzdGF5cyBPKDEpLiBIU1IgUmVkQm94XFxuK1xcdCAqIGRvZXMgaXRzIG93biBjbGFzc2lmaWNhdGlvbiBhbmQgbXVzdCBub3QgcGF5IHRoZXNlIG5vZGUtdGFibGUgd2Fsa3MuXFxuK1xcdCAqL1xcbitcXHRpZiAoaHNyLVxcdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxIFxcdTAwMjZcXHUwMDI2IGhzci1cXHUwMDNlcmVkYm94IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpc191bmljYXN0X2V0aGVyX2FkZHIoZXRoaGRyLVxcdTAwM2VoX2Rlc3QpKSB7XFxuK1xcdFxcdGZyYW1lLVxcdTAwM2Vkc3RfaW5fbm9kZV9kYiA9XFxuK1xcdFxcdFxcdGhzcl9pc19ub2RlX2luX2RiKFxcdTAwMjZoc3ItXFx1MDAzZW5vZGVfZGIsIGV0aGhkci1cXHUwMDNlaF9kZXN0KTtcXG4rXFx0XFx0ZnJhbWUtXFx1MDAzZWRzdF9pbl9wcm94eV9ub2RlX2RiID1cXG4rXFx0XFx0XFx0aHNyX2lzX25vZGVfaW5fZGIoXFx1MDAyNmhzci1cXHUwMDNlcHJveHlfbm9kZV9kYiwgZXRoaGRyLVxcdTAwM2VoX2Rlc3QpO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfODAyMVEpKVxcbiBcXHRcXHRmcmFtZS1cXHUwMDNlaXNfdmxhbiA9IHRydWU7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuY1xcbmluZGV4IGU0NDkyOTg3MTI3NDQ1Li5iM2IxMDZiZTY5MmVhZiAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jXFxuKysrIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuY1xcbkBAIC0xOTksNyArMTk5LDcgQEAgc3RhdGljIHN0cnVjdCBoc3Jfbm9kZSAqaHNyX2FkZF9ub2RlKHN0cnVjdCBoc3JfcHJpdiAqaHNyLFxcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bmV3X25vZGUtXFx1MDAzZXNlcV9vdXRfbG9jayk7XFxuIFxcbiBcXHRpZiAoaHNyLVxcdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxKVxcbi1cXHRcXHRuZXdfbm9kZS1cXHUwMDNlc2VxX3BvcnRfY250ID0gMTtcXG4rXFx0XFx0bmV3X25vZGUtXFx1MDAzZXNlcV9wb3J0X2NudCA9IGhzci1cXHUwMDNlcmVkYm94ID8gMiA6IDE7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bmV3X25vZGUtXFx1MDAzZXNlcV9wb3J0X2NudCA9IEhTUl9QVF9QT1JUUyAtIDE7XFxuIFxcbkBAIC0yOTMsOCArMjkzLDE3IEBAIHN0cnVjdCBoc3Jfbm9kZSAqaHNyX2dldF9ub2RlKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9kYixcXG4gXFx0ICovXFxuIFxcdGlmIChldGhoZHItXFx1MDAzZWhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfUFJQKSB8fFxcbiBcXHQgICAgZXRoaGRyLVxcdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX0hTUikpIHtcXG4tXFx0XFx0LyogQ2hlY2sgaWYgc2tiIGNvbnRhaW5zIGhzcl9ldGhoZHIgKi9cXG4tXFx0XFx0aWYgKHNrYi1cXHUwMDNlbWFjX2xlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgaHNyX2V0aGhkcikpXFxuK1xcdFxcdGJvb2wgcHJwX3N1cDtcXG4rXFxuK1xcdFxcdC8qIEEgUFJQIHN1cGVydmlzaW9uIGZyYW1lIGlzIGFuIHVudGFnZ2VkIEVUSF9QX1BSUCBmcmFtZVxcbitcXHRcXHQgKiAobWFjX2xlbiA9PSBFVEhfSExFTik7IGl0cyBSQ1QgaXMgYXBwZW5kZWQgb25seSBvbiBlZ3Jlc3MuXFxuK1xcdFxcdCAqIEhTUiAoRVRIX1BfSFNSKSBzdXBlcnZpc2lvbiBpcyBmcm9udC10YWdnZWQgYW5kIHN0aWxsIG11c3RcXG4rXFx0XFx0ICogY29udGFpbiBhIHN0cnVjdCBoc3JfZXRoaGRyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cHJwX3N1cCA9IGhzci1cXHUwMDNlcHJvdF92ZXJzaW9uID09IFBSUF9WMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgIGV0aGhkci1cXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9QUlApIFxcdTAwMjZcXHUwMDI2IGlzX3N1cDtcXG4rXFxuK1xcdFxcdGlmICghcHJwX3N1cCBcXHUwMDI2XFx1MDAyNiBza2ItXFx1MDAzZW1hY19sZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IGhzcl9ldGhoZHIpKVxcbiBcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0cmN0ID0gc2tiX2dldF9QUlBfcmN0KHNrYik7XFxuQEAgLTM4MSw2ICszOTAsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuIFxcdHN0cnVjdCBldGhoZHIgKmV0aGhkcjtcXG4gXFx0dW5zaWduZWQgaW50IHRvdGFsX3B1bGxfc2l6ZSA9IDA7XFxuIFxcdHVuc2lnbmVkIGludCBwdWxsX3NpemUgPSAwO1xcbitcXHR1bnNpZ25lZCBpbnQgc2VxX3BvcnRfY250O1xcbiBcXHR1bnNpZ25lZCBsb25nIGlkeDtcXG4gXFx0aW50IGk7XFxuIFxcbkBAIC00NzQsNiArNDg0LDcgQEAgdm9pZCBoc3JfaGFuZGxlX3N1cF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdHNlcV9wb3J0X2NudCA9IG1pbihub2RlX3JlYWwtXFx1MDAzZXNlcV9wb3J0X2NudCwgbm9kZV9jdXJyLVxcdTAwM2VzZXFfcG9ydF9jbnQpO1xcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2bm9kZV9jdXJyLVxcdTAwM2VzZXFfYmxvY2tzLCBpZHgsIHNyY19ibGspIHtcXG4gXFx0XFx0aWYgKGhzcl9zZXFfYmxvY2tfaXNfb2xkKHNyY19ibGspKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtNDgyLDcgKzQ5Myw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG4gXFx0XFx0aWYgKCFtZXJnZV9ibGspXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRtZXJnZV9ibGstXFx1MDAzZXRpbWUgPSBtaW4obWVyZ2VfYmxrLVxcdTAwM2V0aW1lLCBzcmNfYmxrLVxcdTAwM2V0aW1lKTtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5vZGVfcmVhbC1cXHUwMDNlc2VxX3BvcnRfY250OyBpKyspIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNlcV9wb3J0X2NudDsgaSsrKSB7XFxuIFxcdFxcdFxcdGJpdG1hcF9vcihtZXJnZV9ibGstXFx1MDAzZXNlcV9ucnNbaV0sIG1lcmdlX2Jsay1cXHUwMDNlc2VxX25yc1tpXSxcXG4gXFx0XFx0XFx0XFx0ICBzcmNfYmxrLVxcdTAwM2VzZXFfbnJzW2ldLCBIU1JfU0VRX0JMT0NLX1NJWkUpO1xcbiBcXHRcXHR9XFxuQEAgLTY0OSw5ICs2NjAsMTMgQEAgaW50IHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbiBcXHRpZiAoZnJhbWUtXFx1MDAzZXBvcnRfcmN2LVxcdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0LyogZm9yIFBSUCB3ZSBzaG91bGQgb25seSBmb3J3YXJkIGZyYW1lcyBmcm9tIHRoZSBzbGF2ZSBwb3J0c1xcbi1cXHQgKiB0byB0aGUgbWFzdGVyIHBvcnRcXG4rXFx0LyogUmVkQm94OiBmb3J3YXJkIExBTiBmcmFtZXMgb3V0IHRoZSBpbnRlcmxpbmsgdG8gYSBTQU4sIGRlZHVwaW5nIHRoZVxcbitcXHQgKiB0d28gTEFOIGNvcGllcyBvbiBhIGRlZGljYXRlZCBzbG90LlxcbiBcXHQgKi9cXG4rXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSylcXG4rXFx0XFx0cmV0dXJuIGhzcl9jaGVja19kdXBsaWNhdGUoZnJhbWUsIDEpO1xcbitcXG4rXFx0LyogRm9yIFBSUCBvbmx5IHNsYXZlLXRvLW1hc3RlciBmcmFtZXMgYXJlIGZvcndhcmRlZC4gKi9cXG4gXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgIT0gSFNSX1BUX01BU1RFUilcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxcbmluZGV4IGM2NWVjYjkyNTczNDg5Li4xMjdhM2ZiNjRkNWYwMyAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oXFxuKysrIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxcbkBAIC0yNyw2ICsyNyw4IEBAIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyB7XFxuIFxcdGJvb2wgaXNfbG9jYWxfZGVzdDtcXG4gXFx0Ym9vbCBpc19sb2NhbF9leGNsdXNpdmU7XFxuIFxcdGJvb2wgaXNfZnJvbV9zYW47XFxuK1xcdGJvb2wgZHN0X2luX25vZGVfZGI7XFxuK1xcdGJvb2wgZHN0X2luX3Byb3h5X25vZGVfZGI7XFxuIH07XFxuIFxcbiB2b2lkIGhzcl9kZWxfc2VsZl9ub2RlKHN0cnVjdCBoc3JfcHJpdiAqaHNyKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbWFpbi5oIGIvbmV0L2hzci9oc3JfbWFpbi5oXFxuaW5kZXggMTM0ZTRmM2ZmZjYwMzYuLmMyN2NmZGQ5Y2EzZmE4IDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX21haW4uaFxcbisrKyBiL25ldC9oc3IvaHNyX21haW4uaFxcbkBAIC0yMTEsNyArMjExLDcgQEAgc3RydWN0IGhzcl9wcml2IHtcXG4gXFx0XFx0XFx0XFx0ICovXFxuIFxcdGJvb2wgZndkX29mZmxvYWRlZDtcXHQvKiBGb3J3YXJkaW5nIG9mZmxvYWRlZCB0byBIVyAqL1xcbiBcXHRib29sIHJlZGJveDsgICAgICAgICAgICAvKiBEZXZpY2Ugc3VwcG9ydHMgSFNSIFJlZEJveCAqL1xcbi1cXHR1bnNpZ25lZCBjaGFyXFx0XFx0bWFjYWRkcmVzc19yZWRib3hbRVRIX0FMRU5dO1xcbitcXHR1bnNpZ25lZCBjaGFyXFx0bWFjYWRkcmVzc19yZWRib3hbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XFxuIFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRzdXBfbXVsdGljYXN0X2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XFxuIFxcdFxcdFxcdFxcdC8qIEFsaWduIHRvIHUxNiBib3VuZGFyeSB0byBhdm9pZCB1bmFsaWduZWQgYWNjZXNzXFxuIFxcdFxcdFxcdFxcdCAqIGluIGV0aGVyX2FkZHJfZXF1YWxcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbmV0bGluay5jIGIvbmV0L2hzci9oc3JfbmV0bGluay5jXFxuaW5kZXggODA5OWYyMDY5YTc0OGUuLjg4OTQwZTgwMTRiMjRmIDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX25ldGxpbmsuY1xcbisrKyBiL25ldC9oc3IvaHNyX25ldGxpbmsuY1xcbkBAIC0xMjEsMTQgKzEyMSw4IEBAIHN0YXRpYyBpbnQgaHNyX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAocHJvdG8gPT0gSFNSX1BST1RPQ09MX1BSUCkge1xcbitcXHRpZiAocHJvdG8gPT0gSFNSX1BST1RPQ09MX1BSUClcXG4gXFx0XFx0cHJvdG9fdmVyc2lvbiA9IFBSUF9WMTtcXG4tXFx0XFx0aWYgKGludGVybGluaykge1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBcXFwiSW50ZXJsaW5rIG9ubHkgd29ya3Mgd2l0aCBIU1JcXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGhzcl9kZXZfZmluYWxpemUoZGV2LCBsaW5rLCBpbnRlcmxpbmssIG11bHRpY2FzdF9zcGVjLFxcbiBcXHRcXHRcXHRcXHRwcm90b192ZXJzaW9uLCBleHRhY2spO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbmluZGV4IDMxZmI5MzI2Y2Y1MzNkLi4yMTUwZTQ4N2FjN2Q3ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbkBAIC00LDYgKzQsNyBAQCB0b3Bfc3JjZGlyID0gLi4vLi4vLi4vLi4vLi5cXG4gXFxuIFRFU1RfUFJPR1MgOj0gXFxcXFxcbiBcXHRoc3JfcGluZy5zaCBcXFxcXFxuK1xcdGhzcl9wcnBfcmVkYm94LnNoIFxcXFxcXG4gXFx0aHNyX3JlZGJveC5zaCBcXFxcXFxuIFxcdGxpbmtfZmF1bHRzLnNoIFxcXFxcXG4gXFx0cHJwX3Bpbmcuc2ggXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ3OWM4OTIyMjViMWYzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3BycF9yZWRib3guc2hcXG5AQCAtMCwwICsxLDk5IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIFRlc3QgYSBQUlAgUmVkQm94IChQUlAtU0FOKTogYSBTQU4gdGhhdCBzaXRzIGJlaGluZCB0aGUgaW50ZXJsaW5rIHBvcnQgbXVzdFxcbisjIHJlYWNoLCBhbmQgYmUgcmVhY2hlZCBieSwgYSBwZWVyIERBTlAgb24gdGhlIFBSUCBuZXR3b3JrIHdpdGggaXRzIG93biBNQUNcXG4rIyBwcmVzZXJ2ZWQgb24gdGhlIHdpcmUsIGFuZCB0aGUgUmVkQm94IG11c3QgYW5ub3VuY2UgdGhlIFNBTiB3aXRoIGEgUmVkQm94LU1BQ1xcbisjIFRMViAodGVybWluYXRlZCBieSBhbiBFT1QgbWFya2VyKSBpbiBpdHMgUFJQIHN1cGVydmlzaW9uIGZyYW1lcy5cXG4rI1xcbisjICAgUkIgICAgUFJQIFJlZEJveDogcHJwMCBvdmVyIHJiX2EvcmJfYiAoTEFOIEEvQikgKyBpbnRlcmxpbmsgcmJfaWxcXG4rIyAgIFBFRVIgIHBlZXIgREFOUCA6IHBycDAgb3ZlciBwZV9hL3BlX2IsIDEwMC42NC4wLjJcXG4rIyAgIFNBTiAgIFNBTiAgICAgICA6IHNhbl9pbCwgb3duIE1BQywgMTAwLjY0LjAuNTEgKGJlaGluZCB0aGUgaW50ZXJsaW5rKVxcbitcXG4raXB2Nj1mYWxzZVxcbitcXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxcbitcXG4rY2hlY2tfcHJlcmVxdWlzaXRlc1xcbitcXG4raWYgISBjb21tYW5kIC12IHRjcGR1bXAgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxOyB0aGVuXFxuK1xcdGVjaG8gXFxcIlNLSVA6IFRoaXMgdGVzdCByZXF1aXJlcyB0Y3BkdW1wXFxcIlxcbitcXHRleGl0ICRrc2Z0X3NraXBcXG4rZmlcXG4rXFxuK2lmICEgaXAgbGluayBoZWxwIGhzciAyXFx1MDAzZVxcdTAwMjYxIHwgZ3JlcCAtcSBpbnRlcmxpbms7IHRoZW5cXG4rXFx0ZWNobyBcXFwiU0tJUDogaXByb3V0ZTIgdG9vIG9sZCAobm8gaHNyIGludGVybGluayBzdXBwb3J0KVxcXCJcXG4rXFx0ZXhpdCAka3NmdF9za2lwXFxuK2ZpXFxuK1xcbitzZXR1cF9ucyBSQiBQRUVSIFNBTlxcbit0cmFwICdjbGVhbnVwX25zIFxcXCIkUkJcXFwiIFxcXCIkUEVFUlxcXCIgXFxcIiRTQU5cXFwiJyBFWElUXFxuK1xcbitpcCBsaW5rIGFkZCByYl9hIG5ldG5zIFxcXCIkUkJcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcGVfYSBuZXRucyBcXFwiJFBFRVJcXFwiXFxuK2lwIGxpbmsgYWRkIHJiX2IgbmV0bnMgXFxcIiRSQlxcXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwZV9iIG5ldG5zIFxcXCIkUEVFUlxcXCJcXG4raXAgbGluayBhZGQgcmJfaWwgbmV0bnMgXFxcIiRSQlxcXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzYW5faWwgbmV0bnMgXFxcIiRTQU5cXFwiXFxuK1xcbitpcCAtbiBcXFwiJFJCXFxcIiAgIGxpbmsgc2V0IHJiX2EgdXBcXG4raXAgLW4gXFxcIiRSQlxcXCIgICBsaW5rIHNldCByYl9iIHVwXFxuK2lwIC1uIFxcXCIkUkJcXFwiICAgbGluayBzZXQgcmJfaWwgdXBcXG4raXAgLW4gXFxcIiRQRUVSXFxcIiBsaW5rIHNldCBwZV9hIHVwXFxuK2lwIC1uIFxcXCIkUEVFUlxcXCIgbGluayBzZXQgcGVfYiB1cFxcbitpcCAtbiBcXFwiJFNBTlxcXCIgIGxpbmsgc2V0IHNhbl9pbCB1cFxcbitpcCAtbiBcXFwiJFNBTlxcXCIgIGFkZHIgYWRkIDEwMC42NC4wLjUxLzI0IGRldiBzYW5faWxcXG4rXFxuKyMgRmVhdHVyZSBnYXRlOiBQUlAgaW50ZXJsaW5rIChSZWRCb3gpIGNyZWF0aW9uLiBBIGtlcm5lbCB3aXRob3V0IFBSUCBSZWRCb3hcXG4rIyBzdXBwb3J0IHJlamVjdHMgdGhpcyB3aXRoIC1FSU5WQUwsIHNvIFNLSVAgcmF0aGVyIHRoYW4gRkFJTC5cXG4raWYgISBpcCAtbiBcXFwiJFJCXFxcIiBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHJiX2Egc2xhdmUyIHJiX2IgXFxcXFxcbisgICAgIGludGVybGluayByYl9pbCBwcm90byAxIDJcXHUwMDNlL2Rldi9udWxsOyB0aGVuXFxuK1xcdGVjaG8gXFxcIlNLSVA6IGtlcm5lbCB3aXRob3V0IFBSUCBSZWRCb3ggKGludGVybGluaykgc3VwcG9ydFxcXCJcXG4rXFx0ZXhpdCAka3NmdF9za2lwXFxuK2ZpXFxuK2lwIC1uIFxcXCIkUkJcXFwiICAgbGluayBzZXQgcHJwMCB1cFxcbitpcCAtbiBcXFwiJFBFRVJcXFwiIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgcGVfYSBzbGF2ZTIgcGVfYiBwcm90byAxXFxuK2lwIC1uIFxcXCIkUEVFUlxcXCIgbGluayBzZXQgcHJwMCB1cFxcbitpcCAtbiBcXFwiJFBFRVJcXFwiIGFkZHIgYWRkIDEwMC42NC4wLjIvMjQgZGV2IHBycDBcXG4rc2xlZXAgMVxcbitcXG4rc2FuX21hYz0kKGlwIC1uIFxcXCIkU0FOXFxcIiAtYnIgbGluayBzaG93IHNhbl9pbCB8IGF3ayAne3ByaW50ICQzfScpXFxuK3JiX21hYz0kKGlwIC1uIFxcXCIkUkJcXFwiIC1iciBsaW5rIHNob3cgcmJfaWwgfCBhd2sgJ3twcmludCAkM30nKVxcbitcXG4rIyBCaWRpcmVjdGlvbmFsIHVuaWNhc3QgYWNyb3NzIHRoZSBpbnRlcmxpbmsuXFxuK2RvX3BpbmcgXFxcIiRQRUVSXFxcIiAxMDAuNjQuMC41MVxcbitkb19waW5nIFxcXCIkU0FOXFxcIiAgMTAwLjY0LjAuMlxcbitzdG9wX2lmX2Vycm9yIFxcXCJQUlAgUmVkQm94IGJpZGlyZWN0aW9uYWwgdW5pY2FzdCBmYWlsZWRcXFwiXFxuK1xcbisjIFRoZSBTQU4gc291cmNlIE1BQyBtdXN0IGJlIHByZXNlcnZlZCBvbiB0aGUgUFJQIG5ldHdvcmssIG5vdCBsYXVuZGVyZWQgdG8gdGhlXFxuKyMgUmVkQm94IE1BQzogdGhlIHBlZXIgcmVzb2x2ZXMgdGhlIFNBTiBJUCB0byB0aGUgU0FOJ3Mgb3duIE1BQy5cXG4rbmVpZ2g9JChpcCAtbiBcXFwiJFBFRVJcXFwiIG5laWdoIHNob3cgMTAwLjY0LjAuNTEgfCBhd2sgJ3twcmludCAkNX0nKVxcbitpZiBbIFxcXCIkbmVpZ2hcXFwiICE9IFxcXCIkc2FuX21hY1xcXCIgXTsgdGhlblxcbitcXHRlY2hvIFxcXCJTQU4gTUFDIHByZXNlcnZhdGlvbiBbIEZBSUwgXTogcGVlciByZXNvbHZlZCAxMDAuNjQuMC41MSB0b1xcXCIgXFxcXFxcbitcXHQgICAgIFxcXCInJG5laWdoJywgZXhwZWN0ZWQgJHNhbl9tYWNcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0cmV0PTFcXG4rZmlcXG4rc3RvcF9pZl9lcnJvciBcXFwiU0FOIE1BQyBub3QgcHJlc2VydmVkIG9uIHRoZSBQUlAgbmV0d29ya1xcXCJcXG4rXFxuKyMgVGhlIHByb3h5LWFubm91bmNlIHN1cGVydmlzaW9uIGZyYW1lIG11c3QgY2FycnksIGluIG9yZGVyLCB0aGUgbGlmZS1jaGVjayBUTFZcXG4rIyAodHlwZSAweDE0LCBsZW4gNikgKyBNYWNBZGRyZXNzQSA9PSBTQU4gTUFDICsgdGhlIFJlZEJveC1NQUMgVExWICh0eXBlIDB4MWUsXFxuKyMgbGVuIDYpICsgTWFjQWRkcmVzc1JlZEJveCA9PSBSZWRCb3ggTUFDICsgdGhlIEVPVCBtYXJrZXIgKDB4MDAwMCkuXFxuK2lwIG5ldG5zIGV4ZWMgXFxcIiRTQU5cXFwiIHBpbmcgLWkgMC4yIC1xIDEwMC42NC4wLjIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIFxcdTAwMjZcXG4rcGluZ19waWQ9JCFcXG4rY2FwPSQoaXAgbmV0bnMgZXhlYyBcXFwiJFBFRVJcXFwiIHRpbWVvdXQgNSB0Y3BkdW1wIC1pIHBlX2EgLW5uIC14IFxcXFxcXG4rXFx0XFxcImV0aGVyIHByb3RvIDB4ODhmYiBhbmQgZXRoZXIgc3JjICRyYl9tYWNcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IHRydWUpXFxuK2tpbGwgXFxcIiRwaW5nX3BpZFxcXCIgMlxcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxcbit3YWl0IFxcXCIkcGluZ19waWRcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IHRydWVcXG4rXFxuK3Nhbl9oZXg9JChlY2hvIFxcXCIkc2FuX21hY1xcXCIgfCB0ciAtZCAnOicpXFxuK3JiX2hleD0kKGVjaG8gXFxcIiRyYl9tYWNcXFwiIHwgdHIgLWQgJzonKVxcbisjIFJlYXNzZW1ibGUgY29udGlndW91cyBmcmFtZSBoZXg6IGRyb3AgdGhlIFxcXCIweDAwMTA6XFxcIiBvZmZzZXQgbGFiZWxzIGFuZCBzcGFjZXMuXFxuK2ZyYW1lX2hleD0kKGVjaG8gXFxcIiRjYXBcXFwiIHwgYXdrICcvXltbOnNwYWNlOl1dKjB4WzAtOWEtZl0rOi8ge1xcbitcXHRzdWIoL15bWzpzcGFjZTpdXSoweFswLTlhLWZdKzpbWzpzcGFjZTpdXSovLCBcXFwiXFxcIik7XFxuK1xcdGdzdWIoLyAvLCBcXFwiXFxcIik7IHByaW50ZiBcXFwiJXNcXFwiLCAkMCB9JylcXG4raWYgISBlY2hvIFxcXCIkZnJhbWVfaGV4XFxcIiB8IGdyZXAgLXEgXFxcIjE0MDYke3Nhbl9oZXh9MWUwNiR7cmJfaGV4fTAwMDBcXFwiOyB0aGVuXFxuK1xcdGVjaG8gXFxcInN1cGVydmlzaW9uIFJlZEJveC1NQUMgVExWIFsgRkFJTCBdOiBtaXNzaW5nIFNBTiBNQUMsIFR5cGUtMzBcXFwiIFxcXFxcXG4rXFx0ICAgICBcXFwicGF5bG9hZCwgb3IgRU9UXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdHJldD0xXFxuK2ZpXFxuK3N0b3BfaWZfZXJyb3IgXFxcIlBSUCBSZWRCb3ggc3VwZXJ2aXNpb24gUmVkQm94LU1BQyBUTFYvRU9UIGNoZWNrIGZhaWxlZFxcXCJcXG4rXFxuK2VjaG8gXFxcIklORk86IFBSUCBSZWRCb3ggKFBSUC1TQU4pIGNvbmZvcm1hbmNlIGNoZWNrcyBwYXNzZWRcXFwiXFxuK2V4aXQgJHJldFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxOTo1NzozNy4yOTEwMjg3OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5ODM5NzkxMjIwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZVwiLFxuICAgIFwiaHNyX2hhbmRsZV9zdXBfZnJhbWVcIixcbiAgICBcImhzcl9uZXdsaW5rXCIsXG4gICAgXCJwcnBfZHJvcF9mcmFtZVwiLFxuICAgIFwicHJwX3JlZ2lzdGVyX2ZyYW1lX291dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgUFJQIFJlZEJveCAoUFJQLVNBTikgaW4gdGhlIEhTUi9QUlAgc3Vic3lzdGVtLiBJdCBtb2RpZmllcyBzdXBlcnZpc2lvbiBmcmFtZSBnZW5lcmF0aW9uLCBmcmFtZSBmb3J3YXJkaW5nIGxvZ2ljIChkcm9wcGluZyBhbmQgcmVnaXN0ZXJpbmcpLCBhbmQgbm9kZSBzZXF1ZW5jZSBoYW5kbGluZyB0byBzdXBwb3J0IHRoZSBuZXcgZmVhdHVyZS4gSXQgYWxzbyByZW1vdmVzIHRoZSByZXN0cmljdGlvbiB0aGF0IGludGVybGluayBvbmx5IHdvcmtzIHdpdGggSFNSIGluIG5ldGxpbmsgc2V0dXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbmV0d29yayBzdGFjayB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2ViOTk2N2NmMTAxMDg1MjgzZjliMzgzZjk4MmU4NGVkMTljNWE4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTk6NTc6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9kZXZpY2UuYyBiL25ldC9oc3IvaHNyX2RldmljZS5jXG5pbmRleCA1NTU1YjcxYWIxOWI1OS4uMDk3M2Y5YTk0ZjRkNDggMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuKysrIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbkBAIC0zNzIsMTAgKzM3MiwyMSBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbiB7XG4gXHRzdHJ1Y3QgaHNyX3ByaXYgKmhzciA9IG1hc3Rlci1cdTAwM2Voc3I7XG4gXHRzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkICpoc3Jfc3A7XG4rXHRzdHJ1Y3QgaHNyX3N1cF90bHYgKmhzcl9zdGx2O1xuIFx0c3RydWN0IGhzcl9zdXBfdGFnICpoc3Jfc3RhZztcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHRib29sIHJlZGJveF9wcm94eTtcbitcdGludCBleHRyYSA9IDA7XG4gXG4tXHRza2IgPSBoc3JfaW5pdF9za2IobWFzdGVyLCAwKTtcbitcdHJlZGJveF9wcm94eSA9IGhzci1cdTAwM2VyZWRib3ggXHUwMDI2XHUwMDI2IG1hc3Rlci1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTks7XG4rXG4rXHQvKiBBIHByb3h5LWFubm91bmNlIGNhcnJpZXMgYSBSZWRCb3gtTUFDIFRMViBhbmQgYW4gRU9UIG1hcmtlci4gKi9cbitcdGlmIChyZWRib3hfcHJveHkpXG4rXHRcdGV4dHJhID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3RsdikgK1xuK1x0XHRcdHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSArXG4rXHRcdFx0c2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3Rsdik7XG4rXG4rXHRza2IgPSBoc3JfaW5pdF9za2IobWFzdGVyLCBleHRyYSk7XG4gXHRpZiAoIXNrYikge1xuIFx0XHRuZXRkZXZfd2Fybl9vbmNlKG1hc3Rlci1cdTAwM2VkZXYsIFwiUFJQOiBDb3VsZCBub3Qgc2VuZCBzdXBlcnZpc2lvbiBmcmFtZVxcblwiKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTM5Myw5ICs0MDQsMjUgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REO1xuIFx0aHNyX3N0YWctXHUwMDNldGx2LkhTUl9UTFZfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpO1xuIFxuLVx0LyogUGF5bG9hZDogTWFjQWRkcmVzc0EgKi9cbitcdC8qIFBheWxvYWQ6IE1hY0FkZHJlc3NBLCB0aGUgYW5ub3VuY2VkIG5vZGUuICovXG4gXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcbi1cdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbitcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBhZGRyKTtcbitcbitcdC8qIFByb3h5LWFubm91bmNlOiBhcHBlbmQgdGhlIFJlZEJveC1NQUMgVExWIChUeXBlIDMwKSBhbmQgYW4gZXhwbGljaXRcbitcdCAqIEVPVCB0byB0ZXJtaW5hdGUgdGhlIFRMViBjaGFpbiBiZWZvcmUgemVybyBwYWRkaW5nLlxuK1x0ICovXG4rXHRpZiAocmVkYm94X3Byb3h5KSB7XG4rXHRcdGhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTtcbitcdFx0aHNyX3N0bHYtXHUwMDNlSFNSX1RMVl90eXBlID0gUFJQX1RMVl9SRURCT1hfTUFDO1xuK1x0XHRoc3Jfc3Rsdi1cdTAwM2VIU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTtcbitcbitcdFx0aHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7XG4rXHRcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBoc3ItXHUwMDNlbWFjYWRkcmVzc19yZWRib3gpO1xuK1xuK1x0XHRoc3Jfc3RsdiA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KSk7XG4rXHRcdGhzcl9zdGx2LVx1MDAzZUhTUl9UTFZfdHlwZSA9IEhTUl9UTFZfRU9UO1xuK1x0XHRoc3Jfc3Rsdi1cdTAwM2VIU1JfVExWX2xlbmd0aCA9IDA7XG4rXHR9XG4gXG4gXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG5AQCAtNzY4LDYgKzc5NSwxNSBAQCBpbnQgaHNyX2Rldl9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlWzJdLFxuIFx0LyogTWFrZSBzdXJlIHRoZSAxc3QgY2FsbCB0byBuZXRpZl9jYXJyaWVyX29uKCkgZ2V0cyB0aHJvdWdoICovXG4gXHRuZXRpZl9jYXJyaWVyX29mZihoc3JfZGV2KTtcbiBcbitcdC8qIFB1Ymxpc2ggdGhlIFJlZEJveCBzdGF0ZSBiZWZvcmUgYW55IHBvcnQgaXMgYXR0YWNoZWQ6IHRoZSByeFxuK1x0ICogaGFuZGxlcnMgYXJlIGxpdmUgZnJvbSBoc3JfYWRkX3BvcnQoKSBvbiwgYW5kIGhzcl9hZGRfbm9kZSgpXG4rXHQgKiBzaXplcyBlYWNoIG5vZGUncyBwZXItcG9ydCBzZXF1ZW5jZSBzdGF0ZSBmcm9tIGhzci1cdTAwM2VyZWRib3guXG4rXHQgKi9cbitcdGlmIChpbnRlcmxpbmspIHtcbitcdFx0aHNyLVx1MDAzZXJlZGJveCA9IHRydWU7XG4rXHRcdGV0aGVyX2FkZHJfY29weShoc3ItXHUwMDNlbWFjYWRkcmVzc19yZWRib3gsIGludGVybGluay1cdTAwM2VkZXZfYWRkcik7XG4rXHR9XG4rXG4gXHRyZXMgPSBoc3JfYWRkX3BvcnQoaHNyLCBoc3JfZGV2LCBIU1JfUFRfTUFTVEVSLCBleHRhY2spO1xuIFx0aWYgKHJlcylcbiBcdFx0Z290byBlcnJfYWRkX21hc3RlcjtcbkBAIC04MDUsOCArODQxLDYgQEAgaW50IGhzcl9kZXZfZmluYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZVsyXSxcbiBcdFx0aWYgKHJlcylcbiBcdFx0XHRnb3RvIGVycl91bnJlZ2lzdGVyO1xuIFxuLVx0XHRoc3ItXHUwMDNlcmVkYm94ID0gdHJ1ZTtcbi1cdFx0ZXRoZXJfYWRkcl9jb3B5KGhzci1cdTAwM2VtYWNhZGRyZXNzX3JlZGJveCwgaW50ZXJsaW5rLVx1MDAzZWRldl9hZGRyKTtcbiBcdFx0bW9kX3RpbWVyKFx1MDAyNmhzci1cdTAwM2VwcnVuZV9wcm94eV90aW1lcixcbiBcdFx0XHQgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFBSVU5FX1BST1hZX1BFUklPRCkpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNjQuLmVmY2QwYWNlZjM4YzhiIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG4rKysgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbkBAIC00NDAsMTIgKzQ0MCwzNyBAQCBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdHJldHVybiBkZXZfcXVldWVfeG1pdChza2IpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBwcnBfaXNfbGFuX2R1cChzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuK1x0XHRcdCAgIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbit7XG4rXHRlbnVtIGhzcl9wb3J0X3R5cGUgcnggPSBmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlO1xuK1xuK1x0cmV0dXJuIChyeCA9PSBIU1JfUFRfU0xBVkVfQSBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CKSB8fFxuK1x0ICAgICAgIChyeCA9PSBIU1JfUFRfU0xBVkVfQiBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BKTtcbit9XG4rXG4gYm9vbCBwcnBfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4ge1xuLVx0cmV0dXJuICgoZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSBcdTAwMjZcdTAwMjZcbi1cdFx0IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgfHxcbi1cdFx0KGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0IgXHUwMDI2XHUwMDI2XG4tXHRcdCBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EpKTtcbitcdGVudW0gaHNyX3BvcnRfdHlwZSByeCA9IGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGU7XG4rXG4rXHQvKiBTdXBlcnZpc2lvbiBmcmFtZXMgYXJlIG5vdCBkZWxpdmVyZWQgdG8gYSBTQU4gb24gdGhlIGludGVybGluay4gKi9cbitcdGlmIChmcmFtZS1cdTAwM2Vpc19zdXBlcnZpc2lvbiBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKHBycF9pc19sYW5fZHVwKGZyYW1lLCBwb3J0KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKiBMQU4gdG8gaW50ZXJsaW5rOiBrZWVwIFBSUC1uZXR3b3JrIHVuaWNhc3Qgb2ZmIHRoZSBTQU4gc2VnbWVudC4gKi9cbitcdGlmICgocnggPT0gSFNSX1BUX1NMQVZFX0EgfHwgcnggPT0gSFNSX1BUX1NMQVZFX0IpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKVxuK1x0XHRyZXR1cm4gZnJhbWUtXHUwMDNlZHN0X2luX25vZGVfZGI7XG4rXG4rXHQvKiBJbnRlcmxpbmsgdG8gTEFOOiBrZWVwIFNBTi10by1TQU4gdW5pY2FzdCBsb2NhbC4gKi9cbitcdGlmICgocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BIHx8IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgXHUwMDI2XHUwMDI2XG4rXHQgICAgcnggPT0gSFNSX1BUX0lOVEVSTElOSylcbitcdFx0cmV0dXJuIGZyYW1lLVx1MDAzZWRzdF9pbl9wcm94eV9ub2RlX2RiO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbkBAIC00NTMsNyArNDc4LDcgQEAgYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuIFx0aWYgKHBvcnQtXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0hTUl9GV0QpXG4tXHRcdHJldHVybiBwcnBfZHJvcF9mcmFtZShmcmFtZSwgcG9ydCk7XG4rXHRcdHJldHVybiBwcnBfaXNfbGFuX2R1cChmcmFtZSwgcG9ydCk7XG4gXG4gXHQvKiBSZWRCb3ggc3BlY2lmaWMgZnJhbWVzIGRyb3BwaW5nIHBvbGljaWVzXG4gXHQgKlxuQEAgLTQ2Niw3ICs0OTEsNyBAQCBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdCAqIGFyZSBhZGRyZXNzZWQgdG8gaW50ZXJsaW5rIHBvcnQgKGFuZCBhcmUgaW4gdGhlIFByb3h5Tm9kZVRhYmxlKS5cbiBcdCAqL1xuIFx0c2tiID0gZnJhbWUtXHUwMDNlc2tiX2hzcjtcbi1cdGlmIChza2IgXHUwMDI2XHUwMDI2IHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KSBcdTAwMjZcdTAwMjZcbitcdGlmIChza2IgXHUwMDI2XHUwMDI2IHBycF9pc19sYW5fZHVwKGZyYW1lLCBwb3J0KSBcdTAwMjZcdTAwMjZcbiBcdCAgICBpc191bmljYXN0X2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLVx1MDAzZWhfZGVzdCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgaHNyX2lzX25vZGVfaW5fZGIoXHUwMDI2cG9ydC1cdTAwM2Voc3ItXHUwMDNlcHJveHlfbm9kZV9kYixcbiBcdFx0XHQgICAgICBldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0KSkge1xuQEAgLTcwNiw2ICs3MzEsMTggQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbiBcdGZyYW1lLVx1MDAzZWlzX3ZsYW4gPSBmYWxzZTtcbiBcdHByb3RvID0gZXRoaGRyLVx1MDAzZWhfcHJvdG87XG4gXG4rXHQvKiBQUlAgUmVkQm94IG9ubHk6IGNsYXNzaWZ5IHRoZSB1bmljYXN0IGRlc3RpbmF0aW9uIG9uY2Ugc28gdGhlXG4rXHQgKiBwZXItZWdyZXNzLXBvcnQgZGVjaXNpb24gaW4gcHJwX2Ryb3BfZnJhbWUoKSBzdGF5cyBPKDEpLiBIU1IgUmVkQm94XG4rXHQgKiBkb2VzIGl0cyBvd24gY2xhc3NpZmljYXRpb24gYW5kIG11c3Qgbm90IHBheSB0aGVzZSBub2RlLXRhYmxlIHdhbGtzLlxuK1x0ICovXG4rXHRpZiAoaHNyLVx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEgXHUwMDI2XHUwMDI2IGhzci1cdTAwM2VyZWRib3ggXHUwMDI2XHUwMDI2XG4rXHQgICAgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGV0aGhkci1cdTAwM2VoX2Rlc3QpKSB7XG4rXHRcdGZyYW1lLVx1MDAzZWRzdF9pbl9ub2RlX2RiID1cbitcdFx0XHRoc3JfaXNfbm9kZV9pbl9kYihcdTAwMjZoc3ItXHUwMDNlbm9kZV9kYiwgZXRoaGRyLVx1MDAzZWhfZGVzdCk7XG4rXHRcdGZyYW1lLVx1MDAzZWRzdF9pbl9wcm94eV9ub2RlX2RiID1cbitcdFx0XHRoc3JfaXNfbm9kZV9pbl9kYihcdTAwMjZoc3ItXHUwMDNlcHJveHlfbm9kZV9kYiwgZXRoaGRyLVx1MDAzZWhfZGVzdCk7XG4rXHR9XG4rXG4gXHRpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfODAyMVEpKVxuIFx0XHRmcmFtZS1cdTAwM2Vpc192bGFuID0gdHJ1ZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuY1xuaW5kZXggZTQ0OTI5ODcxMjc0NDUuLmIzYjEwNmJlNjkyZWFmIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuY1xuKysrIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuY1xuQEAgLTE5OSw3ICsxOTksNyBAQCBzdGF0aWMgc3RydWN0IGhzcl9ub2RlICpoc3JfYWRkX25vZGUoc3RydWN0IGhzcl9wcml2ICpoc3IsXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZuZXdfbm9kZS1cdTAwM2VzZXFfb3V0X2xvY2spO1xuIFxuIFx0aWYgKGhzci1cdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxKVxuLVx0XHRuZXdfbm9kZS1cdTAwM2VzZXFfcG9ydF9jbnQgPSAxO1xuK1x0XHRuZXdfbm9kZS1cdTAwM2VzZXFfcG9ydF9jbnQgPSBoc3ItXHUwMDNlcmVkYm94ID8gMiA6IDE7XG4gXHRlbHNlXG4gXHRcdG5ld19ub2RlLVx1MDAzZXNlcV9wb3J0X2NudCA9IEhTUl9QVF9QT1JUUyAtIDE7XG4gXG5AQCAtMjkzLDggKzI5MywxNyBAQCBzdHJ1Y3QgaHNyX25vZGUgKmhzcl9nZXRfbm9kZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsIHN0cnVjdCBsaXN0X2hlYWQgKm5vZGVfZGIsXG4gXHQgKi9cbiBcdGlmIChldGhoZHItXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9QUlApIHx8XG4gXHQgICAgZXRoaGRyLVx1MDAzZWhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfSFNSKSkge1xuLVx0XHQvKiBDaGVjayBpZiBza2IgY29udGFpbnMgaHNyX2V0aGhkciAqL1xuLVx0XHRpZiAoc2tiLVx1MDAzZW1hY19sZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgaHNyX2V0aGhkcikpXG4rXHRcdGJvb2wgcHJwX3N1cDtcbitcbitcdFx0LyogQSBQUlAgc3VwZXJ2aXNpb24gZnJhbWUgaXMgYW4gdW50YWdnZWQgRVRIX1BfUFJQIGZyYW1lXG4rXHRcdCAqIChtYWNfbGVuID09IEVUSF9ITEVOKTsgaXRzIFJDVCBpcyBhcHBlbmRlZCBvbmx5IG9uIGVncmVzcy5cbitcdFx0ICogSFNSIChFVEhfUF9IU1IpIHN1cGVydmlzaW9uIGlzIGZyb250LXRhZ2dlZCBhbmQgc3RpbGwgbXVzdFxuK1x0XHQgKiBjb250YWluIGEgc3RydWN0IGhzcl9ldGhoZHIuXG4rXHRcdCAqL1xuK1x0XHRwcnBfc3VwID0gaHNyLVx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICBldGhoZHItXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9QUlApIFx1MDAyNlx1MDAyNiBpc19zdXA7XG4rXG4rXHRcdGlmICghcHJwX3N1cCBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZW1hY19sZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgaHNyX2V0aGhkcikpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHR9IGVsc2Uge1xuIFx0XHRyY3QgPSBza2JfZ2V0X1BSUF9yY3Qoc2tiKTtcbkBAIC0zODEsNiArMzkwLDcgQEAgdm9pZCBoc3JfaGFuZGxlX3N1cF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxuIFx0c3RydWN0IGV0aGhkciAqZXRoaGRyO1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX3B1bGxfc2l6ZSA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgcHVsbF9zaXplID0gMDtcbitcdHVuc2lnbmVkIGludCBzZXFfcG9ydF9jbnQ7XG4gXHR1bnNpZ25lZCBsb25nIGlkeDtcbiBcdGludCBpO1xuIFxuQEAgLTQ3NCw2ICs0ODQsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRcdH1cbiBcdH1cbiBcbitcdHNlcV9wb3J0X2NudCA9IG1pbihub2RlX3JlYWwtXHUwMDNlc2VxX3BvcnRfY250LCBub2RlX2N1cnItXHUwMDNlc2VxX3BvcnRfY250KTtcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNm5vZGVfY3Vyci1cdTAwM2VzZXFfYmxvY2tzLCBpZHgsIHNyY19ibGspIHtcbiBcdFx0aWYgKGhzcl9zZXFfYmxvY2tfaXNfb2xkKHNyY19ibGspKVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTQ4Miw3ICs0OTMsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRcdGlmICghbWVyZ2VfYmxrKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRtZXJnZV9ibGstXHUwMDNldGltZSA9IG1pbihtZXJnZV9ibGstXHUwMDNldGltZSwgc3JjX2Jsay1cdTAwM2V0aW1lKTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbm9kZV9yZWFsLVx1MDAzZXNlcV9wb3J0X2NudDsgaSsrKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNlcV9wb3J0X2NudDsgaSsrKSB7XG4gXHRcdFx0Yml0bWFwX29yKG1lcmdlX2Jsay1cdTAwM2VzZXFfbnJzW2ldLCBtZXJnZV9ibGstXHUwMDNlc2VxX25yc1tpXSxcbiBcdFx0XHRcdCAgc3JjX2Jsay1cdTAwM2VzZXFfbnJzW2ldLCBIU1JfU0VRX0JMT0NLX1NJWkUpO1xuIFx0XHR9XG5AQCAtNjQ5LDkgKzY2MCwxMyBAQCBpbnQgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dChzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRpZiAoZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIGZvciBQUlAgd2Ugc2hvdWxkIG9ubHkgZm9yd2FyZCBmcmFtZXMgZnJvbSB0aGUgc2xhdmUgcG9ydHNcbi1cdCAqIHRvIHRoZSBtYXN0ZXIgcG9ydFxuK1x0LyogUmVkQm94OiBmb3J3YXJkIExBTiBmcmFtZXMgb3V0IHRoZSBpbnRlcmxpbmsgdG8gYSBTQU4sIGRlZHVwaW5nIHRoZVxuK1x0ICogdHdvIExBTiBjb3BpZXMgb24gYSBkZWRpY2F0ZWQgc2xvdC5cbiBcdCAqL1xuK1x0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKVxuK1x0XHRyZXR1cm4gaHNyX2NoZWNrX2R1cGxpY2F0ZShmcmFtZSwgMSk7XG4rXG4rXHQvKiBGb3IgUFJQIG9ubHkgc2xhdmUtdG8tbWFzdGVyIGZyYW1lcyBhcmUgZm9yd2FyZGVkLiAqL1xuIFx0aWYgKHBvcnQtXHUwMDNldHlwZSAhPSBIU1JfUFRfTUFTVEVSKVxuIFx0XHRyZXR1cm4gMTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxuaW5kZXggYzY1ZWNiOTI1NzM0ODkuLjEyN2EzZmI2NGQ1ZjAzIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxuKysrIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxuQEAgLTI3LDYgKzI3LDggQEAgc3RydWN0IGhzcl9mcmFtZV9pbmZvIHtcbiBcdGJvb2wgaXNfbG9jYWxfZGVzdDtcbiBcdGJvb2wgaXNfbG9jYWxfZXhjbHVzaXZlO1xuIFx0Ym9vbCBpc19mcm9tX3NhbjtcbitcdGJvb2wgZHN0X2luX25vZGVfZGI7XG4rXHRib29sIGRzdF9pbl9wcm94eV9ub2RlX2RiO1xuIH07XG4gXG4gdm9pZCBoc3JfZGVsX3NlbGZfbm9kZShzdHJ1Y3QgaHNyX3ByaXYgKmhzcik7XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbWFpbi5oIGIvbmV0L2hzci9oc3JfbWFpbi5oXG5pbmRleCAxMzRlNGYzZmZmNjAzNi4uYzI3Y2ZkZDljYTNmYTggMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9tYWluLmhcbisrKyBiL25ldC9oc3IvaHNyX21haW4uaFxuQEAgLTIxMSw3ICsyMTEsNyBAQCBzdHJ1Y3QgaHNyX3ByaXYge1xuIFx0XHRcdFx0ICovXG4gXHRib29sIGZ3ZF9vZmZsb2FkZWQ7XHQvKiBGb3J3YXJkaW5nIG9mZmxvYWRlZCB0byBIVyAqL1xuIFx0Ym9vbCByZWRib3g7ICAgICAgICAgICAgLyogRGV2aWNlIHN1cHBvcnRzIEhTUiBSZWRCb3ggKi9cbi1cdHVuc2lnbmVkIGNoYXJcdFx0bWFjYWRkcmVzc19yZWRib3hbRVRIX0FMRU5dO1xuK1x0dW5zaWduZWQgY2hhclx0bWFjYWRkcmVzc19yZWRib3hbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XG4gXHR1bnNpZ25lZCBjaGFyXHRcdHN1cF9tdWx0aWNhc3RfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKHNpemVvZih1MTYpKTtcbiBcdFx0XHRcdC8qIEFsaWduIHRvIHUxNiBib3VuZGFyeSB0byBhdm9pZCB1bmFsaWduZWQgYWNjZXNzXG4gXHRcdFx0XHQgKiBpbiBldGhlcl9hZGRyX2VxdWFsXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbmV0bGluay5jIGIvbmV0L2hzci9oc3JfbmV0bGluay5jXG5pbmRleCA4MDk5ZjIwNjlhNzQ4ZS4uODg5NDBlODAxNGIyNGYgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9uZXRsaW5rLmNcbisrKyBiL25ldC9oc3IvaHNyX25ldGxpbmsuY1xuQEAgLTEyMSwxNCArMTIxLDggQEAgc3RhdGljIGludCBoc3JfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAocHJvdG8gPT0gSFNSX1BST1RPQ09MX1BSUCkge1xuK1x0aWYgKHByb3RvID09IEhTUl9QUk9UT0NPTF9QUlApXG4gXHRcdHByb3RvX3ZlcnNpb24gPSBQUlBfVjE7XG4tXHRcdGlmIChpbnRlcmxpbmspIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuLVx0XHRcdFx0XHQgICBcIkludGVybGluayBvbmx5IHdvcmtzIHdpdGggSFNSXCIpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHR9XG4tXHR9XG4gXG4gXHRyZXR1cm4gaHNyX2Rldl9maW5hbGl6ZShkZXYsIGxpbmssIGludGVybGluaywgbXVsdGljYXN0X3NwZWMsXG4gXHRcdFx0XHRwcm90b192ZXJzaW9uLCBleHRhY2spO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzZC4uMjE1MGU0ODdhYzdkN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtNCw2ICs0LDcgQEAgdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXG4gXG4gVEVTVF9QUk9HUyA6PSBcXFxuIFx0aHNyX3Bpbmcuc2ggXFxcbitcdGhzcl9wcnBfcmVkYm94LnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuIFx0cHJwX3Bpbmcuc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NzljODkyMjI1YjFmM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaFxuQEAgLTAsMCArMSw5OSBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFRlc3QgYSBQUlAgUmVkQm94IChQUlAtU0FOKTogYSBTQU4gdGhhdCBzaXRzIGJlaGluZCB0aGUgaW50ZXJsaW5rIHBvcnQgbXVzdFxuKyMgcmVhY2gsIGFuZCBiZSByZWFjaGVkIGJ5LCBhIHBlZXIgREFOUCBvbiB0aGUgUFJQIG5ldHdvcmsgd2l0aCBpdHMgb3duIE1BQ1xuKyMgcHJlc2VydmVkIG9uIHRoZSB3aXJlLCBhbmQgdGhlIFJlZEJveCBtdXN0IGFubm91bmNlIHRoZSBTQU4gd2l0aCBhIFJlZEJveC1NQUNcbisjIFRMViAodGVybWluYXRlZCBieSBhbiBFT1QgbWFya2VyKSBpbiBpdHMgUFJQIHN1cGVydmlzaW9uIGZyYW1lcy5cbisjXG4rIyAgIFJCICAgIFBSUCBSZWRCb3g6IHBycDAgb3ZlciByYl9hL3JiX2IgKExBTiBBL0IpICsgaW50ZXJsaW5rIHJiX2lsXG4rIyAgIFBFRVIgIHBlZXIgREFOUCA6IHBycDAgb3ZlciBwZV9hL3BlX2IsIDEwMC42NC4wLjJcbisjICAgU0FOICAgU0FOICAgICAgIDogc2FuX2lsLCBvd24gTUFDLCAxMDAuNjQuMC41MSAoYmVoaW5kIHRoZSBpbnRlcmxpbmspXG4rXG4raXB2Nj1mYWxzZVxuK1xuK3NvdXJjZSAuL2hzcl9jb21tb24uc2hcbitcbitjaGVja19wcmVyZXF1aXNpdGVzXG4rXG4raWYgISBjb21tYW5kIC12IHRjcGR1bXAgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4rXHRlY2hvIFwiU0tJUDogVGhpcyB0ZXN0IHJlcXVpcmVzIHRjcGR1bXBcIlxuK1x0ZXhpdCAka3NmdF9za2lwXG4rZmlcbitcbitpZiAhIGlwIGxpbmsgaGVscCBoc3IgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xIGludGVybGluazsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IGlwcm91dGUyIHRvbyBvbGQgKG5vIGhzciBpbnRlcmxpbmsgc3VwcG9ydClcIlxuK1x0ZXhpdCAka3NmdF9za2lwXG4rZmlcbitcbitzZXR1cF9ucyBSQiBQRUVSIFNBTlxuK3RyYXAgJ2NsZWFudXBfbnMgXCIkUkJcIiBcIiRQRUVSXCIgXCIkU0FOXCInIEVYSVRcbitcbitpcCBsaW5rIGFkZCByYl9hIG5ldG5zIFwiJFJCXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwZV9hIG5ldG5zIFwiJFBFRVJcIlxuK2lwIGxpbmsgYWRkIHJiX2IgbmV0bnMgXCIkUkJcIiB0eXBlIHZldGggcGVlciBuYW1lIHBlX2IgbmV0bnMgXCIkUEVFUlwiXG4raXAgbGluayBhZGQgcmJfaWwgbmV0bnMgXCIkUkJcIiB0eXBlIHZldGggcGVlciBuYW1lIHNhbl9pbCBuZXRucyBcIiRTQU5cIlxuK1xuK2lwIC1uIFwiJFJCXCIgICBsaW5rIHNldCByYl9hIHVwXG4raXAgLW4gXCIkUkJcIiAgIGxpbmsgc2V0IHJiX2IgdXBcbitpcCAtbiBcIiRSQlwiICAgbGluayBzZXQgcmJfaWwgdXBcbitpcCAtbiBcIiRQRUVSXCIgbGluayBzZXQgcGVfYSB1cFxuK2lwIC1uIFwiJFBFRVJcIiBsaW5rIHNldCBwZV9iIHVwXG4raXAgLW4gXCIkU0FOXCIgIGxpbmsgc2V0IHNhbl9pbCB1cFxuK2lwIC1uIFwiJFNBTlwiICBhZGRyIGFkZCAxMDAuNjQuMC41MS8yNCBkZXYgc2FuX2lsXG4rXG4rIyBGZWF0dXJlIGdhdGU6IFBSUCBpbnRlcmxpbmsgKFJlZEJveCkgY3JlYXRpb24uIEEga2VybmVsIHdpdGhvdXQgUFJQIFJlZEJveFxuKyMgc3VwcG9ydCByZWplY3RzIHRoaXMgd2l0aCAtRUlOVkFMLCBzbyBTS0lQIHJhdGhlciB0aGFuIEZBSUwuXG4raWYgISBpcCAtbiBcIiRSQlwiIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgcmJfYSBzbGF2ZTIgcmJfYiBcXFxuKyAgICAgaW50ZXJsaW5rIHJiX2lsIHByb3RvIDEgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IGtlcm5lbCB3aXRob3V0IFBSUCBSZWRCb3ggKGludGVybGluaykgc3VwcG9ydFwiXG4rXHRleGl0ICRrc2Z0X3NraXBcbitmaVxuK2lwIC1uIFwiJFJCXCIgICBsaW5rIHNldCBwcnAwIHVwXG4raXAgLW4gXCIkUEVFUlwiIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgcGVfYSBzbGF2ZTIgcGVfYiBwcm90byAxXG4raXAgLW4gXCIkUEVFUlwiIGxpbmsgc2V0IHBycDAgdXBcbitpcCAtbiBcIiRQRUVSXCIgYWRkciBhZGQgMTAwLjY0LjAuMi8yNCBkZXYgcHJwMFxuK3NsZWVwIDFcbitcbitzYW5fbWFjPSQoaXAgLW4gXCIkU0FOXCIgLWJyIGxpbmsgc2hvdyBzYW5faWwgfCBhd2sgJ3twcmludCAkM30nKVxuK3JiX21hYz0kKGlwIC1uIFwiJFJCXCIgLWJyIGxpbmsgc2hvdyByYl9pbCB8IGF3ayAne3ByaW50ICQzfScpXG4rXG4rIyBCaWRpcmVjdGlvbmFsIHVuaWNhc3QgYWNyb3NzIHRoZSBpbnRlcmxpbmsuXG4rZG9fcGluZyBcIiRQRUVSXCIgMTAwLjY0LjAuNTFcbitkb19waW5nIFwiJFNBTlwiICAxMDAuNjQuMC4yXG4rc3RvcF9pZl9lcnJvciBcIlBSUCBSZWRCb3ggYmlkaXJlY3Rpb25hbCB1bmljYXN0IGZhaWxlZFwiXG4rXG4rIyBUaGUgU0FOIHNvdXJjZSBNQUMgbXVzdCBiZSBwcmVzZXJ2ZWQgb24gdGhlIFBSUCBuZXR3b3JrLCBub3QgbGF1bmRlcmVkIHRvIHRoZVxuKyMgUmVkQm94IE1BQzogdGhlIHBlZXIgcmVzb2x2ZXMgdGhlIFNBTiBJUCB0byB0aGUgU0FOJ3Mgb3duIE1BQy5cbituZWlnaD0kKGlwIC1uIFwiJFBFRVJcIiBuZWlnaCBzaG93IDEwMC42NC4wLjUxIHwgYXdrICd7cHJpbnQgJDV9JylcbitpZiBbIFwiJG5laWdoXCIgIT0gXCIkc2FuX21hY1wiIF07IHRoZW5cbitcdGVjaG8gXCJTQU4gTUFDIHByZXNlcnZhdGlvbiBbIEZBSUwgXTogcGVlciByZXNvbHZlZCAxMDAuNjQuMC41MSB0b1wiIFxcXG4rXHQgICAgIFwiJyRuZWlnaCcsIGV4cGVjdGVkICRzYW5fbWFjXCIgMVx1MDAzZVx1MDAyNjJcbitcdHJldD0xXG4rZmlcbitzdG9wX2lmX2Vycm9yIFwiU0FOIE1BQyBub3QgcHJlc2VydmVkIG9uIHRoZSBQUlAgbmV0d29ya1wiXG4rXG4rIyBUaGUgcHJveHktYW5ub3VuY2Ugc3VwZXJ2aXNpb24gZnJhbWUgbXVzdCBjYXJyeSwgaW4gb3JkZXIsIHRoZSBsaWZlLWNoZWNrIFRMVlxuKyMgKHR5cGUgMHgxNCwgbGVuIDYpICsgTWFjQWRkcmVzc0EgPT0gU0FOIE1BQyArIHRoZSBSZWRCb3gtTUFDIFRMViAodHlwZSAweDFlLFxuKyMgbGVuIDYpICsgTWFjQWRkcmVzc1JlZEJveCA9PSBSZWRCb3ggTUFDICsgdGhlIEVPVCBtYXJrZXIgKDB4MDAwMCkuXG4raXAgbmV0bnMgZXhlYyBcIiRTQU5cIiBwaW5nIC1pIDAuMiAtcSAxMDAuNjQuMC4yIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbitwaW5nX3BpZD0kIVxuK2NhcD0kKGlwIG5ldG5zIGV4ZWMgXCIkUEVFUlwiIHRpbWVvdXQgNSB0Y3BkdW1wIC1pIHBlX2EgLW5uIC14IFxcXG4rXHRcImV0aGVyIHByb3RvIDB4ODhmYiBhbmQgZXRoZXIgc3JjICRyYl9tYWNcIiAyXHUwMDNlL2Rldi9udWxsIHx8IHRydWUpXG4ra2lsbCBcIiRwaW5nX3BpZFwiIDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuK3dhaXQgXCIkcGluZ19waWRcIiAyXHUwMDNlL2Rldi9udWxsIHx8IHRydWVcbitcbitzYW5faGV4PSQoZWNobyBcIiRzYW5fbWFjXCIgfCB0ciAtZCAnOicpXG4rcmJfaGV4PSQoZWNobyBcIiRyYl9tYWNcIiB8IHRyIC1kICc6JylcbisjIFJlYXNzZW1ibGUgY29udGlndW91cyBmcmFtZSBoZXg6IGRyb3AgdGhlIFwiMHgwMDEwOlwiIG9mZnNldCBsYWJlbHMgYW5kIHNwYWNlcy5cbitmcmFtZV9oZXg9JChlY2hvIFwiJGNhcFwiIHwgYXdrICcvXltbOnNwYWNlOl1dKjB4WzAtOWEtZl0rOi8ge1xuK1x0c3ViKC9eW1s6c3BhY2U6XV0qMHhbMC05YS1mXSs6W1s6c3BhY2U6XV0qLywgXCJcIik7XG4rXHRnc3ViKC8gLywgXCJcIik7IHByaW50ZiBcIiVzXCIsICQwIH0nKVxuK2lmICEgZWNobyBcIiRmcmFtZV9oZXhcIiB8IGdyZXAgLXEgXCIxNDA2JHtzYW5faGV4fTFlMDYke3JiX2hleH0wMDAwXCI7IHRoZW5cbitcdGVjaG8gXCJzdXBlcnZpc2lvbiBSZWRCb3gtTUFDIFRMViBbIEZBSUwgXTogbWlzc2luZyBTQU4gTUFDLCBUeXBlLTMwXCIgXFxcbitcdCAgICAgXCJwYXlsb2FkLCBvciBFT1RcIiAxXHUwMDNlXHUwMDI2MlxuK1x0cmV0PTFcbitmaVxuK3N0b3BfaWZfZXJyb3IgXCJQUlAgUmVkQm94IHN1cGVydmlzaW9uIFJlZEJveC1NQUMgVExWL0VPVCBjaGVjayBmYWlsZWRcIlxuK1xuK2VjaG8gXCJJTkZPOiBQUlAgUmVkQm94IChQUlAtU0FOKSBjb25mb3JtYW5jZSBjaGVja3MgcGFzc2VkXCJcbitleGl0ICRyZXRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjU3OjM3LjI5MTAzMTMyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyODUxNTUyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUFJQIFJlZEJveCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBhZGRpbmcgUFJQIFJlZEJveCBzdXBwb3J0IHRvIHRoZSBIU1IvUFJQIHN1YnN5c3RlbS4gVGhpcyBsb29rcyBsaWtlIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGVuYWJsaW5nIGEgU0FOIGJlaGluZCBhbiBpbnRlcmxpbmsgcG9ydCB0byBjb21tdW5pY2F0ZSB3aXRoIGEgcGVlciBEQU5QIG9uIHRoZSBQUlAgbmV0d29yay4gVGhlIGNoYW5nZXMgdG91Y2ggYSBkZWNlbnQgY2h1bmsgb2YgdGhlIEhTUiBjb2RlLCBtb2RpZnlpbmcgc2V2ZXJhbCBmaWxlczogYGhzcl9kZXZpY2UuY2AsIGBoc3JfZm9yd2FyZC5jYCwgYGhzcl9mcmFtZXJlZy5jYCwgYGhzcl9mcmFtZXJlZy5oYCwgYGhzcl9tYWluLmhgLCBgaHNyX25ldGxpbmsuY2AsIGFuZCBhZGRpbmcgYSB0ZXN0IHNjcmlwdC5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlOlxuXG4qICAgSW4gYGhzcl9kZXZpY2UuY2AsIHRoZSBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGluY2x1ZGUgUmVkQm94LU1BQyBUTFZzIGFuZCBFT1QgbWFya2VycyBmb3IgcHJveHkgYW5ub3VuY2VtZW50LCBhbmQgYGhzcl9kZXZfZmluYWxpemVgIG5vdyBwdWJsaXNoZXMgdGhlIFJlZEJveCBzdGF0ZSBwcmlvciB0byBwb3J0IGF0dGFjaG1lbnQuIFRoaXMgbWFrZXMgc2Vuc2U7IFJlZEJveCBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgYW55dGhpbmcgZWxzZS5cblxuKiAgIGBoc3JfZm9yd2FyZC5jYCBpbnRyb2R1Y2VzIGxvZ2ljIHdpdGhpbiBgcHJwX2Ryb3BfZnJhbWVgIHRvIGhhbmRsZSBzdXBlcnZpc2lvbiBmcmFtZXMsIExBTiBkdXBsaWNhdGVzLCBhbmQgdW5pY2FzdCBmcmFtZXMsIGRlcGVuZGluZyBvbiB0aGVpciBvcmlnaW4gYW5kIGRlc3RpbmF0aW9uLiBUaGVyZSBpcyBhbHNvIGEgY2hhbmdlIHRvIGNsYXNzaWZ5IHRoZSBkZXN0aW5hdGlvbiBmb3IgUFJQIFJlZEJveCBpbiBgZmlsbF9mcmFtZV9pbmZvYC5cblxuKiAgIGBoc3JfZnJhbWVyZWcuY2AgaXMgYmVpbmcgaGVhdmlseSBtb2RpZmllZC4gYGhzcl9hZGRfbm9kZWAgbm93IHNldHMgYHNlcV9wb3J0X2NudGAgdG8gMiBmb3IgUFJQXFxfVjEgaWYgYGhzci1cdTAwM2VyZWRib3hgIGlzIHNldC4gYGhzcl9nZXRfbm9kZWAgd2lsbCBub3cgY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgYGhzcl9ldGhoZHJgIGZvciBQUlAgc3VwZXJ2aXNpb24gZnJhbWVzLiBBbHNvLCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgIG1lcmdlcyBzZXF1ZW5jZSBibG9ja3MgYW5kIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCBub3cgZm9yd2FyZHMgTEFOIGZyYW1lcyBvdXQgdGhlIGludGVybGluayB0byBhIFNBTiwgZGVkdXBsaWNhdGluZyB0aGUgTEFOIGNvcGllcy4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LlxuXG4qICAgYGhzcl9uZXRsaW5rLmNgIGhhcyBhIHNpbXBsZSBjaGFuZ2UgcmVtb3ZpbmcgdGhlIHJlc3RyaWN0aW9uIG9uIGludGVybGluayBzdXBwb3J0IGFuZCBhbGxvd2luZyBQUlAgdG8gZnVuY3Rpb24gaGVyZS5cblxuVGhpcyB3YXJyYW50cyB0aG9yb3VnaCB0ZXN0aW5nLCBhbmQgYmFzZWQgb24gdGhlIGZpbGVzIGFuZCBmdW5jdGlvbnMgY2hhbmdlZCwgdGhpcyBpcyBkZWZpbml0ZWx5IFdvcnRoRnV6emluZy5cblxuSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBrZXkgZnVuY3Rpb25zIHRvIHRob3JvdWdobHkgZXZhbHVhdGUgdGhpcyBpbXBsZW1lbnRhdGlvbi4gTG9va2luZyBhdCB0aGUgZGlmZiwgdGhlIG1haW4gZnVuY3Rpb25zIG9mIGNvbmNlcm4gc2VlbSB0byBiZTogYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYCwgYHBycF9kcm9wX2ZyYW1lYCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgLCBhbmQgYGhzcl9uZXdsaW5rYC4gSSdsbCB3YW50IHRvIGNyYWZ0IGZ1enplciBpbnB1dHMgdGhhdCBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIG5ldyBQUlAgUmVkQm94LXNwZWNpZmljIGxvZ2ljLiBJIGNhbiBsb29rIGluIGBuZXQvaHNyL0tjb25maWdgIG9yIGBuZXQvS2NvbmZpZ2AgZm9yIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBicmVhayB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDM5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTc6NDYuNTc2MTg5OTQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzE1NzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFNSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTc6NDYuOTIzMzU0MzAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE5MjY5NjA4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29udGV4dCBDaGVjayoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBpcyBpZGVudGlmaWVkIGFzIGBIU1JgLiBNeSBpbW1lZGlhdGUgcmVzcG9uc2UgaXMgdG8gbWVudGFsbHkgZmxhZyB0aGF0IGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3Igd2hhdGV2ZXIgYW5hbHlzaXMgb3IgdGFzayBpcyBhdCBoYW5kLiBOb3csIGJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyB0aGUgT05MWSByZWxldmFudCBjb25maWd1cmF0aW9uLiBJdCdzIGNydWNpYWwgdG8gZW5zdXJlIHRoaXMgaXMgYSBzZWxmLWNvbnRhaW5lZCBzeXN0ZW0uIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gZm9yIGFueSByZWxhdGVkLCBkZXBlbmRlbnQsIG9yIGNvbmZsaWN0aW5nIGNvbmZpZ3VyYXRpb25zLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBgSFNSYCBzZXR0aW5nIGlzIHBhcnQgb2YgYSBsYXJnZXIsIHBvdGVudGlhbGx5IG1vcmUgY29tcGxleCwgY29uZmlndXJhdGlvbiBvciBpZiBpdCBjYW4gYmUgZXhhbWluZWQgaW4gaXNvbGF0aW9uLiBJZiB0aGVyZSBhcmUgb3RoZXIgY29uZmlndXJhdGlvbnMgSSdsbCBuZWVkIHRvIGtub3cgYWJvdXQgdGhlbSwgYW5kIGhvdyB0aGV5IGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDc4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTk6MTguODUwMzE3MDA0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMzAzNzU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG4tLVxcbm5ldC9oc3IvS2NvbmZpZz00Mj1pZiBIU1JcXG5uZXQvaHNyL0tjb25maWctNDMtXFxubmV0L2hzci9LY29uZmlnOjQ0OmNvbmZpZyBQUlBfRFVQX0RJU0NBUkRfS1VOSVRfVEVTVFxcbm5ldC9oc3IvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiUFJQIGR1cGxpY2F0ZSBkaXNjYXJkIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjU5OjE5LjE1MzM1ODk2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODA4NTMxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkhTUiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgYEhTUmAgYXBwZWFycyB0byBiZSB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGVsZW1lbnQuIFRoYXQncyBteSBzdGFydGluZyBwb2ludC4gTm93LCB0byByZWFsbHkgdW5kZXJzdGFuZCBpdHMgaW1wYWN0LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZC4gTGV0IG1lIHF1aWNrbHkgaWRlbnRpZnkgdGhvc2U6IEknbSBzZWVpbmcgYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYCwgYHBycF9kcm9wX2ZyYW1lYCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgLCBhbmQgYGhzcl9uZXdsaW5rYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBoZWF2eSBsaWZ0ZXJzLlxuXG5Ob3csIG9uZSBvZiB0aGUgY3J1Y2lhbCBwaWVjZXMgaXMgdGhhdCBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgLiBJIG5lZWQgdG8gY29uZmlybSBpdHMgaW52b2NhdGlvbiBjaGFpbiBhbmQgZW5zdXJlIGl0J3Mgbm90IGEgZGVhZCBlbmQuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZC4gSXQgZmVlbHMgbGlrZSBgaHNyX2Fubm91bmNlYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlLCBidXQgSSdsbCBjb25maXJtIHRoYXQgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgzOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxOTo1OToyMy4zMzQyMTQyODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzMDAzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9MjkzPXN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2OC1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozNjk6c3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzcwLVxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nICppbnRlcnZhbCxcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTY1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGhzcl9wcm90b19vcHMgcHJwX29wcyA9IHtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NTk6XFx0LnNlbmRfc3ZfZnJhbWUgPSBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZSxcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02NjAtXFx0LmNyZWF0ZV90YWdnZWRfZnJhbWUgPSBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTk6NTk6MjMuMzkzNTIxMDA2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg1NzQwNDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgdGhlIE9wZXJhdGlvbioqXG5cbkFscmlnaHQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHJlY29nbml6ZSB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgaGFuZGxlZCB3aXRoaW4gdGhlIGBwcnBfb3BzYCBmcmFtZXdvcmsuIFRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBjb25zaWRlcmFibHk7IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIHNldCBvZiBvcGVyYXRpb25zLCBhbmQgdGhlIG92ZXJhbGwgY29udGV4dCBpcyBhbHJlYWR5IGVzdGFibGlzaGVkLiBOb3csIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGlyZWN0bHkgaW50byB0aGUgYHBycF9kcm9wX2ZyYW1lYCBmdW5jdGlvbi4gVGhhdOKAmXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVsYXRlZCB0byBoYW5kbGluZyBmcmFtZSBkcm9wcyB3b3VsZCByZXNpZGUsIGFuZCB0aGF0J3MgZXhhY3RseSB3aGF0IEknbSBsb29raW5nIGZvciBpbiBvcmRlciB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzIGluIHByYWN0aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQyNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjU5OjMwLjI1MDkyNzgwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk0ODI2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJwX2Ryb3BfZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9NjU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHNyX3Byb3RvX29wcyBwcnBfb3BzID0ge1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjYxLVxcdC5nZXRfdW50YWdnZWRfZnJhbWUgPSBwcnBfZ2V0X3VudGFnZ2VkX2ZyYW1lLFxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjY2MjpcXHQuZHJvcF9mcmFtZSA9IHBycF9kcm9wX2ZyYW1lLFxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2My1cXHQuZmlsbF9mcmFtZV9pbmZvID0gcHJwX2ZpbGxfZnJhbWVfaW5mbyxcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz00NDM9c3RhdGljIGJvb2wgcHJwX2lzX2xhbl9kdXAoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy00NTEtXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjQ1Mjpib29sIHBycF9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNDUzLXtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz03MDE9c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03MzQtXFx0LyogUFJQIFJlZEJveCBvbmx5OiBjbGFzc2lmeSB0aGUgdW5pY2FzdCBkZXN0aW5hdGlvbiBvbmNlIHNvIHRoZVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3MzU6XFx0ICogcGVyLWVncmVzcy1wb3J0IGRlY2lzaW9uIGluIHBycF9kcm9wX2ZyYW1lKCkgc3RheXMgTygxKS4gSFNSIFJlZEJveFxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03MzYtXFx0ICogZG9lcyBpdHMgb3duIGNsYXNzaWZpY2F0aW9uIGFuZCBtdXN0IG5vdCBwYXkgdGhlc2Ugbm9kZS10YWJsZSB3YWxrcy5cXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaD0yMz1zdHJ1Y3Qgc2tfYnVmZiAqcHJwX2dldF91bnRhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0yNC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg6MjU6Ym9vbCBwcnBfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0yNi1ib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE5OjU5OjMwLjMxMDQyNjI2NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM3MTQwMzU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBQUlAgRnJhbWV3b3JrKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBwcnBfZHJvcF9mcmFtZWAgZnVuY3Rpb24uIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgbmFtZSBwb3AgdXAgYmVmb3JlLiBXYWl0LCB5ZXMsIGl0J3MgYWxzbyBhIGNvbXBvbmVudCBvZiB0aGUgYHBycF9vcHNgIHN0cnVjdHVyZS4gVGhhdCdzIGdvb2QgdG8ga25vdzsgaXQgcHV0cyBpdCBpbiBhIGJyb2FkZXIgY29udGV4dCB3aXRoaW4gdGhlIFBSUCBhcmNoaXRlY3R1cmUuIExldCBtZSBtYWtlIGEgbWVudGFsIG5vdGUgdG8ga2VlcCB0aGF0IGFzc29jaWF0aW9uIGluIG1pbmQgYXMgSSBkZWx2ZSBkZWVwZXIuXG5cbk5vdywgd2hlcmUgd2FzIEk/IFJpZ2h0LCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgIG5leHQuIEl0IHNvdW5kcyBsaWtlIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgZnJhbWUgaGFuZGxpbmcgYXQgYSBoaWdoZXIgbGV2ZWwsIHdoaWNoIGlzIHByb2JhYmx5IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUgYW5kIEkgc3VzcGVjdCBpdCB3aWxsIGJlIHJlbGV2YW50IHRvIGhvdyBgcHJwX2Ryb3BfZnJhbWVgIGlzIHVzZWQgaW4gYSBzcGVjaWZpYyBhcHBsaWNhdGlvbi4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIGhhbmRsaW5nIHN1cGVyIGZyYW1lcywgYW5kIEknZCBsaWtlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGVudGFpbHMuIExldCdzIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExOTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDowMDowOS42ODE4MzI1NjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNzcwMTk5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfaGFuZGxlX3N1cF9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NTQ0PXN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNTc5LVxcdFxcdCAgICAhZnJhbWUtXFx1MDAzZWlzX3Byb3h5X3N1cGVydmlzaW9uKSB7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjU4MDpcXHRcXHRcXHRoc3JfaGFuZGxlX3N1cF9mcmFtZShmcmFtZSk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU4MS1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM9MzczPUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoaHNyX2dldF9zZXFfYmxvY2spO1xcbi0tXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuYy0zNzgtICovXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuYzozNzk6dm9pZCBoc3JfaGFuZGxlX3N1cF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmMtMzgwLXtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmg9MzY9c3RydWN0IGhzcl9ub2RlICpoc3JfZ2V0X25vZGUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgbGlzdF9oZWFkICpub2RlX2RiLFxcbi0tXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuaC0zOC1cXHRcXHRcXHQgICAgICBlbnVtIGhzcl9wb3J0X3R5cGUgcnhfcG9ydCk7XFxubmV0L2hzci9oc3JfZnJhbWVyZWcuaDozOTp2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpO1xcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmgtNDAtYm9vbCBoc3JfYWRkcl9pc19zZWxmKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCB1bnNpZ25lZCBjaGFyICphZGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6MDA6MTAuMDA5NTM5NTI3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNDU4NzY5NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqVGFyZ2V0aW5nIE9wdGltYWwgT3V0cHV0IEZyYW1lIFJlZ2lzdHJhdGlvbioqXG5cbkFscmlnaHQsIHRoaW5raW5nIGFib3V0IG91dHB1dCBmcmFtZSByZWdpc3RyYXRpb24uLi4gYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgY29udGVuZGVyLCBhbmQgbWF5YmUgdGhlIGJlc3QgcGxhY2UgdG8gZm9jdXMgb3VyIGVmZm9ydHMuIFRoaXMgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGNlbnRyYWwgcG9pbnQsIGEgbG9naWNhbCBwbGFjZSB0byBob29rIGluIGFuZCBvcHRpbWl6ZS4gSSdtIGFscmVhZHkgdmlzdWFsaXppbmcgaG93IGl0IGhhbmRsZXMgdGhlIGRhdGEgZmxvdywgYW5kIEkgY2FuIHN0YXJ0IG1lbnRhbGx5IG1hcHBpbmcgb3V0IHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYXJvdW5kIHRoYXQgcG9pbnQsIGFuYWx5emUgaXRzIGRlcGVuZGVuY2llcywgYW5kIHNlZSBpZiBhbnkgcXVpY2sgd2lucyBhcmUgcG9zc2libGUgd2l0aGluIHRoYXQgc3BlY2lmaWMgc3Vicm91dGluZS4gSSdtIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCB0cmFkZW9mZnMgdGhlcmUgLSBob3cgbXVjaCBjb250cm9sIGRvIEkgd2FudCBhdCB0aGlzIGxheWVyLCB2ZXJzdXMgcHVzaGluZyByZXNwb25zaWJpbGl0eSBmdXJ0aGVyIGRvd24gdGhlIGxpbmU/IFRoaXMgaXMgZGVmaW5pdGVseSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBvdXIgb3B0aW1pemF0aW9uIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODc4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6MDA6MzEuNDY4MzExMjc0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODQ0NTg1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2RldmljZS5jPTY1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGhzcl9wcm90b19vcHMgcHJwX29wcyA9IHtcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2NS1cXHQudXBkYXRlX3Nhbl9pbmZvID0gcHJwX3VwZGF0ZV9zYW5faW5mbyxcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NjY6XFx0LnJlZ2lzdGVyX2ZyYW1lX291dCA9IHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQsXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjY3LX07XFxuLS1cXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jPTY0MD1pbnQgaHNyX3JlZ2lzdGVyX2ZyYW1lX291dChzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuLS1cXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTY1Ni0gKi9cXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jOjY1NzppbnQgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dChzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuYy02NTgte1xcbi0tXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuYy02NzQtfVxcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM6Njc1OkVYUE9SVF9TWU1CT0xfSUZfS1VOSVQocHJwX3JlZ2lzdGVyX2ZyYW1lX291dCk7XFxubmV0L2hzci9oc3JfZnJhbWVyZWcuYy02NzYtXFxuLS1cXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5oPTc0PWJvb2wgaHNyX2lzX25vZGVfaW5fZGIoc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9kYixcXG4tLVxcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmgtNzYtXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuaDo3NzppbnQgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dChzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpO1xcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmgtNzgtXFxuLS1cXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM9Njk9c3RhdGljIHZvaWQgcHJwX2R1cF9kaXNjYXJkX2ZvcndhcmQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTc1LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAwLFxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzo3NjpcXHRcXHRcXHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFxcdTAwMjZkYXRhLVxcdTAwM2Vwb3J0LCBcXHUwMDI2ZGF0YS1cXHUwMDNlZnJhbWUpKTtcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtNzctXFx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jPTgwPXN0YXRpYyB2b2lkIHBycF9kdXBfZGlzY2FyZF9kcm9wX2R1cGxpY2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtODUtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjg2OlxcdFxcdFxcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXFx1MDAyNmRhdGEtXFx1MDAzZXBvcnQsIFxcdTAwMjZkYXRhLVxcdTAwM2VmcmFtZSkpO1xcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy04Ny1cXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVxcdTAwM2VmcmFtZS5zZXF1ZW5jZV9ucik7XFxuLS1cXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtODktXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDEsXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjkwOlxcdFxcdFxcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXFx1MDAyNmRhdGEtXFx1MDAzZXBvcnQsIFxcdTAwMjZkYXRhLVxcdTAwM2VmcmFtZSkpO1xcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy05MS1cXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVxcdTAwM2VmcmFtZS5zZXF1ZW5jZV9ucik7XFxuLS1cXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM9OTQ9c3RhdGljIHZvaWQgcHJwX2R1cF9kaXNjYXJkX2VudHJ5X3RpbWVvdXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTEwMi1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTAzOlxcdFxcdFxcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXFx1MDAyNmRhdGEtXFx1MDAzZXBvcnQsIFxcdTAwMjZkYXRhLVxcdTAwM2VmcmFtZSkpO1xcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMDQtXFx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTEwNy1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTA4OlxcdFxcdFxcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXFx1MDAyNmRhdGEtXFx1MDAzZXBvcnQsIFxcdTAwMjZkYXRhLVxcdTAwM2VmcmFtZSkpO1xcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMDktXFx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTExNS1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTE2OlxcdFxcdFxcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXFx1MDAyNmRhdGEtXFx1MDAzZXBvcnQsIFxcdTAwMjZkYXRhLVxcdTAwM2VmcmFtZSkpO1xcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMTctXFx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jPTEyMT1zdGF0aWMgdm9pZCBwcnBfZHVwX2Rpc2NhcmRfb3V0X29mX3NlcXVlbmNlKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMjgtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjEyOTpcXHRcXHRcXHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFxcdTAwMjZkYXRhLVxcdTAwM2Vwb3J0LCBcXHUwMDI2ZGF0YS1cXHUwMDNlZnJhbWUpKTtcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTMwLVxcdGNoZWNrX3BycF9mcmFtZV9zZWVuKHRlc3QsIGRhdGEsIGRhdGEtXFx1MDAzZWZyYW1lLnNlcXVlbmNlX25yKTtcXG4tLVxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xMzQtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjEzNTpcXHRcXHRcXHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFxcdTAwMjZkYXRhLVxcdTAwM2Vwb3J0LCBcXHUwMDI2ZGF0YS1cXHUwMDNlZnJhbWUpKTtcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTM2LVxcdGNoZWNrX3BycF9mcmFtZV9zZWVuKHRlc3QsIGRhdGEsIGRhdGEtXFx1MDAzZWZyYW1lLnNlcXVlbmNlX25yKTtcXG4tLVxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xNDEtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDEsXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjE0MjpcXHRcXHRcXHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFxcdTAwMjZkYXRhLVxcdTAwM2Vwb3J0LCBcXHUwMDI2ZGF0YS1cXHUwMDNlZnJhbWUpKTtcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTQzLVxcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE0Ny1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCxcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTQ4OlxcdFxcdFxcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXFx1MDAyNmRhdGEtXFx1MDAzZXBvcnQsIFxcdTAwMjZkYXRhLVxcdTAwM2VmcmFtZSkpO1xcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xNDktXFx0Y2hlY2tfcHJwX2ZyYW1lX3NlZW4odGVzdCwgZGF0YSwgZGF0YS1cXHUwMDNlZnJhbWUuc2VxdWVuY2VfbnIpO1xcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE1NC1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMSxcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmM6MTU1OlxcdFxcdFxcdHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoXFx1MDAyNmRhdGEtXFx1MDAzZXBvcnQsIFxcdTAwMjZkYXRhLVxcdTAwM2VmcmFtZSkpO1xcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xNTYtfVxcbi0tXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jPTE1OD1zdGF0aWMgdm9pZCBwcnBfZHVwX2Rpc2NhcmRfbGFuX2JfbGF0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTY0LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAwLFxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzoxNjU6XFx0XFx0XFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcXHUwMDI2ZGF0YS1cXHUwMDNlcG9ydCwgXFx1MDAyNmRhdGEtXFx1MDAzZWZyYW1lKSk7XFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE2Ni1cXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVxcdTAwM2VmcmFtZS5zZXF1ZW5jZV9ucik7XFxuLS1cXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTY5LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAwLFxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzoxNzA6XFx0XFx0XFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcXHUwMDI2ZGF0YS1cXHUwMDNlcG9ydCwgXFx1MDAyNmRhdGEtXFx1MDAzZWZyYW1lKSk7XFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE3MS1cXHRjaGVja19wcnBfZnJhbWVfc2Vlbih0ZXN0LCBkYXRhLCBkYXRhLVxcdTAwM2VmcmFtZS5zZXF1ZW5jZV9ucik7XFxuLS1cXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTc1LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAxLFxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYzoxNzY6XFx0XFx0XFx0cHJwX3JlZ2lzdGVyX2ZyYW1lX291dChcXHUwMDI2ZGF0YS1cXHUwMDNlcG9ydCwgXFx1MDAyNmRhdGEtXFx1MDAzZWZyYW1lKSk7XFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jLTE3Ny1cXG4tLVxcbm5ldC9oc3IvcHJwX2R1cF9kaXNjYXJkX3Rlc3QuYy0xODAtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDEsXFxubmV0L2hzci9wcnBfZHVwX2Rpc2NhcmRfdGVzdC5jOjE4MTpcXHRcXHRcXHRwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KFxcdTAwMjZkYXRhLVxcdTAwM2Vwb3J0LCBcXHUwMDI2ZGF0YS1cXHUwMDNlZnJhbWUpKTtcXG5uZXQvaHNyL3BycF9kdXBfZGlzY2FyZF90ZXN0LmMtMTgyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6MDA6MzEuNTY2NzYyODE2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDgwMDU2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFJlYWNoYWJpbGl0eSBpbiB0aGUgUFJQIFN1YnN5c3RlbSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgIGlzIGNvbm5lY3RlZCB0byBgcHJwX29wc2AsIG1lYW5pbmcgaXQncyByZWFjaGFibGUgdGhyb3VnaCB0aGF0IHBhdGh3YXkgYXMgd2VsbC4gVGhhdCdzIGdvb2QgdG8ga25vdywgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgUFJQIGFyY2hpdGVjdHVyZS5cblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGV4YW1pbmUgYGhzcl9uZXdsaW5rYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoaW4gdGhpcyBmcmFtZXdvcmsuIE15IGludHVpdGlvbiB0ZWxscyBtZSBpdCBsaWtlbHkgdG91Y2hlcyB0aGUgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbSBvciBhIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmUgaW4gc29tZSB3YXkuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgaXQgaXMgd29ya2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDowMDozNC41MTQ3NzEwMTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NTc4NTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzcl9uZXdsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX25ldGxpbmsuYz0xOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaHNyX3BvbGljeVtJRkxBX0hTUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9oc3IvaHNyX25ldGxpbmsuYy0zMS0gKi9cXG5uZXQvaHNyL2hzcl9uZXRsaW5rLmM6MzI6c3RhdGljIGludCBoc3JfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9oc3IvaHNyX25ldGxpbmsuYy0zMy1cXHRcXHQgICAgICAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm5ldC9oc3IvaHNyX25ldGxpbmsuYz0xOTE9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGhzcl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2hzci9oc3JfbmV0bGluay5jLTE5Ni1cXHQuc2V0dXBcXHRcXHQ9IGhzcl9kZXZfc2V0dXAsXFxubmV0L2hzci9oc3JfbmV0bGluay5jOjE5NzpcXHQubmV3bGlua1xcdD0gaHNyX25ld2xpbmssXFxubmV0L2hzci9oc3JfbmV0bGluay5jLTE5OC1cXHQuZGVsbGlua1xcdD0gaHNyX2RlbGxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjAwOjM0LjU3MjM1NjMzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU1OTA4NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5ldGxpbmstUmVsYXRlZCBIU1IgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZXN0YWJsaXNoZWQgdGhhdCB0aGUgYGhzcl9uZXdsaW5rYCBmdW5jdGlvbiBpcyBpbmRlZWQgcmVhY2hhYmxlIHRocm91Z2ggbmV0bGluay4gVGhhdCdzIGdvb2QsIHRoYXQncyB3aGF0IEkgbmVlZGVkIHRvIGNvbmZpcm0uIE5vdywgSSBuZWVkIHRvIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgZnJhbWUgaGFuZGxpbmcgYW5kIEhTUiBwcm9jZXNzIGFzIHRoZXkgcmVsYXRlIHRvIHRoaXMgY29ubmVjdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIHN5bWJvbHMgYXJlOiBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgLCBgcHJwX2Ryb3BfZnJhbWVgLCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgLCBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGAsIGFuZCwgb2YgY291cnNlLCB0aGUga2V5IGBoc3JfbmV3bGlua2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGluIHRoaXMgbmV0bGluayBjb250ZXh0LlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHdhbnQgdG8gY29uZmlybSBzb21ldGhpbmcgdGhhdCBJIHRob3VnaHQgSSBrbmV3LCBidXQgaXMgd29ydGggYSBxdWljayBkb3VibGUtY2hlY2sgZm9yIGFic29sdXRlIGNlcnRhaW50eS4gTGV0IG1lIGp1c3Qgb3BlbiBgbmV0L2hzci9LY29uZmlnYCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhhdCBgSFNSYCBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIHBsYXkgaGVyZS4gSSBkb24ndCB3YW50IHRvIGdldCBzaWRldHJhY2tlZCBieSByZWxhdGVkIG9wdGlvbnMgaWYgaXQncyBub3QgdGhlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTM1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjAwOjM4LjMyODI2NzU5MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaHNyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIElFQyA2MjQzOS0zIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3lcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEhTUlxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcXHUwMDI2IFBSUClcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBJRUMgNjI0MzkgZGVmaW5lZCBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzc1xcbiAgMTA6XFx0XFx0ICBSZWR1bmRhbmN5IChIU1IpIGFuZCBQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sIChQUlApLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYVxcbiAgMTM6XFx0XFx0ICBEQU5IIChcXFwiRG91Ymx5IGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIEhTUlxcXCIpIG9yIERBTlAgKFxcXCJEb3VibHlcXG4gIDE0OlxcdFxcdCAgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgUFJQXFxcIikuIEZvciB0aGlzIHRvIHdvcmssIHlvdXIgTGludXggYm94XFxuICAxNTpcXHRcXHQgIG5lZWRzIChhdCBsZWFzdCkgdHdvIHBoeXNpY2FsIEV0aGVybmV0IGludGVyZmFjZXMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgRm9yIERBTkgsIGl0IG11c3QgYmUgY29ubmVjdGVkIGFzIGEgbm9kZSBpbiBhIHJpbmcgbmV0d29yayB0b2dldGhlclxcbiAgMTg6XFx0XFx0ICB3aXRoIG90aGVyIEhTUiBjYXBhYmxlIG5vZGVzLiBBbGwgRXRoZXJuZXQgZnJhbWVzIHNlbnQgb3ZlciB0aGUgSFNSXFxuICAxOTpcXHRcXHQgIGRldmljZSB3aWxsIGJlIHNlbnQgaW4gYm90aCBkaXJlY3Rpb25zIG9uIHRoZSByaW5nIChvdmVyIGJvdGggc2xhdmVcXG4gIDIwOlxcdFxcdCAgcG9ydHMpLCBnaXZpbmcgYSByZWR1bmRhbnQsIGluc3RhbnQgZmFpbC1vdmVyIG5ldHdvcmsuIEVhY2ggSFNSIG5vZGVcXG4gIDIxOlxcdFxcdCAgaW4gdGhlIHJpbmcgYWN0cyBsaWtlIGEgYnJpZGdlIGZvciBIU1IgZnJhbWVzLCBidXQgZmlsdGVycyBmcmFtZXNcXG4gIDIyOlxcdFxcdCAgdGhhdCBoYXZlIGJlZW4gZm9yd2FyZGVkIGVhcmxpZXIuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgRm9yIERBTlAsIGl0IG11c3QgYmUgY29ubmVjdGVkIGFzIGEgbm9kZSBjb25uZWN0aW5nIHRvIHR3b1xcbiAgMjU6XFx0XFx0ICBzZXBhcmF0ZSBuZXR3b3JrcyBvdmVyIHRoZSB0d28gc2xhdmUgaW50ZXJmYWNlcy4gTGlrZSBIU1IsIEV0aGVybmV0XFxuICAyNjpcXHRcXHQgIGZyYW1lcyBzZW50IG92ZXIgdGhlIFBSUCBkZXZpY2Ugd2lsbCBiZSBzZW50IHRvIGJvdGggbmV0d29ya3MgZ2l2aW5nXFxuICAyNzpcXHRcXHQgIGEgcmVkdW5kYW50LCBpbnN0YW50IGZhaWwtb3ZlciBuZXR3b3JrLiBVbmxpa2UgSFNSLCBQUlAgbmV0d29ya3NcXG4gIDI4OlxcdFxcdCAgY2FuIGhhdmUgU2luZ2x5IEF0dGFjaGVkIE5vZGVzIChTQU4pIHN1Y2ggYXMgUEMsIHByaW50ZXIsIGJyaWRnZXNcXG4gIDI5OlxcdFxcdCAgZXRjIGFuZCB3aWxsIGJlIGFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBEQU5QIG5vZGVzLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoaXMgY29kZSBpcyBhIFxcXCJiZXN0IGVmZm9ydFxcXCIgdG8gY29tcGx5IHdpdGggdGhlIEhTUiBzdGFuZGFyZCBhc1xcbiAgMzI6XFx0XFx0ICBkZXNjcmliZWQgaW4gSUVDIDYyNDM5LTM6MjAxMCAoSFNSdjApIGFuZCBJRUMgNjI0MzktMzoyMDEyIChIU1J2MSksXFxuICAzMzpcXHRcXHQgIGFuZCBQUlAgc3RhbmRhcmQgZGVzY3JpYmVkIGluIElFQyA2MjQzOS00OjIwMTIgKFBSUCksIGJ1dCBub1xcbiAgMzQ6XFx0XFx0ICBjb21wbGlhbmN5IHRlc3RzIGhhdmUgYmVlbiBtYWRlLiBVc2UgaXByb3V0ZTIgdG8gc2VsZWN0IHRoZSBwcm90b2NvbFxcbiAgMzU6XFx0XFx0ICB5b3Ugd291bGQgbGlrZSB0byB1c2UuXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgWW91IG5lZWQgdG8gcGVyZm9ybSBhbnkgYW5kIGFsbCBuZWNlc3NhcnkgdGVzdHMgeW91cnNlbGYgYmVmb3JlXFxuICAzODpcXHRcXHQgIHJlbHlpbmcgb24gdGhpcyBjb2RlIGluIGEgc2FmZXR5IGNyaXRpY2FsIHN5c3RlbSFcXG4gIDM5OlxcdFxcbiAgNDA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRpZiBIU1JcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIFBSUF9EVVBfRElTQ0FSRF9LVU5JVF9URVNUXFxuICA0NTpcXHRcXHR0cmlzdGF0ZSBcXFwiUFJQIGR1cGxpY2F0ZSBkaXNjYXJkIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA0NjpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICA0NzpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgNDg6XFx0XFx0aGVscFxcbiAgNDk6XFx0XFx0ICBDb3ZlcnMgdGhlIFBSUCBkdXBsaWNhdGUgZGlzY2FyZCBhbGdvcml0aG0uXFxuICA1MDpcXHRcXHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxcbiAgNTE6XFx0XFx0ICBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuICA1NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNTc6XFx0XFxuICA1ODpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDowMDozOC4zMjgzNDE0NTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE2NjAwNDY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBIU1IqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIEkgb25seSBuZWVkIHRoZSBgSFNSYCBjb25maWd1cmF0aW9uIGZvciB0aGlzIHJvdW5kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZywgc28gSSdsbCBzY2FuIGZvciBhbnkgb3RoZXIgcG90ZW50aWFsbHkgZnV6emFibGUgZnVuY3Rpb25zLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCBgaHNyX2Rldl9maW5hbGl6ZWAgaXMgY2FsbGVkIGJ5IGBoc3JfbmV3bGlua2AsIGFuZCBgaHNyX2FkZF9ub2RlYCBpcyBjYWxsZWQgYnkgYGhzcl9nZXRfbm9kZWAuIEZ1cnRoZXIsIGBoc3JfZ2V0X25vZGVgIGlzIGEgZGVwZW5kZW5jeSBvZiBib3RoIGBoc3JfZm9yd2FyZF9kb2AgYW5kIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAuIFRoaXMgZ2V0cyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgZmlsbF9mcmFtZV9pbmZvYCBpcyBhbHNvIGNhbGxlZCBieSBgaHNyX2ZvcndhcmRfZG9gLCBhbmQgc28gaXMgYGhzcl9kcm9wX2ZyYW1lYC5cblxuQmFzZWQgb24gdGhvc2UgY2FsbCBncmFwaHMsIGl0J3MgY2xlYXIgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIHRvIGZ1enogYXJlOlxuXG4qICAgYGhzcl9uZXdsaW5rYFxuKiAgIGBoc3JfZm9yd2FyZF9kb2AgKHdoaWNoIGlzIGEgcmVhbCByYWJiaXQgaG9sZSwgY2FsbGluZyBgaHNyX2Ryb3BfZnJhbWVgLCBgZmlsbF9mcmFtZV9pbmZvYCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYHBycF9kcm9wX2ZyYW1lYCwgYW5kIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCkuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgcHJwYCBmdW5jdGlvbnMgdG9vLlxuKiAgIGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWBcblxuVGltZSB0byBkaWcgaW50byBgaHNyX2ZvcndhcmRfZG9gIGFuZCBzZWUgd2hhdCBpdCBleHBlY3RzLiBUaGlzIGxvb2tzIGxpa2UgdGhlIG1haW4gdGFyZ2V0IGZvciBpbml0aWFsIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjQ4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6MDA6NDMuNDk0MzQ4NjYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODU2NjM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZm9yd2FyZF9kb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDc2PWJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU0My0gKi9cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NTQ0OnN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU0NS17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NzcxPXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzktXFx0aHNyX3JlZ2lzdGVyX2ZyYW1lX2luKGZyYW1lLm5vZGVfc3JjLCBwb3J0LCBmcmFtZS5zZXF1ZW5jZV9ucik7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc4MDpcXHRoc3JfZm9yd2FyZF9kbyhcXHUwMDI2ZnJhbWUpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03ODEtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjAwOjQzLjU1MjkyMTA5M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODYwNjE1NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW5jb21pbmcgUGFja2V0IFByb2Nlc3Npbmc6IFRoZSBgaHNyX2ZvcndhcmRfc2tiYCBQZXJzcGVjdGl2ZSoqXG5cbkFscmlnaHQsIHNvICp0aGlzKiBpcyB0aGUgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBwbGFjZSBteSBhdHRlbnRpb24gbGFuZHMgd2hlbiBhIHBhY2tldCBjb21lcyBrbm9ja2luZy4gIGBoc3JfZm9yd2FyZF9za2JgLCB0aGF0J3MgdGhlIGtleS4gIEl0J3MgdGhlIGZpcnN0IHN0ZXAgaW4gdGhlIHdob2xlIHByb2Nlc3Mgb2YgcmVjZWl2aW5nIHRoaXMgdGhpbmcuIFRoZSBjb2RlIGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8ga2ljayBldmVyeXRoaW5nIG9mZi4gSSBuZWVkIHRvIGtlZXAgdGhpcyBmdW5jdGlvbiBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQsIGl0J3Mgd2hlcmUgbXkgZm9jdXMgYmVnaW5zIHdoZW4gaGFuZGxpbmcgbmV3IHBhY2tldHMuIFRoaXMgaXMgZ3JvdW5kIHplcm8uIEV2ZXJ5dGhpbmcgZnVubmVscyB0aHJvdWdoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTEwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6MDA6NDYuNDEzNTM5MTAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTA1OTg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9MjI0PXN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNS1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmM6MjM2OlxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMjM3LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9MjkzPXN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2My1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozNjQ6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzY1LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9MzY5PXN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNDMxLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjQzMjpcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTQzMy1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz03MDE9c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzAtLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzcxOnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzcyLXtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xNS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg6MTY6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTctc3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTI0PXN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGhzcl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYy04MC1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYzo4MTpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgyLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODMtXFx0fSBlbHNlIHtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjg0OlxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDowMDo0Ni40Njg2MDI0NTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE0MDE5NzA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIU1IvUFJQIFBSUC1TQU4gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBoZXJlJ3MgbXkgYnJlYWtkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgaHNyX2Rldl94bWl0YCBhbmQgYGhzcl9oYW5kbGVfZnJhbWVgIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdGhpcyB3aG9sZSB0aGluZy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGVuYWJsaW5nIFBSUCBSZWRCb3ggZnVuY3Rpb25hbGl0eSAoUFJQLVNBTikgd2l0aGluIHRoZSBleGlzdGluZyBIU1IvUFJQIHN1YnN5c3RlbS4gSSd2ZSBwaW5wb2ludGVkIGEgZmV3IGNydWNpYWwgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGFzIGEgZGlyZWN0IHJlc3VsdC4gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIGZvciBteSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5JJ3ZlIHplcm9lZCBpbiBvbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYGhzcl9uZXdsaW5rYCwgYHBycF9kcm9wX2ZyYW1lYCwgYW5kIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YC4gSSd2ZSBpbmNsdWRlZCBgaHNyX25ld2xpbmtgIGJlY2F1c2UsIHdoaWxlIGl0IGNhbGxzIGBoc3JfZGV2X2ZpbmFsaXplYCwgaXQgcmVwcmVzZW50cyBhIGJldHRlciBwb2ludCBvZiBlbnRyeS4gV2hpbGUgYGZpbGxfZnJhbWVfaW5mb2AgYW5kIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCBhcmUgdGVjaG5pY2FsbHkgaG90LXBhdGgsIEkndmUgZWxlY3RlZCB0byBpbmNsdWRlIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCBhcyBhIGZvY3VzIHN5bWJvbCBhcyB0aGUgbW9kaWZpY2F0aW9uIGlzIHNwZWNpZmljIHRvIHRoaXMgcGF0Y2guXG5cbkkndmUgY29uc2lkZXJlZCBvdGhlciBmdW5jdGlvbnMgYXMgd2VsbCwgZm9yIGV4YW1wbGUgYGZpbGxfZnJhbWVfaW5mb2Agd2hpY2ggZ2V0cyBjYWxsZWQgYnkgYGhzcl9mb3J3YXJkX3NrYmAsIGFuZCBpcyBob3QgcGF0aC4gSSBkZWNpZGVkIGFnYWluc3QgaW5jbHVkaW5nIHRoaXMgZnVuY3Rpb24sIGFuZCBgcHJwX2Ryb3BfZnJhbWVgLCBiZWNhdXNlIHRoZSBtb2RpZmljYXRpb24gYXBwZWFycyBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLiBTaW1pbGFybHksIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAgaXMgb25seSBjYWxsZWQgZm9yIHN1cGVydmlzaW9uIGZyYW1lcywgYW5kIGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWAgaXMgYmFzZWQgb24gYSB0aW1lciwgc28gaXQncyBub3QgaG90LXBhdGguXG5cbkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYWx0ZXJzIGhvdyBzdXBlcnZpc2lvbiBmcmFtZXMgYXJlIGdlbmVyYXRlZCwgdGhlIGNvcmUgbG9naWMgZm9yIGZvcndhcmRpbmcgZnJhbWVzLCBpbiBwYXJ0aWN1bGFyLCB0aGUgZHJvcHBpbmcgYW5kIHJlZ2lzdHJhdGlvbiwgYW5kIGFsc28gaG93IG5vZGUgc2VxdWVuY2UgaXMgaGFuZGxlZC4gVGhpcyBpcyBhbGwgdG8gYWNjb21tb2RhdGUgdGhpcyBQUlAtU0FOIGZlYXR1cmUuIEFkZGl0aW9uYWxseSwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIGJlZW4gc29tZSBmbGV4aWJpbGl0eSBhZGRlZCBpbiBob3cgaW50ZXJsaW5rIHdvcmtzLCByZW1vdmluZyBhIHByZXZpb3VzIG5ldGxpbmsgc2V0dXAgcmVzdHJpY3Rpb24gd2l0aCBIU1IuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBoYXMgc2VyaW91cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBuZXR3b3JrIHN0YWNrLCBzbyBmdXp6aW5nIGlzIGRlZmluaXRlbHkgdGhlIHdheSB0byBnby5cblxuVGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnIHRoYXQgSSBjYW4gc2VlIGlzIGBIU1JgLlxuXG5TbywgdGhlIGtleSBlbGVtZW50cyB0byB0YXJnZXQgZm9yIGZ1enppbmcgYXJlOiBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgLCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgLCBgaHNyX25ld2xpbmtgLCBgcHJwX2Ryb3BfZnJhbWVgLCBhbmQgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgLiBUaW1lIHRvIHNldCB0aGUgcmVzdWx0cyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTgxMzUsIk91dHB1dFRva2VucyI6MTY2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjAwOjU1LjYwODgwMTY2MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMTM1OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZVwiLFxuICAgIFwiaHNyX2hhbmRsZV9zdXBfZnJhbWVcIixcbiAgICBcImhzcl9uZXdsaW5rXCIsXG4gICAgXCJwcnBfZHJvcF9mcmFtZVwiLFxuICAgIFwicHJwX3JlZ2lzdGVyX2ZyYW1lX291dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgUFJQIFJlZEJveCAoUFJQLVNBTikgaW4gdGhlIEhTUi9QUlAgc3Vic3lzdGVtLiBJdCBtb2RpZmllcyBzdXBlcnZpc2lvbiBmcmFtZSBnZW5lcmF0aW9uLCBmcmFtZSBmb3J3YXJkaW5nIGxvZ2ljIChkcm9wcGluZyBhbmQgcmVnaXN0ZXJpbmcpLCBhbmQgbm9kZSBzZXF1ZW5jZSBoYW5kbGluZyB0byBzdXBwb3J0IHRoZSBuZXcgZmVhdHVyZS4gSXQgYWxzbyByZW1vdmVzIHRoZSByZXN0cmljdGlvbiB0aGF0IGludGVybGluayBvbmx5IHdvcmtzIHdpdGggSFNSIGluIG5ldGxpbmsgc2V0dXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbmV0d29yayBzdGFjayB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVcIixcbiAgICBcImhzcl9oYW5kbGVfc3VwX2ZyYW1lXCIsXG4gICAgXCJoc3JfbmV3bGlua1wiLFxuICAgIFwicHJwX2Ryb3BfZnJhbWVcIixcbiAgICBcInBycF9yZWdpc3Rlcl9mcmFtZV9vdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFBSUCBSZWRCb3ggKFBSUC1TQU4pIGluIHRoZSBIU1IvUFJQIHN1YnN5c3RlbS4gSXQgbW9kaWZpZXMgc3VwZXJ2aXNpb24gZnJhbWUgZ2VuZXJhdGlvbiwgZnJhbWUgZm9yd2FyZGluZyBsb2dpYyAoZHJvcHBpbmcgYW5kIHJlZ2lzdGVyaW5nKSwgYW5kIG5vZGUgc2VxdWVuY2UgaGFuZGxpbmcgdG8gc3VwcG9ydCB0aGUgbmV3IGZlYXR1cmUuIEl0IGFsc28gcmVtb3ZlcyB0aGUgcmVzdHJpY3Rpb24gdGhhdCBpbnRlcmxpbmsgb25seSB3b3JrcyB3aXRoIEhTUiBpbiBuZXRsaW5rIHNldHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldHdvcmsgc3RhY2sgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2hn9[1] Phase: Succeeded StartedAt: 2026-07-06 20:01:07 +0000 UTC FinishedAt: 2026-07-06 20:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-06 20:01:07 +0000 UTC FinishedAt: 2026-07-06 20:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2] Phase: Succeeded StartedAt: 2026-07-06 20:01:07 +0000 UTC FinishedAt: 2026-07-07 00:00:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-06 20:01:07 +0000 UTC FinishedAt: 2026-07-07 00:00:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-06 20:01:07 +0000 UTC FinishedAt: 2026-07-06 20:01:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-06 20:01:07 +0000 UTC FinishedAt: 2026-07-06 20:01:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg2hn9/series-workflowg2hn9-convert-artifact-677999432/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-06 20:01:17 +0000 UTC FinishedAt: 2026-07-06 20:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-06 20:01:17 +0000 UTC FinishedAt: 2026-07-06 20:33:26 +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:*fb6b1e02-9491-4e8c-9a69-0f1d29fd2d42,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-workflowg2hn9/series-workflowg2hn9-convert-artifact-677999432/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": "3ee3eb71-a7d3-41e9-bea8-0950789cce22", "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-workflowg2hn9/series-workflowg2hn9-build-action-2101829566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-06 20:01:17 +0000 UTC FinishedAt: 2026-07-06 20:33:16 +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:*fb6b1e02-9491-4e8c-9a69-0f1d29fd2d42,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-workflowg2hn9/series-workflowg2hn9-convert-artifact-677999432/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": "3ee3eb71-a7d3-41e9-bea8-0950789cce22", "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-workflowg2hn9/series-workflowg2hn9-build-action-2101829566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-06 20:33:26 +0000 UTC FinishedAt: 2026-07-06 20:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-06 20:33:26 +0000 UTC FinishedAt: 2026-07-06 20:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-06 20:33:26 +0000 UTC FinishedAt: 2026-07-06 20:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-06 20:33:26 +0000 UTC FinishedAt: 2026-07-06 20:33:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg2hn9/series-workflowg2hn9-convert-artifact-2176412463/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-06 20:33:36 +0000 UTC FinishedAt: 2026-07-06 20:35:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-06 20:33:36 +0000 UTC FinishedAt: 2026-07-06 20:35:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3ee3eb71-a7d3-41e9-bea8-0950789cce22,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-workflowg2hn9/series-workflowg2hn9-build-action-2101829566/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-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-06 20:35:36 +0000 UTC FinishedAt: 2026-07-06 20:35:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-06 20:35:36 +0000 UTC FinishedAt: 2026-07-06 20:35:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-06 20:35:36 +0000 UTC FinishedAt: 2026-07-06 20:56:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-06 20:35:36 +0000 UTC FinishedAt: 2026-07-06 20:56:17 +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:*fb6b1e02-9491-4e8c-9a69-0f1d29fd2d42,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-workflowg2hn9/series-workflowg2hn9-convert-artifact-2176412463/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": "5b75a4ab-18b2-4144-8e2f-2a4b1b512e94", "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-workflowg2hn9/series-workflowg2hn9-build-action-2613655235/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-06 20:35:36 +0000 UTC FinishedAt: 2026-07-06 20:56:07 +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:*fb6b1e02-9491-4e8c-9a69-0f1d29fd2d42,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-workflowg2hn9/series-workflowg2hn9-convert-artifact-2176412463/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": "5b75a4ab-18b2-4144-8e2f-2a4b1b512e94", "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-workflowg2hn9/series-workflowg2hn9-build-action-2613655235/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-06 20:56:17 +0000 UTC FinishedAt: 2026-07-06 20:56:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-06 20:56:17 +0000 UTC FinishedAt: 2026-07-06 20:56:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-06 20:56:17 +0000 UTC FinishedAt: 2026-07-06 20:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-06 20:56:17 +0000 UTC FinishedAt: 2026-07-06 20:58:09 +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:*5b75a4ab-18b2-4144-8e2f-2a4b1b512e94,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-workflowg2hn9/series-workflowg2hn9-build-action-2613655235/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-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-06 20:58:19 +0000 UTC FinishedAt: 2026-07-07 00:00:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-06 20:58:19 +0000 UTC FinishedAt: 2026-07-07 00:00:23 +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":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"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:*3ee3eb71-a7d3-41e9-bea8-0950789cce22,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b75a4ab-18b2-4144-8e2f-2a4b1b512e94,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-workflowg2hn9/series-workflowg2hn9-build-action-2101829566/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-workflowg2hn9/series-workflowg2hn9-build-action-2613655235/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-06 20:58:19 +0000 UTC FinishedAt: 2026-07-06 20:58:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-06 20:58:19 +0000 UTC FinishedAt: 2026-07-06 20:58:29 +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":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"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-workflowg2hn9/series-workflowg2hn9-convert-artifact-3575123688/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-06 20:58:19 +0000 UTC FinishedAt: 2026-07-06 20:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-06 20:58:19 +0000 UTC FinishedAt: 2026-07-06 20:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-06 20:58:20 +0000 UTC FinishedAt: 2026-07-06 20:58:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-06 20:58:53 +0000 UTC FinishedAt: 2026-07-07 00:00:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2hn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","hsr_handle_sup_frame","hsr_newlink","prp_drop_frame","prp_register_frame_out"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3582a5c8-697a-48e7-8b00-1985b93c0417","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-06 20:58:53 +0000 UTC FinishedAt: 2026-07-07 00:00:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3ee3eb71-a7d3-41e9-bea8-0950789cce22,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b75a4ab-18b2-4144-8e2f-2a4b1b512e94,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-workflowg2hn9/series-workflowg2hn9-build-action-2101829566/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-workflowg2hn9/series-workflowg2hn9-build-action-2613655235/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-workflowg2hn9/series-workflowg2hn9-convert-artifact-3575123688/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,}