Name: series-workflowd6hrx Phase: Succeeded StartedAt: 2026-09-09 20:02:15 +0000 UTC FinishedAt: 2026-09-09 23:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[0] Phase: Succeeded StartedAt: 2026-09-09 20:02:15 +0000 UTC FinishedAt: 2026-09-09 20:05:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 20:02:15 +0000 UTC FinishedAt: 2026-09-09 20:05:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCSI", "CHR_DEV_SG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCSI", "CHR_DEV_SG" ], "series_id": "92434e3b-e73b-48fe-9cdc-82bc2a06a70b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sg_build_indirect", "scatter_elem_sz_set", "sg_build_reserve" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDU0kmIzM0OywKICAgICYjMzQ7Q0hSX0RFVl9TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NnX2J1aWxkX2luZGlyZWN0JiMzNDssCiAgICAmIzM0O3NjYXR0ZXJfZWxlbV9zel9zZXQmIzM0OywKICAgICYjMzQ7c2dfYnVpbGRfcmVzZXJ2ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbW9kdWxlIHBhcmFtZXRlciB2YWxpZGF0aW9uIGZvciBgc2NhdHRlcl9lbGVtX3N6YCBpbiBgZHJpdmVycy9zY3NpL3NnLmNgIGJ5IGFkZGluZyBhIGN1c3RvbSBzZXR0ZXIgY2FsbGJhY2sgYHNjYXR0ZXJfZWxlbV9zel9zZXQoKWAgdG8gdmFsaWRhdGUgYm91bmRzLCBhbmQgY2xlYW5zIHVwIHRoZSBvcmRlciBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgc2dfYnVpbGRfaW5kaXJlY3QoKWAgd2hpbGUgcmVtb3ZpbmcgdGhlIHJlZHVuZGFudCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIHZhcmlhYmxlLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQ6XG4xLiBNZW1vcnkgYWxsb2NhdGlvbnMgZm9yIHNjYXR0ZXItZ2F0aGVyIHBhZ2VzIHVzZSBgX19HRlBfWkVST2AgYW5kIHRhYmxlcyB1c2UgYGt6YWxsb2NgLlxuMi4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIG9yZGVyIGNhbGN1bGF0aW9uIGFuZCBsb29wIGluZGV4aW5nIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBzdGFjayBwcmltaXRpdmVzLlxuMy4gTm8gZGF0YSBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlLlxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIGFsbG9jYXRpb24gYm91bmRzLCBidWZmZXIgc2l6ZXMsIG9yIG9yZGVyIGNhbGN1bGF0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgc2FmZXR5IGNhdWdodCBieSBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgZGV0ZWN0ZWQgYnkgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTQ1NJIGdlbmVyaWMgZHJpdmVyIChzZykgc2NhdHRlci1nYXRoZXIgYnVmZmVyIGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24gbG9naWMuIEl0IHJlcGxhY2VzIGR5bmFtaWMgbW9kdWxlIHBhcmFtZXRlciBjaGVja2luZyBpbiBzZ19idWlsZF9pbmRpcmVjdCB3aXRoIGEgZGVkaWNhdGVkIG1vZHVsZV9wYXJhbV9jYiBzZXR0ZXIgKHNjYXR0ZXJfZWxlbV9zel9zZXQpIGFuZCBzaW1wbGlmaWVzIHRoZSBhbGxvY2F0aW9uIGxvb3AgY2FsY3VsYXRpb24uIFNDU0kgZ2VuZXJpYyBkZXZpY2VzIGFyZSBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzc2ZTM1MGI1MDc1ZmNjMTA5MDY0ZTBjMDk5YzE0N2U3MGNiODAzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjA6MDQ6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuY1xuaW5kZXggNTQwOGYwMDJlNmMwMS4uNGM4MmZjMDBkMDVkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Njc2kvc2cuY1xuQEAgLTkyLDcgJiM0Mzs5Miw2IEBAIHN0YXRpYyBpbnQgZGVmX3Jlc2VydmVkX3NpemUgPSBTR19ERUZfUkVTRVJWRURfU0laRTtcbiBzdGF0aWMgaW50IHNnX2FsbG93X2RpbyA9IFNHX0FMTE9XX0RJT19ERUY7XG4gXG4gc3RhdGljIGludCBzY2F0dGVyX2VsZW1fc3ogPSBTR19TQ0FUVEVSX1NaO1xuLXN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBTR19TQ0FUVEVSX1NaO1xuIFxuICNkZWZpbmUgU0dfU0VDVE9SX1NaIDUxMlxuIFxuQEAgLTE2MjEsOSAmIzQzOzE2MjAsMzMgQEAgc2dfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpjbF9kZXYpXG4gXHRrcmVmX3B1dChcdTAwMjZzZHAtXHUwMDNlZF9yZWYsIHNnX2RldmljZV9kZXN0cm95KTtcbiB9XG4gXG4tbW9kdWxlX3BhcmFtX25hbWVkKHNjYXR0ZXJfZWxlbV9zeiwgc2NhdHRlcl9lbGVtX3N6LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTtcbiBtb2R1bGVfcGFyYW1fbmFtZWQoYWxsb3dfZGlvLCBzZ19hbGxvd19kaW8sIGludCwgU19JUlVHTyB8IFNfSVdVU1IpO1xuIFxuJiM0MztzdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zel9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbiYjNDM7e1xuJiM0MztcdGludCBzaXplLCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzdHJ0b2ludCh2YWwsIDAsIFx1MDAyNnNpemUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc2l6ZSBcdTAwM2MgUEFHRV9TSVpFIHx8IHNpemUgXHUwMDNlIChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIE1BWF9QQUdFX09SREVSKSlcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHRzY2F0dGVyX2VsZW1fc3ogPSBzaXplO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgc2NhdHRlcl9lbGVtX3N6X29wcyA9IHtcbiYjNDM7XHQuc2V0XHQ9IHNjYXR0ZXJfZWxlbV9zel9zZXQsXG4mIzQzO1x0LmdldFx0PSBwYXJhbV9nZXRfaW50LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7bW9kdWxlX3BhcmFtX2NiKHNjYXR0ZXJfZWxlbV9zeiwgXHUwMDI2c2NhdHRlcl9lbGVtX3N6X29wcywgXHUwMDI2c2NhdHRlcl9lbGVtX3N6LCAwNjQ0KTtcbiYjNDM7XG4gc3RhdGljIGludCBkZWZfcmVzZXJ2ZWRfc2l6ZV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbiB7XG4gXHRpbnQgc2l6ZSwgcmV0O1xuQEAgLTE2NjcsMTAgJiM0MzsxNjkwLDggQEAgaW5pdF9zZyh2b2lkKVxuIHtcbiBcdGludCByYztcbiBcbi1cdGlmIChzY2F0dGVyX2VsZW1fc3ogXHUwMDNjIFBBR0VfU0laRSkge1xuJiM0MztcdGlmIChzY2F0dGVyX2VsZW1fc3ogXHUwMDNjIFBBR0VfU0laRSlcbiBcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuLVx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHNjYXR0ZXJfZWxlbV9zejtcbi1cdH1cbiBcbiBcdHJjID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihTQ1NJX0dFTkVSSUNfTUFKT1IsIDApLCBcbiBcdFx0XHRcdCAgICBTR19NQVhfREVWUywgXCYjMzQ7c2dcJiMzNDspO1xuQEAgLTE4NzMsMzYgJiM0MzsxODk0LDE5IEBAIHNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuIFx0aWYgKG14X3NjX2VsZW1zIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gbXhfc2NfZWxlbXM7XHQvKiBtb3N0IGxpa2VseSAtRU5PTUVNICovXG4gXG4tXHRudW0gPSBzY2F0dGVyX2VsZW1fc3o7XG4tXHRpZiAodW5saWtlbHkobnVtICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuLVx0XHRpZiAobnVtIFx1MDAzYyBQQUdFX1NJWkUpIHtcbi1cdFx0XHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XG4tXHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7XG4tXHRcdH0gZWxzZVxuLVx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtO1xuLVx0fVxuLVxuLVx0b3JkZXIgPSBnZXRfb3JkZXIobnVtKTtcbiYjNDM7XHRvcmRlciA9IGdldF9vcmRlcihzY2F0dGVyX2VsZW1fc3opO1xuIHJldHJ5OlxuIFx0cmV0X3N6ID0gMSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpO1xuIFxuIFx0Zm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgayBcdTAwM2MgbXhfc2NfZWxlbXM7XG4gXHQgICAgIGsmIzQzOyYjNDM7LCByZW1fc3ogLT0gcmV0X3N6KSB7XG4gXG4tXHRcdG51bSA9IChyZW1fc3ogXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSA/XG4tXHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgOiByZW1fc3o7XG4mIzQzO1x0XHRudW0gPSBtaW4ocmVtX3N6LCByZXRfc3opO1xuIFxuIFx0XHRzY2hwLVx1MDAzZXBhZ2VzW2tdID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKTtcbiBcdFx0aWYgKCFzY2hwLVx1MDAzZXBhZ2VzW2tdKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuLVx0XHRpZiAobnVtID09IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSB7XG4tXHRcdFx0aWYgKHVubGlrZWx5KHJldF9zeiBcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7XG4tXHRcdFx0XHRzY2F0dGVyX2VsZW1fc3ogPSByZXRfc3o7XG4tXHRcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHJldF9zejtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbiBcdFx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG4gXHRcdFx0XHQgXCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGs9JWQsIG51bT0lZCwgcmV0X3N6PSVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0IGssIG51bSwgcmV0X3N6KSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjA6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0NTSSYjMzQ7LAogICAgJiMzNDtDSFJfREVWX1NHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2dfYnVpbGRfaW5kaXJlY3QmIzM0OywKICAgICYjMzQ7c2NhdHRlcl9lbGVtX3N6X3NldCYjMzQ7LAogICAgJiMzNDtzZ19idWlsZF9yZXNlcnZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTQ1NJIGdlbmVyaWMgZHJpdmVyIChzZykgc2NhdHRlci1nYXRoZXIgYnVmZmVyIGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24gbG9naWMuIEl0IHJlcGxhY2VzIGR5bmFtaWMgbW9kdWxlIHBhcmFtZXRlciBjaGVja2luZyBpbiBzZ19idWlsZF9pbmRpcmVjdCB3aXRoIGEgZGVkaWNhdGVkIG1vZHVsZV9wYXJhbV9jYiBzZXR0ZXIgKHNjYXR0ZXJfZWxlbV9zel9zZXQpIGFuZCBzaW1wbGlmaWVzIHRoZSBhbGxvY2F0aW9uIGxvb3AgY2FsY3VsYXRpb24uIFNDU0kgZ2VuZXJpYyBkZXZpY2VzIGFyZSBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzc2ZTM1MGI1MDc1ZmNjMTA5MDY0ZTBjMDk5YzE0N2U3MGNiODAzYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMjA6MDQ6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IDU0MDhmMDAyZTZjMDEuLjRjODJmYzAwZDA1ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC05Miw3ICYjNDM7OTIsNiBAQCBzdGF0aWMgaW50IGRlZl9yZXNlcnZlZF9zaXplID0gU0dfREVGX1JFU0VSVkVEX1NJWkU7CiBzdGF0aWMgaW50IHNnX2FsbG93X2RpbyA9IFNHX0FMTE9XX0RJT19ERUY7CiAKIHN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6ID0gU0dfU0NBVFRFUl9TWjsKLXN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBTR19TQ0FUVEVSX1NaOwogCiAjZGVmaW5lIFNHX1NFQ1RPUl9TWiA1MTIKIApAQCAtMTYyMSw5ICYjNDM7MTYyMCwzMyBAQCBzZ19yZW1vdmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmNsX2RldikKIAlrcmVmX3B1dCgmYW1wO3NkcC0mZ3Q7ZF9yZWYsIHNnX2RldmljZV9kZXN0cm95KTsKIH0KIAotbW9kdWxlX3BhcmFtX25hbWVkKHNjYXR0ZXJfZWxlbV9zeiwgc2NhdHRlcl9lbGVtX3N6LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChhbGxvd19kaW8sIHNnX2FsbG93X2RpbywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiAKJiM0MztzdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zel9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKJiM0Mzt7CiYjNDM7CWludCBzaXplLCByZXQ7CiYjNDM7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldCA9IGtzdHJ0b2ludCh2YWwsIDAsICZhbXA7c2l6ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoc2l6ZSAmbHQ7IFBBR0VfU0laRSB8fCBzaXplICZndDsgKFBBR0VfU0laRSAmbHQ7Jmx0OyBNQVhfUEFHRV9PUkRFUikpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJc2NhdHRlcl9lbGVtX3N6ID0gc2l6ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBzY2F0dGVyX2VsZW1fc3pfb3BzID0gewomIzQzOwkuc2V0CT0gc2NhdHRlcl9lbGVtX3N6X3NldCwKJiM0MzsJLmdldAk9IHBhcmFtX2dldF9pbnQsCiYjNDM7fTsKJiM0MzsKJiM0Mzttb2R1bGVfcGFyYW1fY2Ioc2NhdHRlcl9lbGVtX3N6LCAmYW1wO3NjYXR0ZXJfZWxlbV9zel9vcHMsICZhbXA7c2NhdHRlcl9lbGVtX3N6LCAwNjQ0KTsKJiM0MzsKIHN0YXRpYyBpbnQgZGVmX3Jlc2VydmVkX3NpemVfc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CiAJaW50IHNpemUsIHJldDsKQEAgLTE2NjcsMTAgJiM0MzsxNjkwLDggQEAgaW5pdF9zZyh2b2lkKQogewogCWludCByYzsKIAotCWlmIChzY2F0dGVyX2VsZW1fc3ogJmx0OyBQQUdFX1NJWkUpIHsKJiM0MzsJaWYgKHNjYXR0ZXJfZWxlbV9zeiAmbHQ7IFBBR0VfU0laRSkKIAkJc2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFOwotCQlzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHNjYXR0ZXJfZWxlbV9zejsKLQl9CiAKIAlyYyA9IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoU0NTSV9HRU5FUklDX01BSk9SLCAwKSwgCiAJCQkJICAgIFNHX01BWF9ERVZTLCAmIzM0O3NnJiMzNDspOwpAQCAtMTg3MywzNiAmIzQzOzE4OTQsMTkgQEAgc2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpCiAJaWYgKG14X3NjX2VsZW1zICZsdDsgMCkKIAkJcmV0dXJuIG14X3NjX2VsZW1zOwkvKiBtb3N0IGxpa2VseSAtRU5PTUVNICovCiAKLQludW0gPSBzY2F0dGVyX2VsZW1fc3o7Ci0JaWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHsKLQkJaWYgKG51bSAmbHQ7IFBBR0VfU0laRSkgewotCQkJc2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFOwotCQkJc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7Ci0JCX0gZWxzZQotCQkJc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBudW07Ci0JfQotCi0Jb3JkZXIgPSBnZXRfb3JkZXIobnVtKTsKJiM0MzsJb3JkZXIgPSBnZXRfb3JkZXIoc2NhdHRlcl9lbGVtX3N6KTsKIHJldHJ5OgogCXJldF9zeiA9IDEgJmx0OyZsdDsgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpOwogCiAJZm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiAmZ3Q7IDAgJmFtcDsmYW1wOyBrICZsdDsgbXhfc2NfZWxlbXM7CiAJICAgICBrJiM0MzsmIzQzOywgcmVtX3N6IC09IHJldF9zeikgewogCi0JCW51bSA9IChyZW1fc3ogJmd0OyBzY2F0dGVyX2VsZW1fc3pfcHJldikgPwotCQkJc2NhdHRlcl9lbGVtX3N6X3ByZXYgOiByZW1fc3o7CiYjNDM7CQludW0gPSBtaW4ocmVtX3N6LCByZXRfc3opOwogCiAJCXNjaHAtJmd0O3BhZ2VzW2tdID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKTsKIAkJaWYgKCFzY2hwLSZndDtwYWdlc1trXSkKIAkJCWdvdG8gb3V0OwogCi0JCWlmIChudW0gPT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpIHsKLQkJCWlmICh1bmxpa2VseShyZXRfc3ogJmd0OyBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHsKLQkJCQlzY2F0dGVyX2VsZW1fc3ogPSByZXRfc3o7Ci0JCQkJc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSByZXRfc3o7Ci0JCQl9Ci0JCX0KLQogCQlTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC0mZ3Q7cGFyZW50ZHAsCiAJCQkJICYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGs9JWQsIG51bT0lZCwgcmV0X3N6PSVkXG4mIzM0OywKIAkJCQkgaywgbnVtLCByZXRfc3opKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg4NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhhdCBwYXRjaCBhbmFseXNpcywgYmFzZWQgb24gbXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmc6CgoqKlBhdGNoIEZ1enppbmcgU3RyYXRlZ3k6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCBpcyBldmVuIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIHRvIHF1aWNrbHkgaW5zcGVjdCB0aGUgZmlsZSBpdHNlbGYgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBpbW1lZGlhdGUgZ29hbHMgYXJlIHRvIGRldGVybWluZToKCiogICAqKkZ1enogV29ydGhpbmVzczoqKiBJcyB0aGVyZSBhbnl0aGluZyBoZXJlIHRoYXQgbG9va3MgbGlrZSBpdCYjMzk7cyBoYW5kbGluZyBwb3RlbnRpYWxseSB1bnRydXN0ZWQgZGF0YSwgaW52b2x2ZXMgY29tcGxleCBzdGF0ZSB0cmFuc2l0aW9ucywgb3IgZGVhbHMgd2l0aCByZXNvdXJjZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbj8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIG1lbW9yeSBjb3JydXB0aW9uLCBpbnRlZ2VyIG92ZXJmbG93cywgb3IgcmFjZSBjb25kaXRpb25zPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHdoZXJlIHRvIGxvb2sgZmlyc3QsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2l0aCBhIHRob3JvdWdoIGxvb2suCiogICAqKkNvbmZpZ3VyYXRpb246KiogV2hhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB3aWxsIGJlIG5lZWRlZCB0byB0cmlnZ2VyIHRoZSBjb2RlIGNoYW5nZXMgZWZmZWN0aXZlbHk/IEFyZSB0aGVyZSBrZXJuZWwgb3B0aW9ucywgbW9kdWxlIHBhcmFtZXRlcnMsIG9yIHN5c2ZzIGVudHJpZXMgdGhhdCBuZWVkIHRvIGJlIHNldD8gQXJlIHRoZXJlIHBhcnRpY3VsYXIgaGFyZHdhcmUgc2V0dXBzIEkgbmVlZCB0byBlbXVsYXRlPyBUaGUgZGV2aWwgaXMgaW4gdGhlc2UgZGV0YWlscy4KKiAgICoqRm9jdXMgU3ltYm9sczoqKiBCYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzLCB3aGF0IGFyZSB0aGUgbW9zdCBjcml0aWNhbCBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRhcmdldCB3aXRoIHRoZSBmdXp6ZXI/IFdoYXQgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCBjYWxsYmFja3MsIG9yIHNlbnNpdGl2ZSBvcGVyYXRpb25zIHRoYXQgSSBjYW4gJiMzNDtob29rJiMzNDsgdG8gZ2V0IHRoZSBmdXp6ZXIgdG8gZW5nYWdlIHdpdGggdGhlIG1vZGlmaWVkIGNvZGUgcGF0aD8gVGhpcyB3aWxsIGludm9sdmUgaWRlbnRpZnlpbmcgdGhlIGNyaXRpY2FsIGxvZ2ljIHRoYXQgbmVlZHMgdG8gYmUgdHJpZ2dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19DSFJfREVWX1NHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9NYWtlZmlsZT0xNzM9b2JqLSQoQ09ORklHX0JMS19ERVZfU1IpXHQmIzQzOz0gc3JfbW9kLm9cbmRyaXZlcnMvc2NzaS9NYWtlZmlsZToxNzQ6b2JqLSQoQ09ORklHX0NIUl9ERVZfU0cpXHQmIzQzOz0gc2cub1xuZHJpdmVycy9zY3NpL01ha2VmaWxlLTE3NS1vYmotJChDT05GSUdfQ0hSX0RFVl9TQ0gpXHQmIzQzOz0gY2gub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6CgoqKkV4YW1pbmluZyBTQ1NJIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgQ0hSX0RFVl9TR2AgaXMgZGVmaW5lZCwgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyBhbG1vc3QgYWx3YXlzIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggU0NTSSwgSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gYGRyaXZlcnMvc2NzaS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgU0NTSSBzdWJzeXN0ZW0gc2hvdWxkIGJlIGRlY2xhcmVkLCBhbmQgd2hlcmUgSSBjYW4gZmluZCB0aGUgZGVwZW5kZW5jeSBkZWZpbml0aW9ucyBvZiBgQ0hSX0RFVl9TR2AuIEkgZXhwZWN0IHRoaXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgaHVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENIUl9ERVZfU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL0tjb25maWc9MTE2PWNvbmZpZyBCTEtfREVWX1NSXG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWctMTMwLVxuZHJpdmVycy9zY3NpL0tjb25maWc6MTMxOmNvbmZpZyBDSFJfREVWX1NHXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy0xMzItXHR0cmlzdGF0ZSBcJiMzNDtTQ1NJIGdlbmVyaWMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgU0NTSSBLY29uZmlnIEZpbGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgZHJpdmVycy9zY3NpL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTMxLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBhcmVhIGxpa2VseSBkZWFscyB3aXRoIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBhIHJlbGF0ZWQgZ3JvdXBpbmcgd2l0aGluIHRoZSBTQ1NJIHN1YnN5c3RlbS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LCBhIG1lbnUgZW50cnksIG9yIHBlcmhhcHMgYSBkZXBlbmRlbmN5IGRlY2xhcmF0aW9uIHRoYXQgaW5mbHVlbmNlcyBob3cgU0NTSSBkcml2ZXJzIGFyZSBjb21waWxlZCBhbmQgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IHBhcnNlIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoYXQgbGluZSB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBhbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgYmVpbmcgY29udHJvbGxlZCB0aGVyZS4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgdGFyZ2V0cyB0aGlzIGFmZmVjdHMuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjU6XHRcdCAgTWFrZSBzdXJlIHRvIHNheSBZIG9yIE0gdG8gXCYjMzQ7SVNPIDk2NjAgQ0QtUk9NIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDsuXG4gMTI2Olx0XG4gMTI3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUgYW5kIHJlYWRcbiAxMjg6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL3Njc2kvc2NzaS5yc3RcdTAwM2UuXG4gMTI5Olx0XHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3JfbW9kLlxuIDEzMDpcdFxuIDEzMTpcdGNvbmZpZyBDSFJfREVWX1NHXG4gMTMyOlx0XHR0cmlzdGF0ZSBcJiMzNDtTQ1NJIGdlbmVyaWMgc3VwcG9ydFwmIzM0O1xuIDEzMzpcdFx0ZGVwZW5kcyBvbiBTQ1NJXG4gMTM0Olx0XHRoZWxwXG4gMTM1Olx0XHQgIElmIHlvdSB3YW50IHRvIHVzZSBTQ1NJIHNjYW5uZXJzLCBzeW50aGVzaXplcnMgb3IgQ0Qtd3JpdGVycyBvciBqdXN0XG4gMTM2Olx0XHQgIGFib3V0IGFueXRoaW5nIGhhdmluZyBcJiMzNDtTQ1NJXCYjMzQ7IGluIGl0cyBuYW1lIG90aGVyIHRoYW4gaGFyZCBkaXNrcyxcbiAxMzc6XHRcdCAgQ0QtUk9NcyBvciB0YXBlcywgc2F5IFkgaGVyZS4gVGhlc2Ugd29uJiMzOTt0IGJlIHN1cHBvcnRlZCBieSB0aGUga2VybmVsXG4gMTM4Olx0XHQgIGRpcmVjdGx5LCBzbyB5b3UgbmVlZCBzb21lIGFkZGl0aW9uYWwgc29mdHdhcmUgd2hpY2gga25vd3MgaG93IHRvXG4gMTM5Olx0XHQgIHRhbGsgdG8gdGhlc2UgZGV2aWNlcyB1c2luZyB0aGUgU0NTSSBwcm90b2NvbDpcbiAxNDA6XHRcbiAxNDE6XHRcdCAgRm9yIHNjYW5uZXJzLCBsb29rIGF0IFNBTkUgKFx1MDAzY2h0dHA6Ly93d3cuc2FuZS1wcm9qZWN0Lm9yZy9cdTAwM2UpLiBGb3IgQ0RcbiAxNDI6XHRcdCAgd3JpdGVyIHNvZnR3YXJlIGxvb2sgYXQgQ2RydG9vbHNcbiAxNDM6XHRcdCAgKFx1MDAzY2h0dHA6Ly9jZHJ0b29scy5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlKVxuIDE0NDpcdFx0ICBhbmQgZm9yIGJ1cm5pbmcgYSBcJiMzNDtkaXNrIGF0IG9uY2VcJiMzNDs6IENEUkRBT1xuIDE0NTpcdFx0ICAoXHUwMDNjaHR0cDovL2NkcmRhby5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlKS4gQ2RwYXJhbm9pYSBpcyBhIGhpZ2hcbiAxNDY6XHRcdCAgcXVhbGl0eSBkaWdpdGFsIHJlYWRlciBvZiBhdWRpbyBDRHMgKFx1MDAzY2h0dHA6Ly93d3cueGlwaC5vcmcvcGFyYW5vaWEvXHUwMDNlKS5cbiAxNDc6XHRcdCAgRm9yIG90aGVyIGRldmljZXMsIGl0JiMzOTtzIHBvc3NpYmxlIHRoYXQgeW91JiMzOTtsbCBoYXZlIHRvIHdyaXRlIHRoZVxuIDE0ODpcdFx0ICBkcml2ZXIgc29mdHdhcmUgeW91cnNlbGYuIFBsZWFzZSByZWFkIHRoZSBmaWxlXG4gMTQ5Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9zY3NpL3Njc2ktZ2VuZXJpYy5yc3RcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gMTUwOlx0XG4gMTUxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUgYW5kIHJlYWRcbiAxNTI6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL3Njc2kvc2NzaS5yc3RcdTAwM2UuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2cuXG4gMTUzOlx0XG4gMTU0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ0MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgU0NTSSBEcml2ZXIgQ2hhbmdlcyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzIHNwZWNpZmljIGlzc3VlLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGRyaXZlcnMvc2NzaS9zZy5jYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGludGVyZXN0aW5nIFNDU0kgZ2VuZXJpYyBkcml2ZXIgc3R1ZmYgaGFwcGVucywgZXNwZWNpYWxseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNjYXR0ZXItZ2F0aGVyIGFuZCBpbmRpcmVjdCBkYXRhIHRyYW5zZmVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBhcm91bmQgYHNnX2J1aWxkX2luZGlyZWN0YCBhbmQgYHNjYXR0ZXJfZWxlbV9zel9zZXRgLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LCBhbmQgd2hhdCBjb250ZXh0IHRoZXkmIzM5O3JlIGNhbGxlZCB3aXRoaW4uIEl04oCZcyBhbHdheXMgYmVzdCB0byB1bmRlcnN0YW5kIHRoZSBiZWZvcmUgYW5kIGFmdGVyLCB0byBiZSBjZXJ0YWluIG9mIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIHNldCB1cCwgaG93IHRoZSBjb21tYW5kcyBhcmUgYnVpbHQsIGFuZCBob3cgdGhlIHNjYXR0ZXItZ2F0aGVyIGxpc3RzIGFyZSBtYW5hZ2VkLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMuIEkgc3VzcGVjdCB0aGF0IHRoZXJlIGlzIGEgc3VidGxlIGlzc3VlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjU6XHRcdGdmcF90IGdmcF9mbGFncyA9IEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk47XG4xODY2Olx0XG4xODY3Olx0XHRzY2hwLVx1MDAzZXBhZ2VzID0ga3phbGxvYyhzZ19idWZmbGVuLCBnZnBfZmxhZ3MpO1xuMTg2ODpcdFx0aWYgKCFzY2hwLVx1MDAzZXBhZ2VzKVxuMTg2OTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE4NzA6XHRcdHNjaHAtXHUwMDNlc2dsaXN0X2xlbiA9IHNnX2J1ZmZsZW47XG4xODcxOlx0XHRyZXR1cm4gdGFibGVzaXplO1x0LyogbnVtYmVyIG9mIHNjYXRfZ2F0aCBlbGVtZW50cyBhbGxvY2F0ZWQgKi9cbjE4NzI6XHR9XG4xODczOlx0XG4xODc0Olx0c3RhdGljIGludFxuMTg3NTpcdHNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuMTg3NjpcdHtcbjE4Nzc6XHRcdGludCByZXRfc3ogPSAwLCBpLCBrLCByZW1fc3osIG51bSwgbXhfc2NfZWxlbXM7XG4xODc4Olx0XHRpbnQgc2dfdGFibGVzaXplID0gc2ZwLVx1MDAzZXBhcmVudGRwLVx1MDAzZXNnX3RhYmxlc2l6ZTtcbjE4Nzk6XHRcdGludCBibGtfc2l6ZSA9IGJ1ZmZfc2l6ZSwgb3JkZXI7XG4xODgwOlx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9BVE9NSUMgfCBfX0dGUF9DT01QIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTztcbjE4ODE6XHRcbjE4ODI6XHRcdGlmIChibGtfc2l6ZSBcdTAwM2MgMClcbjE4ODM6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xODg0Olx0XHRpZiAoMCA9PSBibGtfc2l6ZSlcbjE4ODU6XHRcdFx0JiM0MzsmIzQzO2Jsa19zaXplO1x0LyogZG9uJiMzOTt0IGtub3cgd2h5ICovXG4xODg2Olx0XHQvKiByb3VuZCByZXF1ZXN0IHVwIHRvIG5leHQgaGlnaGVzdCBTR19TRUNUT1JfU1ogYnl0ZSBib3VuZGFyeSAqL1xuMTg4NzpcdFx0YmxrX3NpemUgPSBBTElHTihibGtfc2l6ZSwgU0dfU0VDVE9SX1NaKTtcbjE4ODg6XHRcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuMTg4OTpcdFx0XHRcJiMzNDtzZ19idWlsZF9pbmRpcmVjdDogYnVmZl9zaXplPSVkLCBibGtfc2l6ZT0lZFxcblwmIzM0OyxcbjE4OTA6XHRcdFx0YnVmZl9zaXplLCBibGtfc2l6ZSkpO1xuMTg5MTpcdFxuMTg5MjpcdFx0LyogTi5CLiByZXRfc3ogY2FycmllZCBpbnRvIHRoaXMgYmxvY2sgLi4uICovXG4xODkzOlx0XHRteF9zY19lbGVtcyA9IHNnX2J1aWxkX3NnYXQoc2NocCwgc2ZwLCBzZ190YWJsZXNpemUpO1xuMTg5NDpcdFx0aWYgKG14X3NjX2VsZW1zIFx1MDAzYyAwKVxuMTg5NTpcdFx0XHRyZXR1cm4gbXhfc2NfZWxlbXM7XHQvKiBtb3N0IGxpa2VseSAtRU5PTUVNICovXG4xODk2Olx0XG4xODk3Olx0XHRvcmRlciA9IGdldF9vcmRlcihzY2F0dGVyX2VsZW1fc3opO1xuMTg5ODpcdHJldHJ5OlxuMTg5OTpcdFx0cmV0X3N6ID0gMSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpO1xuMTkwMDpcdFxuMTkwMTpcdFx0Zm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgayBcdTAwM2MgbXhfc2NfZWxlbXM7XG4xOTAyOlx0XHQgICAgIGsmIzQzOyYjNDM7LCByZW1fc3ogLT0gcmV0X3N6KSB7XG4xOTAzOlx0XG4xOTA0Olx0XHRcdG51bSA9IG1pbihyZW1fc3osIHJldF9zeik7XG4xOTA1Olx0XG4xOTA2Olx0XHRcdHNjaHAtXHUwMDNlcGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xuMTkwNzpcdFx0XHRpZiAoIXNjaHAtXHUwMDNlcGFnZXNba10pXG4xOTA4Olx0XHRcdFx0Z290byBvdXQ7XG4xOTA5Olx0XG4xOTEwOlx0XHRcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuMTkxMTpcdFx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwmIzM0OyxcbjE5MTI6XHRcdFx0XHRcdCBrLCBudW0sIHJldF9zeikpO1xuMTkxMzpcdFx0fVx0XHQvKiBlbmQgb2YgZm9yIGxvb3AgKi9cbjE5MTQ6XHRcbjE5MTU6XHRcdHNjaHAtXHUwMDNlcGFnZV9vcmRlciA9IG9yZGVyO1xuMTkxNjpcdFx0c2NocC1cdTAwM2VrX3VzZV9zZyA9IGs7XG4xOTE3Olx0XHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbjE5MTg6XHRcdFx0XHQgXCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGtfdXNlX3NnPSVkLCByZW1fc3o9JWRcXG5cJiMzNDssXG4xOTE5Olx0XHRcdFx0IGssIHJlbV9zeikpO1xuMTkyMDpcdFxuMTkyMTpcdFx0c2NocC1cdTAwM2VidWZmbGVuID0gYmxrX3NpemU7XG4xOTIyOlx0XHRpZiAocmVtX3N6IFx1MDAzZSAwKVx0LyogbXVzdCBoYXZlIGZhaWxlZCAqL1xuMTkyMzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE5MjQ6XHRcdHJldHVybiAwO1xuMTkyNTpcdG91dDpcbjE5MjY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGs7IGkmIzQzOyYjNDM7KVxuMTkyNzpcdFx0XHRfX2ZyZWVfcGFnZXMoc2NocC1cdTAwM2VwYWdlc1tpXSwgb3JkZXIpO1xuMTkyODpcdFxuMTkyOTpcdFx0aWYgKC0tb3JkZXIgXHUwMDNlPSAwKVxuMTkzMDpcdFx0XHRnb3RvIHJldHJ5O1xuMTkzMTpcdFxuMTkzMjpcdFx0cmV0dXJuIC1FTk9NRU07XG4xOTMzOlx0fVxuMTkzNDpcdFxuMTkzNTpcdHN0YXRpYyB2b2lkXG4xOTM2Olx0c2dfcmVtb3ZlX3NjYXQoU2dfZmQgKiBzZnAsIFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHApXG4xOTM3Olx0e1xuMTkzODpcdFx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG4xOTM5Olx0XHRcdFx0IFwmIzM0O3NnX3JlbW92ZV9zY2F0OiBrX3VzZV9zZz0lZFxcblwmIzM0Oywgc2NocC1cdTAwM2VrX3VzZV9zZykpO1xuMTk0MDpcdFx0aWYgKHNjaHAtXHUwMDNlcGFnZXMgXHUwMDI2XHUwMDI2IHNjaHAtXHUwMDNlc2dsaXN0X2xlbiBcdTAwM2UgMCkge1xuMTk0MTpcdFx0XHRpZiAoIXNjaHAtXHUwMDNlZGlvX2luX3VzZSkge1xuMTk0MjpcdFx0XHRcdGludCBrO1xuMTk0MzpcdFxuMTk0NDpcdFx0XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIHNjaHAtXHUwMDNla191c2Vfc2cgXHUwMDI2XHUwMDI2IHNjaHAtXHUwMDNlcGFnZXNba107IGsmIzQzOyYjNDM7KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNzAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0NTSSBHZW5lcmljIERyaXZlciBpbiBhIFZpcnR1YWxpemVkIENvbnRleHQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGBkcml2ZXJzL3Njc2kvc2cuY2AgZmlsZSwgdGhlIGNvcmUgb2YgdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIsIGV4cG9zZWQgdGhyb3VnaCBgL2Rldi9zZypgIGRldmljZXMuIE15IGtleSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpcyByZWxldmFudCB3aXRoaW4gUUVNVSBvciBvdGhlciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFuZCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gU0NTSSBnZW5lcmljIGRldmljZXMsIGxpa2UgYC9kZXYvc2cwYCwgYC9kZXYvc2cxYCwgb3IgZXZlbiB0aGUgZGVidWcgZGV2aWNlcyBvciBlbXVsYXRlZCBTQ1NJIGRyaXZlcywgYXJlIHN0YW5kYXJkIGZhcmUgaW4gUUVNVS4gVGhhdCYjMzk7cyBnb29kIG5ld3M7IGl0IG1lYW5zIEkgY2FuIHBvdGVudGlhbGx5IHVzZSB0aGlzIGZvciB2dWxuZXJhYmlsaXR5IHJlc2VhcmNoLiBBbHNvLCB0aGUgZmFjdCB0aGF0IHN5emthbGxlciBhY3RpdmVseSBmdXp6ZXMgYC9kZXYvc2cqYCBhbmQgaXRzIGFzc29jaWF0ZWQgaW9jdGxzIGlzIGEgbWFqb3IgcG9pbnQgaW4gaXRzIGZhdm91ci4KCk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjb2RlIGl0c2VsZi4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgdG8gZmluZCBvdXQgY2FsbGVycyBvZiBgc2dfYnVpbGRfaW5kaXJlY3RgLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gb24gaG93IHN5emthbGxlciB1c2VzIHRoZSBjYWxscy4gQWx0ZXJuYXRpdmVseSwgSSB3aWxsIGxvb2sgYXQgd2hlcmUgYHNnX2J1aWxkX2luZGlyZWN0YCBpcyBjYWxsZWQgZGlyZWN0bHkgaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCB0byBzZWUgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBTQ1NJIGdlbmVyaWMgZHJpdmVyLiBCb3RoIHBhdGhzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgd2hlcmUgdGhlIGludGVyZXN0aW5nIGxvZ2ljIGxpZXMgYW5kIHdoZXJlIHRvIGZvY3VzIGZ1cnRoZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NnX2J1aWxkX2luZGlyZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmM9MTgyPXN0YXRpYyBpbnQgc2dfZmluaXNoX3JlbV9yZXEoU2dfcmVxdWVzdCAqIHNycCk7XG5kcml2ZXJzL3Njc2kvc2cuYzoxODM6c3RhdGljIGludCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSk7XG5kcml2ZXJzL3Njc2kvc2cuYy0xODQtc3RhdGljIHNzaXplX3Qgc2dfbmV3X3JlYWQoU2dfZmQgKiBzZnAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYz0xNzMyPXNnX3N0YXJ0X3JlcShTZ19yZXF1ZXN0ICpzcnAsIHVuc2lnbmVkIGNoYXIgKmNtZClcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xODAzLVx0XHR9IGVsc2Uge1xuZHJpdmVycy9zY3NpL3NnLmM6MTgwNDpcdFx0XHRyZXMgPSBzZ19idWlsZF9pbmRpcmVjdChyZXFfc2NocCwgc2ZwLCBkeGZlcl9sZW4pO1xuZHJpdmVycy9zY3NpL3NnLmMtMTgwNS1cdFx0XHRpZiAocmVzKSB7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTg3ND1zdGF0aWMgaW50XG5kcml2ZXJzL3Njc2kvc2cuYzoxODc1OnNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuZHJpdmVycy9zY3NpL3NnLmMtMTg3Ni17XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTg4OC1cdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuZHJpdmVycy9zY3NpL3NnLmM6MTg4OTpcdFx0XCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXG5cJiMzNDssXG5kcml2ZXJzL3Njc2kvc2cuYy0xODkwLVx0XHRidWZmX3NpemUsIGJsa19zaXplKSk7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTkxMC1cdFx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTExOlx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwmIzM0OyxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MTItXHRcdFx0XHQgaywgbnVtLCByZXRfc3opKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTE3LVx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTE4Olx0XHRcdCBcJiMzNDtzZ19idWlsZF9pbmRpcmVjdDoga191c2Vfc2c9JWQsIHJlbV9zej0lZFxcblwmIzM0OyxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MTktXHRcdFx0IGssIHJlbV9zeikpO1xuLS1cbmRyaXZlcnMvc2NzaS9zZy5jPTE5OTI9c2dfYnVpbGRfcmVzZXJ2ZShTZ19mZCAqIHNmcCwgaW50IHJlcV9zaXplKVxuLS1cbmRyaXZlcnMvc2NzaS9zZy5jLTIwMDAtXHRcdFx0cmVxX3NpemUgPSBQQUdFX1NJWkU7XG5kcml2ZXJzL3Njc2kvc2cuYzoyMDAxOlx0XHRpZiAoMCA9PSBzZ19idWlsZF9pbmRpcmVjdChzY2hwLCBzZnAsIHJlcV9zaXplKSlcbmRyaXZlcnMvc2NzaS9zZy5jLTIwMDItXHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mzk2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyB0aGlzIFNDU0kgR2VuZXJpYyBEcml2ZXIgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUgYHNjYXR0ZXJfZWxlbV9zemAgcGFyYW1ldGVyIGlzIGhhbmRsZWQgaW4gdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIgKGBzZy5jYCkuIFByZXZpb3VzbHksIGl0IHdhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBtb2R1bGUgcGFyYW1ldGVyLiBOb3csIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYSBjdXN0b20gc2V0dGVyIGNhbGxiYWNrLCBgc2NhdHRlcl9lbGVtX3N6X3NldGAsIHRvIHZhbGlkYXRlIHRoZSBzaXplLiBUaGUgb2xkIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgdmFyaWFibGUgaXMgZ29uZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuCgpUaGUgY3JpdGljYWwgcGllY2Ugc2VlbXMgdG8gYmUgaW4gYHNnX2J1aWxkX2luZGlyZWN0YC4gVGhpcyBpcyB3aGVyZSB0aGUgbG9naWMgdXNlZCB0byBkeW5hbWljYWxseSBhZGp1c3QgYHNjYXR0ZXJfZWxlbV9zemAgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBtb3JlIGRpcmVjdCBhcHByb2FjaCB1c2luZyBgZ2V0X29yZGVyKClgIGFuZCBgbWluKClgLiBFc3NlbnRpYWxseSwgdGhleSYjMzk7dmUgcmVtb3ZlZCB0aGUgZHluYW1pYyBtdXRhdGlvbiBvZiBgc2NhdHRlcl9lbGVtX3N6YC4KCk5vdywgaXMgdGhpcyByZWFjaGFibGUgY29kZT8gQWJzb2x1dGVseS4gYHNnX2J1aWxkX2luZGlyZWN0YCBpcyBpbnZva2VkIHdoZW4gYnVpbGRpbmcgaW5kaXJlY3QgYnVmZmVycywgYW5kIHRoYXQgaGFwcGVucyB3aGVuZXZlciBhIHVzZXIgaW50ZXJhY3RzIHdpdGggYSBTQ1NJIGdlbmVyaWMgZGV2aWNlLCBsaWtlIGAvZGV2L3NnKmAuIENvbW1hbmRzIGxpa2UgYHNnX3N0YXJ0X3JlcWAgb3IgYHNnX2J1aWxkX3Jlc2VydmVgIChjYWxsZWQgb24gb3Blbi9pb2N0bCkgdHJpZ2dlciB0aGlzLiBTQ1NJIGdlbmVyaWMgaXMgYSBzdGFuZGFyZCBkcml2ZXIsIGFuZCBpdCYjMzk7cyBlYXNpbHkgYWNjZXNzaWJsZSwgZXNwZWNpYWxseSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHdpdGggZW11bGF0ZWQgU0NTSSBkaXNrcyBvciBgc2NzaV9kZWJ1Z2AuICBQbHVzLCB3cml0aW5nIHRvIGAvc3lzL21vZHVsZS9zZy9wYXJhbWV0ZXJzL3NjYXR0ZXJfZWxlbV9zemAgZGlyZWN0bHkgY2FsbHMgdGhlIG5ldyBgc2NhdHRlcl9lbGVtX3N6X3NldGAgc2V0dGVyLgoKR2l2ZW4gdGhlIGNyaXRlcmlhOiB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHJlZmFjdG9yaW5nIGFuZCBjb2RlIGNsZWFudXAgb2YgcmVhY2hhYmxlIGNvZGUsIHNwZWNpZmljYWxseSwgYSBkcml2ZXIgYWNjZXNzaWJsZSB2aWEgYW4gZW11bGF0ZWQgYnVzLiAgVGhpcyBjbGVhcmx5IHNhdGlzZmllcyB0aGUgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGNvbmRpdGlvbi4KCkxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiAgYENPTkZJR19DSFJfREVWX1NHYCBkZXBlbmRzIG9uIGBDT05GSUdfU0NTSWAuICBBIHF1aWNrIGNoZWNrIG9mIGBkcml2ZXJzL3Njc2kvS2NvbmZpZ2AgY29uZmlybXMgdGhhdC4gIFRob3NlIGFyZSB0aGUgcmVxdWlyZWQgY29uZmlncy4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMg4oCTIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuICBGcm9tIHRoZSBjb2RlLCBJIHNlZToKCiogICBgc2dfYnVpbGRfaW5kaXJlY3RgCiogICBgc2NhdHRlcl9lbGVtX3N6X3NldGAKKiAgIGBpbml0X3NnYCAodGhvdWdoIHRoaXMgbWlnaHQgYmUganVzdCBhbiBpbml0IGZ1bmN0aW9uKQoqICAgRnVuY3Rpb25zIHRoYXQgaW5kaXJlY3RseSBjYWxsIHNnX2J1aWxkX2luZGlyZWN0OiBgc2dfYnVpbGRfcmVzZXJ2ZWAgLyBgc2dfc3RhcnRfcmVxYCAvIGBzZ193cml0ZWAgLyBgc2dfaW9jdGxgLgoKTm93LCBsZXQmIzM5O3MgZm9jdXMgb246CiogICBgc2dfYnVpbGRfaW5kaXJlY3RgCiogICBgc2NhdHRlcl9lbGVtX3N6X3NldGAKCkkmIzM5O2xsIHZlcmlmeSB0aGF0IGBzY2F0dGVyX2VsZW1fc3pfc2V0YCBpcyBhY3R1YWxseSBhIHN0YXRpYyBmdW5jdGlvbiBhbmQgY2hlY2sgaWYgaXQgaGFzIGEgdm1saW51eCBzeW1ib2wuICBJdCBpcyBhIHN0YXRpYyBmdW5jdGlvbiByZWZlcmVuY2VkIGJ5IGBzY2F0dGVyX2VsZW1fc3pfb3BzYC4gYHNnX2J1aWxkX2luZGlyZWN0YCBpcyBhbHNvIGEgc3RhdGljIGZ1bmN0aW9uLgoKVG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZmlsZXMgb3IgZnVuY3Rpb25zIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlLiBBIHJldmlldyBvZiB0aGUgZGlmZiBjb25maXJtcyB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gYGRyaXZlcnMvc2NzaS9zZy5jYCwgc3BlY2lmaWNhbGx5OgoqICAgYHNjYXR0ZXJfZWxlbV9zel9zZXRgCiogICBgaW5pdF9zZ2AKKiAgIGBzZ19idWlsZF9pbmRpcmVjdGAKCkZpbmFsbHksIGxldCYjMzk7cyB2ZXJpZnkgaWYgYGluaXRfc2dgIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCB3aGljaCBtaWdodCBiZSBoZWxwZnVsIHRvIGtub3cuCkNoZWNrZWQgbGluZSAxNjgwIG9mIGBkcml2ZXJzL3Njc2kvc2cuY2AgYW5kIGNhbiB2ZXJpZnkgaWYgaXQgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2ODA6XHRNT0RVTEVfVkVSU0lPTihTR19WRVJTSU9OX1NUUik7XG4xNjgxOlx0TU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IoU0NTSV9HRU5FUklDX01BSk9SKTtcbjE2ODI6XHRcbjE2ODM6XHRNT0RVTEVfUEFSTV9ERVNDKHNjYXR0ZXJfZWxlbV9zeiwgXCYjMzQ7c2NhdHRlciBnYXRoZXIgZWxlbWVudCBcJiMzNDtcbjE2ODQ6XHQgICAgICAgICAgICAgICAgXCYjMzQ7c2l6ZSAoZGVmYXVsdDogbWF4KFNHX1NDQVRURVJfU1osIFBBR0VfU0laRSkpXCYjMzQ7KTtcbjE2ODU6XHRNT0RVTEVfUEFSTV9ERVNDKGRlZl9yZXNlcnZlZF9zaXplLCBcJiMzNDtzaXplIG9mIGJ1ZmZlciByZXNlcnZlZCBmb3IgZWFjaCBmZFwmIzM0Oyk7XG4xNjg2Olx0TU9EVUxFX1BBUk1fREVTQyhhbGxvd19kaW8sIFwmIzM0O2FsbG93IGRpcmVjdCBJL08gKGRlZmF1bHQ6IDAgKGRpc2FsbG93KSlcJiMzNDspO1xuMTY4NzpcdFxuMTY4ODpcdHN0YXRpYyBpbnQgX19pbml0XG4xNjg5Olx0aW5pdF9zZyh2b2lkKVxuMTY5MDpcdHtcbjE2OTE6XHRcdGludCByYztcbjE2OTI6XHRcbjE2OTM6XHRcdGlmIChzY2F0dGVyX2VsZW1fc3ogXHUwMDNjIFBBR0VfU0laRSlcbjE2OTQ6XHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuMTY5NTpcdFxuMTY5NjpcdFx0cmMgPSByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKFNDU0lfR0VORVJJQ19NQUpPUiwgMCksIFxuMTY5NzpcdFx0XHRcdFx0ICAgIFNHX01BWF9ERVZTLCBcJiMzNDtzZ1wmIzM0Oyk7XG4xNjk4Olx0XHRpZiAocmMpXG4xNjk5Olx0XHRcdHJldHVybiByYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1OTEKCQkJCQkJCW91dHB1dDogMTM3CgkJCQkJCQl0aG91Z2h0czogMjMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFNDU0kgU2NhdHRlci1HYXRoZXIgT3BlcmF0aW9ucyoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgZnV6emluZyBTQ1NJIHNjYXR0ZXItZ2F0aGVyIGZ1bmN0aW9uYWxpdHksIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgbXkgYXBwcm9hY2guIEZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGF0IGBpbml0X3NnYCBpcyBqdXN0IGEgcHJlbGltaW5hcnkgaW5pdGlhbGl6YXRpb24gc3RlcDsgaXQmIzM5O3MgYF9faW5pdGAsIHNvIGl0JiMzOTtzIGlycmVsZXZhbnQgYWZ0ZXIgc3RhcnR1cC4gVGhlIGNvcmUgcnVudGltZSBmdW5jdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgaGVyZSBhcmUgYHNnX2J1aWxkX2luZGlyZWN0YCBhbmQgYHNjYXR0ZXJfZWxlbV9zel9zZXRgLiBJIHNob3VsZCBhbHNvIGV4YW1pbmUgdGhlIGNhbGwgY2hhaW5zLCBzcGVjaWZpY2FsbHksIGhvdyBgc2dfYnVpbGRfaW5kaXJlY3RgIGlzIGNhbGxlZDogYHNnX2J1aWxkX3Jlc2VydmVgIGFuZCBgc2dfc3RhcnRfcmVxYC4gVGhlc2Ugd2lsbCBiZSBrZXkgZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuCgpNeSBzdHJhdGVneSBuZWVkcyB0byBmb2N1cyBpbiBvbiBzcGVjaWZpYyBmdW5jdGlvbiBlbnRyeSBwb2ludHMgdG8gYmUgZWZmZWN0aXZlOyBpbiB0aGlzIGNhc2UsIGBzZ19idWlsZF9pbmRpcmVjdGAsIGBzY2F0dGVyX2VsZW1fc3pfc2V0YCwgYW5kIGBzZ19idWlsZF9yZXNlcnZlYCBhcmUgdGhlIGZvY3VzIHN5bWJvbHMgdG8gdGFyZ2V0LgoKVG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgc2V0IHVwIHByb3Blcmx5LCBJJiMzOTttIGNoZWNraW5nIHRoZSBjb25maWd1cmF0aW9ucyByZXF1aXJlZC4gSSYjMzk7bGwgbmVlZCBgQ0hSX0RFVl9TR2AgYW5kIGBTQ1NJYCBlbmFibGVkIGZvciB0aGlzIHRvIGJlIHByb2R1Y3RpdmUuCgpOb3csIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIGluc3RydWN0aW9ucy4gVGhlIHZlcmRpY3QgaXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIGFuZCB0aGUgcmVhc29uaW5nIGlzIGNvbmNpc2UuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOyB0aGVzZSBhcmUgbm9uLXViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucy4gRmluYWxseSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCB3aGljaCBpcyBgWyYjMzQ7U0NTSSYjMzQ7LCAmIzM0O0NIUl9ERVZfU0cmIzM0O11gLCBsb29rcyByaWdodC4KClRoYXQgYWxsIHNlZW1zIHNvdW5kLiBOb3cgSSBuZWVkIHRvIGZvcm11bGF0ZSB0aGF0IGZpbmFsIGBzZXQtcmVzdWx0c2AgY2FsbCwgYW5kIEkgc2hvdWxkIGJlIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ1NJJiMzNDssCiAgICAmIzM0O0NIUl9ERVZfU0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZ19idWlsZF9pbmRpcmVjdCYjMzQ7LAogICAgJiMzNDtzY2F0dGVyX2VsZW1fc3pfc2V0JiMzNDssCiAgICAmIzM0O3NnX2J1aWxkX3Jlc2VydmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIgKHNnKSBzY2F0dGVyLWdhdGhlciBidWZmZXIgYWxsb2NhdGlvbiBhbmQgdmFsaWRhdGlvbiBsb2dpYy4gSXQgcmVwbGFjZXMgZHluYW1pYyBtb2R1bGUgcGFyYW1ldGVyIGNoZWNraW5nIGluIHNnX2J1aWxkX2luZGlyZWN0IHdpdGggYSBkZWRpY2F0ZWQgbW9kdWxlX3BhcmFtX2NiIHNldHRlciAoc2NhdHRlcl9lbGVtX3N6X3NldCkgYW5kIHNpbXBsaWZpZXMgdGhlIGFsbG9jYXRpb24gbG9vcCBjYWxjdWxhdGlvbi4gU0NTSSBnZW5lcmljIGRldmljZXMgYXJlIGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDU0kmIzM0OywKICAgICYjMzQ7Q0hSX0RFVl9TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NnX2J1aWxkX2luZGlyZWN0JiMzNDssCiAgICAmIzM0O3NjYXR0ZXJfZWxlbV9zel9zZXQmIzM0OywKICAgICYjMzQ7c2dfYnVpbGRfcmVzZXJ2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0NTSSBnZW5lcmljIGRyaXZlciAoc2cpIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCB2YWxpZGF0aW9uIGxvZ2ljLiBJdCByZXBsYWNlcyBkeW5hbWljIG1vZHVsZSBwYXJhbWV0ZXIgY2hlY2tpbmcgaW4gc2dfYnVpbGRfaW5kaXJlY3Qgd2l0aCBhIGRlZGljYXRlZCBtb2R1bGVfcGFyYW1fY2Igc2V0dGVyIChzY2F0dGVyX2VsZW1fc3pfc2V0KSBhbmQgc2ltcGxpZmllcyB0aGUgYWxsb2NhdGlvbiBsb29wIGNhbGN1bGF0aW9uLiBTQ1NJIGdlbmVyaWMgZGV2aWNlcyBhcmUgYWNjZXNzaWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjA6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMDowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbW9kdWxlIHBhcmFtZXRlciB2YWxpZGF0aW9uIGZvciBgc2NhdHRlcl9lbGVtX3N6YCBpbiBgZHJpdmVycy9zY3NpL3NnLmNgIGJ5IGFkZGluZyBhIGN1c3RvbSBzZXR0ZXIgY2FsbGJhY2sgYHNjYXR0ZXJfZWxlbV9zel9zZXQoKWAgdG8gdmFsaWRhdGUgYm91bmRzLCBhbmQgY2xlYW5zIHVwIHRoZSBvcmRlciBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgc2dfYnVpbGRfaW5kaXJlY3QoKWAgd2hpbGUgcmVtb3ZpbmcgdGhlIHJlZHVuZGFudCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIHZhcmlhYmxlLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQ6XG4xLiBNZW1vcnkgYWxsb2NhdGlvbnMgZm9yIHNjYXR0ZXItZ2F0aGVyIHBhZ2VzIHVzZSBgX19HRlBfWkVST2AgYW5kIHRhYmxlcyB1c2UgYGt6YWxsb2NgLlxuMi4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIG9yZGVyIGNhbGN1bGF0aW9uIGFuZCBsb29wIGluZGV4aW5nIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBzdGFjayBwcmltaXRpdmVzLlxuMy4gTm8gZGF0YSBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlLlxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIGFsbG9jYXRpb24gYm91bmRzLCBidWZmZXIgc2l6ZXMsIG9yIG9yZGVyIGNhbGN1bGF0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgc2FmZXR5IGNhdWdodCBieSBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgZGV0ZWN0ZWQgYnkgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NzZlMzUwYjUwNzVmY2MxMDkwNjRlMGMwOTljMTQ3ZTcwY2I4MDNhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAyMDowNDoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggNTQwOGYwMDJlNmMwMS4uNGM4MmZjMDBkMDVkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTkyLDcgJiM0Mzs5Miw2IEBAIHN0YXRpYyBpbnQgZGVmX3Jlc2VydmVkX3NpemUgPSBTR19ERUZfUkVTRVJWRURfU0laRTsKIHN0YXRpYyBpbnQgc2dfYWxsb3dfZGlvID0gU0dfQUxMT1dfRElPX0RFRjsKIAogc3RhdGljIGludCBzY2F0dGVyX2VsZW1fc3ogPSBTR19TQ0FUVEVSX1NaOwotc3RhdGljIGludCBzY2F0dGVyX2VsZW1fc3pfcHJldiA9IFNHX1NDQVRURVJfU1o7CiAKICNkZWZpbmUgU0dfU0VDVE9SX1NaIDUxMgogCkBAIC0xNjIxLDkgJiM0MzsxNjIwLDMzIEBAIHNnX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqY2xfZGV2KQogCWtyZWZfcHV0KCZhbXA7c2RwLSZndDtkX3JlZiwgc2dfZGV2aWNlX2Rlc3Ryb3kpOwogfQogCi1tb2R1bGVfcGFyYW1fbmFtZWQoc2NhdHRlcl9lbGVtX3N6LCBzY2F0dGVyX2VsZW1fc3osIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogbW9kdWxlX3BhcmFtX25hbWVkKGFsbG93X2Rpbywgc2dfYWxsb3dfZGlvLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIAomIzQzO3N0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6X3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQomIzQzO3sKJiM0MzsJaW50IHNpemUsIHJldDsKJiM0MzsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N0cnRvaW50KHZhbCwgMCwgJmFtcDtzaXplKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChzaXplICZsdDsgUEFHRV9TSVpFIHx8IHNpemUgJmd0OyAoUEFHRV9TSVpFICZsdDsmbHQ7IE1BWF9QQUdFX09SREVSKSkKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwomIzQzOwlzY2F0dGVyX2VsZW1fc3ogPSBzaXplOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHNjYXR0ZXJfZWxlbV9zel9vcHMgPSB7CiYjNDM7CS5zZXQJPSBzY2F0dGVyX2VsZW1fc3pfc2V0LAomIzQzOwkuZ2V0CT0gcGFyYW1fZ2V0X2ludCwKJiM0Mzt9OwomIzQzOwomIzQzO21vZHVsZV9wYXJhbV9jYihzY2F0dGVyX2VsZW1fc3osICZhbXA7c2NhdHRlcl9lbGVtX3N6X29wcywgJmFtcDtzY2F0dGVyX2VsZW1fc3osIDA2NDQpOwomIzQzOwogc3RhdGljIGludCBkZWZfcmVzZXJ2ZWRfc2l6ZV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKIHsKIAlpbnQgc2l6ZSwgcmV0OwpAQCAtMTY2NywxMCAmIzQzOzE2OTAsOCBAQCBpbml0X3NnKHZvaWQpCiB7CiAJaW50IHJjOwogCi0JaWYgKHNjYXR0ZXJfZWxlbV9zeiAmbHQ7IFBBR0VfU0laRSkgewomIzQzOwlpZiAoc2NhdHRlcl9lbGVtX3N6ICZsdDsgUEFHRV9TSVpFKQogCQlzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7Ci0JCXNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gc2NhdHRlcl9lbGVtX3N6OwotCX0KIAogCXJjID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihTQ1NJX0dFTkVSSUNfTUFKT1IsIDApLCAKIAkJCQkgICAgU0dfTUFYX0RFVlMsICYjMzQ7c2cmIzM0Oyk7CkBAIC0xODczLDM2ICYjNDM7MTg5NCwxOSBAQCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSkKIAlpZiAobXhfc2NfZWxlbXMgJmx0OyAwKQogCQlyZXR1cm4gbXhfc2NfZWxlbXM7CS8qIG1vc3QgbGlrZWx5IC1FTk9NRU0gKi8KIAotCW51bSA9IHNjYXR0ZXJfZWxlbV9zejsKLQlpZiAodW5saWtlbHkobnVtICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkgewotCQlpZiAobnVtICZsdDsgUEFHRV9TSVpFKSB7Ci0JCQlzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7Ci0JCQlzY2F0dGVyX2VsZW1fc3pfcHJldiA9IFBBR0VfU0laRTsKLQkJfSBlbHNlCi0JCQlzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTsKLQl9Ci0KLQlvcmRlciA9IGdldF9vcmRlcihudW0pOwomIzQzOwlvcmRlciA9IGdldF9vcmRlcihzY2F0dGVyX2VsZW1fc3opOwogcmV0cnk6CiAJcmV0X3N6ID0gMSAmbHQ7Jmx0OyAoUEFHRV9TSElGVCAmIzQzOyBvcmRlcik7CiAKIAlmb3IgKGsgPSAwLCByZW1fc3ogPSBibGtfc2l6ZTsgcmVtX3N6ICZndDsgMCAmYW1wOyZhbXA7IGsgJmx0OyBteF9zY19lbGVtczsKIAkgICAgIGsmIzQzOyYjNDM7LCByZW1fc3ogLT0gcmV0X3N6KSB7CiAKLQkJbnVtID0gKHJlbV9zeiAmZ3Q7IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSA/Ci0JCQlzY2F0dGVyX2VsZW1fc3pfcHJldiA6IHJlbV9zejsKJiM0MzsJCW51bSA9IG1pbihyZW1fc3osIHJldF9zeik7CiAKIAkJc2NocC0mZ3Q7cGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpOwogCQlpZiAoIXNjaHAtJmd0O3BhZ2VzW2tdKQogCQkJZ290byBvdXQ7CiAKLQkJaWYgKG51bSA9PSBzY2F0dGVyX2VsZW1fc3pfcHJldikgewotCQkJaWYgKHVubGlrZWx5KHJldF9zeiAmZ3Q7IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkgewotCQkJCXNjYXR0ZXJfZWxlbV9zeiA9IHJldF9zejsKLQkJCQlzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHJldF9zejsKLQkJCX0KLQkJfQotCiAJCVNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLSZndDtwYXJlbnRkcCwKIAkJCQkgJiMzNDtzZ19idWlsZF9pbmRpcmVjdDogaz0lZCwgbnVtPSVkLCByZXRfc3o9JWRcbiYjMzQ7LAogCQkJCSBrLCBudW0sIHJldF9zeikpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNjYXR0ZXIvR2F0aGVyIFBhdGNoIGZvciBQb3RlbnRpYWwgS01TQU4gUmlza3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gd291bGQgZmxhZy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL3Njc2kvc2cuY2AsIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmU6CgoqICAgSXQgc2VlbXMgbGlrZSB0aGV5JiMzOTtyZSByZW1vdmluZyBhIHZhcmlhYmxlLCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgLCBhbmQgcmVmYWN0b3JpbmcgdGhlIGhhbmRsaW5nIG9mIGBzY2F0dGVyX2VsZW1fc3pgIHdpdGggYSBjYWxsYmFjay4gVGhpcyBzdWdnZXN0cyB0aGV5IGFyZSBtb3ZpbmcgYXdheSBmcm9tIGhhdmluZyB0d28gZGlmZmVyZW50IHZhbHVlcyBhbmQgdGhhdCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIG1heSBiZSBjb21wbGV0ZWx5IG9ic29sZXRlIG5vdy4KKiAgIFRoZSBgbW9kdWxlX3BhcmFtX25hbWVkYCBpcyByZXBsYWNlZCBieSBgbW9kdWxlX3BhcmFtX2NiYCB3aXRoIGEgc2V0dGVyIGZ1bmN0aW9uLCBgc2NhdHRlcl9lbGVtX3N6X3NldGAuIFRoZSBzZXR0ZXIgdmFsaWRhdGVzIHRoZSBzaXplLCB3aGljaCBpcyBnb29kLiBUaGlzIG1ha2VzIGl0IGEgYml0IG1vcmUgcm9idXN0IHJlZ2FyZGluZyB3aGF0IHZhbHVlIHRoZSB1c2VyIHNldHMuCiogICBUaGUgcmVtb3ZhbCBvZiB0aGUgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24gaW4gYGluaXRfc2coKWAgYW5kIHRoZSBhc3NvY2lhdGVkIHJ1bnRpbWUgY2hlY2tzIGluIGBzZ19idWlsZF9pbmRpcmVjdCgpYCBhcmUgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSBhcmUgbW92aW5nIHRvIGFuIGBvcmRlciA9IGdldF9vcmRlcihzY2F0dGVyX2VsZW1fc3opO2AgYXBwcm9hY2ggYW5kIHVzaW5nIGBtaW5gIHRvIGF2b2lkIHRoZSBwcm9ibGVtcyBhc3NvY2lhdGVkIHdpdGggb2xkZXIgY29kZS4gVGhlIGZhY3QgdGhhdCB0aGUgY2hlY2sgYW5kIHRoZSB1cGRhdGUgbG9naWMgZm9yIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgd2VyZSByZW1vdmVkIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlIG1heSBub3QgaGF2ZSBiZWVuIGNvcnJlY3RseSBpbml0aWFsaXplZCwgY3JlYXRpbmcgdGhlIHZlcnkgS01TQU4gcHJvYmxlbXMgd2UmIzM5O3JlIGxvb2tpbmcgZm9yLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IGBzZ19idWlsZF9pbmRpcmVjdGAgYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9ucyBhY3R1YWxseSAqZG8qLiBJIHdpbGwgdXNlIGByZWFkLWZpbGVgIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGUgaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCBhbmQgc2VlIGlmIHRoZSByZW1vdmFsIG9mIHRoZSBvbGQgbG9naWMgaW50cm9kdWNlcyBhIHdpbmRvdyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZC4gSSBuZWVkIHRvIHRyYWNlIGhvdyBgc2NhdHRlcl9lbGVtX3N6YCBhbmQgYHNjYXR0ZXJfZWxlbV9zel9wcmV2YCAob3IgdGhlIGxhY2sgdGhlcmVvZikgYWZmZWN0IHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgdXNhZ2Ugd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGBudW1gIGFuZCBgcmV0X3N6YCBhcmUgZGV0ZXJtaW5lZCwgYW5kIGlmIHRoZXkmIzM5O3JlIHVzZWQgdG8gaW5kZXggZGF0YSB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuIE15IGV4cGVydCBpbnR1aXRpb24gc3VnZ2VzdHMgdGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcmlzayBsaWVzLCBlc3BlY2lhbGx5IGlmIHRoZSBvbGQgdmFyaWFibGUsIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgd2FzIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlcmUgd2FzIG5vIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjA6XHRcbjE4NjE6XHRzdGF0aWMgaW50XG4xODYyOlx0c2dfYnVpbGRfc2dhdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBjb25zdCBTZ19mZCAqIHNmcCwgaW50IHRhYmxlc2l6ZSlcbjE4NjM6XHR7XG4xODY0Olx0XHRpbnQgc2dfYnVmZmxlbiA9IHRhYmxlc2l6ZSAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKTtcbjE4NjU6XHRcdGdmcF90IGdmcF9mbGFncyA9IEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk47XG4xODY2Olx0XG4xODY3Olx0XHRzY2hwLVx1MDAzZXBhZ2VzID0ga3phbGxvYyhzZ19idWZmbGVuLCBnZnBfZmxhZ3MpO1xuMTg2ODpcdFx0aWYgKCFzY2hwLVx1MDAzZXBhZ2VzKVxuMTg2OTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE4NzA6XHRcdHNjaHAtXHUwMDNlc2dsaXN0X2xlbiA9IHNnX2J1ZmZsZW47XG4xODcxOlx0XHRyZXR1cm4gdGFibGVzaXplO1x0LyogbnVtYmVyIG9mIHNjYXRfZ2F0aCBlbGVtZW50cyBhbGxvY2F0ZWQgKi9cbjE4NzI6XHR9XG4xODczOlx0XG4xODc0Olx0c3RhdGljIGludFxuMTg3NTpcdHNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuMTg3NjpcdHtcbjE4Nzc6XHRcdGludCByZXRfc3ogPSAwLCBpLCBrLCByZW1fc3osIG51bSwgbXhfc2NfZWxlbXM7XG4xODc4Olx0XHRpbnQgc2dfdGFibGVzaXplID0gc2ZwLVx1MDAzZXBhcmVudGRwLVx1MDAzZXNnX3RhYmxlc2l6ZTtcbjE4Nzk6XHRcdGludCBibGtfc2l6ZSA9IGJ1ZmZfc2l6ZSwgb3JkZXI7XG4xODgwOlx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9BVE9NSUMgfCBfX0dGUF9DT01QIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTztcbjE4ODE6XHRcbjE4ODI6XHRcdGlmIChibGtfc2l6ZSBcdTAwM2MgMClcbjE4ODM6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xODg0Olx0XHRpZiAoMCA9PSBibGtfc2l6ZSlcbjE4ODU6XHRcdFx0JiM0MzsmIzQzO2Jsa19zaXplO1x0LyogZG9uJiMzOTt0IGtub3cgd2h5ICovXG4xODg2Olx0XHQvKiByb3VuZCByZXF1ZXN0IHVwIHRvIG5leHQgaGlnaGVzdCBTR19TRUNUT1JfU1ogYnl0ZSBib3VuZGFyeSAqL1xuMTg4NzpcdFx0YmxrX3NpemUgPSBBTElHTihibGtfc2l6ZSwgU0dfU0VDVE9SX1NaKTtcbjE4ODg6XHRcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuMTg4OTpcdFx0XHRcJiMzNDtzZ19idWlsZF9pbmRpcmVjdDogYnVmZl9zaXplPSVkLCBibGtfc2l6ZT0lZFxcblwmIzM0OyxcbjE4OTA6XHRcdFx0YnVmZl9zaXplLCBibGtfc2l6ZSkpO1xuMTg5MTpcdFxuMTg5MjpcdFx0LyogTi5CLiByZXRfc3ogY2FycmllZCBpbnRvIHRoaXMgYmxvY2sgLi4uICovXG4xODkzOlx0XHRteF9zY19lbGVtcyA9IHNnX2J1aWxkX3NnYXQoc2NocCwgc2ZwLCBzZ190YWJsZXNpemUpO1xuMTg5NDpcdFx0aWYgKG14X3NjX2VsZW1zIFx1MDAzYyAwKVxuMTg5NTpcdFx0XHRyZXR1cm4gbXhfc2NfZWxlbXM7XHQvKiBtb3N0IGxpa2VseSAtRU5PTUVNICovXG4xODk2Olx0XG4xODk3Olx0XHRvcmRlciA9IGdldF9vcmRlcihzY2F0dGVyX2VsZW1fc3opO1xuMTg5ODpcdHJldHJ5OlxuMTg5OTpcdFx0cmV0X3N6ID0gMSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpO1xuMTkwMDpcdFxuMTkwMTpcdFx0Zm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgayBcdTAwM2MgbXhfc2NfZWxlbXM7XG4xOTAyOlx0XHQgICAgIGsmIzQzOyYjNDM7LCByZW1fc3ogLT0gcmV0X3N6KSB7XG4xOTAzOlx0XG4xOTA0Olx0XHRcdG51bSA9IG1pbihyZW1fc3osIHJldF9zeik7XG4xOTA1Olx0XG4xOTA2Olx0XHRcdHNjaHAtXHUwMDNlcGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xuMTkwNzpcdFx0XHRpZiAoIXNjaHAtXHUwMDNlcGFnZXNba10pXG4xOTA4Olx0XHRcdFx0Z290byBvdXQ7XG4xOTA5Olx0XG4xOTEwOlx0XHRcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuMTkxMTpcdFx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwmIzM0OyxcbjE5MTI6XHRcdFx0XHRcdCBrLCBudW0sIHJldF9zeikpO1xuMTkxMzpcdFx0fVx0XHQvKiBlbmQgb2YgZm9yIGxvb3AgKi9cbjE5MTQ6XHRcbjE5MTU6XHRcdHNjaHAtXHUwMDNlcGFnZV9vcmRlciA9IG9yZGVyO1xuMTkxNjpcdFx0c2NocC1cdTAwM2VrX3VzZV9zZyA9IGs7XG4xOTE3Olx0XHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbjE5MTg6XHRcdFx0XHQgXCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGtfdXNlX3NnPSVkLCByZW1fc3o9JWRcXG5cJiMzNDssXG4xOTE5Olx0XHRcdFx0IGssIHJlbV9zeikpO1xuMTkyMDpcdFxuMTkyMTpcdFx0c2NocC1cdTAwM2VidWZmbGVuID0gYmxrX3NpemU7XG4xOTIyOlx0XHRpZiAocmVtX3N6IFx1MDAzZSAwKVx0LyogbXVzdCBoYXZlIGZhaWxlZCAqL1xuMTkyMzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE5MjQ6XHRcdHJldHVybiAwO1xuMTkyNTpcdG91dDpcbjE5MjY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGs7IGkmIzQzOyYjNDM7KVxuMTkyNzpcdFx0XHRfX2ZyZWVfcGFnZXMoc2NocC1cdTAwM2VwYWdlc1tpXSwgb3JkZXIpO1xuMTkyODpcdFxuMTkyOTpcdFx0aWYgKC0tb3JkZXIgXHUwMDNlPSAwKVxuMTkzMDpcdFx0XHRnb3RvIHJldHJ5O1xuMTkzMTpcdFxuMTkzMjpcdFx0cmV0dXJuIC1FTk9NRU07XG4xOTMzOlx0fVxuMTkzNDpcdFxuMTkzNTpcdHN0YXRpYyB2b2lkXG4xOTM2Olx0c2dfcmVtb3ZlX3NjYXQoU2dfZmQgKiBzZnAsIFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHApXG4xOTM3Olx0e1xuMTkzODpcdFx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG4xOTM5Olx0XHRcdFx0IFwmIzM0O3NnX3JlbW92ZV9zY2F0OiBrX3VzZV9zZz0lZFxcblwmIzM0Oywgc2NocC1cdTAwM2VrX3VzZV9zZykpO1xuMTk0MDpcdFx0aWYgKHNjaHAtXHUwMDNlcGFnZXMgXHUwMDI2XHUwMDI2IHNjaHAtXHUwMDNlc2dsaXN0X2xlbiBcdTAwM2UgMCkge1xuMTk0MTpcdFx0XHRpZiAoIXNjaHAtXHUwMDNlZGlvX2luX3VzZSkge1xuMTk0MjpcdFx0XHRcdGludCBrO1xuMTk0MzpcdFxuMTk0NDpcdFx0XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIHNjaHAtXHUwMDNla191c2Vfc2cgXHUwMDI2XHUwMDI2IHNjaHAtXHUwMDNlcGFnZXNba107IGsmIzQzOyYjNDM7KSB7XG4xOTQ1Olx0XHRcdFx0XHRTQ1NJX0xPR19USU1FT1VUKDUsXG4xOTQ2Olx0XHRcdFx0XHRcdHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbjE5NDc6XHRcdFx0XHRcdFx0XCYjMzQ7c2dfcmVtb3ZlX3NjYXQ6IGs9JWQsIHBnPTB4JXBcXG5cJiMzNDssXG4xOTQ4Olx0XHRcdFx0XHRcdGssIHNjaHAtXHUwMDNlcGFnZXNba10pKTtcbjE5NDk6XHRcdFx0XHRcdF9fZnJlZV9wYWdlcyhzY2hwLVx1MDAzZXBhZ2VzW2tdLCBzY2hwLVx1MDAzZXBhZ2Vfb3JkZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjIwCgkJCQkJCQlvdXRwdXQ6IDIxNgoJCQkJCQkJdGhvdWdodHM6IDcxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZXcgVW5pbml0aWFsaXplZCBNZW1vcnkgaW4gU0NTSSBTY2F0dGVyLUdhdGhlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHNjYXR0ZXItZ2F0aGVyIGxpc3QgYWxsb2NhdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLCBhbmQgdGhlbiByaWdvcm91c2x5IGFzc2VzcyB0aGUgS01TQU4gaW1wbGljYXRpb25zLgoKU28sIHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGRvZXMgdHdvIHRoaW5nczogaXQgcmVmaW5lcyBob3cgdGhlIGBzY2F0dGVyX2VsZW1fc3pgIG1vZHVsZSBwYXJhbWV0ZXIgaXMgaGFuZGxlZCwgbW92aW5nIGZyb20gYSByYXcgYG1vZHVsZV9wYXJhbV9uYW1lZGAgdG8gYSBjYWxsYmFjaywgYG1vZHVsZV9wYXJhbV9jYmAuIFRoaXMgbmV3IGNhbGxiYWNrIGVuZm9yY2VzIGEgc2l6ZSByYW5nZSwgZW5zdXJpbmcgaXQmIzM5O3MgYXQgbGVhc3QgYSBwYWdlIGFuZCBubyBsYXJnZXIgdGhhbiBgTUFYX1BBR0VfT1JERVJgIHBhZ2VzLiBUaGUgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSByZWR1bmRhbnQgYHNjYXR0ZXJfZWxlbV9zel9wcmV2YCB2YXJpYWJsZSBhbmQgc3Vic2VxdWVudGx5IHNpbXBsaWZpZXMgY2FsY3VsYXRpb25zIGZvciBhbGxvY2F0aW9uIG9yZGVyIGluIGBzZ19idWlsZF9pbmRpcmVjdGAuIFRoaXMgZmVlbHMgbGlrZSBhIGNsZWFudXAgbW9yZSB0aGFuIGFueXRoaW5nIGVsc2UuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgb3Bwb3J0dW5pdGllcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gc25lYWsgaW4sIG9yIG1vZGlmeSBleGlzdGluZyBwYXRocyB0byBoYXZlIG5ldyBhcmVhcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSBzZWUgdGhhdCBhbGwgdGhlIGBhbGxvY19wYWdlc2AgY2FsbHMgdXNlIGBfX0dGUF9aRVJPYCwgYW5kIGFsbCB0aGUgYGt6YWxsb2NgIGFsbG9jYXRpb25zIHdpbGwgYmUgemVyby1pbml0aWFsaXplZC4gSSB3ZW50IHRocm91Z2ggdGhlIGZvdXIgS01TQU4gY3JpdGVyaWE6IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIHRpZWQgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIEJhc2VkIG9uIHRoZSBjb2RlLCBub25lIG9mIHRob3NlIGFwcGx5IGhlcmUuIEkgc2VlIG5vIGNoYW5nZSB0byBob3cgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB1c2Vyc3BhY2UgYW5kIG5vIGNoYW5jZSBmb3IgdGhlIG5ldyBjb2RlIHRvIGxlYXZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF2YWlsYWJsZS4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjay4gVGhlIHBhdGNoIGlzIG1vc3RseSB0b3VjaGluZyBtb2R1bGUgcGFyYW1ldGVyIGhhbmRsaW5nIGFuZCBzY2FsYXIgY2FsY3VsYXRpb25zLCBzcGVjaWZpY2FsbHkgcmVsYXRpbmcgdG8gcGFnZSBvcmRlciBhbmQgc2l6ZS4gVGhlc2UgcGFyYW1ldGVycyBhcmUgdWx0aW1hdGVseSByZWxhdGVkIHRvIG1lbW9yeSB0aGF0IGhhcyBoYWQgYF9fR0ZQX1pFUk9gIHVzZWQgb3IgYGt6YWxsb2NgLiBObyB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBpbiBjYWxjdWxhdGlvbiBvciBwYXJhbWV0ZXIgaGFuZGxpbmcgYXJlIHVuaW5pdGlhbGl6ZWQgYmVmb3JlIHVzYWdlLiBUaGlzIHNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uLgoKVGh1cywgYmFzZWQgb24gdGhlIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgLiBUaGUgcGF0Y2ggaXMgcmVmYWN0b3JpbmcgaG93IGBzY2F0dGVyX2VsZW1fc3pgIGlzIGhhbmRsZWQgd2l0aCBpbnB1dCB2YWxpZGF0aW9uLCBhbmQgaXQgcmVtb3ZlcyBhIHJlZHVuZGFudCB2YXJpYWJsZSwgc2ltcGxpZnlpbmcgb3JkZXIgY2FsY3VsYXRpb25zLiBCZWNhdXNlIHRoZSBhbGxvY2F0aW9ucyB1c2UgYF9fR0ZQX1pFUk9gIGFuZCBga3phbGxvY2AsIG5vIG5ldyBwYXRocyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGludHJvZHVjZWQuIFdoaWxlIGFsbG9jYXRpb24gZmFpbHVyZXMsIGJvdW5kcyBlcnJvcnMsIG9yIHBhcmFtZXRlciBoYW5kbGluZyBpc3N1ZXMgY291bGQgb2NjdXIsIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIHNob3VsZCBlYXNpbHkgZGV0ZWN0IHRoZW0uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBmb3IgYHNjYXR0ZXJfZWxlbV9zemAgaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCBieSBhZGRpbmcgYSBjdXN0b20gc2V0dGVyIGNhbGxiYWNrIGBzY2F0dGVyX2VsZW1fc3pfc2V0KClgIHRvIHZhbGlkYXRlIGJvdW5kcywgYW5kIGNsZWFucyB1cCB0aGUgb3JkZXIgY2FsY3VsYXRpb24gbG9naWMgaW4gYHNnX2J1aWxkX2luZGlyZWN0KClgIHdoaWxlIHJlbW92aW5nIHRoZSByZWR1bmRhbnQgYHNjYXR0ZXJfZWxlbV9zel9wcmV2YCB2YXJpYWJsZS5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBleHBvc2VkOlxuMS4gTWVtb3J5IGFsbG9jYXRpb25zIGZvciBzY2F0dGVyLWdhdGhlciBwYWdlcyB1c2UgYF9fR0ZQX1pFUk9gIGFuZCB0YWJsZXMgdXNlIGBremFsbG9jYC5cbjIuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiBvcmRlciBjYWxjdWxhdGlvbiBhbmQgbG9vcCBpbmRleGluZyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgc3RhY2sgcHJpbWl0aXZlcy5cbjMuIE5vIGRhdGEgc3RydWN0dXJlcyBvciBwYWRkaW5nIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UgaW4gYW4gdW5pbml0aWFsaXplZCBzdGF0ZS5cbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFnZSBhbGxvY2F0aW9uIGJvdW5kcywgYnVmZmVyIHNpemVzLCBvciBvcmRlciBjYWxjdWxhdGlvbnMgZmFsbCB1bmRlciBzdGFuZGFyZCBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IHNhZmV0eSBjYXVnaHQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGRldGVjdGVkIGJ5IEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHZhbGlkYXRpb24gZm9yIGBzY2F0dGVyX2VsZW1fc3pgIGluIGBkcml2ZXJzL3Njc2kvc2cuY2AgYnkgYWRkaW5nIGEgY3VzdG9tIHNldHRlciBjYWxsYmFjayBgc2NhdHRlcl9lbGVtX3N6X3NldCgpYCB0byB2YWxpZGF0ZSBib3VuZHMsIGFuZCBjbGVhbnMgdXAgdGhlIG9yZGVyIGNhbGN1bGF0aW9uIGxvZ2ljIGluIGBzZ19idWlsZF9pbmRpcmVjdCgpYCB3aGlsZSByZW1vdmluZyB0aGUgcmVkdW5kYW50IGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgdmFyaWFibGUuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgZXhwb3NlZDpcbjEuIE1lbW9yeSBhbGxvY2F0aW9ucyBmb3Igc2NhdHRlci1nYXRoZXIgcGFnZXMgdXNlIGBfX0dGUF9aRVJPYCBhbmQgdGFibGVzIHVzZSBga3phbGxvY2AuXG4yLiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gb3JkZXIgY2FsY3VsYXRpb24gYW5kIGxvb3AgaW5kZXhpbmcgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHN0YWNrIHByaW1pdGl2ZXMuXG4zLiBObyBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUuXG40LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBhZ2UgYWxsb2NhdGlvbiBib3VuZHMsIGJ1ZmZlciBzaXplcywgb3Igb3JkZXIgY2FsY3VsYXRpb25zIGZhbGwgdW5kZXIgc3RhbmRhcmQgZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBzYWZldHkgY2F1Z2h0IGJ5IEtBU0FOIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBkZXRlY3RlZCBieSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMjA6MDQ6MjIuMjI0MzY0ODAxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MTk1OTI3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NTSVwiLFxuICAgIFwiQ0hSX0RFVl9TR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNnX2J1aWxkX2luZGlyZWN0XCIsXG4gICAgXCJzY2F0dGVyX2VsZW1fc3pfc2V0XCIsXG4gICAgXCJzZ19idWlsZF9yZXNlcnZlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBmb3IgYHNjYXR0ZXJfZWxlbV9zemAgaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCBieSBhZGRpbmcgYSBjdXN0b20gc2V0dGVyIGNhbGxiYWNrIGBzY2F0dGVyX2VsZW1fc3pfc2V0KClgIHRvIHZhbGlkYXRlIGJvdW5kcywgYW5kIGNsZWFucyB1cCB0aGUgb3JkZXIgY2FsY3VsYXRpb24gbG9naWMgaW4gYHNnX2J1aWxkX2luZGlyZWN0KClgIHdoaWxlIHJlbW92aW5nIHRoZSByZWR1bmRhbnQgYHNjYXR0ZXJfZWxlbV9zel9wcmV2YCB2YXJpYWJsZS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQ6XFxuMS4gTWVtb3J5IGFsbG9jYXRpb25zIGZvciBzY2F0dGVyLWdhdGhlciBwYWdlcyB1c2UgYF9fR0ZQX1pFUk9gIGFuZCB0YWJsZXMgdXNlIGBremFsbG9jYC5cXG4yLiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gb3JkZXIgY2FsY3VsYXRpb24gYW5kIGxvb3AgaW5kZXhpbmcgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHN0YWNrIHByaW1pdGl2ZXMuXFxuMy4gTm8gZGF0YSBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFnZSBhbGxvY2F0aW9uIGJvdW5kcywgYnVmZmVyIHNpemVzLCBvciBvcmRlciBjYWxjdWxhdGlvbnMgZmFsbCB1bmRlciBzdGFuZGFyZCBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IHNhZmV0eSBjYXVnaHQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGRldGVjdGVkIGJ5IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTQ1NJIGdlbmVyaWMgZHJpdmVyIChzZykgc2NhdHRlci1nYXRoZXIgYnVmZmVyIGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24gbG9naWMuIEl0IHJlcGxhY2VzIGR5bmFtaWMgbW9kdWxlIHBhcmFtZXRlciBjaGVja2luZyBpbiBzZ19idWlsZF9pbmRpcmVjdCB3aXRoIGEgZGVkaWNhdGVkIG1vZHVsZV9wYXJhbV9jYiBzZXR0ZXIgKHNjYXR0ZXJfZWxlbV9zel9zZXQpIGFuZCBzaW1wbGlmaWVzIHRoZSBhbGxvY2F0aW9uIGxvb3AgY2FsY3VsYXRpb24uIFNDU0kgZ2VuZXJpYyBkZXZpY2VzIGFyZSBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNDoyMi4yMjQzNzE1NDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjE1Nzg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc3NmUzNTBiNTA3NWZjYzEwOTA2NGUwYzA5OWMxNDdlNzBjYjgwM2FcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAyMDowNDoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jXFxuaW5kZXggNTQwOGYwMDJlNmMwMS4uNGM4MmZjMDBkMDVkZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Njc2kvc2cuY1xcbisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jXFxuQEAgLTkyLDcgKzkyLDYgQEAgc3RhdGljIGludCBkZWZfcmVzZXJ2ZWRfc2l6ZSA9IFNHX0RFRl9SRVNFUlZFRF9TSVpFO1xcbiBzdGF0aWMgaW50IHNnX2FsbG93X2RpbyA9IFNHX0FMTE9XX0RJT19ERUY7XFxuIFxcbiBzdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zeiA9IFNHX1NDQVRURVJfU1o7XFxuLXN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBTR19TQ0FUVEVSX1NaO1xcbiBcXG4gI2RlZmluZSBTR19TRUNUT1JfU1ogNTEyXFxuIFxcbkBAIC0xNjIxLDkgKzE2MjAsMzMgQEAgc2dfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpjbF9kZXYpXFxuIFxcdGtyZWZfcHV0KFxcdTAwMjZzZHAtXFx1MDAzZWRfcmVmLCBzZ19kZXZpY2VfZGVzdHJveSk7XFxuIH1cXG4gXFxuLW1vZHVsZV9wYXJhbV9uYW1lZChzY2F0dGVyX2VsZW1fc3osIHNjYXR0ZXJfZWxlbV9zeiwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7XFxuIG1vZHVsZV9wYXJhbV9uYW1lZChhbGxvd19kaW8sIHNnX2FsbG93X2RpbywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7XFxuIFxcbitzdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zel9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4re1xcbitcXHRpbnQgc2l6ZSwgcmV0O1xcbitcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0ID0ga3N0cnRvaW50KHZhbCwgMCwgXFx1MDAyNnNpemUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHNpemUgXFx1MDAzYyBQQUdFX1NJWkUgfHwgc2l6ZSBcXHUwMDNlIChQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgTUFYX1BBR0VfT1JERVIpKVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdHNjYXR0ZXJfZWxlbV9zeiA9IHNpemU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgc2NhdHRlcl9lbGVtX3N6X29wcyA9IHtcXG4rXFx0LnNldFxcdD0gc2NhdHRlcl9lbGVtX3N6X3NldCxcXG4rXFx0LmdldFxcdD0gcGFyYW1fZ2V0X2ludCxcXG4rfTtcXG4rXFxuK21vZHVsZV9wYXJhbV9jYihzY2F0dGVyX2VsZW1fc3osIFxcdTAwMjZzY2F0dGVyX2VsZW1fc3pfb3BzLCBcXHUwMDI2c2NhdHRlcl9lbGVtX3N6LCAwNjQ0KTtcXG4rXFxuIHN0YXRpYyBpbnQgZGVmX3Jlc2VydmVkX3NpemVfc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuIHtcXG4gXFx0aW50IHNpemUsIHJldDtcXG5AQCAtMTY2NywxMCArMTY5MCw4IEBAIGluaXRfc2codm9pZClcXG4ge1xcbiBcXHRpbnQgcmM7XFxuIFxcbi1cXHRpZiAoc2NhdHRlcl9lbGVtX3N6IFxcdTAwM2MgUEFHRV9TSVpFKSB7XFxuK1xcdGlmIChzY2F0dGVyX2VsZW1fc3ogXFx1MDAzYyBQQUdFX1NJWkUpXFxuIFxcdFxcdHNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTtcXG4tXFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBzY2F0dGVyX2VsZW1fc3o7XFxuLVxcdH1cXG4gXFxuIFxcdHJjID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihTQ1NJX0dFTkVSSUNfTUFKT1IsIDApLCBcXG4gXFx0XFx0XFx0XFx0ICAgIFNHX01BWF9ERVZTLCBcXFwic2dcXFwiKTtcXG5AQCAtMTg3MywzNiArMTg5NCwxOSBAQCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcXG4gXFx0aWYgKG14X3NjX2VsZW1zIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIG14X3NjX2VsZW1zO1xcdC8qIG1vc3QgbGlrZWx5IC1FTk9NRU0gKi9cXG4gXFxuLVxcdG51bSA9IHNjYXR0ZXJfZWxlbV9zejtcXG4tXFx0aWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcXG4tXFx0XFx0aWYgKG51bSBcXHUwMDNjIFBBR0VfU0laRSkge1xcbi1cXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XFxuLVxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gUEFHRV9TSVpFO1xcbi1cXHRcXHR9IGVsc2VcXG4tXFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBudW07XFxuLVxcdH1cXG4tXFxuLVxcdG9yZGVyID0gZ2V0X29yZGVyKG51bSk7XFxuK1xcdG9yZGVyID0gZ2V0X29yZGVyKHNjYXR0ZXJfZWxlbV9zeik7XFxuIHJldHJ5OlxcbiBcXHRyZXRfc3ogPSAxIFxcdTAwM2NcXHUwMDNjIChQQUdFX1NISUZUICsgb3JkZXIpO1xcbiBcXG4gXFx0Zm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgayBcXHUwMDNjIG14X3NjX2VsZW1zO1xcbiBcXHQgICAgIGsrKywgcmVtX3N6IC09IHJldF9zeikge1xcbiBcXG4tXFx0XFx0bnVtID0gKHJlbV9zeiBcXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSA/XFxuLVxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2IDogcmVtX3N6O1xcbitcXHRcXHRudW0gPSBtaW4ocmVtX3N6LCByZXRfc3opO1xcbiBcXG4gXFx0XFx0c2NocC1cXHUwMDNlcGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xcbiBcXHRcXHRpZiAoIXNjaHAtXFx1MDAzZXBhZ2VzW2tdKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdFxcdGlmIChudW0gPT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpIHtcXG4tXFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldF9zeiBcXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xcbi1cXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3ogPSByZXRfc3o7XFxuLVxcdFxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gcmV0X3N6O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFxuIFxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4gXFx0XFx0XFx0XFx0IFxcXCJzZ19idWlsZF9pbmRpcmVjdDogaz0lZCwgbnVtPSVkLCByZXRfc3o9JWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBrLCBudW0sIHJldF9zeikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNDoyMi43MzEzNDI0MzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyOTgwMjQ0NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNDU0lcIixcbiAgICBcIkNIUl9ERVZfU0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZ19idWlsZF9pbmRpcmVjdFwiLFxuICAgIFwic2NhdHRlcl9lbGVtX3N6X3NldFwiLFxuICAgIFwic2dfYnVpbGRfcmVzZXJ2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTQ1NJIGdlbmVyaWMgZHJpdmVyIChzZykgc2NhdHRlci1nYXRoZXIgYnVmZmVyIGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24gbG9naWMuIEl0IHJlcGxhY2VzIGR5bmFtaWMgbW9kdWxlIHBhcmFtZXRlciBjaGVja2luZyBpbiBzZ19idWlsZF9pbmRpcmVjdCB3aXRoIGEgZGVkaWNhdGVkIG1vZHVsZV9wYXJhbV9jYiBzZXR0ZXIgKHNjYXR0ZXJfZWxlbV9zel9zZXQpIGFuZCBzaW1wbGlmaWVzIHRoZSBhbGxvY2F0aW9uIGxvb3AgY2FsY3VsYXRpb24uIFNDU0kgZ2VuZXJpYyBkZXZpY2VzIGFyZSBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc3NmUzNTBiNTA3NWZjYzEwOTA2NGUwYzA5OWMxNDdlNzBjYjgwM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDIwOjA0OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuY1xuaW5kZXggNTQwOGYwMDJlNmMwMS4uNGM4MmZjMDBkMDVkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jXG4rKysgYi9kcml2ZXJzL3Njc2kvc2cuY1xuQEAgLTkyLDcgKzkyLDYgQEAgc3RhdGljIGludCBkZWZfcmVzZXJ2ZWRfc2l6ZSA9IFNHX0RFRl9SRVNFUlZFRF9TSVpFO1xuIHN0YXRpYyBpbnQgc2dfYWxsb3dfZGlvID0gU0dfQUxMT1dfRElPX0RFRjtcbiBcbiBzdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zeiA9IFNHX1NDQVRURVJfU1o7XG4tc3RhdGljIGludCBzY2F0dGVyX2VsZW1fc3pfcHJldiA9IFNHX1NDQVRURVJfU1o7XG4gXG4gI2RlZmluZSBTR19TRUNUT1JfU1ogNTEyXG4gXG5AQCAtMTYyMSw5ICsxNjIwLDMzIEBAIHNnX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqY2xfZGV2KVxuIFx0a3JlZl9wdXQoXHUwMDI2c2RwLVx1MDAzZWRfcmVmLCBzZ19kZXZpY2VfZGVzdHJveSk7XG4gfVxuIFxuLW1vZHVsZV9wYXJhbV9uYW1lZChzY2F0dGVyX2VsZW1fc3osIHNjYXR0ZXJfZWxlbV9zeiwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7XG4gbW9kdWxlX3BhcmFtX25hbWVkKGFsbG93X2Rpbywgc2dfYWxsb3dfZGlvLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTtcbiBcbitzdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zel9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbit7XG4rXHRpbnQgc2l6ZSwgcmV0O1xuK1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0ID0ga3N0cnRvaW50KHZhbCwgMCwgXHUwMDI2c2l6ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHNpemUgXHUwMDNjIFBBR0VfU0laRSB8fCBzaXplIFx1MDAzZSAoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBNQVhfUEFHRV9PUkRFUikpXG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1xuK1x0c2NhdHRlcl9lbGVtX3N6ID0gc2l6ZTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgc2NhdHRlcl9lbGVtX3N6X29wcyA9IHtcbitcdC5zZXRcdD0gc2NhdHRlcl9lbGVtX3N6X3NldCxcbitcdC5nZXRcdD0gcGFyYW1fZ2V0X2ludCxcbit9O1xuK1xuK21vZHVsZV9wYXJhbV9jYihzY2F0dGVyX2VsZW1fc3osIFx1MDAyNnNjYXR0ZXJfZWxlbV9zel9vcHMsIFx1MDAyNnNjYXR0ZXJfZWxlbV9zeiwgMDY0NCk7XG4rXG4gc3RhdGljIGludCBkZWZfcmVzZXJ2ZWRfc2l6ZV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbiB7XG4gXHRpbnQgc2l6ZSwgcmV0O1xuQEAgLTE2NjcsMTAgKzE2OTAsOCBAQCBpbml0X3NnKHZvaWQpXG4ge1xuIFx0aW50IHJjO1xuIFxuLVx0aWYgKHNjYXR0ZXJfZWxlbV9zeiBcdTAwM2MgUEFHRV9TSVpFKSB7XG4rXHRpZiAoc2NhdHRlcl9lbGVtX3N6IFx1MDAzYyBQQUdFX1NJWkUpXG4gXHRcdHNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTtcbi1cdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBzY2F0dGVyX2VsZW1fc3o7XG4tXHR9XG4gXG4gXHRyYyA9IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoU0NTSV9HRU5FUklDX01BSk9SLCAwKSwgXG4gXHRcdFx0XHQgICAgU0dfTUFYX0RFVlMsIFwic2dcIik7XG5AQCAtMTg3MywzNiArMTg5NCwxOSBAQCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcbiBcdGlmIChteF9zY19lbGVtcyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIG14X3NjX2VsZW1zO1x0LyogbW9zdCBsaWtlbHkgLUVOT01FTSAqL1xuIFxuLVx0bnVtID0gc2NhdHRlcl9lbGVtX3N6O1xuLVx0aWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcbi1cdFx0aWYgKG51bSBcdTAwM2MgUEFHRV9TSVpFKSB7XG4tXHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuLVx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gUEFHRV9TSVpFO1xuLVx0XHR9IGVsc2Vcbi1cdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTtcbi1cdH1cbi1cbi1cdG9yZGVyID0gZ2V0X29yZGVyKG51bSk7XG4rXHRvcmRlciA9IGdldF9vcmRlcihzY2F0dGVyX2VsZW1fc3opO1xuIHJldHJ5OlxuIFx0cmV0X3N6ID0gMSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgKyBvcmRlcik7XG4gXG4gXHRmb3IgKGsgPSAwLCByZW1fc3ogPSBibGtfc2l6ZTsgcmVtX3N6IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBrIFx1MDAzYyBteF9zY19lbGVtcztcbiBcdCAgICAgaysrLCByZW1fc3ogLT0gcmV0X3N6KSB7XG4gXG4tXHRcdG51bSA9IChyZW1fc3ogXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSA/XG4tXHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgOiByZW1fc3o7XG4rXHRcdG51bSA9IG1pbihyZW1fc3osIHJldF9zeik7XG4gXG4gXHRcdHNjaHAtXHUwMDNlcGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xuIFx0XHRpZiAoIXNjaHAtXHUwMDNlcGFnZXNba10pXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4tXHRcdGlmIChudW0gPT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpIHtcbi1cdFx0XHRpZiAodW5saWtlbHkocmV0X3N6IFx1MDAzZSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcbi1cdFx0XHRcdHNjYXR0ZXJfZWxlbV9zeiA9IHJldF9zejtcbi1cdFx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gcmV0X3N6O1xuLVx0XHRcdH1cbi1cdFx0fVxuLVxuIFx0XHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbiBcdFx0XHRcdCBcInNnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwiLFxuIFx0XHRcdFx0IGssIG51bSwgcmV0X3N6KSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNDoyMi43MzEzNDQ4NjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjkzOTUwMTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aGF0IHBhdGNoIGFuYWx5c2lzLCBiYXNlZCBvbiBteSBleHBlcnQgdW5kZXJzdGFuZGluZzpcblxuKipQYXRjaCBGdXp6aW5nIFN0cmF0ZWd5OiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9zY3NpL3NnLmNgIGlzIGV2ZW4gYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBxdWlja2x5IGluc3BlY3QgdGhlIGZpbGUgaXRzZWxmIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgaW1tZWRpYXRlIGdvYWxzIGFyZSB0byBkZXRlcm1pbmU6XG5cbiogICAqKkZ1enogV29ydGhpbmVzczoqKiBJcyB0aGVyZSBhbnl0aGluZyBoZXJlIHRoYXQgbG9va3MgbGlrZSBpdCdzIGhhbmRsaW5nIHBvdGVudGlhbGx5IHVudHJ1c3RlZCBkYXRhLCBpbnZvbHZlcyBjb21wbGV4IHN0YXRlIHRyYW5zaXRpb25zLCBvciBkZWFscyB3aXRoIHJlc291cmNlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY2FuZGlkYXRlcyBmb3IgbWVtb3J5IGNvcnJ1cHRpb24sIGludGVnZXIgb3ZlcmZsb3dzLCBvciByYWNlIGNvbmRpdGlvbnM/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgd2hlcmUgdG8gbG9vayBmaXJzdCwgYnV0IEknbGwgbmVlZCB0byBjb25maXJtIHdpdGggYSB0aG9yb3VnaCBsb29rLlxuKiAgICoqQ29uZmlndXJhdGlvbjoqKiBXaGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgbmVlZGVkIHRvIHRyaWdnZXIgdGhlIGNvZGUgY2hhbmdlcyBlZmZlY3RpdmVseT8gQXJlIHRoZXJlIGtlcm5lbCBvcHRpb25zLCBtb2R1bGUgcGFyYW1ldGVycywgb3Igc3lzZnMgZW50cmllcyB0aGF0IG5lZWQgdG8gYmUgc2V0PyBBcmUgdGhlcmUgcGFydGljdWxhciBoYXJkd2FyZSBzZXR1cHMgSSBuZWVkIHRvIGVtdWxhdGU/IFRoZSBkZXZpbCBpcyBpbiB0aGVzZSBkZXRhaWxzLlxuKiAgICoqRm9jdXMgU3ltYm9sczoqKiBCYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzLCB3aGF0IGFyZSB0aGUgbW9zdCBjcml0aWNhbCBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRhcmdldCB3aXRoIHRoZSBmdXp6ZXI/IFdoYXQgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCBjYWxsYmFja3MsIG9yIHNlbnNpdGl2ZSBvcGVyYXRpb25zIHRoYXQgSSBjYW4gXCJob29rXCIgdG8gZ2V0IHRoZSBmdXp6ZXIgdG8gZW5nYWdlIHdpdGggdGhlIG1vZGlmaWVkIGNvZGUgcGF0aD8gVGhpcyB3aWxsIGludm9sdmUgaWRlbnRpZnlpbmcgdGhlIGNyaXRpY2FsIGxvZ2ljIHRoYXQgbmVlZHMgdG8gYmUgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODg1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNDoyNy40MjUyOTgzNDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzNjU0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0NIUl9ERVZfU0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvc2NzaS9NYWtlZmlsZT0xNzM9b2JqLSQoQ09ORklHX0JMS19ERVZfU1IpXFx0Kz0gc3JfbW9kLm9cXG5kcml2ZXJzL3Njc2kvTWFrZWZpbGU6MTc0Om9iai0kKENPTkZJR19DSFJfREVWX1NHKVxcdCs9IHNnLm9cXG5kcml2ZXJzL3Njc2kvTWFrZWZpbGUtMTc1LW9iai0kKENPTkZJR19DSFJfREVWX1NDSClcXHQrPSBjaC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjI3LjQ4NjY3MTUxMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzk5MTk1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6XG5cbioqRXhhbWluaW5nIFNDU0kgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYENIUl9ERVZfU0dgIGlzIGRlZmluZWQsIGFuZCB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgYWxtb3N0IGFsd2F5cyB0aGUgYEtjb25maWdgIGZpbGVzLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggU0NTSSwgSSdsbCBnbyBkaXJlY3RseSB0byBgZHJpdmVycy9zY3NpL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFNDU0kgc3Vic3lzdGVtIHNob3VsZCBiZSBkZWNsYXJlZCwgYW5kIHdoZXJlIEkgY2FuIGZpbmQgdGhlIGRlcGVuZGVuY3kgZGVmaW5pdGlvbnMgb2YgYENIUl9ERVZfU0dgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGh1bnQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNDoyOS44MjY1OTMyNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQwMTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0hSX0RFVl9TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL0tjb25maWc9MTE2PWNvbmZpZyBCTEtfREVWX1NSXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy0xMzAtXFxuZHJpdmVycy9zY3NpL0tjb25maWc6MTMxOmNvbmZpZyBDSFJfREVWX1NHXFxuZHJpdmVycy9zY3NpL0tjb25maWctMTMyLVxcdHRyaXN0YXRlIFxcXCJTQ1NJIGdlbmVyaWMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjA6MDQ6MjkuODg5MDAwNzg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM2MzMwNDI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFNDU0kgS2NvbmZpZyBGaWxlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBkcml2ZXJzL3Njc2kvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMzEuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGFyZWEgbGlrZWx5IGRlYWxzIHdpdGggYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGEgcmVsYXRlZCBncm91cGluZyB3aXRoaW4gdGhlIFNDU0kgc3Vic3lzdGVtLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCwgYSBtZW51IGVudHJ5LCBvciBwZXJoYXBzIGEgZGVwZW5kZW5jeSBkZWNsYXJhdGlvbiB0aGF0IGluZmx1ZW5jZXMgaG93IFNDU0kgZHJpdmVycyBhcmUgY29tcGlsZWQgYW5kIGluY29ycG9yYXRlZCBpbnRvIHRoZSBrZXJuZWwuIEknbGwgbmVlZCB0byByYXBpZGx5IHBhcnNlIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoYXQgbGluZSB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBhbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgYmVpbmcgY29udHJvbGxlZCB0aGVyZS4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSB0YXJnZXRzIHRoaXMgYWZmZWN0cy4gSXQncyB0aW1lIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NDY1NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjMzLjI1MjMwODkxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjU6XFx0XFx0ICBNYWtlIHN1cmUgdG8gc2F5IFkgb3IgTSB0byBcXFwiSVNPIDk2NjAgQ0QtUk9NIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiLlxcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUgYW5kIHJlYWRcXG4gMTI4OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9zY3NpL3Njc2kucnN0XFx1MDAzZS5cXG4gMTI5OlxcdFxcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzcl9tb2QuXFxuIDEzMDpcXHRcXG4gMTMxOlxcdGNvbmZpZyBDSFJfREVWX1NHXFxuIDEzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU0NTSSBnZW5lcmljIHN1cHBvcnRcXFwiXFxuIDEzMzpcXHRcXHRkZXBlbmRzIG9uIFNDU0lcXG4gMTM0OlxcdFxcdGhlbHBcXG4gMTM1OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gdXNlIFNDU0kgc2Nhbm5lcnMsIHN5bnRoZXNpemVycyBvciBDRC13cml0ZXJzIG9yIGp1c3RcXG4gMTM2OlxcdFxcdCAgYWJvdXQgYW55dGhpbmcgaGF2aW5nIFxcXCJTQ1NJXFxcIiBpbiBpdHMgbmFtZSBvdGhlciB0aGFuIGhhcmQgZGlza3MsXFxuIDEzNzpcXHRcXHQgIENELVJPTXMgb3IgdGFwZXMsIHNheSBZIGhlcmUuIFRoZXNlIHdvbid0IGJlIHN1cHBvcnRlZCBieSB0aGUga2VybmVsXFxuIDEzODpcXHRcXHQgIGRpcmVjdGx5LCBzbyB5b3UgbmVlZCBzb21lIGFkZGl0aW9uYWwgc29mdHdhcmUgd2hpY2gga25vd3MgaG93IHRvXFxuIDEzOTpcXHRcXHQgIHRhbGsgdG8gdGhlc2UgZGV2aWNlcyB1c2luZyB0aGUgU0NTSSBwcm90b2NvbDpcXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0ICBGb3Igc2Nhbm5lcnMsIGxvb2sgYXQgU0FORSAoXFx1MDAzY2h0dHA6Ly93d3cuc2FuZS1wcm9qZWN0Lm9yZy9cXHUwMDNlKS4gRm9yIENEXFxuIDE0MjpcXHRcXHQgIHdyaXRlciBzb2Z0d2FyZSBsb29rIGF0IENkcnRvb2xzXFxuIDE0MzpcXHRcXHQgIChcXHUwMDNjaHR0cDovL2NkcnRvb2xzLnNvdXJjZWZvcmdlLm5ldC9cXHUwMDNlKVxcbiAxNDQ6XFx0XFx0ICBhbmQgZm9yIGJ1cm5pbmcgYSBcXFwiZGlzayBhdCBvbmNlXFxcIjogQ0RSREFPXFxuIDE0NTpcXHRcXHQgIChcXHUwMDNjaHR0cDovL2NkcmRhby5zb3VyY2Vmb3JnZS5uZXQvXFx1MDAzZSkuIENkcGFyYW5vaWEgaXMgYSBoaWdoXFxuIDE0NjpcXHRcXHQgIHF1YWxpdHkgZGlnaXRhbCByZWFkZXIgb2YgYXVkaW8gQ0RzIChcXHUwMDNjaHR0cDovL3d3dy54aXBoLm9yZy9wYXJhbm9pYS9cXHUwMDNlKS5cXG4gMTQ3OlxcdFxcdCAgRm9yIG90aGVyIGRldmljZXMsIGl0J3MgcG9zc2libGUgdGhhdCB5b3UnbGwgaGF2ZSB0byB3cml0ZSB0aGVcXG4gMTQ4OlxcdFxcdCAgZHJpdmVyIHNvZnR3YXJlIHlvdXJzZWxmLiBQbGVhc2UgcmVhZCB0aGUgZmlsZVxcbiAxNDk6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL3Njc2kvc2NzaS1nZW5lcmljLnJzdFxcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZSBhbmQgcmVhZFxcbiAxNTI6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL3Njc2kvc2NzaS5yc3RcXHUwMDNlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNnLlxcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjMzLjI1MjQyNDg2NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MzU3MzM3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFNDU0kgRHJpdmVyIENoYW5nZXMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzIHNwZWNpZmljIGlzc3VlLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgZHJpdmVycy9zY3NpL3NnLmNgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBpbnRlcmVzdGluZyBTQ1NJIGdlbmVyaWMgZHJpdmVyIHN0dWZmIGhhcHBlbnMsIGVzcGVjaWFsbHkgaWYgd2UncmUgZGVhbGluZyB3aXRoIHNjYXR0ZXItZ2F0aGVyIGFuZCBpbmRpcmVjdCBkYXRhIHRyYW5zZmVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBhcm91bmQgYHNnX2J1aWxkX2luZGlyZWN0YCBhbmQgYHNjYXR0ZXJfZWxlbV9zel9zZXRgLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QsIGFuZCB3aGF0IGNvbnRleHQgdGhleSdyZSBjYWxsZWQgd2l0aGluLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gdW5kZXJzdGFuZCB0aGUgYmVmb3JlIGFuZCBhZnRlciwgdG8gYmUgY2VydGFpbiBvZiB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIHNldCB1cCwgaG93IHRoZSBjb21tYW5kcyBhcmUgYnVpbHQsIGFuZCBob3cgdGhlIHNjYXR0ZXItZ2F0aGVyIGxpc3RzIGFyZSBtYW5hZ2VkLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMuIEkgc3VzcGVjdCB0aGF0IHRoZXJlIGlzIGEgc3VidGxlIGlzc3VlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjM2LjA4ODE2MTAwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2NSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2NTpcXHRcXHRnZnBfdCBnZnBfZmxhZ3MgPSBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOO1xcbjE4NjY6XFx0XFxuMTg2NzpcXHRcXHRzY2hwLVxcdTAwM2VwYWdlcyA9IGt6YWxsb2Moc2dfYnVmZmxlbiwgZ2ZwX2ZsYWdzKTtcXG4xODY4OlxcdFxcdGlmICghc2NocC1cXHUwMDNlcGFnZXMpXFxuMTg2OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xODcwOlxcdFxcdHNjaHAtXFx1MDAzZXNnbGlzdF9sZW4gPSBzZ19idWZmbGVuO1xcbjE4NzE6XFx0XFx0cmV0dXJuIHRhYmxlc2l6ZTtcXHQvKiBudW1iZXIgb2Ygc2NhdF9nYXRoIGVsZW1lbnRzIGFsbG9jYXRlZCAqL1xcbjE4NzI6XFx0fVxcbjE4NzM6XFx0XFxuMTg3NDpcXHRzdGF0aWMgaW50XFxuMTg3NTpcXHRzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcXG4xODc2OlxcdHtcXG4xODc3OlxcdFxcdGludCByZXRfc3ogPSAwLCBpLCBrLCByZW1fc3osIG51bSwgbXhfc2NfZWxlbXM7XFxuMTg3ODpcXHRcXHRpbnQgc2dfdGFibGVzaXplID0gc2ZwLVxcdTAwM2VwYXJlbnRkcC1cXHUwMDNlc2dfdGFibGVzaXplO1xcbjE4Nzk6XFx0XFx0aW50IGJsa19zaXplID0gYnVmZl9zaXplLCBvcmRlcjtcXG4xODgwOlxcdFxcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0FUT01JQyB8IF9fR0ZQX0NPTVAgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9aRVJPO1xcbjE4ODE6XFx0XFxuMTg4MjpcXHRcXHRpZiAoYmxrX3NpemUgXFx1MDAzYyAwKVxcbjE4ODM6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTg4NDpcXHRcXHRpZiAoMCA9PSBibGtfc2l6ZSlcXG4xODg1OlxcdFxcdFxcdCsrYmxrX3NpemU7XFx0LyogZG9uJ3Qga25vdyB3aHkgKi9cXG4xODg2OlxcdFxcdC8qIHJvdW5kIHJlcXVlc3QgdXAgdG8gbmV4dCBoaWdoZXN0IFNHX1NFQ1RPUl9TWiBieXRlIGJvdW5kYXJ5ICovXFxuMTg4NzpcXHRcXHRibGtfc2l6ZSA9IEFMSUdOKGJsa19zaXplLCBTR19TRUNUT1JfU1opO1xcbjE4ODg6XFx0XFx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXFx1MDAzZXBhcmVudGRwLFxcbjE4ODk6XFx0XFx0XFx0XFxcInNnX2J1aWxkX2luZGlyZWN0OiBidWZmX3NpemU9JWQsIGJsa19zaXplPSVkXFxcXG5cXFwiLFxcbjE4OTA6XFx0XFx0XFx0YnVmZl9zaXplLCBibGtfc2l6ZSkpO1xcbjE4OTE6XFx0XFxuMTg5MjpcXHRcXHQvKiBOLkIuIHJldF9zeiBjYXJyaWVkIGludG8gdGhpcyBibG9jayAuLi4gKi9cXG4xODkzOlxcdFxcdG14X3NjX2VsZW1zID0gc2dfYnVpbGRfc2dhdChzY2hwLCBzZnAsIHNnX3RhYmxlc2l6ZSk7XFxuMTg5NDpcXHRcXHRpZiAobXhfc2NfZWxlbXMgXFx1MDAzYyAwKVxcbjE4OTU6XFx0XFx0XFx0cmV0dXJuIG14X3NjX2VsZW1zO1xcdC8qIG1vc3QgbGlrZWx5IC1FTk9NRU0gKi9cXG4xODk2OlxcdFxcbjE4OTc6XFx0XFx0b3JkZXIgPSBnZXRfb3JkZXIoc2NhdHRlcl9lbGVtX3N6KTtcXG4xODk4OlxcdHJldHJ5OlxcbjE4OTk6XFx0XFx0cmV0X3N6ID0gMSBcXHUwMDNjXFx1MDAzYyAoUEFHRV9TSElGVCArIG9yZGVyKTtcXG4xOTAwOlxcdFxcbjE5MDE6XFx0XFx0Zm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgayBcXHUwMDNjIG14X3NjX2VsZW1zO1xcbjE5MDI6XFx0XFx0ICAgICBrKyssIHJlbV9zeiAtPSByZXRfc3opIHtcXG4xOTAzOlxcdFxcbjE5MDQ6XFx0XFx0XFx0bnVtID0gbWluKHJlbV9zeiwgcmV0X3N6KTtcXG4xOTA1OlxcdFxcbjE5MDY6XFx0XFx0XFx0c2NocC1cXHUwMDNlcGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xcbjE5MDc6XFx0XFx0XFx0aWYgKCFzY2hwLVxcdTAwM2VwYWdlc1trXSlcXG4xOTA4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE5MDk6XFx0XFxuMTkxMDpcXHRcXHRcXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuMTkxMTpcXHRcXHRcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcXFxuXFxcIixcXG4xOTEyOlxcdFxcdFxcdFxcdFxcdCBrLCBudW0sIHJldF9zeikpO1xcbjE5MTM6XFx0XFx0fVxcdFxcdC8qIGVuZCBvZiBmb3IgbG9vcCAqL1xcbjE5MTQ6XFx0XFxuMTkxNTpcXHRcXHRzY2hwLVxcdTAwM2VwYWdlX29yZGVyID0gb3JkZXI7XFxuMTkxNjpcXHRcXHRzY2hwLVxcdTAwM2VrX3VzZV9zZyA9IGs7XFxuMTkxNzpcXHRcXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuMTkxODpcXHRcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrX3VzZV9zZz0lZCwgcmVtX3N6PSVkXFxcXG5cXFwiLFxcbjE5MTk6XFx0XFx0XFx0XFx0IGssIHJlbV9zeikpO1xcbjE5MjA6XFx0XFxuMTkyMTpcXHRcXHRzY2hwLVxcdTAwM2VidWZmbGVuID0gYmxrX3NpemU7XFxuMTkyMjpcXHRcXHRpZiAocmVtX3N6IFxcdTAwM2UgMClcXHQvKiBtdXN0IGhhdmUgZmFpbGVkICovXFxuMTkyMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xOTI0OlxcdFxcdHJldHVybiAwO1xcbjE5MjU6XFx0b3V0OlxcbjE5MjY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGs7IGkrKylcXG4xOTI3OlxcdFxcdFxcdF9fZnJlZV9wYWdlcyhzY2hwLVxcdTAwM2VwYWdlc1tpXSwgb3JkZXIpO1xcbjE5Mjg6XFx0XFxuMTkyOTpcXHRcXHRpZiAoLS1vcmRlciBcXHUwMDNlPSAwKVxcbjE5MzA6XFx0XFx0XFx0Z290byByZXRyeTtcXG4xOTMxOlxcdFxcbjE5MzI6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTkzMzpcXHR9XFxuMTkzNDpcXHRcXG4xOTM1OlxcdHN0YXRpYyB2b2lkXFxuMTkzNjpcXHRzZ19yZW1vdmVfc2NhdChTZ19mZCAqIHNmcCwgU2dfc2NhdHRlcl9ob2xkICogc2NocClcXG4xOTM3OlxcdHtcXG4xOTM4OlxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xOTM5OlxcdFxcdFxcdFxcdCBcXFwic2dfcmVtb3ZlX3NjYXQ6IGtfdXNlX3NnPSVkXFxcXG5cXFwiLCBzY2hwLVxcdTAwM2VrX3VzZV9zZykpO1xcbjE5NDA6XFx0XFx0aWYgKHNjaHAtXFx1MDAzZXBhZ2VzIFxcdTAwMjZcXHUwMDI2IHNjaHAtXFx1MDAzZXNnbGlzdF9sZW4gXFx1MDAzZSAwKSB7XFxuMTk0MTpcXHRcXHRcXHRpZiAoIXNjaHAtXFx1MDAzZWRpb19pbl91c2UpIHtcXG4xOTQyOlxcdFxcdFxcdFxcdGludCBrO1xcbjE5NDM6XFx0XFxuMTk0NDpcXHRcXHRcXHRcXHRmb3IgKGsgPSAwOyBrIFxcdTAwM2Mgc2NocC1cXHUwMDNla191c2Vfc2cgXFx1MDAyNlxcdTAwMjYgc2NocC1cXHUwMDNlcGFnZXNba107IGsrKykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNDozNi4wODgzMDY2OTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ4NzE5MjI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTQ1NJIEdlbmVyaWMgRHJpdmVyIGluIGEgVmlydHVhbGl6ZWQgQ29udGV4dCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSB0aGlua2luZyBhYm91dCB0aGUgYGRyaXZlcnMvc2NzaS9zZy5jYCBmaWxlLCB0aGUgY29yZSBvZiB0aGUgU0NTSSBnZW5lcmljIGRyaXZlciwgZXhwb3NlZCB0aHJvdWdoIGAvZGV2L3NnKmAgZGV2aWNlcy4gTXkga2V5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIHJlbGV2YW50IHdpdGhpbiBRRU1VIG9yIG90aGVyIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQW5kIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBTQ1NJIGdlbmVyaWMgZGV2aWNlcywgbGlrZSBgL2Rldi9zZzBgLCBgL2Rldi9zZzFgLCBvciBldmVuIHRoZSBkZWJ1ZyBkZXZpY2VzIG9yIGVtdWxhdGVkIFNDU0kgZHJpdmVzLCBhcmUgc3RhbmRhcmQgZmFyZSBpbiBRRU1VLiBUaGF0J3MgZ29vZCBuZXdzOyBpdCBtZWFucyBJIGNhbiBwb3RlbnRpYWxseSB1c2UgdGhpcyBmb3IgdnVsbmVyYWJpbGl0eSByZXNlYXJjaC4gQWxzbywgdGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgYWN0aXZlbHkgZnV6emVzIGAvZGV2L3NnKmAgYW5kIGl0cyBhc3NvY2lhdGVkIGlvY3RscyBpcyBhIG1ham9yIHBvaW50IGluIGl0cyBmYXZvdXIuXG5cbk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjb2RlIGl0c2VsZi4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgdG8gZmluZCBvdXQgY2FsbGVycyBvZiBgc2dfYnVpbGRfaW5kaXJlY3RgLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gb24gaG93IHN5emthbGxlciB1c2VzIHRoZSBjYWxscy4gQWx0ZXJuYXRpdmVseSwgSSB3aWxsIGxvb2sgYXQgd2hlcmUgYHNnX2J1aWxkX2luZGlyZWN0YCBpcyBjYWxsZWQgZGlyZWN0bHkgaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCB0byBzZWUgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIuIEJvdGggcGF0aHMgd2lsbCBoZWxwIG1lIGRldGVybWluZSB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgbG9naWMgbGllcyBhbmQgd2hlcmUgdG8gZm9jdXMgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE3MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjM5LjU3NTUwMjA0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwMTE2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2dfYnVpbGRfaW5kaXJlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3NnLmM9MTgyPXN0YXRpYyBpbnQgc2dfZmluaXNoX3JlbV9yZXEoU2dfcmVxdWVzdCAqIHNycCk7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTgzOnN0YXRpYyBpbnQgc2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE4NC1zdGF0aWMgc3NpemVfdCBzZ19uZXdfcmVhZChTZ19mZCAqIHNmcCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LFxcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTczMj1zZ19zdGFydF9yZXEoU2dfcmVxdWVzdCAqc3JwLCB1bnNpZ25lZCBjaGFyICpjbWQpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xODAzLVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTgwNDpcXHRcXHRcXHRyZXMgPSBzZ19idWlsZF9pbmRpcmVjdChyZXFfc2NocCwgc2ZwLCBkeGZlcl9sZW4pO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE4MDUtXFx0XFx0XFx0aWYgKHJlcykge1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTg3ND1zdGF0aWMgaW50XFxuZHJpdmVycy9zY3NpL3NnLmM6MTg3NTpzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcXG5kcml2ZXJzL3Njc2kvc2cuYy0xODc2LXtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE4ODgtXFx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXFx1MDAzZXBhcmVudGRwLFxcbmRyaXZlcnMvc2NzaS9zZy5jOjE4ODk6XFx0XFx0XFxcInNnX2J1aWxkX2luZGlyZWN0OiBidWZmX3NpemU9JWQsIGJsa19zaXplPSVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvc2NzaS9zZy5jLTE4OTAtXFx0XFx0YnVmZl9zaXplLCBibGtfc2l6ZSkpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTkxMC1cXHRcXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuZHJpdmVycy9zY3NpL3NnLmM6MTkxMTpcXHRcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcXFxuXFxcIixcXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTEyLVxcdFxcdFxcdFxcdCBrLCBudW0sIHJldF9zeikpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTkxNy1cXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuZHJpdmVycy9zY3NpL3NnLmM6MTkxODpcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrX3VzZV9zZz0lZCwgcmVtX3N6PSVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MTktXFx0XFx0XFx0IGssIHJlbV9zeikpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTk5Mj1zZ19idWlsZF9yZXNlcnZlKFNnX2ZkICogc2ZwLCBpbnQgcmVxX3NpemUpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0yMDAwLVxcdFxcdFxcdHJlcV9zaXplID0gUEFHRV9TSVpFO1xcbmRyaXZlcnMvc2NzaS9zZy5jOjIwMDE6XFx0XFx0aWYgKDAgPT0gc2dfYnVpbGRfaW5kaXJlY3Qoc2NocCwgc2ZwLCByZXFfc2l6ZSkpXFxuZHJpdmVycy9zY3NpL3NnLmMtMjAwMi1cXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjM5LjYyOTUxOTU3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODc0Nzk4NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nIHRoaXMgU0NTSSBHZW5lcmljIERyaXZlciBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZSBgc2NhdHRlcl9lbGVtX3N6YCBwYXJhbWV0ZXIgaXMgaGFuZGxlZCBpbiB0aGUgU0NTSSBnZW5lcmljIGRyaXZlciAoYHNnLmNgKS4gUHJldmlvdXNseSwgaXQgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIG1vZHVsZSBwYXJhbWV0ZXIuIE5vdywgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgY3VzdG9tIHNldHRlciBjYWxsYmFjaywgYHNjYXR0ZXJfZWxlbV9zel9zZXRgLCB0byB2YWxpZGF0ZSB0aGUgc2l6ZS4gVGhlIG9sZCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIHZhcmlhYmxlIGlzIGdvbmUsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5UaGUgY3JpdGljYWwgcGllY2Ugc2VlbXMgdG8gYmUgaW4gYHNnX2J1aWxkX2luZGlyZWN0YC4gVGhpcyBpcyB3aGVyZSB0aGUgbG9naWMgdXNlZCB0byBkeW5hbWljYWxseSBhZGp1c3QgYHNjYXR0ZXJfZWxlbV9zemAgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBtb3JlIGRpcmVjdCBhcHByb2FjaCB1c2luZyBgZ2V0X29yZGVyKClgIGFuZCBgbWluKClgLiBFc3NlbnRpYWxseSwgdGhleSd2ZSByZW1vdmVkIHRoZSBkeW5hbWljIG11dGF0aW9uIG9mIGBzY2F0dGVyX2VsZW1fc3pgLlxuXG5Ob3csIGlzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IEFic29sdXRlbHkuIGBzZ19idWlsZF9pbmRpcmVjdGAgaXMgaW52b2tlZCB3aGVuIGJ1aWxkaW5nIGluZGlyZWN0IGJ1ZmZlcnMsIGFuZCB0aGF0IGhhcHBlbnMgd2hlbmV2ZXIgYSB1c2VyIGludGVyYWN0cyB3aXRoIGEgU0NTSSBnZW5lcmljIGRldmljZSwgbGlrZSBgL2Rldi9zZypgLiBDb21tYW5kcyBsaWtlIGBzZ19zdGFydF9yZXFgIG9yIGBzZ19idWlsZF9yZXNlcnZlYCAoY2FsbGVkIG9uIG9wZW4vaW9jdGwpIHRyaWdnZXIgdGhpcy4gU0NTSSBnZW5lcmljIGlzIGEgc3RhbmRhcmQgZHJpdmVyLCBhbmQgaXQncyBlYXNpbHkgYWNjZXNzaWJsZSwgZXNwZWNpYWxseSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHdpdGggZW11bGF0ZWQgU0NTSSBkaXNrcyBvciBgc2NzaV9kZWJ1Z2AuICBQbHVzLCB3cml0aW5nIHRvIGAvc3lzL21vZHVsZS9zZy9wYXJhbWV0ZXJzL3NjYXR0ZXJfZWxlbV9zemAgZGlyZWN0bHkgY2FsbHMgdGhlIG5ldyBgc2NhdHRlcl9lbGVtX3N6X3NldGAgc2V0dGVyLlxuXG5HaXZlbiB0aGUgY3JpdGVyaWE6IHdlJ3JlIGxvb2tpbmcgYXQgYSByZWZhY3RvcmluZyBhbmQgY29kZSBjbGVhbnVwIG9mIHJlYWNoYWJsZSBjb2RlLCBzcGVjaWZpY2FsbHksIGEgZHJpdmVyIGFjY2Vzc2libGUgdmlhIGFuIGVtdWxhdGVkIGJ1cy4gIFRoaXMgY2xlYXJseSBzYXRpc2ZpZXMgdGhlIFwiV29ydGhGdXp6aW5nPXRydWVcIiBjb25kaXRpb24uXG5cbkxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuICBgQ09ORklHX0NIUl9ERVZfU0dgIGRlcGVuZHMgb24gYENPTkZJR19TQ1NJYC4gIEEgcXVpY2sgY2hlY2sgb2YgYGRyaXZlcnMvc2NzaS9LY29uZmlnYCBjb25maXJtcyB0aGF0LiAgVGhvc2UgYXJlIHRoZSByZXF1aXJlZCBjb25maWdzLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIOKAkyB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiAgRnJvbSB0aGUgY29kZSwgSSBzZWU6XG5cbiogICBgc2dfYnVpbGRfaW5kaXJlY3RgXG4qICAgYHNjYXR0ZXJfZWxlbV9zel9zZXRgXG4qICAgYGluaXRfc2dgICh0aG91Z2ggdGhpcyBtaWdodCBiZSBqdXN0IGFuIGluaXQgZnVuY3Rpb24pXG4qICAgRnVuY3Rpb25zIHRoYXQgaW5kaXJlY3RseSBjYWxsIHNnX2J1aWxkX2luZGlyZWN0OiBgc2dfYnVpbGRfcmVzZXJ2ZWAgLyBgc2dfc3RhcnRfcmVxYCAvIGBzZ193cml0ZWAgLyBgc2dfaW9jdGxgLlxuXG5Ob3csIGxldCdzIGZvY3VzIG9uOlxuKiAgIGBzZ19idWlsZF9pbmRpcmVjdGBcbiogICBgc2NhdHRlcl9lbGVtX3N6X3NldGBcblxuSSdsbCB2ZXJpZnkgdGhhdCBgc2NhdHRlcl9lbGVtX3N6X3NldGAgaXMgYWN0dWFsbHkgYSBzdGF0aWMgZnVuY3Rpb24gYW5kIGNoZWNrIGlmIGl0IGhhcyBhIHZtbGludXggc3ltYm9sLiAgSXQgaXMgYSBzdGF0aWMgZnVuY3Rpb24gcmVmZXJlbmNlZCBieSBgc2NhdHRlcl9lbGVtX3N6X29wc2AuIGBzZ19idWlsZF9pbmRpcmVjdGAgaXMgYWxzbyBhIHN0YXRpYyBmdW5jdGlvbi5cblxuVG8gYmUgdGhvcm91Z2gsIEknbSBkb3VibGUtY2hlY2tpbmcgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGZpbGVzIG9yIGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gQSByZXZpZXcgb2YgdGhlIGRpZmYgY29uZmlybXMgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGBkcml2ZXJzL3Njc2kvc2cuY2AsIHNwZWNpZmljYWxseTpcbiogICBgc2NhdHRlcl9lbGVtX3N6X3NldGBcbiogICBgaW5pdF9zZ2BcbiogICBgc2dfYnVpbGRfaW5kaXJlY3RgXG5cbkZpbmFsbHksIGxldCdzIHZlcmlmeSBpZiBgaW5pdF9zZ2AgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHdoaWNoIG1pZ2h0IGJlIGhlbHBmdWwgdG8ga25vdy5cbkNoZWNrZWQgbGluZSAxNjgwIG9mIGBkcml2ZXJzL3Njc2kvc2cuY2AgYW5kIGNhbiB2ZXJpZnkgaWYgaXQgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzOTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjQ5LjUwNDMyMTgzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQxMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY4MDpcXHRNT0RVTEVfVkVSU0lPTihTR19WRVJTSU9OX1NUUik7XFxuMTY4MTpcXHRNT0RVTEVfQUxJQVNfQ0hBUkRFVl9NQUpPUihTQ1NJX0dFTkVSSUNfTUFKT1IpO1xcbjE2ODI6XFx0XFxuMTY4MzpcXHRNT0RVTEVfUEFSTV9ERVNDKHNjYXR0ZXJfZWxlbV9zeiwgXFxcInNjYXR0ZXIgZ2F0aGVyIGVsZW1lbnQgXFxcIlxcbjE2ODQ6XFx0ICAgICAgICAgICAgICAgIFxcXCJzaXplIChkZWZhdWx0OiBtYXgoU0dfU0NBVFRFUl9TWiwgUEFHRV9TSVpFKSlcXFwiKTtcXG4xNjg1OlxcdE1PRFVMRV9QQVJNX0RFU0MoZGVmX3Jlc2VydmVkX3NpemUsIFxcXCJzaXplIG9mIGJ1ZmZlciByZXNlcnZlZCBmb3IgZWFjaCBmZFxcXCIpO1xcbjE2ODY6XFx0TU9EVUxFX1BBUk1fREVTQyhhbGxvd19kaW8sIFxcXCJhbGxvdyBkaXJlY3QgSS9PIChkZWZhdWx0OiAwIChkaXNhbGxvdykpXFxcIik7XFxuMTY4NzpcXHRcXG4xNjg4OlxcdHN0YXRpYyBpbnQgX19pbml0XFxuMTY4OTpcXHRpbml0X3NnKHZvaWQpXFxuMTY5MDpcXHR7XFxuMTY5MTpcXHRcXHRpbnQgcmM7XFxuMTY5MjpcXHRcXG4xNjkzOlxcdFxcdGlmIChzY2F0dGVyX2VsZW1fc3ogXFx1MDAzYyBQQUdFX1NJWkUpXFxuMTY5NDpcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XFxuMTY5NTpcXHRcXG4xNjk2OlxcdFxcdHJjID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihTQ1NJX0dFTkVSSUNfTUFKT1IsIDApLCBcXG4xNjk3OlxcdFxcdFxcdFxcdFxcdCAgICBTR19NQVhfREVWUywgXFxcInNnXFxcIik7XFxuMTY5ODpcXHRcXHRpZiAocmMpXFxuMTY5OTpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjQ5LjUwNDQ2NzMwOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTIwNzU3NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFNDU0kgU2NhdHRlci1HYXRoZXIgT3BlcmF0aW9ucyoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gV2UncmUgbG9va2luZyBhdCBmdXp6aW5nIFNDU0kgc2NhdHRlci1nYXRoZXIgZnVuY3Rpb25hbGl0eSwgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSBhcHByb2FjaC4gRmlyc3QsIEknbSBub3RpbmcgdGhhdCBgaW5pdF9zZ2AgaXMganVzdCBhIHByZWxpbWluYXJ5IGluaXRpYWxpemF0aW9uIHN0ZXA7IGl0J3MgYF9faW5pdGAsIHNvIGl0J3MgaXJyZWxldmFudCBhZnRlciBzdGFydHVwLiBUaGUgY29yZSBydW50aW1lIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcml0aWNhbCBoZXJlIGFyZSBgc2dfYnVpbGRfaW5kaXJlY3RgIGFuZCBgc2NhdHRlcl9lbGVtX3N6X3NldGAuIEkgc2hvdWxkIGFsc28gZXhhbWluZSB0aGUgY2FsbCBjaGFpbnMsIHNwZWNpZmljYWxseSwgaG93IGBzZ19idWlsZF9pbmRpcmVjdGAgaXMgY2FsbGVkOiBgc2dfYnVpbGRfcmVzZXJ2ZWAgYW5kIGBzZ19zdGFydF9yZXFgLiBUaGVzZSB3aWxsIGJlIGtleSBlbnRyeSBwb2ludHMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy5cblxuTXkgc3RyYXRlZ3kgbmVlZHMgdG8gZm9jdXMgaW4gb24gc3BlY2lmaWMgZnVuY3Rpb24gZW50cnkgcG9pbnRzIHRvIGJlIGVmZmVjdGl2ZTsgaW4gdGhpcyBjYXNlLCBgc2dfYnVpbGRfaW5kaXJlY3RgLCBgc2NhdHRlcl9lbGVtX3N6X3NldGAsIGFuZCBgc2dfYnVpbGRfcmVzZXJ2ZWAgYXJlIHRoZSBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldC5cblxuVG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgc2V0IHVwIHByb3Blcmx5LCBJJ20gY2hlY2tpbmcgdGhlIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkLiBJJ2xsIG5lZWQgYENIUl9ERVZfU0dgIGFuZCBgU0NTSWAgZW5hYmxlZCBmb3IgdGhpcyB0byBiZSBwcm9kdWN0aXZlLlxuXG5Ob3csIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgdmVyZGljdCBpcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgYW5kIHRoZSByZWFzb25pbmcgaXMgY29uY2lzZS4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQ7IHRoZXNlIGFyZSBub24tdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zLiBGaW5hbGx5LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIHdoaWNoIGlzIGBbXCJTQ1NJXCIsIFwiQ0hSX0RFVl9TR1wiXWAsIGxvb2tzIHJpZ2h0LlxuXG5UaGF0IGFsbCBzZWVtcyBzb3VuZC4gTm93IEkgbmVlZCB0byBmb3JtdWxhdGUgdGhhdCBmaW5hbCBgc2V0LXJlc3VsdHNgIGNhbGwsIGFuZCBJIHNob3VsZCBiZSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU5MSwiT3V0cHV0VG9rZW5zIjoxMzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNDo1NS42MjUyMjc5MThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjM1NTY4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NTSVwiLFxuICAgIFwiQ0hSX0RFVl9TR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNnX2J1aWxkX2luZGlyZWN0XCIsXG4gICAgXCJzY2F0dGVyX2VsZW1fc3pfc2V0XCIsXG4gICAgXCJzZ19idWlsZF9yZXNlcnZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIgKHNnKSBzY2F0dGVyLWdhdGhlciBidWZmZXIgYWxsb2NhdGlvbiBhbmQgdmFsaWRhdGlvbiBsb2dpYy4gSXQgcmVwbGFjZXMgZHluYW1pYyBtb2R1bGUgcGFyYW1ldGVyIGNoZWNraW5nIGluIHNnX2J1aWxkX2luZGlyZWN0IHdpdGggYSBkZWRpY2F0ZWQgbW9kdWxlX3BhcmFtX2NiIHNldHRlciAoc2NhdHRlcl9lbGVtX3N6X3NldCkgYW5kIHNpbXBsaWZpZXMgdGhlIGFsbG9jYXRpb24gbG9vcCBjYWxjdWxhdGlvbi4gU0NTSSBnZW5lcmljIGRldmljZXMgYXJlIGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NTSVwiLFxuICAgIFwiQ0hSX0RFVl9TR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNnX2J1aWxkX2luZGlyZWN0XCIsXG4gICAgXCJzY2F0dGVyX2VsZW1fc3pfc2V0XCIsXG4gICAgXCJzZ19idWlsZF9yZXNlcnZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIgKHNnKSBzY2F0dGVyLWdhdGhlciBidWZmZXIgYWxsb2NhdGlvbiBhbmQgdmFsaWRhdGlvbiBsb2dpYy4gSXQgcmVwbGFjZXMgZHluYW1pYyBtb2R1bGUgcGFyYW1ldGVyIGNoZWNraW5nIGluIHNnX2J1aWxkX2luZGlyZWN0IHdpdGggYSBkZWRpY2F0ZWQgbW9kdWxlX3BhcmFtX2NiIHNldHRlciAoc2NhdHRlcl9lbGVtX3N6X3NldCkgYW5kIHNpbXBsaWZpZXMgdGhlIGFsbG9jYXRpb24gbG9vcCBjYWxjdWxhdGlvbi4gU0NTSSBnZW5lcmljIGRldmljZXMgYXJlIGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjU1LjcxMTU5MjQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIzMjM1NDAzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjU1LjcxMjE4MTg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQyMzE3NjAyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbW9kdWxlIHBhcmFtZXRlciB2YWxpZGF0aW9uIGZvciBgc2NhdHRlcl9lbGVtX3N6YCBpbiBgZHJpdmVycy9zY3NpL3NnLmNgIGJ5IGFkZGluZyBhIGN1c3RvbSBzZXR0ZXIgY2FsbGJhY2sgYHNjYXR0ZXJfZWxlbV9zel9zZXQoKWAgdG8gdmFsaWRhdGUgYm91bmRzLCBhbmQgY2xlYW5zIHVwIHRoZSBvcmRlciBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgc2dfYnVpbGRfaW5kaXJlY3QoKWAgd2hpbGUgcmVtb3ZpbmcgdGhlIHJlZHVuZGFudCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIHZhcmlhYmxlLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgZXhwb3NlZDpcXG4xLiBNZW1vcnkgYWxsb2NhdGlvbnMgZm9yIHNjYXR0ZXItZ2F0aGVyIHBhZ2VzIHVzZSBgX19HRlBfWkVST2AgYW5kIHRhYmxlcyB1c2UgYGt6YWxsb2NgLlxcbjIuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiBvcmRlciBjYWxjdWxhdGlvbiBhbmQgbG9vcCBpbmRleGluZyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgc3RhY2sgcHJpbWl0aXZlcy5cXG4zLiBObyBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUuXFxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIGFsbG9jYXRpb24gYm91bmRzLCBidWZmZXIgc2l6ZXMsIG9yIG9yZGVyIGNhbGN1bGF0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgc2FmZXR5IGNhdWdodCBieSBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgZGV0ZWN0ZWQgYnkgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzc2ZTM1MGI1MDc1ZmNjMTA5MDY0ZTBjMDk5YzE0N2U3MGNiODAzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjA6MDQ6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jXG5pbmRleCA1NDA4ZjAwMmU2YzAxLi40YzgyZmMwMGQwNWRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zY3NpL3NnLmNcbisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jXG5AQCAtOTIsNyArOTIsNiBAQCBzdGF0aWMgaW50IGRlZl9yZXNlcnZlZF9zaXplID0gU0dfREVGX1JFU0VSVkVEX1NJWkU7XG4gc3RhdGljIGludCBzZ19hbGxvd19kaW8gPSBTR19BTExPV19ESU9fREVGO1xuIFxuIHN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6ID0gU0dfU0NBVFRFUl9TWjtcbi1zdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gU0dfU0NBVFRFUl9TWjtcbiBcbiAjZGVmaW5lIFNHX1NFQ1RPUl9TWiA1MTJcbiBcbkBAIC0xNjIxLDkgKzE2MjAsMzMgQEAgc2dfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpjbF9kZXYpXG4gXHRrcmVmX3B1dChcdTAwMjZzZHAtXHUwMDNlZF9yZWYsIHNnX2RldmljZV9kZXN0cm95KTtcbiB9XG4gXG4tbW9kdWxlX3BhcmFtX25hbWVkKHNjYXR0ZXJfZWxlbV9zeiwgc2NhdHRlcl9lbGVtX3N6LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTtcbiBtb2R1bGVfcGFyYW1fbmFtZWQoYWxsb3dfZGlvLCBzZ19hbGxvd19kaW8sIGludCwgU19JUlVHTyB8IFNfSVdVU1IpO1xuIFxuK3N0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6X3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuK3tcbitcdGludCBzaXplLCByZXQ7XG4rXG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXQgPSBrc3RydG9pbnQodmFsLCAwLCBcdTAwMjZzaXplKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoc2l6ZSBcdTAwM2MgUEFHRV9TSVpFIHx8IHNpemUgXHUwMDNlIChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIE1BWF9QQUdFX09SREVSKSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRzY2F0dGVyX2VsZW1fc3ogPSBzaXplO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBzY2F0dGVyX2VsZW1fc3pfb3BzID0ge1xuK1x0LnNldFx0PSBzY2F0dGVyX2VsZW1fc3pfc2V0LFxuK1x0LmdldFx0PSBwYXJhbV9nZXRfaW50LFxuK307XG4rXG4rbW9kdWxlX3BhcmFtX2NiKHNjYXR0ZXJfZWxlbV9zeiwgXHUwMDI2c2NhdHRlcl9lbGVtX3N6X29wcywgXHUwMDI2c2NhdHRlcl9lbGVtX3N6LCAwNjQ0KTtcbitcbiBzdGF0aWMgaW50IGRlZl9yZXNlcnZlZF9zaXplX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIHtcbiBcdGludCBzaXplLCByZXQ7XG5AQCAtMTY2NywxMCArMTY5MCw4IEBAIGluaXRfc2codm9pZClcbiB7XG4gXHRpbnQgcmM7XG4gXG4tXHRpZiAoc2NhdHRlcl9lbGVtX3N6IFx1MDAzYyBQQUdFX1NJWkUpIHtcbitcdGlmIChzY2F0dGVyX2VsZW1fc3ogXHUwMDNjIFBBR0VfU0laRSlcbiBcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuLVx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHNjYXR0ZXJfZWxlbV9zejtcbi1cdH1cbiBcbiBcdHJjID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihTQ1NJX0dFTkVSSUNfTUFKT1IsIDApLCBcbiBcdFx0XHRcdCAgICBTR19NQVhfREVWUywgXCJzZ1wiKTtcbkBAIC0xODczLDM2ICsxODk0LDE5IEBAIHNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuIFx0aWYgKG14X3NjX2VsZW1zIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gbXhfc2NfZWxlbXM7XHQvKiBtb3N0IGxpa2VseSAtRU5PTUVNICovXG4gXG4tXHRudW0gPSBzY2F0dGVyX2VsZW1fc3o7XG4tXHRpZiAodW5saWtlbHkobnVtICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuLVx0XHRpZiAobnVtIFx1MDAzYyBQQUdFX1NJWkUpIHtcbi1cdFx0XHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XG4tXHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7XG4tXHRcdH0gZWxzZVxuLVx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtO1xuLVx0fVxuLVxuLVx0b3JkZXIgPSBnZXRfb3JkZXIobnVtKTtcbitcdG9yZGVyID0gZ2V0X29yZGVyKHNjYXR0ZXJfZWxlbV9zeik7XG4gcmV0cnk6XG4gXHRyZXRfc3ogPSAxIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCArIG9yZGVyKTtcbiBcbiBcdGZvciAoayA9IDAsIHJlbV9zeiA9IGJsa19zaXplOyByZW1fc3ogXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGsgXHUwMDNjIG14X3NjX2VsZW1zO1xuIFx0ICAgICBrKyssIHJlbV9zeiAtPSByZXRfc3opIHtcbiBcbi1cdFx0bnVtID0gKHJlbV9zeiBcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpID9cbi1cdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA6IHJlbV9zejtcbitcdFx0bnVtID0gbWluKHJlbV9zeiwgcmV0X3N6KTtcbiBcbiBcdFx0c2NocC1cdTAwM2VwYWdlc1trXSA9IGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcik7XG4gXHRcdGlmICghc2NocC1cdTAwM2VwYWdlc1trXSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbi1cdFx0aWYgKG51bSA9PSBzY2F0dGVyX2VsZW1fc3pfcHJldikge1xuLVx0XHRcdGlmICh1bmxpa2VseShyZXRfc3ogXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuLVx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gcmV0X3N6O1xuLVx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSByZXRfc3o7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXG4gXHRcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuIFx0XHRcdFx0IFwic2dfYnVpbGRfaW5kaXJlY3Q6IGs9JWQsIG51bT0lZCwgcmV0X3N6PSVkXFxuXCIsXG4gXHRcdFx0XHQgaywgbnVtLCByZXRfc3opKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjU1LjcxMjE4MjY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwMjQxNTUxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY2F0dGVyL0dhdGhlciBQYXRjaCBmb3IgUG90ZW50aWFsIEtNU0FOIFJpc2tzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBLTVNBTiB3b3VsZCBmbGFnLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQuIFRoZSBwYXRjaCBtb2RpZmllcyBgZHJpdmVycy9zY3NpL3NnLmNgLCBzcGVjaWZpY2FsbHkuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlOlxuXG4qICAgSXQgc2VlbXMgbGlrZSB0aGV5J3JlIHJlbW92aW5nIGEgdmFyaWFibGUsIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAsIGFuZCByZWZhY3RvcmluZyB0aGUgaGFuZGxpbmcgb2YgYHNjYXR0ZXJfZWxlbV9zemAgd2l0aCBhIGNhbGxiYWNrLiBUaGlzIHN1Z2dlc3RzIHRoZXkgYXJlIG1vdmluZyBhd2F5IGZyb20gaGF2aW5nIHR3byBkaWZmZXJlbnQgdmFsdWVzIGFuZCB0aGF0IGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgbWF5IGJlIGNvbXBsZXRlbHkgb2Jzb2xldGUgbm93LlxuKiAgIFRoZSBgbW9kdWxlX3BhcmFtX25hbWVkYCBpcyByZXBsYWNlZCBieSBgbW9kdWxlX3BhcmFtX2NiYCB3aXRoIGEgc2V0dGVyIGZ1bmN0aW9uLCBgc2NhdHRlcl9lbGVtX3N6X3NldGAuIFRoZSBzZXR0ZXIgdmFsaWRhdGVzIHRoZSBzaXplLCB3aGljaCBpcyBnb29kLiBUaGlzIG1ha2VzIGl0IGEgYml0IG1vcmUgcm9idXN0IHJlZ2FyZGluZyB3aGF0IHZhbHVlIHRoZSB1c2VyIHNldHMuXG4qICAgVGhlIHJlbW92YWwgb2YgdGhlIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uIGluIGBpbml0X3NnKClgIGFuZCB0aGUgYXNzb2NpYXRlZCBydW50aW1lIGNoZWNrcyBpbiBgc2dfYnVpbGRfaW5kaXJlY3QoKWAgYXJlIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkgYXJlIG1vdmluZyB0byBhbiBgb3JkZXIgPSBnZXRfb3JkZXIoc2NhdHRlcl9lbGVtX3N6KTtgIGFwcHJvYWNoIGFuZCB1c2luZyBgbWluYCB0byBhdm9pZCB0aGUgcHJvYmxlbXMgYXNzb2NpYXRlZCB3aXRoIG9sZGVyIGNvZGUuIFRoZSBmYWN0IHRoYXQgdGhlIGNoZWNrIGFuZCB0aGUgdXBkYXRlIGxvZ2ljIGZvciBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIHdlcmUgcmVtb3ZlZCBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSBtYXkgbm90IGhhdmUgYmVlbiBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQsIGNyZWF0aW5nIHRoZSB2ZXJ5IEtNU0FOIHByb2JsZW1zIHdlJ3JlIGxvb2tpbmcgZm9yLlxuXG5Ob3csIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgYHNnX2J1aWxkX2luZGlyZWN0YCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIGFjdHVhbGx5ICpkbyouIEkgd2lsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgY29kZSBpbiBgZHJpdmVycy9zY3NpL3NnLmNgIGFuZCBzZWUgaWYgdGhlIHJlbW92YWwgb2YgdGhlIG9sZCBsb2dpYyBpbnRyb2R1Y2VzIGEgd2luZG93IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkLiBJIG5lZWQgdG8gdHJhY2UgaG93IGBzY2F0dGVyX2VsZW1fc3pgIGFuZCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIChvciB0aGUgbGFjayB0aGVyZW9mKSBhZmZlY3QgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB1c2FnZSB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBJJ2xsIGZvY3VzIG9uIGhvdyBgbnVtYCBhbmQgYHJldF9zemAgYXJlIGRldGVybWluZWQsIGFuZCBpZiB0aGV5J3JlIHVzZWQgdG8gaW5kZXggZGF0YSB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuIE15IGV4cGVydCBpbnR1aXRpb24gc3VnZ2VzdHMgdGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcmlzayBsaWVzLCBlc3BlY2lhbGx5IGlmIHRoZSBvbGQgdmFyaWFibGUsIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgd2FzIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlcmUgd2FzIG5vIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNTowMi43MzYzNDEwNjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9zZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NjAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NjA6XFx0XFxuMTg2MTpcXHRzdGF0aWMgaW50XFxuMTg2MjpcXHRzZ19idWlsZF9zZ2F0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIGNvbnN0IFNnX2ZkICogc2ZwLCBpbnQgdGFibGVzaXplKVxcbjE4NjM6XFx0e1xcbjE4NjQ6XFx0XFx0aW50IHNnX2J1ZmZsZW4gPSB0YWJsZXNpemUgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7XFxuMTg2NTpcXHRcXHRnZnBfdCBnZnBfZmxhZ3MgPSBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOO1xcbjE4NjY6XFx0XFxuMTg2NzpcXHRcXHRzY2hwLVxcdTAwM2VwYWdlcyA9IGt6YWxsb2Moc2dfYnVmZmxlbiwgZ2ZwX2ZsYWdzKTtcXG4xODY4OlxcdFxcdGlmICghc2NocC1cXHUwMDNlcGFnZXMpXFxuMTg2OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xODcwOlxcdFxcdHNjaHAtXFx1MDAzZXNnbGlzdF9sZW4gPSBzZ19idWZmbGVuO1xcbjE4NzE6XFx0XFx0cmV0dXJuIHRhYmxlc2l6ZTtcXHQvKiBudW1iZXIgb2Ygc2NhdF9nYXRoIGVsZW1lbnRzIGFsbG9jYXRlZCAqL1xcbjE4NzI6XFx0fVxcbjE4NzM6XFx0XFxuMTg3NDpcXHRzdGF0aWMgaW50XFxuMTg3NTpcXHRzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcXG4xODc2OlxcdHtcXG4xODc3OlxcdFxcdGludCByZXRfc3ogPSAwLCBpLCBrLCByZW1fc3osIG51bSwgbXhfc2NfZWxlbXM7XFxuMTg3ODpcXHRcXHRpbnQgc2dfdGFibGVzaXplID0gc2ZwLVxcdTAwM2VwYXJlbnRkcC1cXHUwMDNlc2dfdGFibGVzaXplO1xcbjE4Nzk6XFx0XFx0aW50IGJsa19zaXplID0gYnVmZl9zaXplLCBvcmRlcjtcXG4xODgwOlxcdFxcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0FUT01JQyB8IF9fR0ZQX0NPTVAgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9aRVJPO1xcbjE4ODE6XFx0XFxuMTg4MjpcXHRcXHRpZiAoYmxrX3NpemUgXFx1MDAzYyAwKVxcbjE4ODM6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTg4NDpcXHRcXHRpZiAoMCA9PSBibGtfc2l6ZSlcXG4xODg1OlxcdFxcdFxcdCsrYmxrX3NpemU7XFx0LyogZG9uJ3Qga25vdyB3aHkgKi9cXG4xODg2OlxcdFxcdC8qIHJvdW5kIHJlcXVlc3QgdXAgdG8gbmV4dCBoaWdoZXN0IFNHX1NFQ1RPUl9TWiBieXRlIGJvdW5kYXJ5ICovXFxuMTg4NzpcXHRcXHRibGtfc2l6ZSA9IEFMSUdOKGJsa19zaXplLCBTR19TRUNUT1JfU1opO1xcbjE4ODg6XFx0XFx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXFx1MDAzZXBhcmVudGRwLFxcbjE4ODk6XFx0XFx0XFx0XFxcInNnX2J1aWxkX2luZGlyZWN0OiBidWZmX3NpemU9JWQsIGJsa19zaXplPSVkXFxcXG5cXFwiLFxcbjE4OTA6XFx0XFx0XFx0YnVmZl9zaXplLCBibGtfc2l6ZSkpO1xcbjE4OTE6XFx0XFxuMTg5MjpcXHRcXHQvKiBOLkIuIHJldF9zeiBjYXJyaWVkIGludG8gdGhpcyBibG9jayAuLi4gKi9cXG4xODkzOlxcdFxcdG14X3NjX2VsZW1zID0gc2dfYnVpbGRfc2dhdChzY2hwLCBzZnAsIHNnX3RhYmxlc2l6ZSk7XFxuMTg5NDpcXHRcXHRpZiAobXhfc2NfZWxlbXMgXFx1MDAzYyAwKVxcbjE4OTU6XFx0XFx0XFx0cmV0dXJuIG14X3NjX2VsZW1zO1xcdC8qIG1vc3QgbGlrZWx5IC1FTk9NRU0gKi9cXG4xODk2OlxcdFxcbjE4OTc6XFx0XFx0b3JkZXIgPSBnZXRfb3JkZXIoc2NhdHRlcl9lbGVtX3N6KTtcXG4xODk4OlxcdHJldHJ5OlxcbjE4OTk6XFx0XFx0cmV0X3N6ID0gMSBcXHUwMDNjXFx1MDAzYyAoUEFHRV9TSElGVCArIG9yZGVyKTtcXG4xOTAwOlxcdFxcbjE5MDE6XFx0XFx0Zm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgayBcXHUwMDNjIG14X3NjX2VsZW1zO1xcbjE5MDI6XFx0XFx0ICAgICBrKyssIHJlbV9zeiAtPSByZXRfc3opIHtcXG4xOTAzOlxcdFxcbjE5MDQ6XFx0XFx0XFx0bnVtID0gbWluKHJlbV9zeiwgcmV0X3N6KTtcXG4xOTA1OlxcdFxcbjE5MDY6XFx0XFx0XFx0c2NocC1cXHUwMDNlcGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xcbjE5MDc6XFx0XFx0XFx0aWYgKCFzY2hwLVxcdTAwM2VwYWdlc1trXSlcXG4xOTA4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE5MDk6XFx0XFxuMTkxMDpcXHRcXHRcXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuMTkxMTpcXHRcXHRcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcXFxuXFxcIixcXG4xOTEyOlxcdFxcdFxcdFxcdFxcdCBrLCBudW0sIHJldF9zeikpO1xcbjE5MTM6XFx0XFx0fVxcdFxcdC8qIGVuZCBvZiBmb3IgbG9vcCAqL1xcbjE5MTQ6XFx0XFxuMTkxNTpcXHRcXHRzY2hwLVxcdTAwM2VwYWdlX29yZGVyID0gb3JkZXI7XFxuMTkxNjpcXHRcXHRzY2hwLVxcdTAwM2VrX3VzZV9zZyA9IGs7XFxuMTkxNzpcXHRcXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuMTkxODpcXHRcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrX3VzZV9zZz0lZCwgcmVtX3N6PSVkXFxcXG5cXFwiLFxcbjE5MTk6XFx0XFx0XFx0XFx0IGssIHJlbV9zeikpO1xcbjE5MjA6XFx0XFxuMTkyMTpcXHRcXHRzY2hwLVxcdTAwM2VidWZmbGVuID0gYmxrX3NpemU7XFxuMTkyMjpcXHRcXHRpZiAocmVtX3N6IFxcdTAwM2UgMClcXHQvKiBtdXN0IGhhdmUgZmFpbGVkICovXFxuMTkyMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xOTI0OlxcdFxcdHJldHVybiAwO1xcbjE5MjU6XFx0b3V0OlxcbjE5MjY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGs7IGkrKylcXG4xOTI3OlxcdFxcdFxcdF9fZnJlZV9wYWdlcyhzY2hwLVxcdTAwM2VwYWdlc1tpXSwgb3JkZXIpO1xcbjE5Mjg6XFx0XFxuMTkyOTpcXHRcXHRpZiAoLS1vcmRlciBcXHUwMDNlPSAwKVxcbjE5MzA6XFx0XFx0XFx0Z290byByZXRyeTtcXG4xOTMxOlxcdFxcbjE5MzI6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTkzMzpcXHR9XFxuMTkzNDpcXHRcXG4xOTM1OlxcdHN0YXRpYyB2b2lkXFxuMTkzNjpcXHRzZ19yZW1vdmVfc2NhdChTZ19mZCAqIHNmcCwgU2dfc2NhdHRlcl9ob2xkICogc2NocClcXG4xOTM3OlxcdHtcXG4xOTM4OlxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xOTM5OlxcdFxcdFxcdFxcdCBcXFwic2dfcmVtb3ZlX3NjYXQ6IGtfdXNlX3NnPSVkXFxcXG5cXFwiLCBzY2hwLVxcdTAwM2VrX3VzZV9zZykpO1xcbjE5NDA6XFx0XFx0aWYgKHNjaHAtXFx1MDAzZXBhZ2VzIFxcdTAwMjZcXHUwMDI2IHNjaHAtXFx1MDAzZXNnbGlzdF9sZW4gXFx1MDAzZSAwKSB7XFxuMTk0MTpcXHRcXHRcXHRpZiAoIXNjaHAtXFx1MDAzZWRpb19pbl91c2UpIHtcXG4xOTQyOlxcdFxcdFxcdFxcdGludCBrO1xcbjE5NDM6XFx0XFxuMTk0NDpcXHRcXHRcXHRcXHRmb3IgKGsgPSAwOyBrIFxcdTAwM2Mgc2NocC1cXHUwMDNla191c2Vfc2cgXFx1MDAyNlxcdTAwMjYgc2NocC1cXHUwMDNlcGFnZXNba107IGsrKykge1xcbjE5NDU6XFx0XFx0XFx0XFx0XFx0U0NTSV9MT0dfVElNRU9VVCg1LFxcbjE5NDY6XFx0XFx0XFx0XFx0XFx0XFx0c2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xOTQ3OlxcdFxcdFxcdFxcdFxcdFxcdFxcXCJzZ19yZW1vdmVfc2NhdDogaz0lZCwgcGc9MHglcFxcXFxuXFxcIixcXG4xOTQ4OlxcdFxcdFxcdFxcdFxcdFxcdGssIHNjaHAtXFx1MDAzZXBhZ2VzW2tdKSk7XFxuMTk0OTpcXHRcXHRcXHRcXHRcXHRfX2ZyZWVfcGFnZXMoc2NocC1cXHUwMDNlcGFnZXNba10sIHNjaHAtXFx1MDAzZXBhZ2Vfb3JkZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNTowMi43MzY1Mjk4NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzIwNzM5MjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZXcgVW5pbml0aWFsaXplZCBNZW1vcnkgaW4gU0NTSSBTY2F0dGVyLUdhdGhlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHNjYXR0ZXItZ2F0aGVyIGxpc3QgYWxsb2NhdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLCBhbmQgdGhlbiByaWdvcm91c2x5IGFzc2VzcyB0aGUgS01TQU4gaW1wbGljYXRpb25zLlxuXG5TbywgdGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgZG9lcyB0d28gdGhpbmdzOiBpdCByZWZpbmVzIGhvdyB0aGUgYHNjYXR0ZXJfZWxlbV9zemAgbW9kdWxlIHBhcmFtZXRlciBpcyBoYW5kbGVkLCBtb3ZpbmcgZnJvbSBhIHJhdyBgbW9kdWxlX3BhcmFtX25hbWVkYCB0byBhIGNhbGxiYWNrLCBgbW9kdWxlX3BhcmFtX2NiYC4gVGhpcyBuZXcgY2FsbGJhY2sgZW5mb3JjZXMgYSBzaXplIHJhbmdlLCBlbnN1cmluZyBpdCdzIGF0IGxlYXN0IGEgcGFnZSBhbmQgbm8gbGFyZ2VyIHRoYW4gYE1BWF9QQUdFX09SREVSYCBwYWdlcy4gVGhlIHBhdGNoIGFsc28gcmVtb3ZlcyB0aGUgcmVkdW5kYW50IGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgdmFyaWFibGUgYW5kIHN1YnNlcXVlbnRseSBzaW1wbGlmaWVzIGNhbGN1bGF0aW9ucyBmb3IgYWxsb2NhdGlvbiBvcmRlciBpbiBgc2dfYnVpbGRfaW5kaXJlY3RgLiBUaGlzIGZlZWxzIGxpa2UgYSBjbGVhbnVwIG1vcmUgdGhhbiBhbnl0aGluZyBlbHNlLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgb3Bwb3J0dW5pdGllcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gc25lYWsgaW4sIG9yIG1vZGlmeSBleGlzdGluZyBwYXRocyB0byBoYXZlIG5ldyBhcmVhcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSBzZWUgdGhhdCBhbGwgdGhlIGBhbGxvY19wYWdlc2AgY2FsbHMgdXNlIGBfX0dGUF9aRVJPYCwgYW5kIGFsbCB0aGUgYGt6YWxsb2NgIGFsbG9jYXRpb25zIHdpbGwgYmUgemVyby1pbml0aWFsaXplZC4gSSB3ZW50IHRocm91Z2ggdGhlIGZvdXIgS01TQU4gY3JpdGVyaWE6IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIHRpZWQgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIEJhc2VkIG9uIHRoZSBjb2RlLCBub25lIG9mIHRob3NlIGFwcGx5IGhlcmUuIEkgc2VlIG5vIGNoYW5nZSB0byBob3cgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB1c2Vyc3BhY2UgYW5kIG5vIGNoYW5jZSBmb3IgdGhlIG5ldyBjb2RlIHRvIGxlYXZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF2YWlsYWJsZS5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2suIFRoZSBwYXRjaCBpcyBtb3N0bHkgdG91Y2hpbmcgbW9kdWxlIHBhcmFtZXRlciBoYW5kbGluZyBhbmQgc2NhbGFyIGNhbGN1bGF0aW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0aW5nIHRvIHBhZ2Ugb3JkZXIgYW5kIHNpemUuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIHVsdGltYXRlbHkgcmVsYXRlZCB0byBtZW1vcnkgdGhhdCBoYXMgaGFkIGBfX0dGUF9aRVJPYCB1c2VkIG9yIGBremFsbG9jYC4gTm8gdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgaW4gY2FsY3VsYXRpb24gb3IgcGFyYW1ldGVyIGhhbmRsaW5nIGFyZSB1bmluaXRpYWxpemVkIGJlZm9yZSB1c2FnZS4gVGhpcyBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbi5cblxuVGh1cywgYmFzZWQgb24gdGhlIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuIFRoZSBwYXRjaCBpcyByZWZhY3RvcmluZyBob3cgYHNjYXR0ZXJfZWxlbV9zemAgaXMgaGFuZGxlZCB3aXRoIGlucHV0IHZhbGlkYXRpb24sIGFuZCBpdCByZW1vdmVzIGEgcmVkdW5kYW50IHZhcmlhYmxlLCBzaW1wbGlmeWluZyBvcmRlciBjYWxjdWxhdGlvbnMuIEJlY2F1c2UgdGhlIGFsbG9jYXRpb25zIHVzZSBgX19HRlBfWkVST2AgYW5kIGBremFsbG9jYCwgbm8gbmV3IHBhdGhzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgaW50cm9kdWNlZC4gV2hpbGUgYWxsb2NhdGlvbiBmYWlsdXJlcywgYm91bmRzIGVycm9ycywgb3IgcGFyYW1ldGVyIGhhbmRsaW5nIGlzc3VlcyBjb3VsZCBvY2N1ciwgc3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gc2hvdWxkIGVhc2lseSBkZXRlY3QgdGhlbS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjAsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjA6MDU6MDkuOTQzOTI0NDM3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBmb3IgYHNjYXR0ZXJfZWxlbV9zemAgaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCBieSBhZGRpbmcgYSBjdXN0b20gc2V0dGVyIGNhbGxiYWNrIGBzY2F0dGVyX2VsZW1fc3pfc2V0KClgIHRvIHZhbGlkYXRlIGJvdW5kcywgYW5kIGNsZWFucyB1cCB0aGUgb3JkZXIgY2FsY3VsYXRpb24gbG9naWMgaW4gYHNnX2J1aWxkX2luZGlyZWN0KClgIHdoaWxlIHJlbW92aW5nIHRoZSByZWR1bmRhbnQgYHNjYXR0ZXJfZWxlbV9zel9wcmV2YCB2YXJpYWJsZS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQ6XFxuMS4gTWVtb3J5IGFsbG9jYXRpb25zIGZvciBzY2F0dGVyLWdhdGhlciBwYWdlcyB1c2UgYF9fR0ZQX1pFUk9gIGFuZCB0YWJsZXMgdXNlIGBremFsbG9jYC5cXG4yLiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gb3JkZXIgY2FsY3VsYXRpb24gYW5kIGxvb3AgaW5kZXhpbmcgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHN0YWNrIHByaW1pdGl2ZXMuXFxuMy4gTm8gZGF0YSBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFnZSBhbGxvY2F0aW9uIGJvdW5kcywgYnVmZmVyIHNpemVzLCBvciBvcmRlciBjYWxjdWxhdGlvbnMgZmFsbCB1bmRlciBzdGFuZGFyZCBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IHNhZmV0eSBjYXVnaHQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGRldGVjdGVkIGJ5IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbW9kdWxlIHBhcmFtZXRlciB2YWxpZGF0aW9uIGZvciBgc2NhdHRlcl9lbGVtX3N6YCBpbiBgZHJpdmVycy9zY3NpL3NnLmNgIGJ5IGFkZGluZyBhIGN1c3RvbSBzZXR0ZXIgY2FsbGJhY2sgYHNjYXR0ZXJfZWxlbV9zel9zZXQoKWAgdG8gdmFsaWRhdGUgYm91bmRzLCBhbmQgY2xlYW5zIHVwIHRoZSBvcmRlciBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgc2dfYnVpbGRfaW5kaXJlY3QoKWAgd2hpbGUgcmVtb3ZpbmcgdGhlIHJlZHVuZGFudCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIHZhcmlhYmxlLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgZXhwb3NlZDpcXG4xLiBNZW1vcnkgYWxsb2NhdGlvbnMgZm9yIHNjYXR0ZXItZ2F0aGVyIHBhZ2VzIHVzZSBgX19HRlBfWkVST2AgYW5kIHRhYmxlcyB1c2UgYGt6YWxsb2NgLlxcbjIuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiBvcmRlciBjYWxjdWxhdGlvbiBhbmQgbG9vcCBpbmRleGluZyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgc3RhY2sgcHJpbWl0aXZlcy5cXG4zLiBObyBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUuXFxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIGFsbG9jYXRpb24gYm91bmRzLCBidWZmZXIgc2l6ZXMsIG9yIG9yZGVyIGNhbGN1bGF0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgc2FmZXR5IGNhdWdodCBieSBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgZGV0ZWN0ZWQgYnkgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6hrx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 20:02:15 +0000 UTC FinishedAt: 2026-09-09 20:05:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCSI", "CHR_DEV_SG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCSI", "CHR_DEV_SG" ], "series_id": "92434e3b-e73b-48fe-9cdc-82bc2a06a70b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sg_build_indirect", "scatter_elem_sz_set", "sg_build_reserve" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDU0kmIzM0OywKICAgICYjMzQ7Q0hSX0RFVl9TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NnX2J1aWxkX2luZGlyZWN0JiMzNDssCiAgICAmIzM0O3NjYXR0ZXJfZWxlbV9zel9zZXQmIzM0OywKICAgICYjMzQ7c2dfYnVpbGRfcmVzZXJ2ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbW9kdWxlIHBhcmFtZXRlciB2YWxpZGF0aW9uIGZvciBgc2NhdHRlcl9lbGVtX3N6YCBpbiBgZHJpdmVycy9zY3NpL3NnLmNgIGJ5IGFkZGluZyBhIGN1c3RvbSBzZXR0ZXIgY2FsbGJhY2sgYHNjYXR0ZXJfZWxlbV9zel9zZXQoKWAgdG8gdmFsaWRhdGUgYm91bmRzLCBhbmQgY2xlYW5zIHVwIHRoZSBvcmRlciBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgc2dfYnVpbGRfaW5kaXJlY3QoKWAgd2hpbGUgcmVtb3ZpbmcgdGhlIHJlZHVuZGFudCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIHZhcmlhYmxlLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQ6XG4xLiBNZW1vcnkgYWxsb2NhdGlvbnMgZm9yIHNjYXR0ZXItZ2F0aGVyIHBhZ2VzIHVzZSBgX19HRlBfWkVST2AgYW5kIHRhYmxlcyB1c2UgYGt6YWxsb2NgLlxuMi4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIG9yZGVyIGNhbGN1bGF0aW9uIGFuZCBsb29wIGluZGV4aW5nIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBzdGFjayBwcmltaXRpdmVzLlxuMy4gTm8gZGF0YSBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlLlxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIGFsbG9jYXRpb24gYm91bmRzLCBidWZmZXIgc2l6ZXMsIG9yIG9yZGVyIGNhbGN1bGF0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgc2FmZXR5IGNhdWdodCBieSBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgZGV0ZWN0ZWQgYnkgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTQ1NJIGdlbmVyaWMgZHJpdmVyIChzZykgc2NhdHRlci1nYXRoZXIgYnVmZmVyIGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24gbG9naWMuIEl0IHJlcGxhY2VzIGR5bmFtaWMgbW9kdWxlIHBhcmFtZXRlciBjaGVja2luZyBpbiBzZ19idWlsZF9pbmRpcmVjdCB3aXRoIGEgZGVkaWNhdGVkIG1vZHVsZV9wYXJhbV9jYiBzZXR0ZXIgKHNjYXR0ZXJfZWxlbV9zel9zZXQpIGFuZCBzaW1wbGlmaWVzIHRoZSBhbGxvY2F0aW9uIGxvb3AgY2FsY3VsYXRpb24uIFNDU0kgZ2VuZXJpYyBkZXZpY2VzIGFyZSBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzc2ZTM1MGI1MDc1ZmNjMTA5MDY0ZTBjMDk5YzE0N2U3MGNiODAzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjA6MDQ6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuY1xuaW5kZXggNTQwOGYwMDJlNmMwMS4uNGM4MmZjMDBkMDVkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Njc2kvc2cuY1xuQEAgLTkyLDcgJiM0Mzs5Miw2IEBAIHN0YXRpYyBpbnQgZGVmX3Jlc2VydmVkX3NpemUgPSBTR19ERUZfUkVTRVJWRURfU0laRTtcbiBzdGF0aWMgaW50IHNnX2FsbG93X2RpbyA9IFNHX0FMTE9XX0RJT19ERUY7XG4gXG4gc3RhdGljIGludCBzY2F0dGVyX2VsZW1fc3ogPSBTR19TQ0FUVEVSX1NaO1xuLXN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBTR19TQ0FUVEVSX1NaO1xuIFxuICNkZWZpbmUgU0dfU0VDVE9SX1NaIDUxMlxuIFxuQEAgLTE2MjEsOSAmIzQzOzE2MjAsMzMgQEAgc2dfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpjbF9kZXYpXG4gXHRrcmVmX3B1dChcdTAwMjZzZHAtXHUwMDNlZF9yZWYsIHNnX2RldmljZV9kZXN0cm95KTtcbiB9XG4gXG4tbW9kdWxlX3BhcmFtX25hbWVkKHNjYXR0ZXJfZWxlbV9zeiwgc2NhdHRlcl9lbGVtX3N6LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTtcbiBtb2R1bGVfcGFyYW1fbmFtZWQoYWxsb3dfZGlvLCBzZ19hbGxvd19kaW8sIGludCwgU19JUlVHTyB8IFNfSVdVU1IpO1xuIFxuJiM0MztzdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zel9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbiYjNDM7e1xuJiM0MztcdGludCBzaXplLCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzdHJ0b2ludCh2YWwsIDAsIFx1MDAyNnNpemUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc2l6ZSBcdTAwM2MgUEFHRV9TSVpFIHx8IHNpemUgXHUwMDNlIChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIE1BWF9QQUdFX09SREVSKSlcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHRzY2F0dGVyX2VsZW1fc3ogPSBzaXplO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgc2NhdHRlcl9lbGVtX3N6X29wcyA9IHtcbiYjNDM7XHQuc2V0XHQ9IHNjYXR0ZXJfZWxlbV9zel9zZXQsXG4mIzQzO1x0LmdldFx0PSBwYXJhbV9nZXRfaW50LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7bW9kdWxlX3BhcmFtX2NiKHNjYXR0ZXJfZWxlbV9zeiwgXHUwMDI2c2NhdHRlcl9lbGVtX3N6X29wcywgXHUwMDI2c2NhdHRlcl9lbGVtX3N6LCAwNjQ0KTtcbiYjNDM7XG4gc3RhdGljIGludCBkZWZfcmVzZXJ2ZWRfc2l6ZV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbiB7XG4gXHRpbnQgc2l6ZSwgcmV0O1xuQEAgLTE2NjcsMTAgJiM0MzsxNjkwLDggQEAgaW5pdF9zZyh2b2lkKVxuIHtcbiBcdGludCByYztcbiBcbi1cdGlmIChzY2F0dGVyX2VsZW1fc3ogXHUwMDNjIFBBR0VfU0laRSkge1xuJiM0MztcdGlmIChzY2F0dGVyX2VsZW1fc3ogXHUwMDNjIFBBR0VfU0laRSlcbiBcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuLVx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHNjYXR0ZXJfZWxlbV9zejtcbi1cdH1cbiBcbiBcdHJjID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihTQ1NJX0dFTkVSSUNfTUFKT1IsIDApLCBcbiBcdFx0XHRcdCAgICBTR19NQVhfREVWUywgXCYjMzQ7c2dcJiMzNDspO1xuQEAgLTE4NzMsMzYgJiM0MzsxODk0LDE5IEBAIHNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuIFx0aWYgKG14X3NjX2VsZW1zIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gbXhfc2NfZWxlbXM7XHQvKiBtb3N0IGxpa2VseSAtRU5PTUVNICovXG4gXG4tXHRudW0gPSBzY2F0dGVyX2VsZW1fc3o7XG4tXHRpZiAodW5saWtlbHkobnVtICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuLVx0XHRpZiAobnVtIFx1MDAzYyBQQUdFX1NJWkUpIHtcbi1cdFx0XHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XG4tXHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7XG4tXHRcdH0gZWxzZVxuLVx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtO1xuLVx0fVxuLVxuLVx0b3JkZXIgPSBnZXRfb3JkZXIobnVtKTtcbiYjNDM7XHRvcmRlciA9IGdldF9vcmRlcihzY2F0dGVyX2VsZW1fc3opO1xuIHJldHJ5OlxuIFx0cmV0X3N6ID0gMSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpO1xuIFxuIFx0Zm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgayBcdTAwM2MgbXhfc2NfZWxlbXM7XG4gXHQgICAgIGsmIzQzOyYjNDM7LCByZW1fc3ogLT0gcmV0X3N6KSB7XG4gXG4tXHRcdG51bSA9IChyZW1fc3ogXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSA/XG4tXHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgOiByZW1fc3o7XG4mIzQzO1x0XHRudW0gPSBtaW4ocmVtX3N6LCByZXRfc3opO1xuIFxuIFx0XHRzY2hwLVx1MDAzZXBhZ2VzW2tdID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKTtcbiBcdFx0aWYgKCFzY2hwLVx1MDAzZXBhZ2VzW2tdKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuLVx0XHRpZiAobnVtID09IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSB7XG4tXHRcdFx0aWYgKHVubGlrZWx5KHJldF9zeiBcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7XG4tXHRcdFx0XHRzY2F0dGVyX2VsZW1fc3ogPSByZXRfc3o7XG4tXHRcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHJldF9zejtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbiBcdFx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG4gXHRcdFx0XHQgXCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGs9JWQsIG51bT0lZCwgcmV0X3N6PSVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0IGssIG51bSwgcmV0X3N6KSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjA6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0NTSSYjMzQ7LAogICAgJiMzNDtDSFJfREVWX1NHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2dfYnVpbGRfaW5kaXJlY3QmIzM0OywKICAgICYjMzQ7c2NhdHRlcl9lbGVtX3N6X3NldCYjMzQ7LAogICAgJiMzNDtzZ19idWlsZF9yZXNlcnZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTQ1NJIGdlbmVyaWMgZHJpdmVyIChzZykgc2NhdHRlci1nYXRoZXIgYnVmZmVyIGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24gbG9naWMuIEl0IHJlcGxhY2VzIGR5bmFtaWMgbW9kdWxlIHBhcmFtZXRlciBjaGVja2luZyBpbiBzZ19idWlsZF9pbmRpcmVjdCB3aXRoIGEgZGVkaWNhdGVkIG1vZHVsZV9wYXJhbV9jYiBzZXR0ZXIgKHNjYXR0ZXJfZWxlbV9zel9zZXQpIGFuZCBzaW1wbGlmaWVzIHRoZSBhbGxvY2F0aW9uIGxvb3AgY2FsY3VsYXRpb24uIFNDU0kgZ2VuZXJpYyBkZXZpY2VzIGFyZSBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzc2ZTM1MGI1MDc1ZmNjMTA5MDY0ZTBjMDk5YzE0N2U3MGNiODAzYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMjA6MDQ6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IDU0MDhmMDAyZTZjMDEuLjRjODJmYzAwZDA1ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC05Miw3ICYjNDM7OTIsNiBAQCBzdGF0aWMgaW50IGRlZl9yZXNlcnZlZF9zaXplID0gU0dfREVGX1JFU0VSVkVEX1NJWkU7CiBzdGF0aWMgaW50IHNnX2FsbG93X2RpbyA9IFNHX0FMTE9XX0RJT19ERUY7CiAKIHN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6ID0gU0dfU0NBVFRFUl9TWjsKLXN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBTR19TQ0FUVEVSX1NaOwogCiAjZGVmaW5lIFNHX1NFQ1RPUl9TWiA1MTIKIApAQCAtMTYyMSw5ICYjNDM7MTYyMCwzMyBAQCBzZ19yZW1vdmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmNsX2RldikKIAlrcmVmX3B1dCgmYW1wO3NkcC0mZ3Q7ZF9yZWYsIHNnX2RldmljZV9kZXN0cm95KTsKIH0KIAotbW9kdWxlX3BhcmFtX25hbWVkKHNjYXR0ZXJfZWxlbV9zeiwgc2NhdHRlcl9lbGVtX3N6LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChhbGxvd19kaW8sIHNnX2FsbG93X2RpbywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiAKJiM0MztzdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zel9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKJiM0Mzt7CiYjNDM7CWludCBzaXplLCByZXQ7CiYjNDM7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldCA9IGtzdHJ0b2ludCh2YWwsIDAsICZhbXA7c2l6ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoc2l6ZSAmbHQ7IFBBR0VfU0laRSB8fCBzaXplICZndDsgKFBBR0VfU0laRSAmbHQ7Jmx0OyBNQVhfUEFHRV9PUkRFUikpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJc2NhdHRlcl9lbGVtX3N6ID0gc2l6ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBzY2F0dGVyX2VsZW1fc3pfb3BzID0gewomIzQzOwkuc2V0CT0gc2NhdHRlcl9lbGVtX3N6X3NldCwKJiM0MzsJLmdldAk9IHBhcmFtX2dldF9pbnQsCiYjNDM7fTsKJiM0MzsKJiM0Mzttb2R1bGVfcGFyYW1fY2Ioc2NhdHRlcl9lbGVtX3N6LCAmYW1wO3NjYXR0ZXJfZWxlbV9zel9vcHMsICZhbXA7c2NhdHRlcl9lbGVtX3N6LCAwNjQ0KTsKJiM0MzsKIHN0YXRpYyBpbnQgZGVmX3Jlc2VydmVkX3NpemVfc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CiAJaW50IHNpemUsIHJldDsKQEAgLTE2NjcsMTAgJiM0MzsxNjkwLDggQEAgaW5pdF9zZyh2b2lkKQogewogCWludCByYzsKIAotCWlmIChzY2F0dGVyX2VsZW1fc3ogJmx0OyBQQUdFX1NJWkUpIHsKJiM0MzsJaWYgKHNjYXR0ZXJfZWxlbV9zeiAmbHQ7IFBBR0VfU0laRSkKIAkJc2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFOwotCQlzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHNjYXR0ZXJfZWxlbV9zejsKLQl9CiAKIAlyYyA9IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoU0NTSV9HRU5FUklDX01BSk9SLCAwKSwgCiAJCQkJICAgIFNHX01BWF9ERVZTLCAmIzM0O3NnJiMzNDspOwpAQCAtMTg3MywzNiAmIzQzOzE4OTQsMTkgQEAgc2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpCiAJaWYgKG14X3NjX2VsZW1zICZsdDsgMCkKIAkJcmV0dXJuIG14X3NjX2VsZW1zOwkvKiBtb3N0IGxpa2VseSAtRU5PTUVNICovCiAKLQludW0gPSBzY2F0dGVyX2VsZW1fc3o7Ci0JaWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHsKLQkJaWYgKG51bSAmbHQ7IFBBR0VfU0laRSkgewotCQkJc2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFOwotCQkJc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7Ci0JCX0gZWxzZQotCQkJc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBudW07Ci0JfQotCi0Jb3JkZXIgPSBnZXRfb3JkZXIobnVtKTsKJiM0MzsJb3JkZXIgPSBnZXRfb3JkZXIoc2NhdHRlcl9lbGVtX3N6KTsKIHJldHJ5OgogCXJldF9zeiA9IDEgJmx0OyZsdDsgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpOwogCiAJZm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiAmZ3Q7IDAgJmFtcDsmYW1wOyBrICZsdDsgbXhfc2NfZWxlbXM7CiAJICAgICBrJiM0MzsmIzQzOywgcmVtX3N6IC09IHJldF9zeikgewogCi0JCW51bSA9IChyZW1fc3ogJmd0OyBzY2F0dGVyX2VsZW1fc3pfcHJldikgPwotCQkJc2NhdHRlcl9lbGVtX3N6X3ByZXYgOiByZW1fc3o7CiYjNDM7CQludW0gPSBtaW4ocmVtX3N6LCByZXRfc3opOwogCiAJCXNjaHAtJmd0O3BhZ2VzW2tdID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKTsKIAkJaWYgKCFzY2hwLSZndDtwYWdlc1trXSkKIAkJCWdvdG8gb3V0OwogCi0JCWlmIChudW0gPT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpIHsKLQkJCWlmICh1bmxpa2VseShyZXRfc3ogJmd0OyBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHsKLQkJCQlzY2F0dGVyX2VsZW1fc3ogPSByZXRfc3o7Ci0JCQkJc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSByZXRfc3o7Ci0JCQl9Ci0JCX0KLQogCQlTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC0mZ3Q7cGFyZW50ZHAsCiAJCQkJICYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGs9JWQsIG51bT0lZCwgcmV0X3N6PSVkXG4mIzM0OywKIAkJCQkgaywgbnVtLCByZXRfc3opKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg4NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhhdCBwYXRjaCBhbmFseXNpcywgYmFzZWQgb24gbXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmc6CgoqKlBhdGNoIEZ1enppbmcgU3RyYXRlZ3k6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCBpcyBldmVuIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIHRvIHF1aWNrbHkgaW5zcGVjdCB0aGUgZmlsZSBpdHNlbGYgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBpbW1lZGlhdGUgZ29hbHMgYXJlIHRvIGRldGVybWluZToKCiogICAqKkZ1enogV29ydGhpbmVzczoqKiBJcyB0aGVyZSBhbnl0aGluZyBoZXJlIHRoYXQgbG9va3MgbGlrZSBpdCYjMzk7cyBoYW5kbGluZyBwb3RlbnRpYWxseSB1bnRydXN0ZWQgZGF0YSwgaW52b2x2ZXMgY29tcGxleCBzdGF0ZSB0cmFuc2l0aW9ucywgb3IgZGVhbHMgd2l0aCByZXNvdXJjZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbj8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIG1lbW9yeSBjb3JydXB0aW9uLCBpbnRlZ2VyIG92ZXJmbG93cywgb3IgcmFjZSBjb25kaXRpb25zPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHdoZXJlIHRvIGxvb2sgZmlyc3QsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2l0aCBhIHRob3JvdWdoIGxvb2suCiogICAqKkNvbmZpZ3VyYXRpb246KiogV2hhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB3aWxsIGJlIG5lZWRlZCB0byB0cmlnZ2VyIHRoZSBjb2RlIGNoYW5nZXMgZWZmZWN0aXZlbHk/IEFyZSB0aGVyZSBrZXJuZWwgb3B0aW9ucywgbW9kdWxlIHBhcmFtZXRlcnMsIG9yIHN5c2ZzIGVudHJpZXMgdGhhdCBuZWVkIHRvIGJlIHNldD8gQXJlIHRoZXJlIHBhcnRpY3VsYXIgaGFyZHdhcmUgc2V0dXBzIEkgbmVlZCB0byBlbXVsYXRlPyBUaGUgZGV2aWwgaXMgaW4gdGhlc2UgZGV0YWlscy4KKiAgICoqRm9jdXMgU3ltYm9sczoqKiBCYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzLCB3aGF0IGFyZSB0aGUgbW9zdCBjcml0aWNhbCBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRhcmdldCB3aXRoIHRoZSBmdXp6ZXI/IFdoYXQgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCBjYWxsYmFja3MsIG9yIHNlbnNpdGl2ZSBvcGVyYXRpb25zIHRoYXQgSSBjYW4gJiMzNDtob29rJiMzNDsgdG8gZ2V0IHRoZSBmdXp6ZXIgdG8gZW5nYWdlIHdpdGggdGhlIG1vZGlmaWVkIGNvZGUgcGF0aD8gVGhpcyB3aWxsIGludm9sdmUgaWRlbnRpZnlpbmcgdGhlIGNyaXRpY2FsIGxvZ2ljIHRoYXQgbmVlZHMgdG8gYmUgdHJpZ2dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19DSFJfREVWX1NHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9NYWtlZmlsZT0xNzM9b2JqLSQoQ09ORklHX0JMS19ERVZfU1IpXHQmIzQzOz0gc3JfbW9kLm9cbmRyaXZlcnMvc2NzaS9NYWtlZmlsZToxNzQ6b2JqLSQoQ09ORklHX0NIUl9ERVZfU0cpXHQmIzQzOz0gc2cub1xuZHJpdmVycy9zY3NpL01ha2VmaWxlLTE3NS1vYmotJChDT05GSUdfQ0hSX0RFVl9TQ0gpXHQmIzQzOz0gY2gub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6CgoqKkV4YW1pbmluZyBTQ1NJIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgQ0hSX0RFVl9TR2AgaXMgZGVmaW5lZCwgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyBhbG1vc3QgYWx3YXlzIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggU0NTSSwgSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gYGRyaXZlcnMvc2NzaS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgU0NTSSBzdWJzeXN0ZW0gc2hvdWxkIGJlIGRlY2xhcmVkLCBhbmQgd2hlcmUgSSBjYW4gZmluZCB0aGUgZGVwZW5kZW5jeSBkZWZpbml0aW9ucyBvZiBgQ0hSX0RFVl9TR2AuIEkgZXhwZWN0IHRoaXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgaHVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENIUl9ERVZfU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL0tjb25maWc9MTE2PWNvbmZpZyBCTEtfREVWX1NSXG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWctMTMwLVxuZHJpdmVycy9zY3NpL0tjb25maWc6MTMxOmNvbmZpZyBDSFJfREVWX1NHXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy0xMzItXHR0cmlzdGF0ZSBcJiMzNDtTQ1NJIGdlbmVyaWMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgU0NTSSBLY29uZmlnIEZpbGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgZHJpdmVycy9zY3NpL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTMxLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBhcmVhIGxpa2VseSBkZWFscyB3aXRoIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBhIHJlbGF0ZWQgZ3JvdXBpbmcgd2l0aGluIHRoZSBTQ1NJIHN1YnN5c3RlbS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LCBhIG1lbnUgZW50cnksIG9yIHBlcmhhcHMgYSBkZXBlbmRlbmN5IGRlY2xhcmF0aW9uIHRoYXQgaW5mbHVlbmNlcyBob3cgU0NTSSBkcml2ZXJzIGFyZSBjb21waWxlZCBhbmQgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IHBhcnNlIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoYXQgbGluZSB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBhbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgYmVpbmcgY29udHJvbGxlZCB0aGVyZS4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgdGFyZ2V0cyB0aGlzIGFmZmVjdHMuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjU6XHRcdCAgTWFrZSBzdXJlIHRvIHNheSBZIG9yIE0gdG8gXCYjMzQ7SVNPIDk2NjAgQ0QtUk9NIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDsuXG4gMTI2Olx0XG4gMTI3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUgYW5kIHJlYWRcbiAxMjg6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL3Njc2kvc2NzaS5yc3RcdTAwM2UuXG4gMTI5Olx0XHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3JfbW9kLlxuIDEzMDpcdFxuIDEzMTpcdGNvbmZpZyBDSFJfREVWX1NHXG4gMTMyOlx0XHR0cmlzdGF0ZSBcJiMzNDtTQ1NJIGdlbmVyaWMgc3VwcG9ydFwmIzM0O1xuIDEzMzpcdFx0ZGVwZW5kcyBvbiBTQ1NJXG4gMTM0Olx0XHRoZWxwXG4gMTM1Olx0XHQgIElmIHlvdSB3YW50IHRvIHVzZSBTQ1NJIHNjYW5uZXJzLCBzeW50aGVzaXplcnMgb3IgQ0Qtd3JpdGVycyBvciBqdXN0XG4gMTM2Olx0XHQgIGFib3V0IGFueXRoaW5nIGhhdmluZyBcJiMzNDtTQ1NJXCYjMzQ7IGluIGl0cyBuYW1lIG90aGVyIHRoYW4gaGFyZCBkaXNrcyxcbiAxMzc6XHRcdCAgQ0QtUk9NcyBvciB0YXBlcywgc2F5IFkgaGVyZS4gVGhlc2Ugd29uJiMzOTt0IGJlIHN1cHBvcnRlZCBieSB0aGUga2VybmVsXG4gMTM4Olx0XHQgIGRpcmVjdGx5LCBzbyB5b3UgbmVlZCBzb21lIGFkZGl0aW9uYWwgc29mdHdhcmUgd2hpY2gga25vd3MgaG93IHRvXG4gMTM5Olx0XHQgIHRhbGsgdG8gdGhlc2UgZGV2aWNlcyB1c2luZyB0aGUgU0NTSSBwcm90b2NvbDpcbiAxNDA6XHRcbiAxNDE6XHRcdCAgRm9yIHNjYW5uZXJzLCBsb29rIGF0IFNBTkUgKFx1MDAzY2h0dHA6Ly93d3cuc2FuZS1wcm9qZWN0Lm9yZy9cdTAwM2UpLiBGb3IgQ0RcbiAxNDI6XHRcdCAgd3JpdGVyIHNvZnR3YXJlIGxvb2sgYXQgQ2RydG9vbHNcbiAxNDM6XHRcdCAgKFx1MDAzY2h0dHA6Ly9jZHJ0b29scy5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlKVxuIDE0NDpcdFx0ICBhbmQgZm9yIGJ1cm5pbmcgYSBcJiMzNDtkaXNrIGF0IG9uY2VcJiMzNDs6IENEUkRBT1xuIDE0NTpcdFx0ICAoXHUwMDNjaHR0cDovL2NkcmRhby5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlKS4gQ2RwYXJhbm9pYSBpcyBhIGhpZ2hcbiAxNDY6XHRcdCAgcXVhbGl0eSBkaWdpdGFsIHJlYWRlciBvZiBhdWRpbyBDRHMgKFx1MDAzY2h0dHA6Ly93d3cueGlwaC5vcmcvcGFyYW5vaWEvXHUwMDNlKS5cbiAxNDc6XHRcdCAgRm9yIG90aGVyIGRldmljZXMsIGl0JiMzOTtzIHBvc3NpYmxlIHRoYXQgeW91JiMzOTtsbCBoYXZlIHRvIHdyaXRlIHRoZVxuIDE0ODpcdFx0ICBkcml2ZXIgc29mdHdhcmUgeW91cnNlbGYuIFBsZWFzZSByZWFkIHRoZSBmaWxlXG4gMTQ5Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9zY3NpL3Njc2ktZ2VuZXJpYy5yc3RcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gMTUwOlx0XG4gMTUxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUgYW5kIHJlYWRcbiAxNTI6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL3Njc2kvc2NzaS5yc3RcdTAwM2UuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2cuXG4gMTUzOlx0XG4gMTU0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ0MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgU0NTSSBEcml2ZXIgQ2hhbmdlcyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzIHNwZWNpZmljIGlzc3VlLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGRyaXZlcnMvc2NzaS9zZy5jYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGludGVyZXN0aW5nIFNDU0kgZ2VuZXJpYyBkcml2ZXIgc3R1ZmYgaGFwcGVucywgZXNwZWNpYWxseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNjYXR0ZXItZ2F0aGVyIGFuZCBpbmRpcmVjdCBkYXRhIHRyYW5zZmVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBhcm91bmQgYHNnX2J1aWxkX2luZGlyZWN0YCBhbmQgYHNjYXR0ZXJfZWxlbV9zel9zZXRgLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LCBhbmQgd2hhdCBjb250ZXh0IHRoZXkmIzM5O3JlIGNhbGxlZCB3aXRoaW4uIEl04oCZcyBhbHdheXMgYmVzdCB0byB1bmRlcnN0YW5kIHRoZSBiZWZvcmUgYW5kIGFmdGVyLCB0byBiZSBjZXJ0YWluIG9mIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIHNldCB1cCwgaG93IHRoZSBjb21tYW5kcyBhcmUgYnVpbHQsIGFuZCBob3cgdGhlIHNjYXR0ZXItZ2F0aGVyIGxpc3RzIGFyZSBtYW5hZ2VkLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMuIEkgc3VzcGVjdCB0aGF0IHRoZXJlIGlzIGEgc3VidGxlIGlzc3VlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjU6XHRcdGdmcF90IGdmcF9mbGFncyA9IEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk47XG4xODY2Olx0XG4xODY3Olx0XHRzY2hwLVx1MDAzZXBhZ2VzID0ga3phbGxvYyhzZ19idWZmbGVuLCBnZnBfZmxhZ3MpO1xuMTg2ODpcdFx0aWYgKCFzY2hwLVx1MDAzZXBhZ2VzKVxuMTg2OTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE4NzA6XHRcdHNjaHAtXHUwMDNlc2dsaXN0X2xlbiA9IHNnX2J1ZmZsZW47XG4xODcxOlx0XHRyZXR1cm4gdGFibGVzaXplO1x0LyogbnVtYmVyIG9mIHNjYXRfZ2F0aCBlbGVtZW50cyBhbGxvY2F0ZWQgKi9cbjE4NzI6XHR9XG4xODczOlx0XG4xODc0Olx0c3RhdGljIGludFxuMTg3NTpcdHNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuMTg3NjpcdHtcbjE4Nzc6XHRcdGludCByZXRfc3ogPSAwLCBpLCBrLCByZW1fc3osIG51bSwgbXhfc2NfZWxlbXM7XG4xODc4Olx0XHRpbnQgc2dfdGFibGVzaXplID0gc2ZwLVx1MDAzZXBhcmVudGRwLVx1MDAzZXNnX3RhYmxlc2l6ZTtcbjE4Nzk6XHRcdGludCBibGtfc2l6ZSA9IGJ1ZmZfc2l6ZSwgb3JkZXI7XG4xODgwOlx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9BVE9NSUMgfCBfX0dGUF9DT01QIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTztcbjE4ODE6XHRcbjE4ODI6XHRcdGlmIChibGtfc2l6ZSBcdTAwM2MgMClcbjE4ODM6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xODg0Olx0XHRpZiAoMCA9PSBibGtfc2l6ZSlcbjE4ODU6XHRcdFx0JiM0MzsmIzQzO2Jsa19zaXplO1x0LyogZG9uJiMzOTt0IGtub3cgd2h5ICovXG4xODg2Olx0XHQvKiByb3VuZCByZXF1ZXN0IHVwIHRvIG5leHQgaGlnaGVzdCBTR19TRUNUT1JfU1ogYnl0ZSBib3VuZGFyeSAqL1xuMTg4NzpcdFx0YmxrX3NpemUgPSBBTElHTihibGtfc2l6ZSwgU0dfU0VDVE9SX1NaKTtcbjE4ODg6XHRcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuMTg4OTpcdFx0XHRcJiMzNDtzZ19idWlsZF9pbmRpcmVjdDogYnVmZl9zaXplPSVkLCBibGtfc2l6ZT0lZFxcblwmIzM0OyxcbjE4OTA6XHRcdFx0YnVmZl9zaXplLCBibGtfc2l6ZSkpO1xuMTg5MTpcdFxuMTg5MjpcdFx0LyogTi5CLiByZXRfc3ogY2FycmllZCBpbnRvIHRoaXMgYmxvY2sgLi4uICovXG4xODkzOlx0XHRteF9zY19lbGVtcyA9IHNnX2J1aWxkX3NnYXQoc2NocCwgc2ZwLCBzZ190YWJsZXNpemUpO1xuMTg5NDpcdFx0aWYgKG14X3NjX2VsZW1zIFx1MDAzYyAwKVxuMTg5NTpcdFx0XHRyZXR1cm4gbXhfc2NfZWxlbXM7XHQvKiBtb3N0IGxpa2VseSAtRU5PTUVNICovXG4xODk2Olx0XG4xODk3Olx0XHRvcmRlciA9IGdldF9vcmRlcihzY2F0dGVyX2VsZW1fc3opO1xuMTg5ODpcdHJldHJ5OlxuMTg5OTpcdFx0cmV0X3N6ID0gMSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpO1xuMTkwMDpcdFxuMTkwMTpcdFx0Zm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgayBcdTAwM2MgbXhfc2NfZWxlbXM7XG4xOTAyOlx0XHQgICAgIGsmIzQzOyYjNDM7LCByZW1fc3ogLT0gcmV0X3N6KSB7XG4xOTAzOlx0XG4xOTA0Olx0XHRcdG51bSA9IG1pbihyZW1fc3osIHJldF9zeik7XG4xOTA1Olx0XG4xOTA2Olx0XHRcdHNjaHAtXHUwMDNlcGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xuMTkwNzpcdFx0XHRpZiAoIXNjaHAtXHUwMDNlcGFnZXNba10pXG4xOTA4Olx0XHRcdFx0Z290byBvdXQ7XG4xOTA5Olx0XG4xOTEwOlx0XHRcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuMTkxMTpcdFx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwmIzM0OyxcbjE5MTI6XHRcdFx0XHRcdCBrLCBudW0sIHJldF9zeikpO1xuMTkxMzpcdFx0fVx0XHQvKiBlbmQgb2YgZm9yIGxvb3AgKi9cbjE5MTQ6XHRcbjE5MTU6XHRcdHNjaHAtXHUwMDNlcGFnZV9vcmRlciA9IG9yZGVyO1xuMTkxNjpcdFx0c2NocC1cdTAwM2VrX3VzZV9zZyA9IGs7XG4xOTE3Olx0XHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbjE5MTg6XHRcdFx0XHQgXCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGtfdXNlX3NnPSVkLCByZW1fc3o9JWRcXG5cJiMzNDssXG4xOTE5Olx0XHRcdFx0IGssIHJlbV9zeikpO1xuMTkyMDpcdFxuMTkyMTpcdFx0c2NocC1cdTAwM2VidWZmbGVuID0gYmxrX3NpemU7XG4xOTIyOlx0XHRpZiAocmVtX3N6IFx1MDAzZSAwKVx0LyogbXVzdCBoYXZlIGZhaWxlZCAqL1xuMTkyMzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE5MjQ6XHRcdHJldHVybiAwO1xuMTkyNTpcdG91dDpcbjE5MjY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGs7IGkmIzQzOyYjNDM7KVxuMTkyNzpcdFx0XHRfX2ZyZWVfcGFnZXMoc2NocC1cdTAwM2VwYWdlc1tpXSwgb3JkZXIpO1xuMTkyODpcdFxuMTkyOTpcdFx0aWYgKC0tb3JkZXIgXHUwMDNlPSAwKVxuMTkzMDpcdFx0XHRnb3RvIHJldHJ5O1xuMTkzMTpcdFxuMTkzMjpcdFx0cmV0dXJuIC1FTk9NRU07XG4xOTMzOlx0fVxuMTkzNDpcdFxuMTkzNTpcdHN0YXRpYyB2b2lkXG4xOTM2Olx0c2dfcmVtb3ZlX3NjYXQoU2dfZmQgKiBzZnAsIFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHApXG4xOTM3Olx0e1xuMTkzODpcdFx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG4xOTM5Olx0XHRcdFx0IFwmIzM0O3NnX3JlbW92ZV9zY2F0OiBrX3VzZV9zZz0lZFxcblwmIzM0Oywgc2NocC1cdTAwM2VrX3VzZV9zZykpO1xuMTk0MDpcdFx0aWYgKHNjaHAtXHUwMDNlcGFnZXMgXHUwMDI2XHUwMDI2IHNjaHAtXHUwMDNlc2dsaXN0X2xlbiBcdTAwM2UgMCkge1xuMTk0MTpcdFx0XHRpZiAoIXNjaHAtXHUwMDNlZGlvX2luX3VzZSkge1xuMTk0MjpcdFx0XHRcdGludCBrO1xuMTk0MzpcdFxuMTk0NDpcdFx0XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIHNjaHAtXHUwMDNla191c2Vfc2cgXHUwMDI2XHUwMDI2IHNjaHAtXHUwMDNlcGFnZXNba107IGsmIzQzOyYjNDM7KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNzAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0NTSSBHZW5lcmljIERyaXZlciBpbiBhIFZpcnR1YWxpemVkIENvbnRleHQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGBkcml2ZXJzL3Njc2kvc2cuY2AgZmlsZSwgdGhlIGNvcmUgb2YgdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIsIGV4cG9zZWQgdGhyb3VnaCBgL2Rldi9zZypgIGRldmljZXMuIE15IGtleSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpcyByZWxldmFudCB3aXRoaW4gUUVNVSBvciBvdGhlciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFuZCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gU0NTSSBnZW5lcmljIGRldmljZXMsIGxpa2UgYC9kZXYvc2cwYCwgYC9kZXYvc2cxYCwgb3IgZXZlbiB0aGUgZGVidWcgZGV2aWNlcyBvciBlbXVsYXRlZCBTQ1NJIGRyaXZlcywgYXJlIHN0YW5kYXJkIGZhcmUgaW4gUUVNVS4gVGhhdCYjMzk7cyBnb29kIG5ld3M7IGl0IG1lYW5zIEkgY2FuIHBvdGVudGlhbGx5IHVzZSB0aGlzIGZvciB2dWxuZXJhYmlsaXR5IHJlc2VhcmNoLiBBbHNvLCB0aGUgZmFjdCB0aGF0IHN5emthbGxlciBhY3RpdmVseSBmdXp6ZXMgYC9kZXYvc2cqYCBhbmQgaXRzIGFzc29jaWF0ZWQgaW9jdGxzIGlzIGEgbWFqb3IgcG9pbnQgaW4gaXRzIGZhdm91ci4KCk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjb2RlIGl0c2VsZi4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgdG8gZmluZCBvdXQgY2FsbGVycyBvZiBgc2dfYnVpbGRfaW5kaXJlY3RgLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gb24gaG93IHN5emthbGxlciB1c2VzIHRoZSBjYWxscy4gQWx0ZXJuYXRpdmVseSwgSSB3aWxsIGxvb2sgYXQgd2hlcmUgYHNnX2J1aWxkX2luZGlyZWN0YCBpcyBjYWxsZWQgZGlyZWN0bHkgaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCB0byBzZWUgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBTQ1NJIGdlbmVyaWMgZHJpdmVyLiBCb3RoIHBhdGhzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgd2hlcmUgdGhlIGludGVyZXN0aW5nIGxvZ2ljIGxpZXMgYW5kIHdoZXJlIHRvIGZvY3VzIGZ1cnRoZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NnX2J1aWxkX2luZGlyZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmM9MTgyPXN0YXRpYyBpbnQgc2dfZmluaXNoX3JlbV9yZXEoU2dfcmVxdWVzdCAqIHNycCk7XG5kcml2ZXJzL3Njc2kvc2cuYzoxODM6c3RhdGljIGludCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSk7XG5kcml2ZXJzL3Njc2kvc2cuYy0xODQtc3RhdGljIHNzaXplX3Qgc2dfbmV3X3JlYWQoU2dfZmQgKiBzZnAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYz0xNzMyPXNnX3N0YXJ0X3JlcShTZ19yZXF1ZXN0ICpzcnAsIHVuc2lnbmVkIGNoYXIgKmNtZClcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xODAzLVx0XHR9IGVsc2Uge1xuZHJpdmVycy9zY3NpL3NnLmM6MTgwNDpcdFx0XHRyZXMgPSBzZ19idWlsZF9pbmRpcmVjdChyZXFfc2NocCwgc2ZwLCBkeGZlcl9sZW4pO1xuZHJpdmVycy9zY3NpL3NnLmMtMTgwNS1cdFx0XHRpZiAocmVzKSB7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTg3ND1zdGF0aWMgaW50XG5kcml2ZXJzL3Njc2kvc2cuYzoxODc1OnNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuZHJpdmVycy9zY3NpL3NnLmMtMTg3Ni17XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTg4OC1cdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuZHJpdmVycy9zY3NpL3NnLmM6MTg4OTpcdFx0XCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXG5cJiMzNDssXG5kcml2ZXJzL3Njc2kvc2cuYy0xODkwLVx0XHRidWZmX3NpemUsIGJsa19zaXplKSk7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTkxMC1cdFx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTExOlx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwmIzM0OyxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MTItXHRcdFx0XHQgaywgbnVtLCByZXRfc3opKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTE3LVx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTE4Olx0XHRcdCBcJiMzNDtzZ19idWlsZF9pbmRpcmVjdDoga191c2Vfc2c9JWQsIHJlbV9zej0lZFxcblwmIzM0OyxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MTktXHRcdFx0IGssIHJlbV9zeikpO1xuLS1cbmRyaXZlcnMvc2NzaS9zZy5jPTE5OTI9c2dfYnVpbGRfcmVzZXJ2ZShTZ19mZCAqIHNmcCwgaW50IHJlcV9zaXplKVxuLS1cbmRyaXZlcnMvc2NzaS9zZy5jLTIwMDAtXHRcdFx0cmVxX3NpemUgPSBQQUdFX1NJWkU7XG5kcml2ZXJzL3Njc2kvc2cuYzoyMDAxOlx0XHRpZiAoMCA9PSBzZ19idWlsZF9pbmRpcmVjdChzY2hwLCBzZnAsIHJlcV9zaXplKSlcbmRyaXZlcnMvc2NzaS9zZy5jLTIwMDItXHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mzk2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyB0aGlzIFNDU0kgR2VuZXJpYyBEcml2ZXIgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUgYHNjYXR0ZXJfZWxlbV9zemAgcGFyYW1ldGVyIGlzIGhhbmRsZWQgaW4gdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIgKGBzZy5jYCkuIFByZXZpb3VzbHksIGl0IHdhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBtb2R1bGUgcGFyYW1ldGVyLiBOb3csIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYSBjdXN0b20gc2V0dGVyIGNhbGxiYWNrLCBgc2NhdHRlcl9lbGVtX3N6X3NldGAsIHRvIHZhbGlkYXRlIHRoZSBzaXplLiBUaGUgb2xkIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgdmFyaWFibGUgaXMgZ29uZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuCgpUaGUgY3JpdGljYWwgcGllY2Ugc2VlbXMgdG8gYmUgaW4gYHNnX2J1aWxkX2luZGlyZWN0YC4gVGhpcyBpcyB3aGVyZSB0aGUgbG9naWMgdXNlZCB0byBkeW5hbWljYWxseSBhZGp1c3QgYHNjYXR0ZXJfZWxlbV9zemAgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBtb3JlIGRpcmVjdCBhcHByb2FjaCB1c2luZyBgZ2V0X29yZGVyKClgIGFuZCBgbWluKClgLiBFc3NlbnRpYWxseSwgdGhleSYjMzk7dmUgcmVtb3ZlZCB0aGUgZHluYW1pYyBtdXRhdGlvbiBvZiBgc2NhdHRlcl9lbGVtX3N6YC4KCk5vdywgaXMgdGhpcyByZWFjaGFibGUgY29kZT8gQWJzb2x1dGVseS4gYHNnX2J1aWxkX2luZGlyZWN0YCBpcyBpbnZva2VkIHdoZW4gYnVpbGRpbmcgaW5kaXJlY3QgYnVmZmVycywgYW5kIHRoYXQgaGFwcGVucyB3aGVuZXZlciBhIHVzZXIgaW50ZXJhY3RzIHdpdGggYSBTQ1NJIGdlbmVyaWMgZGV2aWNlLCBsaWtlIGAvZGV2L3NnKmAuIENvbW1hbmRzIGxpa2UgYHNnX3N0YXJ0X3JlcWAgb3IgYHNnX2J1aWxkX3Jlc2VydmVgIChjYWxsZWQgb24gb3Blbi9pb2N0bCkgdHJpZ2dlciB0aGlzLiBTQ1NJIGdlbmVyaWMgaXMgYSBzdGFuZGFyZCBkcml2ZXIsIGFuZCBpdCYjMzk7cyBlYXNpbHkgYWNjZXNzaWJsZSwgZXNwZWNpYWxseSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHdpdGggZW11bGF0ZWQgU0NTSSBkaXNrcyBvciBgc2NzaV9kZWJ1Z2AuICBQbHVzLCB3cml0aW5nIHRvIGAvc3lzL21vZHVsZS9zZy9wYXJhbWV0ZXJzL3NjYXR0ZXJfZWxlbV9zemAgZGlyZWN0bHkgY2FsbHMgdGhlIG5ldyBgc2NhdHRlcl9lbGVtX3N6X3NldGAgc2V0dGVyLgoKR2l2ZW4gdGhlIGNyaXRlcmlhOiB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHJlZmFjdG9yaW5nIGFuZCBjb2RlIGNsZWFudXAgb2YgcmVhY2hhYmxlIGNvZGUsIHNwZWNpZmljYWxseSwgYSBkcml2ZXIgYWNjZXNzaWJsZSB2aWEgYW4gZW11bGF0ZWQgYnVzLiAgVGhpcyBjbGVhcmx5IHNhdGlzZmllcyB0aGUgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGNvbmRpdGlvbi4KCkxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiAgYENPTkZJR19DSFJfREVWX1NHYCBkZXBlbmRzIG9uIGBDT05GSUdfU0NTSWAuICBBIHF1aWNrIGNoZWNrIG9mIGBkcml2ZXJzL3Njc2kvS2NvbmZpZ2AgY29uZmlybXMgdGhhdC4gIFRob3NlIGFyZSB0aGUgcmVxdWlyZWQgY29uZmlncy4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMg4oCTIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuICBGcm9tIHRoZSBjb2RlLCBJIHNlZToKCiogICBgc2dfYnVpbGRfaW5kaXJlY3RgCiogICBgc2NhdHRlcl9lbGVtX3N6X3NldGAKKiAgIGBpbml0X3NnYCAodGhvdWdoIHRoaXMgbWlnaHQgYmUganVzdCBhbiBpbml0IGZ1bmN0aW9uKQoqICAgRnVuY3Rpb25zIHRoYXQgaW5kaXJlY3RseSBjYWxsIHNnX2J1aWxkX2luZGlyZWN0OiBgc2dfYnVpbGRfcmVzZXJ2ZWAgLyBgc2dfc3RhcnRfcmVxYCAvIGBzZ193cml0ZWAgLyBgc2dfaW9jdGxgLgoKTm93LCBsZXQmIzM5O3MgZm9jdXMgb246CiogICBgc2dfYnVpbGRfaW5kaXJlY3RgCiogICBgc2NhdHRlcl9lbGVtX3N6X3NldGAKCkkmIzM5O2xsIHZlcmlmeSB0aGF0IGBzY2F0dGVyX2VsZW1fc3pfc2V0YCBpcyBhY3R1YWxseSBhIHN0YXRpYyBmdW5jdGlvbiBhbmQgY2hlY2sgaWYgaXQgaGFzIGEgdm1saW51eCBzeW1ib2wuICBJdCBpcyBhIHN0YXRpYyBmdW5jdGlvbiByZWZlcmVuY2VkIGJ5IGBzY2F0dGVyX2VsZW1fc3pfb3BzYC4gYHNnX2J1aWxkX2luZGlyZWN0YCBpcyBhbHNvIGEgc3RhdGljIGZ1bmN0aW9uLgoKVG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZmlsZXMgb3IgZnVuY3Rpb25zIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlLiBBIHJldmlldyBvZiB0aGUgZGlmZiBjb25maXJtcyB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gYGRyaXZlcnMvc2NzaS9zZy5jYCwgc3BlY2lmaWNhbGx5OgoqICAgYHNjYXR0ZXJfZWxlbV9zel9zZXRgCiogICBgaW5pdF9zZ2AKKiAgIGBzZ19idWlsZF9pbmRpcmVjdGAKCkZpbmFsbHksIGxldCYjMzk7cyB2ZXJpZnkgaWYgYGluaXRfc2dgIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCB3aGljaCBtaWdodCBiZSBoZWxwZnVsIHRvIGtub3cuCkNoZWNrZWQgbGluZSAxNjgwIG9mIGBkcml2ZXJzL3Njc2kvc2cuY2AgYW5kIGNhbiB2ZXJpZnkgaWYgaXQgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2ODA6XHRNT0RVTEVfVkVSU0lPTihTR19WRVJTSU9OX1NUUik7XG4xNjgxOlx0TU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IoU0NTSV9HRU5FUklDX01BSk9SKTtcbjE2ODI6XHRcbjE2ODM6XHRNT0RVTEVfUEFSTV9ERVNDKHNjYXR0ZXJfZWxlbV9zeiwgXCYjMzQ7c2NhdHRlciBnYXRoZXIgZWxlbWVudCBcJiMzNDtcbjE2ODQ6XHQgICAgICAgICAgICAgICAgXCYjMzQ7c2l6ZSAoZGVmYXVsdDogbWF4KFNHX1NDQVRURVJfU1osIFBBR0VfU0laRSkpXCYjMzQ7KTtcbjE2ODU6XHRNT0RVTEVfUEFSTV9ERVNDKGRlZl9yZXNlcnZlZF9zaXplLCBcJiMzNDtzaXplIG9mIGJ1ZmZlciByZXNlcnZlZCBmb3IgZWFjaCBmZFwmIzM0Oyk7XG4xNjg2Olx0TU9EVUxFX1BBUk1fREVTQyhhbGxvd19kaW8sIFwmIzM0O2FsbG93IGRpcmVjdCBJL08gKGRlZmF1bHQ6IDAgKGRpc2FsbG93KSlcJiMzNDspO1xuMTY4NzpcdFxuMTY4ODpcdHN0YXRpYyBpbnQgX19pbml0XG4xNjg5Olx0aW5pdF9zZyh2b2lkKVxuMTY5MDpcdHtcbjE2OTE6XHRcdGludCByYztcbjE2OTI6XHRcbjE2OTM6XHRcdGlmIChzY2F0dGVyX2VsZW1fc3ogXHUwMDNjIFBBR0VfU0laRSlcbjE2OTQ6XHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuMTY5NTpcdFxuMTY5NjpcdFx0cmMgPSByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKFNDU0lfR0VORVJJQ19NQUpPUiwgMCksIFxuMTY5NzpcdFx0XHRcdFx0ICAgIFNHX01BWF9ERVZTLCBcJiMzNDtzZ1wmIzM0Oyk7XG4xNjk4Olx0XHRpZiAocmMpXG4xNjk5Olx0XHRcdHJldHVybiByYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1OTEKCQkJCQkJCW91dHB1dDogMTM3CgkJCQkJCQl0aG91Z2h0czogMjMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFNDU0kgU2NhdHRlci1HYXRoZXIgT3BlcmF0aW9ucyoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgZnV6emluZyBTQ1NJIHNjYXR0ZXItZ2F0aGVyIGZ1bmN0aW9uYWxpdHksIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgbXkgYXBwcm9hY2guIEZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGF0IGBpbml0X3NnYCBpcyBqdXN0IGEgcHJlbGltaW5hcnkgaW5pdGlhbGl6YXRpb24gc3RlcDsgaXQmIzM5O3MgYF9faW5pdGAsIHNvIGl0JiMzOTtzIGlycmVsZXZhbnQgYWZ0ZXIgc3RhcnR1cC4gVGhlIGNvcmUgcnVudGltZSBmdW5jdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgaGVyZSBhcmUgYHNnX2J1aWxkX2luZGlyZWN0YCBhbmQgYHNjYXR0ZXJfZWxlbV9zel9zZXRgLiBJIHNob3VsZCBhbHNvIGV4YW1pbmUgdGhlIGNhbGwgY2hhaW5zLCBzcGVjaWZpY2FsbHksIGhvdyBgc2dfYnVpbGRfaW5kaXJlY3RgIGlzIGNhbGxlZDogYHNnX2J1aWxkX3Jlc2VydmVgIGFuZCBgc2dfc3RhcnRfcmVxYC4gVGhlc2Ugd2lsbCBiZSBrZXkgZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuCgpNeSBzdHJhdGVneSBuZWVkcyB0byBmb2N1cyBpbiBvbiBzcGVjaWZpYyBmdW5jdGlvbiBlbnRyeSBwb2ludHMgdG8gYmUgZWZmZWN0aXZlOyBpbiB0aGlzIGNhc2UsIGBzZ19idWlsZF9pbmRpcmVjdGAsIGBzY2F0dGVyX2VsZW1fc3pfc2V0YCwgYW5kIGBzZ19idWlsZF9yZXNlcnZlYCBhcmUgdGhlIGZvY3VzIHN5bWJvbHMgdG8gdGFyZ2V0LgoKVG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgc2V0IHVwIHByb3Blcmx5LCBJJiMzOTttIGNoZWNraW5nIHRoZSBjb25maWd1cmF0aW9ucyByZXF1aXJlZC4gSSYjMzk7bGwgbmVlZCBgQ0hSX0RFVl9TR2AgYW5kIGBTQ1NJYCBlbmFibGVkIGZvciB0aGlzIHRvIGJlIHByb2R1Y3RpdmUuCgpOb3csIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIGluc3RydWN0aW9ucy4gVGhlIHZlcmRpY3QgaXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIGFuZCB0aGUgcmVhc29uaW5nIGlzIGNvbmNpc2UuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOyB0aGVzZSBhcmUgbm9uLXViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucy4gRmluYWxseSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCB3aGljaCBpcyBgWyYjMzQ7U0NTSSYjMzQ7LCAmIzM0O0NIUl9ERVZfU0cmIzM0O11gLCBsb29rcyByaWdodC4KClRoYXQgYWxsIHNlZW1zIHNvdW5kLiBOb3cgSSBuZWVkIHRvIGZvcm11bGF0ZSB0aGF0IGZpbmFsIGBzZXQtcmVzdWx0c2AgY2FsbCwgYW5kIEkgc2hvdWxkIGJlIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ1NJJiMzNDssCiAgICAmIzM0O0NIUl9ERVZfU0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZ19idWlsZF9pbmRpcmVjdCYjMzQ7LAogICAgJiMzNDtzY2F0dGVyX2VsZW1fc3pfc2V0JiMzNDssCiAgICAmIzM0O3NnX2J1aWxkX3Jlc2VydmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIgKHNnKSBzY2F0dGVyLWdhdGhlciBidWZmZXIgYWxsb2NhdGlvbiBhbmQgdmFsaWRhdGlvbiBsb2dpYy4gSXQgcmVwbGFjZXMgZHluYW1pYyBtb2R1bGUgcGFyYW1ldGVyIGNoZWNraW5nIGluIHNnX2J1aWxkX2luZGlyZWN0IHdpdGggYSBkZWRpY2F0ZWQgbW9kdWxlX3BhcmFtX2NiIHNldHRlciAoc2NhdHRlcl9lbGVtX3N6X3NldCkgYW5kIHNpbXBsaWZpZXMgdGhlIGFsbG9jYXRpb24gbG9vcCBjYWxjdWxhdGlvbi4gU0NTSSBnZW5lcmljIGRldmljZXMgYXJlIGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDU0kmIzM0OywKICAgICYjMzQ7Q0hSX0RFVl9TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NnX2J1aWxkX2luZGlyZWN0JiMzNDssCiAgICAmIzM0O3NjYXR0ZXJfZWxlbV9zel9zZXQmIzM0OywKICAgICYjMzQ7c2dfYnVpbGRfcmVzZXJ2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0NTSSBnZW5lcmljIGRyaXZlciAoc2cpIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCB2YWxpZGF0aW9uIGxvZ2ljLiBJdCByZXBsYWNlcyBkeW5hbWljIG1vZHVsZSBwYXJhbWV0ZXIgY2hlY2tpbmcgaW4gc2dfYnVpbGRfaW5kaXJlY3Qgd2l0aCBhIGRlZGljYXRlZCBtb2R1bGVfcGFyYW1fY2Igc2V0dGVyIChzY2F0dGVyX2VsZW1fc3pfc2V0KSBhbmQgc2ltcGxpZmllcyB0aGUgYWxsb2NhdGlvbiBsb29wIGNhbGN1bGF0aW9uLiBTQ1NJIGdlbmVyaWMgZGV2aWNlcyBhcmUgYWNjZXNzaWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjA6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMDowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbW9kdWxlIHBhcmFtZXRlciB2YWxpZGF0aW9uIGZvciBgc2NhdHRlcl9lbGVtX3N6YCBpbiBgZHJpdmVycy9zY3NpL3NnLmNgIGJ5IGFkZGluZyBhIGN1c3RvbSBzZXR0ZXIgY2FsbGJhY2sgYHNjYXR0ZXJfZWxlbV9zel9zZXQoKWAgdG8gdmFsaWRhdGUgYm91bmRzLCBhbmQgY2xlYW5zIHVwIHRoZSBvcmRlciBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgc2dfYnVpbGRfaW5kaXJlY3QoKWAgd2hpbGUgcmVtb3ZpbmcgdGhlIHJlZHVuZGFudCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIHZhcmlhYmxlLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQ6XG4xLiBNZW1vcnkgYWxsb2NhdGlvbnMgZm9yIHNjYXR0ZXItZ2F0aGVyIHBhZ2VzIHVzZSBgX19HRlBfWkVST2AgYW5kIHRhYmxlcyB1c2UgYGt6YWxsb2NgLlxuMi4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIG9yZGVyIGNhbGN1bGF0aW9uIGFuZCBsb29wIGluZGV4aW5nIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBzdGFjayBwcmltaXRpdmVzLlxuMy4gTm8gZGF0YSBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlLlxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIGFsbG9jYXRpb24gYm91bmRzLCBidWZmZXIgc2l6ZXMsIG9yIG9yZGVyIGNhbGN1bGF0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgc2FmZXR5IGNhdWdodCBieSBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgZGV0ZWN0ZWQgYnkgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NzZlMzUwYjUwNzVmY2MxMDkwNjRlMGMwOTljMTQ3ZTcwY2I4MDNhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAyMDowNDoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggNTQwOGYwMDJlNmMwMS4uNGM4MmZjMDBkMDVkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTkyLDcgJiM0Mzs5Miw2IEBAIHN0YXRpYyBpbnQgZGVmX3Jlc2VydmVkX3NpemUgPSBTR19ERUZfUkVTRVJWRURfU0laRTsKIHN0YXRpYyBpbnQgc2dfYWxsb3dfZGlvID0gU0dfQUxMT1dfRElPX0RFRjsKIAogc3RhdGljIGludCBzY2F0dGVyX2VsZW1fc3ogPSBTR19TQ0FUVEVSX1NaOwotc3RhdGljIGludCBzY2F0dGVyX2VsZW1fc3pfcHJldiA9IFNHX1NDQVRURVJfU1o7CiAKICNkZWZpbmUgU0dfU0VDVE9SX1NaIDUxMgogCkBAIC0xNjIxLDkgJiM0MzsxNjIwLDMzIEBAIHNnX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqY2xfZGV2KQogCWtyZWZfcHV0KCZhbXA7c2RwLSZndDtkX3JlZiwgc2dfZGV2aWNlX2Rlc3Ryb3kpOwogfQogCi1tb2R1bGVfcGFyYW1fbmFtZWQoc2NhdHRlcl9lbGVtX3N6LCBzY2F0dGVyX2VsZW1fc3osIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogbW9kdWxlX3BhcmFtX25hbWVkKGFsbG93X2Rpbywgc2dfYWxsb3dfZGlvLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIAomIzQzO3N0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6X3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQomIzQzO3sKJiM0MzsJaW50IHNpemUsIHJldDsKJiM0MzsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N0cnRvaW50KHZhbCwgMCwgJmFtcDtzaXplKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChzaXplICZsdDsgUEFHRV9TSVpFIHx8IHNpemUgJmd0OyAoUEFHRV9TSVpFICZsdDsmbHQ7IE1BWF9QQUdFX09SREVSKSkKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwomIzQzOwlzY2F0dGVyX2VsZW1fc3ogPSBzaXplOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHNjYXR0ZXJfZWxlbV9zel9vcHMgPSB7CiYjNDM7CS5zZXQJPSBzY2F0dGVyX2VsZW1fc3pfc2V0LAomIzQzOwkuZ2V0CT0gcGFyYW1fZ2V0X2ludCwKJiM0Mzt9OwomIzQzOwomIzQzO21vZHVsZV9wYXJhbV9jYihzY2F0dGVyX2VsZW1fc3osICZhbXA7c2NhdHRlcl9lbGVtX3N6X29wcywgJmFtcDtzY2F0dGVyX2VsZW1fc3osIDA2NDQpOwomIzQzOwogc3RhdGljIGludCBkZWZfcmVzZXJ2ZWRfc2l6ZV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKIHsKIAlpbnQgc2l6ZSwgcmV0OwpAQCAtMTY2NywxMCAmIzQzOzE2OTAsOCBAQCBpbml0X3NnKHZvaWQpCiB7CiAJaW50IHJjOwogCi0JaWYgKHNjYXR0ZXJfZWxlbV9zeiAmbHQ7IFBBR0VfU0laRSkgewomIzQzOwlpZiAoc2NhdHRlcl9lbGVtX3N6ICZsdDsgUEFHRV9TSVpFKQogCQlzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7Ci0JCXNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gc2NhdHRlcl9lbGVtX3N6OwotCX0KIAogCXJjID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihTQ1NJX0dFTkVSSUNfTUFKT1IsIDApLCAKIAkJCQkgICAgU0dfTUFYX0RFVlMsICYjMzQ7c2cmIzM0Oyk7CkBAIC0xODczLDM2ICYjNDM7MTg5NCwxOSBAQCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSkKIAlpZiAobXhfc2NfZWxlbXMgJmx0OyAwKQogCQlyZXR1cm4gbXhfc2NfZWxlbXM7CS8qIG1vc3QgbGlrZWx5IC1FTk9NRU0gKi8KIAotCW51bSA9IHNjYXR0ZXJfZWxlbV9zejsKLQlpZiAodW5saWtlbHkobnVtICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkgewotCQlpZiAobnVtICZsdDsgUEFHRV9TSVpFKSB7Ci0JCQlzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7Ci0JCQlzY2F0dGVyX2VsZW1fc3pfcHJldiA9IFBBR0VfU0laRTsKLQkJfSBlbHNlCi0JCQlzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTsKLQl9Ci0KLQlvcmRlciA9IGdldF9vcmRlcihudW0pOwomIzQzOwlvcmRlciA9IGdldF9vcmRlcihzY2F0dGVyX2VsZW1fc3opOwogcmV0cnk6CiAJcmV0X3N6ID0gMSAmbHQ7Jmx0OyAoUEFHRV9TSElGVCAmIzQzOyBvcmRlcik7CiAKIAlmb3IgKGsgPSAwLCByZW1fc3ogPSBibGtfc2l6ZTsgcmVtX3N6ICZndDsgMCAmYW1wOyZhbXA7IGsgJmx0OyBteF9zY19lbGVtczsKIAkgICAgIGsmIzQzOyYjNDM7LCByZW1fc3ogLT0gcmV0X3N6KSB7CiAKLQkJbnVtID0gKHJlbV9zeiAmZ3Q7IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSA/Ci0JCQlzY2F0dGVyX2VsZW1fc3pfcHJldiA6IHJlbV9zejsKJiM0MzsJCW51bSA9IG1pbihyZW1fc3osIHJldF9zeik7CiAKIAkJc2NocC0mZ3Q7cGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpOwogCQlpZiAoIXNjaHAtJmd0O3BhZ2VzW2tdKQogCQkJZ290byBvdXQ7CiAKLQkJaWYgKG51bSA9PSBzY2F0dGVyX2VsZW1fc3pfcHJldikgewotCQkJaWYgKHVubGlrZWx5KHJldF9zeiAmZ3Q7IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkgewotCQkJCXNjYXR0ZXJfZWxlbV9zeiA9IHJldF9zejsKLQkJCQlzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHJldF9zejsKLQkJCX0KLQkJfQotCiAJCVNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLSZndDtwYXJlbnRkcCwKIAkJCQkgJiMzNDtzZ19idWlsZF9pbmRpcmVjdDogaz0lZCwgbnVtPSVkLCByZXRfc3o9JWRcbiYjMzQ7LAogCQkJCSBrLCBudW0sIHJldF9zeikpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNjYXR0ZXIvR2F0aGVyIFBhdGNoIGZvciBQb3RlbnRpYWwgS01TQU4gUmlza3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gd291bGQgZmxhZy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL3Njc2kvc2cuY2AsIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmU6CgoqICAgSXQgc2VlbXMgbGlrZSB0aGV5JiMzOTtyZSByZW1vdmluZyBhIHZhcmlhYmxlLCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgLCBhbmQgcmVmYWN0b3JpbmcgdGhlIGhhbmRsaW5nIG9mIGBzY2F0dGVyX2VsZW1fc3pgIHdpdGggYSBjYWxsYmFjay4gVGhpcyBzdWdnZXN0cyB0aGV5IGFyZSBtb3ZpbmcgYXdheSBmcm9tIGhhdmluZyB0d28gZGlmZmVyZW50IHZhbHVlcyBhbmQgdGhhdCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIG1heSBiZSBjb21wbGV0ZWx5IG9ic29sZXRlIG5vdy4KKiAgIFRoZSBgbW9kdWxlX3BhcmFtX25hbWVkYCBpcyByZXBsYWNlZCBieSBgbW9kdWxlX3BhcmFtX2NiYCB3aXRoIGEgc2V0dGVyIGZ1bmN0aW9uLCBgc2NhdHRlcl9lbGVtX3N6X3NldGAuIFRoZSBzZXR0ZXIgdmFsaWRhdGVzIHRoZSBzaXplLCB3aGljaCBpcyBnb29kLiBUaGlzIG1ha2VzIGl0IGEgYml0IG1vcmUgcm9idXN0IHJlZ2FyZGluZyB3aGF0IHZhbHVlIHRoZSB1c2VyIHNldHMuCiogICBUaGUgcmVtb3ZhbCBvZiB0aGUgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24gaW4gYGluaXRfc2coKWAgYW5kIHRoZSBhc3NvY2lhdGVkIHJ1bnRpbWUgY2hlY2tzIGluIGBzZ19idWlsZF9pbmRpcmVjdCgpYCBhcmUgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSBhcmUgbW92aW5nIHRvIGFuIGBvcmRlciA9IGdldF9vcmRlcihzY2F0dGVyX2VsZW1fc3opO2AgYXBwcm9hY2ggYW5kIHVzaW5nIGBtaW5gIHRvIGF2b2lkIHRoZSBwcm9ibGVtcyBhc3NvY2lhdGVkIHdpdGggb2xkZXIgY29kZS4gVGhlIGZhY3QgdGhhdCB0aGUgY2hlY2sgYW5kIHRoZSB1cGRhdGUgbG9naWMgZm9yIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgd2VyZSByZW1vdmVkIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlIG1heSBub3QgaGF2ZSBiZWVuIGNvcnJlY3RseSBpbml0aWFsaXplZCwgY3JlYXRpbmcgdGhlIHZlcnkgS01TQU4gcHJvYmxlbXMgd2UmIzM5O3JlIGxvb2tpbmcgZm9yLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IGBzZ19idWlsZF9pbmRpcmVjdGAgYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9ucyBhY3R1YWxseSAqZG8qLiBJIHdpbGwgdXNlIGByZWFkLWZpbGVgIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGUgaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCBhbmQgc2VlIGlmIHRoZSByZW1vdmFsIG9mIHRoZSBvbGQgbG9naWMgaW50cm9kdWNlcyBhIHdpbmRvdyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZC4gSSBuZWVkIHRvIHRyYWNlIGhvdyBgc2NhdHRlcl9lbGVtX3N6YCBhbmQgYHNjYXR0ZXJfZWxlbV9zel9wcmV2YCAob3IgdGhlIGxhY2sgdGhlcmVvZikgYWZmZWN0IHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgdXNhZ2Ugd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGBudW1gIGFuZCBgcmV0X3N6YCBhcmUgZGV0ZXJtaW5lZCwgYW5kIGlmIHRoZXkmIzM5O3JlIHVzZWQgdG8gaW5kZXggZGF0YSB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuIE15IGV4cGVydCBpbnR1aXRpb24gc3VnZ2VzdHMgdGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcmlzayBsaWVzLCBlc3BlY2lhbGx5IGlmIHRoZSBvbGQgdmFyaWFibGUsIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgd2FzIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlcmUgd2FzIG5vIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjA6XHRcbjE4NjE6XHRzdGF0aWMgaW50XG4xODYyOlx0c2dfYnVpbGRfc2dhdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBjb25zdCBTZ19mZCAqIHNmcCwgaW50IHRhYmxlc2l6ZSlcbjE4NjM6XHR7XG4xODY0Olx0XHRpbnQgc2dfYnVmZmxlbiA9IHRhYmxlc2l6ZSAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKTtcbjE4NjU6XHRcdGdmcF90IGdmcF9mbGFncyA9IEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk47XG4xODY2Olx0XG4xODY3Olx0XHRzY2hwLVx1MDAzZXBhZ2VzID0ga3phbGxvYyhzZ19idWZmbGVuLCBnZnBfZmxhZ3MpO1xuMTg2ODpcdFx0aWYgKCFzY2hwLVx1MDAzZXBhZ2VzKVxuMTg2OTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE4NzA6XHRcdHNjaHAtXHUwMDNlc2dsaXN0X2xlbiA9IHNnX2J1ZmZsZW47XG4xODcxOlx0XHRyZXR1cm4gdGFibGVzaXplO1x0LyogbnVtYmVyIG9mIHNjYXRfZ2F0aCBlbGVtZW50cyBhbGxvY2F0ZWQgKi9cbjE4NzI6XHR9XG4xODczOlx0XG4xODc0Olx0c3RhdGljIGludFxuMTg3NTpcdHNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuMTg3NjpcdHtcbjE4Nzc6XHRcdGludCByZXRfc3ogPSAwLCBpLCBrLCByZW1fc3osIG51bSwgbXhfc2NfZWxlbXM7XG4xODc4Olx0XHRpbnQgc2dfdGFibGVzaXplID0gc2ZwLVx1MDAzZXBhcmVudGRwLVx1MDAzZXNnX3RhYmxlc2l6ZTtcbjE4Nzk6XHRcdGludCBibGtfc2l6ZSA9IGJ1ZmZfc2l6ZSwgb3JkZXI7XG4xODgwOlx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9BVE9NSUMgfCBfX0dGUF9DT01QIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTztcbjE4ODE6XHRcbjE4ODI6XHRcdGlmIChibGtfc2l6ZSBcdTAwM2MgMClcbjE4ODM6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xODg0Olx0XHRpZiAoMCA9PSBibGtfc2l6ZSlcbjE4ODU6XHRcdFx0JiM0MzsmIzQzO2Jsa19zaXplO1x0LyogZG9uJiMzOTt0IGtub3cgd2h5ICovXG4xODg2Olx0XHQvKiByb3VuZCByZXF1ZXN0IHVwIHRvIG5leHQgaGlnaGVzdCBTR19TRUNUT1JfU1ogYnl0ZSBib3VuZGFyeSAqL1xuMTg4NzpcdFx0YmxrX3NpemUgPSBBTElHTihibGtfc2l6ZSwgU0dfU0VDVE9SX1NaKTtcbjE4ODg6XHRcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuMTg4OTpcdFx0XHRcJiMzNDtzZ19idWlsZF9pbmRpcmVjdDogYnVmZl9zaXplPSVkLCBibGtfc2l6ZT0lZFxcblwmIzM0OyxcbjE4OTA6XHRcdFx0YnVmZl9zaXplLCBibGtfc2l6ZSkpO1xuMTg5MTpcdFxuMTg5MjpcdFx0LyogTi5CLiByZXRfc3ogY2FycmllZCBpbnRvIHRoaXMgYmxvY2sgLi4uICovXG4xODkzOlx0XHRteF9zY19lbGVtcyA9IHNnX2J1aWxkX3NnYXQoc2NocCwgc2ZwLCBzZ190YWJsZXNpemUpO1xuMTg5NDpcdFx0aWYgKG14X3NjX2VsZW1zIFx1MDAzYyAwKVxuMTg5NTpcdFx0XHRyZXR1cm4gbXhfc2NfZWxlbXM7XHQvKiBtb3N0IGxpa2VseSAtRU5PTUVNICovXG4xODk2Olx0XG4xODk3Olx0XHRvcmRlciA9IGdldF9vcmRlcihzY2F0dGVyX2VsZW1fc3opO1xuMTg5ODpcdHJldHJ5OlxuMTg5OTpcdFx0cmV0X3N6ID0gMSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpO1xuMTkwMDpcdFxuMTkwMTpcdFx0Zm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgayBcdTAwM2MgbXhfc2NfZWxlbXM7XG4xOTAyOlx0XHQgICAgIGsmIzQzOyYjNDM7LCByZW1fc3ogLT0gcmV0X3N6KSB7XG4xOTAzOlx0XG4xOTA0Olx0XHRcdG51bSA9IG1pbihyZW1fc3osIHJldF9zeik7XG4xOTA1Olx0XG4xOTA2Olx0XHRcdHNjaHAtXHUwMDNlcGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xuMTkwNzpcdFx0XHRpZiAoIXNjaHAtXHUwMDNlcGFnZXNba10pXG4xOTA4Olx0XHRcdFx0Z290byBvdXQ7XG4xOTA5Olx0XG4xOTEwOlx0XHRcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuMTkxMTpcdFx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwmIzM0OyxcbjE5MTI6XHRcdFx0XHRcdCBrLCBudW0sIHJldF9zeikpO1xuMTkxMzpcdFx0fVx0XHQvKiBlbmQgb2YgZm9yIGxvb3AgKi9cbjE5MTQ6XHRcbjE5MTU6XHRcdHNjaHAtXHUwMDNlcGFnZV9vcmRlciA9IG9yZGVyO1xuMTkxNjpcdFx0c2NocC1cdTAwM2VrX3VzZV9zZyA9IGs7XG4xOTE3Olx0XHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbjE5MTg6XHRcdFx0XHQgXCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGtfdXNlX3NnPSVkLCByZW1fc3o9JWRcXG5cJiMzNDssXG4xOTE5Olx0XHRcdFx0IGssIHJlbV9zeikpO1xuMTkyMDpcdFxuMTkyMTpcdFx0c2NocC1cdTAwM2VidWZmbGVuID0gYmxrX3NpemU7XG4xOTIyOlx0XHRpZiAocmVtX3N6IFx1MDAzZSAwKVx0LyogbXVzdCBoYXZlIGZhaWxlZCAqL1xuMTkyMzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE5MjQ6XHRcdHJldHVybiAwO1xuMTkyNTpcdG91dDpcbjE5MjY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGs7IGkmIzQzOyYjNDM7KVxuMTkyNzpcdFx0XHRfX2ZyZWVfcGFnZXMoc2NocC1cdTAwM2VwYWdlc1tpXSwgb3JkZXIpO1xuMTkyODpcdFxuMTkyOTpcdFx0aWYgKC0tb3JkZXIgXHUwMDNlPSAwKVxuMTkzMDpcdFx0XHRnb3RvIHJldHJ5O1xuMTkzMTpcdFxuMTkzMjpcdFx0cmV0dXJuIC1FTk9NRU07XG4xOTMzOlx0fVxuMTkzNDpcdFxuMTkzNTpcdHN0YXRpYyB2b2lkXG4xOTM2Olx0c2dfcmVtb3ZlX3NjYXQoU2dfZmQgKiBzZnAsIFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHApXG4xOTM3Olx0e1xuMTkzODpcdFx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG4xOTM5Olx0XHRcdFx0IFwmIzM0O3NnX3JlbW92ZV9zY2F0OiBrX3VzZV9zZz0lZFxcblwmIzM0Oywgc2NocC1cdTAwM2VrX3VzZV9zZykpO1xuMTk0MDpcdFx0aWYgKHNjaHAtXHUwMDNlcGFnZXMgXHUwMDI2XHUwMDI2IHNjaHAtXHUwMDNlc2dsaXN0X2xlbiBcdTAwM2UgMCkge1xuMTk0MTpcdFx0XHRpZiAoIXNjaHAtXHUwMDNlZGlvX2luX3VzZSkge1xuMTk0MjpcdFx0XHRcdGludCBrO1xuMTk0MzpcdFxuMTk0NDpcdFx0XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIHNjaHAtXHUwMDNla191c2Vfc2cgXHUwMDI2XHUwMDI2IHNjaHAtXHUwMDNlcGFnZXNba107IGsmIzQzOyYjNDM7KSB7XG4xOTQ1Olx0XHRcdFx0XHRTQ1NJX0xPR19USU1FT1VUKDUsXG4xOTQ2Olx0XHRcdFx0XHRcdHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbjE5NDc6XHRcdFx0XHRcdFx0XCYjMzQ7c2dfcmVtb3ZlX3NjYXQ6IGs9JWQsIHBnPTB4JXBcXG5cJiMzNDssXG4xOTQ4Olx0XHRcdFx0XHRcdGssIHNjaHAtXHUwMDNlcGFnZXNba10pKTtcbjE5NDk6XHRcdFx0XHRcdF9fZnJlZV9wYWdlcyhzY2hwLVx1MDAzZXBhZ2VzW2tdLCBzY2hwLVx1MDAzZXBhZ2Vfb3JkZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjIwCgkJCQkJCQlvdXRwdXQ6IDIxNgoJCQkJCQkJdGhvdWdodHM6IDcxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZXcgVW5pbml0aWFsaXplZCBNZW1vcnkgaW4gU0NTSSBTY2F0dGVyLUdhdGhlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHNjYXR0ZXItZ2F0aGVyIGxpc3QgYWxsb2NhdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLCBhbmQgdGhlbiByaWdvcm91c2x5IGFzc2VzcyB0aGUgS01TQU4gaW1wbGljYXRpb25zLgoKU28sIHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGRvZXMgdHdvIHRoaW5nczogaXQgcmVmaW5lcyBob3cgdGhlIGBzY2F0dGVyX2VsZW1fc3pgIG1vZHVsZSBwYXJhbWV0ZXIgaXMgaGFuZGxlZCwgbW92aW5nIGZyb20gYSByYXcgYG1vZHVsZV9wYXJhbV9uYW1lZGAgdG8gYSBjYWxsYmFjaywgYG1vZHVsZV9wYXJhbV9jYmAuIFRoaXMgbmV3IGNhbGxiYWNrIGVuZm9yY2VzIGEgc2l6ZSByYW5nZSwgZW5zdXJpbmcgaXQmIzM5O3MgYXQgbGVhc3QgYSBwYWdlIGFuZCBubyBsYXJnZXIgdGhhbiBgTUFYX1BBR0VfT1JERVJgIHBhZ2VzLiBUaGUgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSByZWR1bmRhbnQgYHNjYXR0ZXJfZWxlbV9zel9wcmV2YCB2YXJpYWJsZSBhbmQgc3Vic2VxdWVudGx5IHNpbXBsaWZpZXMgY2FsY3VsYXRpb25zIGZvciBhbGxvY2F0aW9uIG9yZGVyIGluIGBzZ19idWlsZF9pbmRpcmVjdGAuIFRoaXMgZmVlbHMgbGlrZSBhIGNsZWFudXAgbW9yZSB0aGFuIGFueXRoaW5nIGVsc2UuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgb3Bwb3J0dW5pdGllcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gc25lYWsgaW4sIG9yIG1vZGlmeSBleGlzdGluZyBwYXRocyB0byBoYXZlIG5ldyBhcmVhcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSBzZWUgdGhhdCBhbGwgdGhlIGBhbGxvY19wYWdlc2AgY2FsbHMgdXNlIGBfX0dGUF9aRVJPYCwgYW5kIGFsbCB0aGUgYGt6YWxsb2NgIGFsbG9jYXRpb25zIHdpbGwgYmUgemVyby1pbml0aWFsaXplZC4gSSB3ZW50IHRocm91Z2ggdGhlIGZvdXIgS01TQU4gY3JpdGVyaWE6IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIHRpZWQgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIEJhc2VkIG9uIHRoZSBjb2RlLCBub25lIG9mIHRob3NlIGFwcGx5IGhlcmUuIEkgc2VlIG5vIGNoYW5nZSB0byBob3cgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB1c2Vyc3BhY2UgYW5kIG5vIGNoYW5jZSBmb3IgdGhlIG5ldyBjb2RlIHRvIGxlYXZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF2YWlsYWJsZS4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjay4gVGhlIHBhdGNoIGlzIG1vc3RseSB0b3VjaGluZyBtb2R1bGUgcGFyYW1ldGVyIGhhbmRsaW5nIGFuZCBzY2FsYXIgY2FsY3VsYXRpb25zLCBzcGVjaWZpY2FsbHkgcmVsYXRpbmcgdG8gcGFnZSBvcmRlciBhbmQgc2l6ZS4gVGhlc2UgcGFyYW1ldGVycyBhcmUgdWx0aW1hdGVseSByZWxhdGVkIHRvIG1lbW9yeSB0aGF0IGhhcyBoYWQgYF9fR0ZQX1pFUk9gIHVzZWQgb3IgYGt6YWxsb2NgLiBObyB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBpbiBjYWxjdWxhdGlvbiBvciBwYXJhbWV0ZXIgaGFuZGxpbmcgYXJlIHVuaW5pdGlhbGl6ZWQgYmVmb3JlIHVzYWdlLiBUaGlzIHNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uLgoKVGh1cywgYmFzZWQgb24gdGhlIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgLiBUaGUgcGF0Y2ggaXMgcmVmYWN0b3JpbmcgaG93IGBzY2F0dGVyX2VsZW1fc3pgIGlzIGhhbmRsZWQgd2l0aCBpbnB1dCB2YWxpZGF0aW9uLCBhbmQgaXQgcmVtb3ZlcyBhIHJlZHVuZGFudCB2YXJpYWJsZSwgc2ltcGxpZnlpbmcgb3JkZXIgY2FsY3VsYXRpb25zLiBCZWNhdXNlIHRoZSBhbGxvY2F0aW9ucyB1c2UgYF9fR0ZQX1pFUk9gIGFuZCBga3phbGxvY2AsIG5vIG5ldyBwYXRocyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGludHJvZHVjZWQuIFdoaWxlIGFsbG9jYXRpb24gZmFpbHVyZXMsIGJvdW5kcyBlcnJvcnMsIG9yIHBhcmFtZXRlciBoYW5kbGluZyBpc3N1ZXMgY291bGQgb2NjdXIsIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIHNob3VsZCBlYXNpbHkgZGV0ZWN0IHRoZW0uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBmb3IgYHNjYXR0ZXJfZWxlbV9zemAgaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCBieSBhZGRpbmcgYSBjdXN0b20gc2V0dGVyIGNhbGxiYWNrIGBzY2F0dGVyX2VsZW1fc3pfc2V0KClgIHRvIHZhbGlkYXRlIGJvdW5kcywgYW5kIGNsZWFucyB1cCB0aGUgb3JkZXIgY2FsY3VsYXRpb24gbG9naWMgaW4gYHNnX2J1aWxkX2luZGlyZWN0KClgIHdoaWxlIHJlbW92aW5nIHRoZSByZWR1bmRhbnQgYHNjYXR0ZXJfZWxlbV9zel9wcmV2YCB2YXJpYWJsZS5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBleHBvc2VkOlxuMS4gTWVtb3J5IGFsbG9jYXRpb25zIGZvciBzY2F0dGVyLWdhdGhlciBwYWdlcyB1c2UgYF9fR0ZQX1pFUk9gIGFuZCB0YWJsZXMgdXNlIGBremFsbG9jYC5cbjIuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiBvcmRlciBjYWxjdWxhdGlvbiBhbmQgbG9vcCBpbmRleGluZyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgc3RhY2sgcHJpbWl0aXZlcy5cbjMuIE5vIGRhdGEgc3RydWN0dXJlcyBvciBwYWRkaW5nIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UgaW4gYW4gdW5pbml0aWFsaXplZCBzdGF0ZS5cbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFnZSBhbGxvY2F0aW9uIGJvdW5kcywgYnVmZmVyIHNpemVzLCBvciBvcmRlciBjYWxjdWxhdGlvbnMgZmFsbCB1bmRlciBzdGFuZGFyZCBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IHNhZmV0eSBjYXVnaHQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGRldGVjdGVkIGJ5IEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHZhbGlkYXRpb24gZm9yIGBzY2F0dGVyX2VsZW1fc3pgIGluIGBkcml2ZXJzL3Njc2kvc2cuY2AgYnkgYWRkaW5nIGEgY3VzdG9tIHNldHRlciBjYWxsYmFjayBgc2NhdHRlcl9lbGVtX3N6X3NldCgpYCB0byB2YWxpZGF0ZSBib3VuZHMsIGFuZCBjbGVhbnMgdXAgdGhlIG9yZGVyIGNhbGN1bGF0aW9uIGxvZ2ljIGluIGBzZ19idWlsZF9pbmRpcmVjdCgpYCB3aGlsZSByZW1vdmluZyB0aGUgcmVkdW5kYW50IGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgdmFyaWFibGUuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgZXhwb3NlZDpcbjEuIE1lbW9yeSBhbGxvY2F0aW9ucyBmb3Igc2NhdHRlci1nYXRoZXIgcGFnZXMgdXNlIGBfX0dGUF9aRVJPYCBhbmQgdGFibGVzIHVzZSBga3phbGxvY2AuXG4yLiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gb3JkZXIgY2FsY3VsYXRpb24gYW5kIGxvb3AgaW5kZXhpbmcgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHN0YWNrIHByaW1pdGl2ZXMuXG4zLiBObyBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUuXG40LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBhZ2UgYWxsb2NhdGlvbiBib3VuZHMsIGJ1ZmZlciBzaXplcywgb3Igb3JkZXIgY2FsY3VsYXRpb25zIGZhbGwgdW5kZXIgc3RhbmRhcmQgZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBzYWZldHkgY2F1Z2h0IGJ5IEtBU0FOIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBkZXRlY3RlZCBieSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMjA6MDQ6MjIuMjI0MzY0ODAxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MTk1OTI3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NTSVwiLFxuICAgIFwiQ0hSX0RFVl9TR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNnX2J1aWxkX2luZGlyZWN0XCIsXG4gICAgXCJzY2F0dGVyX2VsZW1fc3pfc2V0XCIsXG4gICAgXCJzZ19idWlsZF9yZXNlcnZlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBmb3IgYHNjYXR0ZXJfZWxlbV9zemAgaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCBieSBhZGRpbmcgYSBjdXN0b20gc2V0dGVyIGNhbGxiYWNrIGBzY2F0dGVyX2VsZW1fc3pfc2V0KClgIHRvIHZhbGlkYXRlIGJvdW5kcywgYW5kIGNsZWFucyB1cCB0aGUgb3JkZXIgY2FsY3VsYXRpb24gbG9naWMgaW4gYHNnX2J1aWxkX2luZGlyZWN0KClgIHdoaWxlIHJlbW92aW5nIHRoZSByZWR1bmRhbnQgYHNjYXR0ZXJfZWxlbV9zel9wcmV2YCB2YXJpYWJsZS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQ6XFxuMS4gTWVtb3J5IGFsbG9jYXRpb25zIGZvciBzY2F0dGVyLWdhdGhlciBwYWdlcyB1c2UgYF9fR0ZQX1pFUk9gIGFuZCB0YWJsZXMgdXNlIGBremFsbG9jYC5cXG4yLiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gb3JkZXIgY2FsY3VsYXRpb24gYW5kIGxvb3AgaW5kZXhpbmcgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHN0YWNrIHByaW1pdGl2ZXMuXFxuMy4gTm8gZGF0YSBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFnZSBhbGxvY2F0aW9uIGJvdW5kcywgYnVmZmVyIHNpemVzLCBvciBvcmRlciBjYWxjdWxhdGlvbnMgZmFsbCB1bmRlciBzdGFuZGFyZCBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IHNhZmV0eSBjYXVnaHQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGRldGVjdGVkIGJ5IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTQ1NJIGdlbmVyaWMgZHJpdmVyIChzZykgc2NhdHRlci1nYXRoZXIgYnVmZmVyIGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24gbG9naWMuIEl0IHJlcGxhY2VzIGR5bmFtaWMgbW9kdWxlIHBhcmFtZXRlciBjaGVja2luZyBpbiBzZ19idWlsZF9pbmRpcmVjdCB3aXRoIGEgZGVkaWNhdGVkIG1vZHVsZV9wYXJhbV9jYiBzZXR0ZXIgKHNjYXR0ZXJfZWxlbV9zel9zZXQpIGFuZCBzaW1wbGlmaWVzIHRoZSBhbGxvY2F0aW9uIGxvb3AgY2FsY3VsYXRpb24uIFNDU0kgZ2VuZXJpYyBkZXZpY2VzIGFyZSBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNDoyMi4yMjQzNzE1NDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjE1Nzg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc3NmUzNTBiNTA3NWZjYzEwOTA2NGUwYzA5OWMxNDdlNzBjYjgwM2FcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAyMDowNDoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jXFxuaW5kZXggNTQwOGYwMDJlNmMwMS4uNGM4MmZjMDBkMDVkZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Njc2kvc2cuY1xcbisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jXFxuQEAgLTkyLDcgKzkyLDYgQEAgc3RhdGljIGludCBkZWZfcmVzZXJ2ZWRfc2l6ZSA9IFNHX0RFRl9SRVNFUlZFRF9TSVpFO1xcbiBzdGF0aWMgaW50IHNnX2FsbG93X2RpbyA9IFNHX0FMTE9XX0RJT19ERUY7XFxuIFxcbiBzdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zeiA9IFNHX1NDQVRURVJfU1o7XFxuLXN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBTR19TQ0FUVEVSX1NaO1xcbiBcXG4gI2RlZmluZSBTR19TRUNUT1JfU1ogNTEyXFxuIFxcbkBAIC0xNjIxLDkgKzE2MjAsMzMgQEAgc2dfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpjbF9kZXYpXFxuIFxcdGtyZWZfcHV0KFxcdTAwMjZzZHAtXFx1MDAzZWRfcmVmLCBzZ19kZXZpY2VfZGVzdHJveSk7XFxuIH1cXG4gXFxuLW1vZHVsZV9wYXJhbV9uYW1lZChzY2F0dGVyX2VsZW1fc3osIHNjYXR0ZXJfZWxlbV9zeiwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7XFxuIG1vZHVsZV9wYXJhbV9uYW1lZChhbGxvd19kaW8sIHNnX2FsbG93X2RpbywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7XFxuIFxcbitzdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zel9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4re1xcbitcXHRpbnQgc2l6ZSwgcmV0O1xcbitcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0ID0ga3N0cnRvaW50KHZhbCwgMCwgXFx1MDAyNnNpemUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHNpemUgXFx1MDAzYyBQQUdFX1NJWkUgfHwgc2l6ZSBcXHUwMDNlIChQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgTUFYX1BBR0VfT1JERVIpKVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdHNjYXR0ZXJfZWxlbV9zeiA9IHNpemU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgc2NhdHRlcl9lbGVtX3N6X29wcyA9IHtcXG4rXFx0LnNldFxcdD0gc2NhdHRlcl9lbGVtX3N6X3NldCxcXG4rXFx0LmdldFxcdD0gcGFyYW1fZ2V0X2ludCxcXG4rfTtcXG4rXFxuK21vZHVsZV9wYXJhbV9jYihzY2F0dGVyX2VsZW1fc3osIFxcdTAwMjZzY2F0dGVyX2VsZW1fc3pfb3BzLCBcXHUwMDI2c2NhdHRlcl9lbGVtX3N6LCAwNjQ0KTtcXG4rXFxuIHN0YXRpYyBpbnQgZGVmX3Jlc2VydmVkX3NpemVfc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuIHtcXG4gXFx0aW50IHNpemUsIHJldDtcXG5AQCAtMTY2NywxMCArMTY5MCw4IEBAIGluaXRfc2codm9pZClcXG4ge1xcbiBcXHRpbnQgcmM7XFxuIFxcbi1cXHRpZiAoc2NhdHRlcl9lbGVtX3N6IFxcdTAwM2MgUEFHRV9TSVpFKSB7XFxuK1xcdGlmIChzY2F0dGVyX2VsZW1fc3ogXFx1MDAzYyBQQUdFX1NJWkUpXFxuIFxcdFxcdHNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTtcXG4tXFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBzY2F0dGVyX2VsZW1fc3o7XFxuLVxcdH1cXG4gXFxuIFxcdHJjID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihTQ1NJX0dFTkVSSUNfTUFKT1IsIDApLCBcXG4gXFx0XFx0XFx0XFx0ICAgIFNHX01BWF9ERVZTLCBcXFwic2dcXFwiKTtcXG5AQCAtMTg3MywzNiArMTg5NCwxOSBAQCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcXG4gXFx0aWYgKG14X3NjX2VsZW1zIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIG14X3NjX2VsZW1zO1xcdC8qIG1vc3QgbGlrZWx5IC1FTk9NRU0gKi9cXG4gXFxuLVxcdG51bSA9IHNjYXR0ZXJfZWxlbV9zejtcXG4tXFx0aWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcXG4tXFx0XFx0aWYgKG51bSBcXHUwMDNjIFBBR0VfU0laRSkge1xcbi1cXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XFxuLVxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gUEFHRV9TSVpFO1xcbi1cXHRcXHR9IGVsc2VcXG4tXFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBudW07XFxuLVxcdH1cXG4tXFxuLVxcdG9yZGVyID0gZ2V0X29yZGVyKG51bSk7XFxuK1xcdG9yZGVyID0gZ2V0X29yZGVyKHNjYXR0ZXJfZWxlbV9zeik7XFxuIHJldHJ5OlxcbiBcXHRyZXRfc3ogPSAxIFxcdTAwM2NcXHUwMDNjIChQQUdFX1NISUZUICsgb3JkZXIpO1xcbiBcXG4gXFx0Zm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgayBcXHUwMDNjIG14X3NjX2VsZW1zO1xcbiBcXHQgICAgIGsrKywgcmVtX3N6IC09IHJldF9zeikge1xcbiBcXG4tXFx0XFx0bnVtID0gKHJlbV9zeiBcXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSA/XFxuLVxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2IDogcmVtX3N6O1xcbitcXHRcXHRudW0gPSBtaW4ocmVtX3N6LCByZXRfc3opO1xcbiBcXG4gXFx0XFx0c2NocC1cXHUwMDNlcGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xcbiBcXHRcXHRpZiAoIXNjaHAtXFx1MDAzZXBhZ2VzW2tdKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdFxcdGlmIChudW0gPT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpIHtcXG4tXFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldF9zeiBcXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xcbi1cXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3ogPSByZXRfc3o7XFxuLVxcdFxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gcmV0X3N6O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFxuIFxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4gXFx0XFx0XFx0XFx0IFxcXCJzZ19idWlsZF9pbmRpcmVjdDogaz0lZCwgbnVtPSVkLCByZXRfc3o9JWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBrLCBudW0sIHJldF9zeikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNDoyMi43MzEzNDI0MzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyOTgwMjQ0NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNDU0lcIixcbiAgICBcIkNIUl9ERVZfU0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZ19idWlsZF9pbmRpcmVjdFwiLFxuICAgIFwic2NhdHRlcl9lbGVtX3N6X3NldFwiLFxuICAgIFwic2dfYnVpbGRfcmVzZXJ2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTQ1NJIGdlbmVyaWMgZHJpdmVyIChzZykgc2NhdHRlci1nYXRoZXIgYnVmZmVyIGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24gbG9naWMuIEl0IHJlcGxhY2VzIGR5bmFtaWMgbW9kdWxlIHBhcmFtZXRlciBjaGVja2luZyBpbiBzZ19idWlsZF9pbmRpcmVjdCB3aXRoIGEgZGVkaWNhdGVkIG1vZHVsZV9wYXJhbV9jYiBzZXR0ZXIgKHNjYXR0ZXJfZWxlbV9zel9zZXQpIGFuZCBzaW1wbGlmaWVzIHRoZSBhbGxvY2F0aW9uIGxvb3AgY2FsY3VsYXRpb24uIFNDU0kgZ2VuZXJpYyBkZXZpY2VzIGFyZSBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc3NmUzNTBiNTA3NWZjYzEwOTA2NGUwYzA5OWMxNDdlNzBjYjgwM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDIwOjA0OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuY1xuaW5kZXggNTQwOGYwMDJlNmMwMS4uNGM4MmZjMDBkMDVkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jXG4rKysgYi9kcml2ZXJzL3Njc2kvc2cuY1xuQEAgLTkyLDcgKzkyLDYgQEAgc3RhdGljIGludCBkZWZfcmVzZXJ2ZWRfc2l6ZSA9IFNHX0RFRl9SRVNFUlZFRF9TSVpFO1xuIHN0YXRpYyBpbnQgc2dfYWxsb3dfZGlvID0gU0dfQUxMT1dfRElPX0RFRjtcbiBcbiBzdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zeiA9IFNHX1NDQVRURVJfU1o7XG4tc3RhdGljIGludCBzY2F0dGVyX2VsZW1fc3pfcHJldiA9IFNHX1NDQVRURVJfU1o7XG4gXG4gI2RlZmluZSBTR19TRUNUT1JfU1ogNTEyXG4gXG5AQCAtMTYyMSw5ICsxNjIwLDMzIEBAIHNnX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqY2xfZGV2KVxuIFx0a3JlZl9wdXQoXHUwMDI2c2RwLVx1MDAzZWRfcmVmLCBzZ19kZXZpY2VfZGVzdHJveSk7XG4gfVxuIFxuLW1vZHVsZV9wYXJhbV9uYW1lZChzY2F0dGVyX2VsZW1fc3osIHNjYXR0ZXJfZWxlbV9zeiwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7XG4gbW9kdWxlX3BhcmFtX25hbWVkKGFsbG93X2Rpbywgc2dfYWxsb3dfZGlvLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTtcbiBcbitzdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zel9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbit7XG4rXHRpbnQgc2l6ZSwgcmV0O1xuK1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0ID0ga3N0cnRvaW50KHZhbCwgMCwgXHUwMDI2c2l6ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHNpemUgXHUwMDNjIFBBR0VfU0laRSB8fCBzaXplIFx1MDAzZSAoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBNQVhfUEFHRV9PUkRFUikpXG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1xuK1x0c2NhdHRlcl9lbGVtX3N6ID0gc2l6ZTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgc2NhdHRlcl9lbGVtX3N6X29wcyA9IHtcbitcdC5zZXRcdD0gc2NhdHRlcl9lbGVtX3N6X3NldCxcbitcdC5nZXRcdD0gcGFyYW1fZ2V0X2ludCxcbit9O1xuK1xuK21vZHVsZV9wYXJhbV9jYihzY2F0dGVyX2VsZW1fc3osIFx1MDAyNnNjYXR0ZXJfZWxlbV9zel9vcHMsIFx1MDAyNnNjYXR0ZXJfZWxlbV9zeiwgMDY0NCk7XG4rXG4gc3RhdGljIGludCBkZWZfcmVzZXJ2ZWRfc2l6ZV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbiB7XG4gXHRpbnQgc2l6ZSwgcmV0O1xuQEAgLTE2NjcsMTAgKzE2OTAsOCBAQCBpbml0X3NnKHZvaWQpXG4ge1xuIFx0aW50IHJjO1xuIFxuLVx0aWYgKHNjYXR0ZXJfZWxlbV9zeiBcdTAwM2MgUEFHRV9TSVpFKSB7XG4rXHRpZiAoc2NhdHRlcl9lbGVtX3N6IFx1MDAzYyBQQUdFX1NJWkUpXG4gXHRcdHNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTtcbi1cdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBzY2F0dGVyX2VsZW1fc3o7XG4tXHR9XG4gXG4gXHRyYyA9IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoU0NTSV9HRU5FUklDX01BSk9SLCAwKSwgXG4gXHRcdFx0XHQgICAgU0dfTUFYX0RFVlMsIFwic2dcIik7XG5AQCAtMTg3MywzNiArMTg5NCwxOSBAQCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcbiBcdGlmIChteF9zY19lbGVtcyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIG14X3NjX2VsZW1zO1x0LyogbW9zdCBsaWtlbHkgLUVOT01FTSAqL1xuIFxuLVx0bnVtID0gc2NhdHRlcl9lbGVtX3N6O1xuLVx0aWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcbi1cdFx0aWYgKG51bSBcdTAwM2MgUEFHRV9TSVpFKSB7XG4tXHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuLVx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gUEFHRV9TSVpFO1xuLVx0XHR9IGVsc2Vcbi1cdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTtcbi1cdH1cbi1cbi1cdG9yZGVyID0gZ2V0X29yZGVyKG51bSk7XG4rXHRvcmRlciA9IGdldF9vcmRlcihzY2F0dGVyX2VsZW1fc3opO1xuIHJldHJ5OlxuIFx0cmV0X3N6ID0gMSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgKyBvcmRlcik7XG4gXG4gXHRmb3IgKGsgPSAwLCByZW1fc3ogPSBibGtfc2l6ZTsgcmVtX3N6IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBrIFx1MDAzYyBteF9zY19lbGVtcztcbiBcdCAgICAgaysrLCByZW1fc3ogLT0gcmV0X3N6KSB7XG4gXG4tXHRcdG51bSA9IChyZW1fc3ogXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSA/XG4tXHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgOiByZW1fc3o7XG4rXHRcdG51bSA9IG1pbihyZW1fc3osIHJldF9zeik7XG4gXG4gXHRcdHNjaHAtXHUwMDNlcGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xuIFx0XHRpZiAoIXNjaHAtXHUwMDNlcGFnZXNba10pXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4tXHRcdGlmIChudW0gPT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpIHtcbi1cdFx0XHRpZiAodW5saWtlbHkocmV0X3N6IFx1MDAzZSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcbi1cdFx0XHRcdHNjYXR0ZXJfZWxlbV9zeiA9IHJldF9zejtcbi1cdFx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gcmV0X3N6O1xuLVx0XHRcdH1cbi1cdFx0fVxuLVxuIFx0XHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbiBcdFx0XHRcdCBcInNnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwiLFxuIFx0XHRcdFx0IGssIG51bSwgcmV0X3N6KSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNDoyMi43MzEzNDQ4NjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjkzOTUwMTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aGF0IHBhdGNoIGFuYWx5c2lzLCBiYXNlZCBvbiBteSBleHBlcnQgdW5kZXJzdGFuZGluZzpcblxuKipQYXRjaCBGdXp6aW5nIFN0cmF0ZWd5OiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9zY3NpL3NnLmNgIGlzIGV2ZW4gYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBxdWlja2x5IGluc3BlY3QgdGhlIGZpbGUgaXRzZWxmIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgaW1tZWRpYXRlIGdvYWxzIGFyZSB0byBkZXRlcm1pbmU6XG5cbiogICAqKkZ1enogV29ydGhpbmVzczoqKiBJcyB0aGVyZSBhbnl0aGluZyBoZXJlIHRoYXQgbG9va3MgbGlrZSBpdCdzIGhhbmRsaW5nIHBvdGVudGlhbGx5IHVudHJ1c3RlZCBkYXRhLCBpbnZvbHZlcyBjb21wbGV4IHN0YXRlIHRyYW5zaXRpb25zLCBvciBkZWFscyB3aXRoIHJlc291cmNlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY2FuZGlkYXRlcyBmb3IgbWVtb3J5IGNvcnJ1cHRpb24sIGludGVnZXIgb3ZlcmZsb3dzLCBvciByYWNlIGNvbmRpdGlvbnM/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgd2hlcmUgdG8gbG9vayBmaXJzdCwgYnV0IEknbGwgbmVlZCB0byBjb25maXJtIHdpdGggYSB0aG9yb3VnaCBsb29rLlxuKiAgICoqQ29uZmlndXJhdGlvbjoqKiBXaGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgbmVlZGVkIHRvIHRyaWdnZXIgdGhlIGNvZGUgY2hhbmdlcyBlZmZlY3RpdmVseT8gQXJlIHRoZXJlIGtlcm5lbCBvcHRpb25zLCBtb2R1bGUgcGFyYW1ldGVycywgb3Igc3lzZnMgZW50cmllcyB0aGF0IG5lZWQgdG8gYmUgc2V0PyBBcmUgdGhlcmUgcGFydGljdWxhciBoYXJkd2FyZSBzZXR1cHMgSSBuZWVkIHRvIGVtdWxhdGU/IFRoZSBkZXZpbCBpcyBpbiB0aGVzZSBkZXRhaWxzLlxuKiAgICoqRm9jdXMgU3ltYm9sczoqKiBCYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzLCB3aGF0IGFyZSB0aGUgbW9zdCBjcml0aWNhbCBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRhcmdldCB3aXRoIHRoZSBmdXp6ZXI/IFdoYXQgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCBjYWxsYmFja3MsIG9yIHNlbnNpdGl2ZSBvcGVyYXRpb25zIHRoYXQgSSBjYW4gXCJob29rXCIgdG8gZ2V0IHRoZSBmdXp6ZXIgdG8gZW5nYWdlIHdpdGggdGhlIG1vZGlmaWVkIGNvZGUgcGF0aD8gVGhpcyB3aWxsIGludm9sdmUgaWRlbnRpZnlpbmcgdGhlIGNyaXRpY2FsIGxvZ2ljIHRoYXQgbmVlZHMgdG8gYmUgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODg1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNDoyNy40MjUyOTgzNDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzNjU0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0NIUl9ERVZfU0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvc2NzaS9NYWtlZmlsZT0xNzM9b2JqLSQoQ09ORklHX0JMS19ERVZfU1IpXFx0Kz0gc3JfbW9kLm9cXG5kcml2ZXJzL3Njc2kvTWFrZWZpbGU6MTc0Om9iai0kKENPTkZJR19DSFJfREVWX1NHKVxcdCs9IHNnLm9cXG5kcml2ZXJzL3Njc2kvTWFrZWZpbGUtMTc1LW9iai0kKENPTkZJR19DSFJfREVWX1NDSClcXHQrPSBjaC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjI3LjQ4NjY3MTUxMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzk5MTk1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6XG5cbioqRXhhbWluaW5nIFNDU0kgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYENIUl9ERVZfU0dgIGlzIGRlZmluZWQsIGFuZCB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgYWxtb3N0IGFsd2F5cyB0aGUgYEtjb25maWdgIGZpbGVzLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggU0NTSSwgSSdsbCBnbyBkaXJlY3RseSB0byBgZHJpdmVycy9zY3NpL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFNDU0kgc3Vic3lzdGVtIHNob3VsZCBiZSBkZWNsYXJlZCwgYW5kIHdoZXJlIEkgY2FuIGZpbmQgdGhlIGRlcGVuZGVuY3kgZGVmaW5pdGlvbnMgb2YgYENIUl9ERVZfU0dgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGh1bnQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNDoyOS44MjY1OTMyNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQwMTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0hSX0RFVl9TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL0tjb25maWc9MTE2PWNvbmZpZyBCTEtfREVWX1NSXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy0xMzAtXFxuZHJpdmVycy9zY3NpL0tjb25maWc6MTMxOmNvbmZpZyBDSFJfREVWX1NHXFxuZHJpdmVycy9zY3NpL0tjb25maWctMTMyLVxcdHRyaXN0YXRlIFxcXCJTQ1NJIGdlbmVyaWMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjA6MDQ6MjkuODg5MDAwNzg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM2MzMwNDI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFNDU0kgS2NvbmZpZyBGaWxlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBkcml2ZXJzL3Njc2kvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMzEuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGFyZWEgbGlrZWx5IGRlYWxzIHdpdGggYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGEgcmVsYXRlZCBncm91cGluZyB3aXRoaW4gdGhlIFNDU0kgc3Vic3lzdGVtLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCwgYSBtZW51IGVudHJ5LCBvciBwZXJoYXBzIGEgZGVwZW5kZW5jeSBkZWNsYXJhdGlvbiB0aGF0IGluZmx1ZW5jZXMgaG93IFNDU0kgZHJpdmVycyBhcmUgY29tcGlsZWQgYW5kIGluY29ycG9yYXRlZCBpbnRvIHRoZSBrZXJuZWwuIEknbGwgbmVlZCB0byByYXBpZGx5IHBhcnNlIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoYXQgbGluZSB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBhbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgYmVpbmcgY29udHJvbGxlZCB0aGVyZS4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSB0YXJnZXRzIHRoaXMgYWZmZWN0cy4gSXQncyB0aW1lIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NDY1NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjMzLjI1MjMwODkxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjU6XFx0XFx0ICBNYWtlIHN1cmUgdG8gc2F5IFkgb3IgTSB0byBcXFwiSVNPIDk2NjAgQ0QtUk9NIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiLlxcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUgYW5kIHJlYWRcXG4gMTI4OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9zY3NpL3Njc2kucnN0XFx1MDAzZS5cXG4gMTI5OlxcdFxcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzcl9tb2QuXFxuIDEzMDpcXHRcXG4gMTMxOlxcdGNvbmZpZyBDSFJfREVWX1NHXFxuIDEzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU0NTSSBnZW5lcmljIHN1cHBvcnRcXFwiXFxuIDEzMzpcXHRcXHRkZXBlbmRzIG9uIFNDU0lcXG4gMTM0OlxcdFxcdGhlbHBcXG4gMTM1OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gdXNlIFNDU0kgc2Nhbm5lcnMsIHN5bnRoZXNpemVycyBvciBDRC13cml0ZXJzIG9yIGp1c3RcXG4gMTM2OlxcdFxcdCAgYWJvdXQgYW55dGhpbmcgaGF2aW5nIFxcXCJTQ1NJXFxcIiBpbiBpdHMgbmFtZSBvdGhlciB0aGFuIGhhcmQgZGlza3MsXFxuIDEzNzpcXHRcXHQgIENELVJPTXMgb3IgdGFwZXMsIHNheSBZIGhlcmUuIFRoZXNlIHdvbid0IGJlIHN1cHBvcnRlZCBieSB0aGUga2VybmVsXFxuIDEzODpcXHRcXHQgIGRpcmVjdGx5LCBzbyB5b3UgbmVlZCBzb21lIGFkZGl0aW9uYWwgc29mdHdhcmUgd2hpY2gga25vd3MgaG93IHRvXFxuIDEzOTpcXHRcXHQgIHRhbGsgdG8gdGhlc2UgZGV2aWNlcyB1c2luZyB0aGUgU0NTSSBwcm90b2NvbDpcXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0ICBGb3Igc2Nhbm5lcnMsIGxvb2sgYXQgU0FORSAoXFx1MDAzY2h0dHA6Ly93d3cuc2FuZS1wcm9qZWN0Lm9yZy9cXHUwMDNlKS4gRm9yIENEXFxuIDE0MjpcXHRcXHQgIHdyaXRlciBzb2Z0d2FyZSBsb29rIGF0IENkcnRvb2xzXFxuIDE0MzpcXHRcXHQgIChcXHUwMDNjaHR0cDovL2NkcnRvb2xzLnNvdXJjZWZvcmdlLm5ldC9cXHUwMDNlKVxcbiAxNDQ6XFx0XFx0ICBhbmQgZm9yIGJ1cm5pbmcgYSBcXFwiZGlzayBhdCBvbmNlXFxcIjogQ0RSREFPXFxuIDE0NTpcXHRcXHQgIChcXHUwMDNjaHR0cDovL2NkcmRhby5zb3VyY2Vmb3JnZS5uZXQvXFx1MDAzZSkuIENkcGFyYW5vaWEgaXMgYSBoaWdoXFxuIDE0NjpcXHRcXHQgIHF1YWxpdHkgZGlnaXRhbCByZWFkZXIgb2YgYXVkaW8gQ0RzIChcXHUwMDNjaHR0cDovL3d3dy54aXBoLm9yZy9wYXJhbm9pYS9cXHUwMDNlKS5cXG4gMTQ3OlxcdFxcdCAgRm9yIG90aGVyIGRldmljZXMsIGl0J3MgcG9zc2libGUgdGhhdCB5b3UnbGwgaGF2ZSB0byB3cml0ZSB0aGVcXG4gMTQ4OlxcdFxcdCAgZHJpdmVyIHNvZnR3YXJlIHlvdXJzZWxmLiBQbGVhc2UgcmVhZCB0aGUgZmlsZVxcbiAxNDk6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL3Njc2kvc2NzaS1nZW5lcmljLnJzdFxcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZSBhbmQgcmVhZFxcbiAxNTI6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL3Njc2kvc2NzaS5yc3RcXHUwMDNlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNnLlxcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjMzLjI1MjQyNDg2NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MzU3MzM3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFNDU0kgRHJpdmVyIENoYW5nZXMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzIHNwZWNpZmljIGlzc3VlLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgZHJpdmVycy9zY3NpL3NnLmNgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBpbnRlcmVzdGluZyBTQ1NJIGdlbmVyaWMgZHJpdmVyIHN0dWZmIGhhcHBlbnMsIGVzcGVjaWFsbHkgaWYgd2UncmUgZGVhbGluZyB3aXRoIHNjYXR0ZXItZ2F0aGVyIGFuZCBpbmRpcmVjdCBkYXRhIHRyYW5zZmVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBhcm91bmQgYHNnX2J1aWxkX2luZGlyZWN0YCBhbmQgYHNjYXR0ZXJfZWxlbV9zel9zZXRgLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QsIGFuZCB3aGF0IGNvbnRleHQgdGhleSdyZSBjYWxsZWQgd2l0aGluLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gdW5kZXJzdGFuZCB0aGUgYmVmb3JlIGFuZCBhZnRlciwgdG8gYmUgY2VydGFpbiBvZiB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIHNldCB1cCwgaG93IHRoZSBjb21tYW5kcyBhcmUgYnVpbHQsIGFuZCBob3cgdGhlIHNjYXR0ZXItZ2F0aGVyIGxpc3RzIGFyZSBtYW5hZ2VkLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMuIEkgc3VzcGVjdCB0aGF0IHRoZXJlIGlzIGEgc3VidGxlIGlzc3VlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjM2LjA4ODE2MTAwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2NSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2NTpcXHRcXHRnZnBfdCBnZnBfZmxhZ3MgPSBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOO1xcbjE4NjY6XFx0XFxuMTg2NzpcXHRcXHRzY2hwLVxcdTAwM2VwYWdlcyA9IGt6YWxsb2Moc2dfYnVmZmxlbiwgZ2ZwX2ZsYWdzKTtcXG4xODY4OlxcdFxcdGlmICghc2NocC1cXHUwMDNlcGFnZXMpXFxuMTg2OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xODcwOlxcdFxcdHNjaHAtXFx1MDAzZXNnbGlzdF9sZW4gPSBzZ19idWZmbGVuO1xcbjE4NzE6XFx0XFx0cmV0dXJuIHRhYmxlc2l6ZTtcXHQvKiBudW1iZXIgb2Ygc2NhdF9nYXRoIGVsZW1lbnRzIGFsbG9jYXRlZCAqL1xcbjE4NzI6XFx0fVxcbjE4NzM6XFx0XFxuMTg3NDpcXHRzdGF0aWMgaW50XFxuMTg3NTpcXHRzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcXG4xODc2OlxcdHtcXG4xODc3OlxcdFxcdGludCByZXRfc3ogPSAwLCBpLCBrLCByZW1fc3osIG51bSwgbXhfc2NfZWxlbXM7XFxuMTg3ODpcXHRcXHRpbnQgc2dfdGFibGVzaXplID0gc2ZwLVxcdTAwM2VwYXJlbnRkcC1cXHUwMDNlc2dfdGFibGVzaXplO1xcbjE4Nzk6XFx0XFx0aW50IGJsa19zaXplID0gYnVmZl9zaXplLCBvcmRlcjtcXG4xODgwOlxcdFxcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0FUT01JQyB8IF9fR0ZQX0NPTVAgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9aRVJPO1xcbjE4ODE6XFx0XFxuMTg4MjpcXHRcXHRpZiAoYmxrX3NpemUgXFx1MDAzYyAwKVxcbjE4ODM6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTg4NDpcXHRcXHRpZiAoMCA9PSBibGtfc2l6ZSlcXG4xODg1OlxcdFxcdFxcdCsrYmxrX3NpemU7XFx0LyogZG9uJ3Qga25vdyB3aHkgKi9cXG4xODg2OlxcdFxcdC8qIHJvdW5kIHJlcXVlc3QgdXAgdG8gbmV4dCBoaWdoZXN0IFNHX1NFQ1RPUl9TWiBieXRlIGJvdW5kYXJ5ICovXFxuMTg4NzpcXHRcXHRibGtfc2l6ZSA9IEFMSUdOKGJsa19zaXplLCBTR19TRUNUT1JfU1opO1xcbjE4ODg6XFx0XFx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXFx1MDAzZXBhcmVudGRwLFxcbjE4ODk6XFx0XFx0XFx0XFxcInNnX2J1aWxkX2luZGlyZWN0OiBidWZmX3NpemU9JWQsIGJsa19zaXplPSVkXFxcXG5cXFwiLFxcbjE4OTA6XFx0XFx0XFx0YnVmZl9zaXplLCBibGtfc2l6ZSkpO1xcbjE4OTE6XFx0XFxuMTg5MjpcXHRcXHQvKiBOLkIuIHJldF9zeiBjYXJyaWVkIGludG8gdGhpcyBibG9jayAuLi4gKi9cXG4xODkzOlxcdFxcdG14X3NjX2VsZW1zID0gc2dfYnVpbGRfc2dhdChzY2hwLCBzZnAsIHNnX3RhYmxlc2l6ZSk7XFxuMTg5NDpcXHRcXHRpZiAobXhfc2NfZWxlbXMgXFx1MDAzYyAwKVxcbjE4OTU6XFx0XFx0XFx0cmV0dXJuIG14X3NjX2VsZW1zO1xcdC8qIG1vc3QgbGlrZWx5IC1FTk9NRU0gKi9cXG4xODk2OlxcdFxcbjE4OTc6XFx0XFx0b3JkZXIgPSBnZXRfb3JkZXIoc2NhdHRlcl9lbGVtX3N6KTtcXG4xODk4OlxcdHJldHJ5OlxcbjE4OTk6XFx0XFx0cmV0X3N6ID0gMSBcXHUwMDNjXFx1MDAzYyAoUEFHRV9TSElGVCArIG9yZGVyKTtcXG4xOTAwOlxcdFxcbjE5MDE6XFx0XFx0Zm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgayBcXHUwMDNjIG14X3NjX2VsZW1zO1xcbjE5MDI6XFx0XFx0ICAgICBrKyssIHJlbV9zeiAtPSByZXRfc3opIHtcXG4xOTAzOlxcdFxcbjE5MDQ6XFx0XFx0XFx0bnVtID0gbWluKHJlbV9zeiwgcmV0X3N6KTtcXG4xOTA1OlxcdFxcbjE5MDY6XFx0XFx0XFx0c2NocC1cXHUwMDNlcGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xcbjE5MDc6XFx0XFx0XFx0aWYgKCFzY2hwLVxcdTAwM2VwYWdlc1trXSlcXG4xOTA4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE5MDk6XFx0XFxuMTkxMDpcXHRcXHRcXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuMTkxMTpcXHRcXHRcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcXFxuXFxcIixcXG4xOTEyOlxcdFxcdFxcdFxcdFxcdCBrLCBudW0sIHJldF9zeikpO1xcbjE5MTM6XFx0XFx0fVxcdFxcdC8qIGVuZCBvZiBmb3IgbG9vcCAqL1xcbjE5MTQ6XFx0XFxuMTkxNTpcXHRcXHRzY2hwLVxcdTAwM2VwYWdlX29yZGVyID0gb3JkZXI7XFxuMTkxNjpcXHRcXHRzY2hwLVxcdTAwM2VrX3VzZV9zZyA9IGs7XFxuMTkxNzpcXHRcXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuMTkxODpcXHRcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrX3VzZV9zZz0lZCwgcmVtX3N6PSVkXFxcXG5cXFwiLFxcbjE5MTk6XFx0XFx0XFx0XFx0IGssIHJlbV9zeikpO1xcbjE5MjA6XFx0XFxuMTkyMTpcXHRcXHRzY2hwLVxcdTAwM2VidWZmbGVuID0gYmxrX3NpemU7XFxuMTkyMjpcXHRcXHRpZiAocmVtX3N6IFxcdTAwM2UgMClcXHQvKiBtdXN0IGhhdmUgZmFpbGVkICovXFxuMTkyMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xOTI0OlxcdFxcdHJldHVybiAwO1xcbjE5MjU6XFx0b3V0OlxcbjE5MjY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGs7IGkrKylcXG4xOTI3OlxcdFxcdFxcdF9fZnJlZV9wYWdlcyhzY2hwLVxcdTAwM2VwYWdlc1tpXSwgb3JkZXIpO1xcbjE5Mjg6XFx0XFxuMTkyOTpcXHRcXHRpZiAoLS1vcmRlciBcXHUwMDNlPSAwKVxcbjE5MzA6XFx0XFx0XFx0Z290byByZXRyeTtcXG4xOTMxOlxcdFxcbjE5MzI6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTkzMzpcXHR9XFxuMTkzNDpcXHRcXG4xOTM1OlxcdHN0YXRpYyB2b2lkXFxuMTkzNjpcXHRzZ19yZW1vdmVfc2NhdChTZ19mZCAqIHNmcCwgU2dfc2NhdHRlcl9ob2xkICogc2NocClcXG4xOTM3OlxcdHtcXG4xOTM4OlxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xOTM5OlxcdFxcdFxcdFxcdCBcXFwic2dfcmVtb3ZlX3NjYXQ6IGtfdXNlX3NnPSVkXFxcXG5cXFwiLCBzY2hwLVxcdTAwM2VrX3VzZV9zZykpO1xcbjE5NDA6XFx0XFx0aWYgKHNjaHAtXFx1MDAzZXBhZ2VzIFxcdTAwMjZcXHUwMDI2IHNjaHAtXFx1MDAzZXNnbGlzdF9sZW4gXFx1MDAzZSAwKSB7XFxuMTk0MTpcXHRcXHRcXHRpZiAoIXNjaHAtXFx1MDAzZWRpb19pbl91c2UpIHtcXG4xOTQyOlxcdFxcdFxcdFxcdGludCBrO1xcbjE5NDM6XFx0XFxuMTk0NDpcXHRcXHRcXHRcXHRmb3IgKGsgPSAwOyBrIFxcdTAwM2Mgc2NocC1cXHUwMDNla191c2Vfc2cgXFx1MDAyNlxcdTAwMjYgc2NocC1cXHUwMDNlcGFnZXNba107IGsrKykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNDozNi4wODgzMDY2OTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ4NzE5MjI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTQ1NJIEdlbmVyaWMgRHJpdmVyIGluIGEgVmlydHVhbGl6ZWQgQ29udGV4dCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSB0aGlua2luZyBhYm91dCB0aGUgYGRyaXZlcnMvc2NzaS9zZy5jYCBmaWxlLCB0aGUgY29yZSBvZiB0aGUgU0NTSSBnZW5lcmljIGRyaXZlciwgZXhwb3NlZCB0aHJvdWdoIGAvZGV2L3NnKmAgZGV2aWNlcy4gTXkga2V5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIHJlbGV2YW50IHdpdGhpbiBRRU1VIG9yIG90aGVyIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQW5kIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBTQ1NJIGdlbmVyaWMgZGV2aWNlcywgbGlrZSBgL2Rldi9zZzBgLCBgL2Rldi9zZzFgLCBvciBldmVuIHRoZSBkZWJ1ZyBkZXZpY2VzIG9yIGVtdWxhdGVkIFNDU0kgZHJpdmVzLCBhcmUgc3RhbmRhcmQgZmFyZSBpbiBRRU1VLiBUaGF0J3MgZ29vZCBuZXdzOyBpdCBtZWFucyBJIGNhbiBwb3RlbnRpYWxseSB1c2UgdGhpcyBmb3IgdnVsbmVyYWJpbGl0eSByZXNlYXJjaC4gQWxzbywgdGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgYWN0aXZlbHkgZnV6emVzIGAvZGV2L3NnKmAgYW5kIGl0cyBhc3NvY2lhdGVkIGlvY3RscyBpcyBhIG1ham9yIHBvaW50IGluIGl0cyBmYXZvdXIuXG5cbk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjb2RlIGl0c2VsZi4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgdG8gZmluZCBvdXQgY2FsbGVycyBvZiBgc2dfYnVpbGRfaW5kaXJlY3RgLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gb24gaG93IHN5emthbGxlciB1c2VzIHRoZSBjYWxscy4gQWx0ZXJuYXRpdmVseSwgSSB3aWxsIGxvb2sgYXQgd2hlcmUgYHNnX2J1aWxkX2luZGlyZWN0YCBpcyBjYWxsZWQgZGlyZWN0bHkgaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCB0byBzZWUgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIuIEJvdGggcGF0aHMgd2lsbCBoZWxwIG1lIGRldGVybWluZSB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgbG9naWMgbGllcyBhbmQgd2hlcmUgdG8gZm9jdXMgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE3MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjM5LjU3NTUwMjA0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwMTE2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2dfYnVpbGRfaW5kaXJlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3NnLmM9MTgyPXN0YXRpYyBpbnQgc2dfZmluaXNoX3JlbV9yZXEoU2dfcmVxdWVzdCAqIHNycCk7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTgzOnN0YXRpYyBpbnQgc2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE4NC1zdGF0aWMgc3NpemVfdCBzZ19uZXdfcmVhZChTZ19mZCAqIHNmcCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LFxcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTczMj1zZ19zdGFydF9yZXEoU2dfcmVxdWVzdCAqc3JwLCB1bnNpZ25lZCBjaGFyICpjbWQpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xODAzLVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTgwNDpcXHRcXHRcXHRyZXMgPSBzZ19idWlsZF9pbmRpcmVjdChyZXFfc2NocCwgc2ZwLCBkeGZlcl9sZW4pO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE4MDUtXFx0XFx0XFx0aWYgKHJlcykge1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTg3ND1zdGF0aWMgaW50XFxuZHJpdmVycy9zY3NpL3NnLmM6MTg3NTpzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcXG5kcml2ZXJzL3Njc2kvc2cuYy0xODc2LXtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE4ODgtXFx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXFx1MDAzZXBhcmVudGRwLFxcbmRyaXZlcnMvc2NzaS9zZy5jOjE4ODk6XFx0XFx0XFxcInNnX2J1aWxkX2luZGlyZWN0OiBidWZmX3NpemU9JWQsIGJsa19zaXplPSVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvc2NzaS9zZy5jLTE4OTAtXFx0XFx0YnVmZl9zaXplLCBibGtfc2l6ZSkpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTkxMC1cXHRcXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuZHJpdmVycy9zY3NpL3NnLmM6MTkxMTpcXHRcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcXFxuXFxcIixcXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTEyLVxcdFxcdFxcdFxcdCBrLCBudW0sIHJldF9zeikpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTkxNy1cXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuZHJpdmVycy9zY3NpL3NnLmM6MTkxODpcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrX3VzZV9zZz0lZCwgcmVtX3N6PSVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MTktXFx0XFx0XFx0IGssIHJlbV9zeikpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTk5Mj1zZ19idWlsZF9yZXNlcnZlKFNnX2ZkICogc2ZwLCBpbnQgcmVxX3NpemUpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0yMDAwLVxcdFxcdFxcdHJlcV9zaXplID0gUEFHRV9TSVpFO1xcbmRyaXZlcnMvc2NzaS9zZy5jOjIwMDE6XFx0XFx0aWYgKDAgPT0gc2dfYnVpbGRfaW5kaXJlY3Qoc2NocCwgc2ZwLCByZXFfc2l6ZSkpXFxuZHJpdmVycy9zY3NpL3NnLmMtMjAwMi1cXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjM5LjYyOTUxOTU3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODc0Nzk4NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nIHRoaXMgU0NTSSBHZW5lcmljIERyaXZlciBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZSBgc2NhdHRlcl9lbGVtX3N6YCBwYXJhbWV0ZXIgaXMgaGFuZGxlZCBpbiB0aGUgU0NTSSBnZW5lcmljIGRyaXZlciAoYHNnLmNgKS4gUHJldmlvdXNseSwgaXQgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIG1vZHVsZSBwYXJhbWV0ZXIuIE5vdywgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgY3VzdG9tIHNldHRlciBjYWxsYmFjaywgYHNjYXR0ZXJfZWxlbV9zel9zZXRgLCB0byB2YWxpZGF0ZSB0aGUgc2l6ZS4gVGhlIG9sZCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIHZhcmlhYmxlIGlzIGdvbmUsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5UaGUgY3JpdGljYWwgcGllY2Ugc2VlbXMgdG8gYmUgaW4gYHNnX2J1aWxkX2luZGlyZWN0YC4gVGhpcyBpcyB3aGVyZSB0aGUgbG9naWMgdXNlZCB0byBkeW5hbWljYWxseSBhZGp1c3QgYHNjYXR0ZXJfZWxlbV9zemAgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBtb3JlIGRpcmVjdCBhcHByb2FjaCB1c2luZyBgZ2V0X29yZGVyKClgIGFuZCBgbWluKClgLiBFc3NlbnRpYWxseSwgdGhleSd2ZSByZW1vdmVkIHRoZSBkeW5hbWljIG11dGF0aW9uIG9mIGBzY2F0dGVyX2VsZW1fc3pgLlxuXG5Ob3csIGlzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IEFic29sdXRlbHkuIGBzZ19idWlsZF9pbmRpcmVjdGAgaXMgaW52b2tlZCB3aGVuIGJ1aWxkaW5nIGluZGlyZWN0IGJ1ZmZlcnMsIGFuZCB0aGF0IGhhcHBlbnMgd2hlbmV2ZXIgYSB1c2VyIGludGVyYWN0cyB3aXRoIGEgU0NTSSBnZW5lcmljIGRldmljZSwgbGlrZSBgL2Rldi9zZypgLiBDb21tYW5kcyBsaWtlIGBzZ19zdGFydF9yZXFgIG9yIGBzZ19idWlsZF9yZXNlcnZlYCAoY2FsbGVkIG9uIG9wZW4vaW9jdGwpIHRyaWdnZXIgdGhpcy4gU0NTSSBnZW5lcmljIGlzIGEgc3RhbmRhcmQgZHJpdmVyLCBhbmQgaXQncyBlYXNpbHkgYWNjZXNzaWJsZSwgZXNwZWNpYWxseSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHdpdGggZW11bGF0ZWQgU0NTSSBkaXNrcyBvciBgc2NzaV9kZWJ1Z2AuICBQbHVzLCB3cml0aW5nIHRvIGAvc3lzL21vZHVsZS9zZy9wYXJhbWV0ZXJzL3NjYXR0ZXJfZWxlbV9zemAgZGlyZWN0bHkgY2FsbHMgdGhlIG5ldyBgc2NhdHRlcl9lbGVtX3N6X3NldGAgc2V0dGVyLlxuXG5HaXZlbiB0aGUgY3JpdGVyaWE6IHdlJ3JlIGxvb2tpbmcgYXQgYSByZWZhY3RvcmluZyBhbmQgY29kZSBjbGVhbnVwIG9mIHJlYWNoYWJsZSBjb2RlLCBzcGVjaWZpY2FsbHksIGEgZHJpdmVyIGFjY2Vzc2libGUgdmlhIGFuIGVtdWxhdGVkIGJ1cy4gIFRoaXMgY2xlYXJseSBzYXRpc2ZpZXMgdGhlIFwiV29ydGhGdXp6aW5nPXRydWVcIiBjb25kaXRpb24uXG5cbkxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuICBgQ09ORklHX0NIUl9ERVZfU0dgIGRlcGVuZHMgb24gYENPTkZJR19TQ1NJYC4gIEEgcXVpY2sgY2hlY2sgb2YgYGRyaXZlcnMvc2NzaS9LY29uZmlnYCBjb25maXJtcyB0aGF0LiAgVGhvc2UgYXJlIHRoZSByZXF1aXJlZCBjb25maWdzLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIOKAkyB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiAgRnJvbSB0aGUgY29kZSwgSSBzZWU6XG5cbiogICBgc2dfYnVpbGRfaW5kaXJlY3RgXG4qICAgYHNjYXR0ZXJfZWxlbV9zel9zZXRgXG4qICAgYGluaXRfc2dgICh0aG91Z2ggdGhpcyBtaWdodCBiZSBqdXN0IGFuIGluaXQgZnVuY3Rpb24pXG4qICAgRnVuY3Rpb25zIHRoYXQgaW5kaXJlY3RseSBjYWxsIHNnX2J1aWxkX2luZGlyZWN0OiBgc2dfYnVpbGRfcmVzZXJ2ZWAgLyBgc2dfc3RhcnRfcmVxYCAvIGBzZ193cml0ZWAgLyBgc2dfaW9jdGxgLlxuXG5Ob3csIGxldCdzIGZvY3VzIG9uOlxuKiAgIGBzZ19idWlsZF9pbmRpcmVjdGBcbiogICBgc2NhdHRlcl9lbGVtX3N6X3NldGBcblxuSSdsbCB2ZXJpZnkgdGhhdCBgc2NhdHRlcl9lbGVtX3N6X3NldGAgaXMgYWN0dWFsbHkgYSBzdGF0aWMgZnVuY3Rpb24gYW5kIGNoZWNrIGlmIGl0IGhhcyBhIHZtbGludXggc3ltYm9sLiAgSXQgaXMgYSBzdGF0aWMgZnVuY3Rpb24gcmVmZXJlbmNlZCBieSBgc2NhdHRlcl9lbGVtX3N6X29wc2AuIGBzZ19idWlsZF9pbmRpcmVjdGAgaXMgYWxzbyBhIHN0YXRpYyBmdW5jdGlvbi5cblxuVG8gYmUgdGhvcm91Z2gsIEknbSBkb3VibGUtY2hlY2tpbmcgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGZpbGVzIG9yIGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gQSByZXZpZXcgb2YgdGhlIGRpZmYgY29uZmlybXMgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGBkcml2ZXJzL3Njc2kvc2cuY2AsIHNwZWNpZmljYWxseTpcbiogICBgc2NhdHRlcl9lbGVtX3N6X3NldGBcbiogICBgaW5pdF9zZ2BcbiogICBgc2dfYnVpbGRfaW5kaXJlY3RgXG5cbkZpbmFsbHksIGxldCdzIHZlcmlmeSBpZiBgaW5pdF9zZ2AgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHdoaWNoIG1pZ2h0IGJlIGhlbHBmdWwgdG8ga25vdy5cbkNoZWNrZWQgbGluZSAxNjgwIG9mIGBkcml2ZXJzL3Njc2kvc2cuY2AgYW5kIGNhbiB2ZXJpZnkgaWYgaXQgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzOTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjQ5LjUwNDMyMTgzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQxMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY4MDpcXHRNT0RVTEVfVkVSU0lPTihTR19WRVJTSU9OX1NUUik7XFxuMTY4MTpcXHRNT0RVTEVfQUxJQVNfQ0hBUkRFVl9NQUpPUihTQ1NJX0dFTkVSSUNfTUFKT1IpO1xcbjE2ODI6XFx0XFxuMTY4MzpcXHRNT0RVTEVfUEFSTV9ERVNDKHNjYXR0ZXJfZWxlbV9zeiwgXFxcInNjYXR0ZXIgZ2F0aGVyIGVsZW1lbnQgXFxcIlxcbjE2ODQ6XFx0ICAgICAgICAgICAgICAgIFxcXCJzaXplIChkZWZhdWx0OiBtYXgoU0dfU0NBVFRFUl9TWiwgUEFHRV9TSVpFKSlcXFwiKTtcXG4xNjg1OlxcdE1PRFVMRV9QQVJNX0RFU0MoZGVmX3Jlc2VydmVkX3NpemUsIFxcXCJzaXplIG9mIGJ1ZmZlciByZXNlcnZlZCBmb3IgZWFjaCBmZFxcXCIpO1xcbjE2ODY6XFx0TU9EVUxFX1BBUk1fREVTQyhhbGxvd19kaW8sIFxcXCJhbGxvdyBkaXJlY3QgSS9PIChkZWZhdWx0OiAwIChkaXNhbGxvdykpXFxcIik7XFxuMTY4NzpcXHRcXG4xNjg4OlxcdHN0YXRpYyBpbnQgX19pbml0XFxuMTY4OTpcXHRpbml0X3NnKHZvaWQpXFxuMTY5MDpcXHR7XFxuMTY5MTpcXHRcXHRpbnQgcmM7XFxuMTY5MjpcXHRcXG4xNjkzOlxcdFxcdGlmIChzY2F0dGVyX2VsZW1fc3ogXFx1MDAzYyBQQUdFX1NJWkUpXFxuMTY5NDpcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XFxuMTY5NTpcXHRcXG4xNjk2OlxcdFxcdHJjID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihTQ1NJX0dFTkVSSUNfTUFKT1IsIDApLCBcXG4xNjk3OlxcdFxcdFxcdFxcdFxcdCAgICBTR19NQVhfREVWUywgXFxcInNnXFxcIik7XFxuMTY5ODpcXHRcXHRpZiAocmMpXFxuMTY5OTpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjQ5LjUwNDQ2NzMwOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTIwNzU3NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFNDU0kgU2NhdHRlci1HYXRoZXIgT3BlcmF0aW9ucyoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gV2UncmUgbG9va2luZyBhdCBmdXp6aW5nIFNDU0kgc2NhdHRlci1nYXRoZXIgZnVuY3Rpb25hbGl0eSwgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSBhcHByb2FjaC4gRmlyc3QsIEknbSBub3RpbmcgdGhhdCBgaW5pdF9zZ2AgaXMganVzdCBhIHByZWxpbWluYXJ5IGluaXRpYWxpemF0aW9uIHN0ZXA7IGl0J3MgYF9faW5pdGAsIHNvIGl0J3MgaXJyZWxldmFudCBhZnRlciBzdGFydHVwLiBUaGUgY29yZSBydW50aW1lIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcml0aWNhbCBoZXJlIGFyZSBgc2dfYnVpbGRfaW5kaXJlY3RgIGFuZCBgc2NhdHRlcl9lbGVtX3N6X3NldGAuIEkgc2hvdWxkIGFsc28gZXhhbWluZSB0aGUgY2FsbCBjaGFpbnMsIHNwZWNpZmljYWxseSwgaG93IGBzZ19idWlsZF9pbmRpcmVjdGAgaXMgY2FsbGVkOiBgc2dfYnVpbGRfcmVzZXJ2ZWAgYW5kIGBzZ19zdGFydF9yZXFgLiBUaGVzZSB3aWxsIGJlIGtleSBlbnRyeSBwb2ludHMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy5cblxuTXkgc3RyYXRlZ3kgbmVlZHMgdG8gZm9jdXMgaW4gb24gc3BlY2lmaWMgZnVuY3Rpb24gZW50cnkgcG9pbnRzIHRvIGJlIGVmZmVjdGl2ZTsgaW4gdGhpcyBjYXNlLCBgc2dfYnVpbGRfaW5kaXJlY3RgLCBgc2NhdHRlcl9lbGVtX3N6X3NldGAsIGFuZCBgc2dfYnVpbGRfcmVzZXJ2ZWAgYXJlIHRoZSBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldC5cblxuVG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgc2V0IHVwIHByb3Blcmx5LCBJJ20gY2hlY2tpbmcgdGhlIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkLiBJJ2xsIG5lZWQgYENIUl9ERVZfU0dgIGFuZCBgU0NTSWAgZW5hYmxlZCBmb3IgdGhpcyB0byBiZSBwcm9kdWN0aXZlLlxuXG5Ob3csIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgdmVyZGljdCBpcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgYW5kIHRoZSByZWFzb25pbmcgaXMgY29uY2lzZS4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQ7IHRoZXNlIGFyZSBub24tdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zLiBGaW5hbGx5LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIHdoaWNoIGlzIGBbXCJTQ1NJXCIsIFwiQ0hSX0RFVl9TR1wiXWAsIGxvb2tzIHJpZ2h0LlxuXG5UaGF0IGFsbCBzZWVtcyBzb3VuZC4gTm93IEkgbmVlZCB0byBmb3JtdWxhdGUgdGhhdCBmaW5hbCBgc2V0LXJlc3VsdHNgIGNhbGwsIGFuZCBJIHNob3VsZCBiZSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU5MSwiT3V0cHV0VG9rZW5zIjoxMzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNDo1NS42MjUyMjc5MThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjM1NTY4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NTSVwiLFxuICAgIFwiQ0hSX0RFVl9TR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNnX2J1aWxkX2luZGlyZWN0XCIsXG4gICAgXCJzY2F0dGVyX2VsZW1fc3pfc2V0XCIsXG4gICAgXCJzZ19idWlsZF9yZXNlcnZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIgKHNnKSBzY2F0dGVyLWdhdGhlciBidWZmZXIgYWxsb2NhdGlvbiBhbmQgdmFsaWRhdGlvbiBsb2dpYy4gSXQgcmVwbGFjZXMgZHluYW1pYyBtb2R1bGUgcGFyYW1ldGVyIGNoZWNraW5nIGluIHNnX2J1aWxkX2luZGlyZWN0IHdpdGggYSBkZWRpY2F0ZWQgbW9kdWxlX3BhcmFtX2NiIHNldHRlciAoc2NhdHRlcl9lbGVtX3N6X3NldCkgYW5kIHNpbXBsaWZpZXMgdGhlIGFsbG9jYXRpb24gbG9vcCBjYWxjdWxhdGlvbi4gU0NTSSBnZW5lcmljIGRldmljZXMgYXJlIGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NTSVwiLFxuICAgIFwiQ0hSX0RFVl9TR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNnX2J1aWxkX2luZGlyZWN0XCIsXG4gICAgXCJzY2F0dGVyX2VsZW1fc3pfc2V0XCIsXG4gICAgXCJzZ19idWlsZF9yZXNlcnZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIgKHNnKSBzY2F0dGVyLWdhdGhlciBidWZmZXIgYWxsb2NhdGlvbiBhbmQgdmFsaWRhdGlvbiBsb2dpYy4gSXQgcmVwbGFjZXMgZHluYW1pYyBtb2R1bGUgcGFyYW1ldGVyIGNoZWNraW5nIGluIHNnX2J1aWxkX2luZGlyZWN0IHdpdGggYSBkZWRpY2F0ZWQgbW9kdWxlX3BhcmFtX2NiIHNldHRlciAoc2NhdHRlcl9lbGVtX3N6X3NldCkgYW5kIHNpbXBsaWZpZXMgdGhlIGFsbG9jYXRpb24gbG9vcCBjYWxjdWxhdGlvbi4gU0NTSSBnZW5lcmljIGRldmljZXMgYXJlIGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjU1LjcxMTU5MjQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIzMjM1NDAzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjU1LjcxMjE4MTg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQyMzE3NjAyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbW9kdWxlIHBhcmFtZXRlciB2YWxpZGF0aW9uIGZvciBgc2NhdHRlcl9lbGVtX3N6YCBpbiBgZHJpdmVycy9zY3NpL3NnLmNgIGJ5IGFkZGluZyBhIGN1c3RvbSBzZXR0ZXIgY2FsbGJhY2sgYHNjYXR0ZXJfZWxlbV9zel9zZXQoKWAgdG8gdmFsaWRhdGUgYm91bmRzLCBhbmQgY2xlYW5zIHVwIHRoZSBvcmRlciBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgc2dfYnVpbGRfaW5kaXJlY3QoKWAgd2hpbGUgcmVtb3ZpbmcgdGhlIHJlZHVuZGFudCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIHZhcmlhYmxlLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgZXhwb3NlZDpcXG4xLiBNZW1vcnkgYWxsb2NhdGlvbnMgZm9yIHNjYXR0ZXItZ2F0aGVyIHBhZ2VzIHVzZSBgX19HRlBfWkVST2AgYW5kIHRhYmxlcyB1c2UgYGt6YWxsb2NgLlxcbjIuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiBvcmRlciBjYWxjdWxhdGlvbiBhbmQgbG9vcCBpbmRleGluZyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgc3RhY2sgcHJpbWl0aXZlcy5cXG4zLiBObyBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUuXFxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIGFsbG9jYXRpb24gYm91bmRzLCBidWZmZXIgc2l6ZXMsIG9yIG9yZGVyIGNhbGN1bGF0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgc2FmZXR5IGNhdWdodCBieSBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgZGV0ZWN0ZWQgYnkgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzc2ZTM1MGI1MDc1ZmNjMTA5MDY0ZTBjMDk5YzE0N2U3MGNiODAzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjA6MDQ6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jXG5pbmRleCA1NDA4ZjAwMmU2YzAxLi40YzgyZmMwMGQwNWRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zY3NpL3NnLmNcbisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jXG5AQCAtOTIsNyArOTIsNiBAQCBzdGF0aWMgaW50IGRlZl9yZXNlcnZlZF9zaXplID0gU0dfREVGX1JFU0VSVkVEX1NJWkU7XG4gc3RhdGljIGludCBzZ19hbGxvd19kaW8gPSBTR19BTExPV19ESU9fREVGO1xuIFxuIHN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6ID0gU0dfU0NBVFRFUl9TWjtcbi1zdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gU0dfU0NBVFRFUl9TWjtcbiBcbiAjZGVmaW5lIFNHX1NFQ1RPUl9TWiA1MTJcbiBcbkBAIC0xNjIxLDkgKzE2MjAsMzMgQEAgc2dfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpjbF9kZXYpXG4gXHRrcmVmX3B1dChcdTAwMjZzZHAtXHUwMDNlZF9yZWYsIHNnX2RldmljZV9kZXN0cm95KTtcbiB9XG4gXG4tbW9kdWxlX3BhcmFtX25hbWVkKHNjYXR0ZXJfZWxlbV9zeiwgc2NhdHRlcl9lbGVtX3N6LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTtcbiBtb2R1bGVfcGFyYW1fbmFtZWQoYWxsb3dfZGlvLCBzZ19hbGxvd19kaW8sIGludCwgU19JUlVHTyB8IFNfSVdVU1IpO1xuIFxuK3N0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6X3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuK3tcbitcdGludCBzaXplLCByZXQ7XG4rXG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXQgPSBrc3RydG9pbnQodmFsLCAwLCBcdTAwMjZzaXplKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoc2l6ZSBcdTAwM2MgUEFHRV9TSVpFIHx8IHNpemUgXHUwMDNlIChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIE1BWF9QQUdFX09SREVSKSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRzY2F0dGVyX2VsZW1fc3ogPSBzaXplO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBzY2F0dGVyX2VsZW1fc3pfb3BzID0ge1xuK1x0LnNldFx0PSBzY2F0dGVyX2VsZW1fc3pfc2V0LFxuK1x0LmdldFx0PSBwYXJhbV9nZXRfaW50LFxuK307XG4rXG4rbW9kdWxlX3BhcmFtX2NiKHNjYXR0ZXJfZWxlbV9zeiwgXHUwMDI2c2NhdHRlcl9lbGVtX3N6X29wcywgXHUwMDI2c2NhdHRlcl9lbGVtX3N6LCAwNjQ0KTtcbitcbiBzdGF0aWMgaW50IGRlZl9yZXNlcnZlZF9zaXplX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIHtcbiBcdGludCBzaXplLCByZXQ7XG5AQCAtMTY2NywxMCArMTY5MCw4IEBAIGluaXRfc2codm9pZClcbiB7XG4gXHRpbnQgcmM7XG4gXG4tXHRpZiAoc2NhdHRlcl9lbGVtX3N6IFx1MDAzYyBQQUdFX1NJWkUpIHtcbitcdGlmIChzY2F0dGVyX2VsZW1fc3ogXHUwMDNjIFBBR0VfU0laRSlcbiBcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuLVx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHNjYXR0ZXJfZWxlbV9zejtcbi1cdH1cbiBcbiBcdHJjID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihTQ1NJX0dFTkVSSUNfTUFKT1IsIDApLCBcbiBcdFx0XHRcdCAgICBTR19NQVhfREVWUywgXCJzZ1wiKTtcbkBAIC0xODczLDM2ICsxODk0LDE5IEBAIHNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuIFx0aWYgKG14X3NjX2VsZW1zIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gbXhfc2NfZWxlbXM7XHQvKiBtb3N0IGxpa2VseSAtRU5PTUVNICovXG4gXG4tXHRudW0gPSBzY2F0dGVyX2VsZW1fc3o7XG4tXHRpZiAodW5saWtlbHkobnVtICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuLVx0XHRpZiAobnVtIFx1MDAzYyBQQUdFX1NJWkUpIHtcbi1cdFx0XHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XG4tXHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7XG4tXHRcdH0gZWxzZVxuLVx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtO1xuLVx0fVxuLVxuLVx0b3JkZXIgPSBnZXRfb3JkZXIobnVtKTtcbitcdG9yZGVyID0gZ2V0X29yZGVyKHNjYXR0ZXJfZWxlbV9zeik7XG4gcmV0cnk6XG4gXHRyZXRfc3ogPSAxIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCArIG9yZGVyKTtcbiBcbiBcdGZvciAoayA9IDAsIHJlbV9zeiA9IGJsa19zaXplOyByZW1fc3ogXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGsgXHUwMDNjIG14X3NjX2VsZW1zO1xuIFx0ICAgICBrKyssIHJlbV9zeiAtPSByZXRfc3opIHtcbiBcbi1cdFx0bnVtID0gKHJlbV9zeiBcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpID9cbi1cdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA6IHJlbV9zejtcbitcdFx0bnVtID0gbWluKHJlbV9zeiwgcmV0X3N6KTtcbiBcbiBcdFx0c2NocC1cdTAwM2VwYWdlc1trXSA9IGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcik7XG4gXHRcdGlmICghc2NocC1cdTAwM2VwYWdlc1trXSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbi1cdFx0aWYgKG51bSA9PSBzY2F0dGVyX2VsZW1fc3pfcHJldikge1xuLVx0XHRcdGlmICh1bmxpa2VseShyZXRfc3ogXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuLVx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gcmV0X3N6O1xuLVx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSByZXRfc3o7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXG4gXHRcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuIFx0XHRcdFx0IFwic2dfYnVpbGRfaW5kaXJlY3Q6IGs9JWQsIG51bT0lZCwgcmV0X3N6PSVkXFxuXCIsXG4gXHRcdFx0XHQgaywgbnVtLCByZXRfc3opKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIwOjA0OjU1LjcxMjE4MjY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwMjQxNTUxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY2F0dGVyL0dhdGhlciBQYXRjaCBmb3IgUG90ZW50aWFsIEtNU0FOIFJpc2tzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBLTVNBTiB3b3VsZCBmbGFnLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQuIFRoZSBwYXRjaCBtb2RpZmllcyBgZHJpdmVycy9zY3NpL3NnLmNgLCBzcGVjaWZpY2FsbHkuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlOlxuXG4qICAgSXQgc2VlbXMgbGlrZSB0aGV5J3JlIHJlbW92aW5nIGEgdmFyaWFibGUsIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAsIGFuZCByZWZhY3RvcmluZyB0aGUgaGFuZGxpbmcgb2YgYHNjYXR0ZXJfZWxlbV9zemAgd2l0aCBhIGNhbGxiYWNrLiBUaGlzIHN1Z2dlc3RzIHRoZXkgYXJlIG1vdmluZyBhd2F5IGZyb20gaGF2aW5nIHR3byBkaWZmZXJlbnQgdmFsdWVzIGFuZCB0aGF0IGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgbWF5IGJlIGNvbXBsZXRlbHkgb2Jzb2xldGUgbm93LlxuKiAgIFRoZSBgbW9kdWxlX3BhcmFtX25hbWVkYCBpcyByZXBsYWNlZCBieSBgbW9kdWxlX3BhcmFtX2NiYCB3aXRoIGEgc2V0dGVyIGZ1bmN0aW9uLCBgc2NhdHRlcl9lbGVtX3N6X3NldGAuIFRoZSBzZXR0ZXIgdmFsaWRhdGVzIHRoZSBzaXplLCB3aGljaCBpcyBnb29kLiBUaGlzIG1ha2VzIGl0IGEgYml0IG1vcmUgcm9idXN0IHJlZ2FyZGluZyB3aGF0IHZhbHVlIHRoZSB1c2VyIHNldHMuXG4qICAgVGhlIHJlbW92YWwgb2YgdGhlIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uIGluIGBpbml0X3NnKClgIGFuZCB0aGUgYXNzb2NpYXRlZCBydW50aW1lIGNoZWNrcyBpbiBgc2dfYnVpbGRfaW5kaXJlY3QoKWAgYXJlIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkgYXJlIG1vdmluZyB0byBhbiBgb3JkZXIgPSBnZXRfb3JkZXIoc2NhdHRlcl9lbGVtX3N6KTtgIGFwcHJvYWNoIGFuZCB1c2luZyBgbWluYCB0byBhdm9pZCB0aGUgcHJvYmxlbXMgYXNzb2NpYXRlZCB3aXRoIG9sZGVyIGNvZGUuIFRoZSBmYWN0IHRoYXQgdGhlIGNoZWNrIGFuZCB0aGUgdXBkYXRlIGxvZ2ljIGZvciBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIHdlcmUgcmVtb3ZlZCBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSBtYXkgbm90IGhhdmUgYmVlbiBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQsIGNyZWF0aW5nIHRoZSB2ZXJ5IEtNU0FOIHByb2JsZW1zIHdlJ3JlIGxvb2tpbmcgZm9yLlxuXG5Ob3csIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgYHNnX2J1aWxkX2luZGlyZWN0YCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIGFjdHVhbGx5ICpkbyouIEkgd2lsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgY29kZSBpbiBgZHJpdmVycy9zY3NpL3NnLmNgIGFuZCBzZWUgaWYgdGhlIHJlbW92YWwgb2YgdGhlIG9sZCBsb2dpYyBpbnRyb2R1Y2VzIGEgd2luZG93IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkLiBJIG5lZWQgdG8gdHJhY2UgaG93IGBzY2F0dGVyX2VsZW1fc3pgIGFuZCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIChvciB0aGUgbGFjayB0aGVyZW9mKSBhZmZlY3QgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB1c2FnZSB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBJJ2xsIGZvY3VzIG9uIGhvdyBgbnVtYCBhbmQgYHJldF9zemAgYXJlIGRldGVybWluZWQsIGFuZCBpZiB0aGV5J3JlIHVzZWQgdG8gaW5kZXggZGF0YSB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuIE15IGV4cGVydCBpbnR1aXRpb24gc3VnZ2VzdHMgdGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcmlzayBsaWVzLCBlc3BlY2lhbGx5IGlmIHRoZSBvbGQgdmFyaWFibGUsIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgd2FzIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlcmUgd2FzIG5vIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNTowMi43MzYzNDEwNjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9zZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NjAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NjA6XFx0XFxuMTg2MTpcXHRzdGF0aWMgaW50XFxuMTg2MjpcXHRzZ19idWlsZF9zZ2F0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIGNvbnN0IFNnX2ZkICogc2ZwLCBpbnQgdGFibGVzaXplKVxcbjE4NjM6XFx0e1xcbjE4NjQ6XFx0XFx0aW50IHNnX2J1ZmZsZW4gPSB0YWJsZXNpemUgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7XFxuMTg2NTpcXHRcXHRnZnBfdCBnZnBfZmxhZ3MgPSBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOO1xcbjE4NjY6XFx0XFxuMTg2NzpcXHRcXHRzY2hwLVxcdTAwM2VwYWdlcyA9IGt6YWxsb2Moc2dfYnVmZmxlbiwgZ2ZwX2ZsYWdzKTtcXG4xODY4OlxcdFxcdGlmICghc2NocC1cXHUwMDNlcGFnZXMpXFxuMTg2OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xODcwOlxcdFxcdHNjaHAtXFx1MDAzZXNnbGlzdF9sZW4gPSBzZ19idWZmbGVuO1xcbjE4NzE6XFx0XFx0cmV0dXJuIHRhYmxlc2l6ZTtcXHQvKiBudW1iZXIgb2Ygc2NhdF9nYXRoIGVsZW1lbnRzIGFsbG9jYXRlZCAqL1xcbjE4NzI6XFx0fVxcbjE4NzM6XFx0XFxuMTg3NDpcXHRzdGF0aWMgaW50XFxuMTg3NTpcXHRzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcXG4xODc2OlxcdHtcXG4xODc3OlxcdFxcdGludCByZXRfc3ogPSAwLCBpLCBrLCByZW1fc3osIG51bSwgbXhfc2NfZWxlbXM7XFxuMTg3ODpcXHRcXHRpbnQgc2dfdGFibGVzaXplID0gc2ZwLVxcdTAwM2VwYXJlbnRkcC1cXHUwMDNlc2dfdGFibGVzaXplO1xcbjE4Nzk6XFx0XFx0aW50IGJsa19zaXplID0gYnVmZl9zaXplLCBvcmRlcjtcXG4xODgwOlxcdFxcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0FUT01JQyB8IF9fR0ZQX0NPTVAgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9aRVJPO1xcbjE4ODE6XFx0XFxuMTg4MjpcXHRcXHRpZiAoYmxrX3NpemUgXFx1MDAzYyAwKVxcbjE4ODM6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTg4NDpcXHRcXHRpZiAoMCA9PSBibGtfc2l6ZSlcXG4xODg1OlxcdFxcdFxcdCsrYmxrX3NpemU7XFx0LyogZG9uJ3Qga25vdyB3aHkgKi9cXG4xODg2OlxcdFxcdC8qIHJvdW5kIHJlcXVlc3QgdXAgdG8gbmV4dCBoaWdoZXN0IFNHX1NFQ1RPUl9TWiBieXRlIGJvdW5kYXJ5ICovXFxuMTg4NzpcXHRcXHRibGtfc2l6ZSA9IEFMSUdOKGJsa19zaXplLCBTR19TRUNUT1JfU1opO1xcbjE4ODg6XFx0XFx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXFx1MDAzZXBhcmVudGRwLFxcbjE4ODk6XFx0XFx0XFx0XFxcInNnX2J1aWxkX2luZGlyZWN0OiBidWZmX3NpemU9JWQsIGJsa19zaXplPSVkXFxcXG5cXFwiLFxcbjE4OTA6XFx0XFx0XFx0YnVmZl9zaXplLCBibGtfc2l6ZSkpO1xcbjE4OTE6XFx0XFxuMTg5MjpcXHRcXHQvKiBOLkIuIHJldF9zeiBjYXJyaWVkIGludG8gdGhpcyBibG9jayAuLi4gKi9cXG4xODkzOlxcdFxcdG14X3NjX2VsZW1zID0gc2dfYnVpbGRfc2dhdChzY2hwLCBzZnAsIHNnX3RhYmxlc2l6ZSk7XFxuMTg5NDpcXHRcXHRpZiAobXhfc2NfZWxlbXMgXFx1MDAzYyAwKVxcbjE4OTU6XFx0XFx0XFx0cmV0dXJuIG14X3NjX2VsZW1zO1xcdC8qIG1vc3QgbGlrZWx5IC1FTk9NRU0gKi9cXG4xODk2OlxcdFxcbjE4OTc6XFx0XFx0b3JkZXIgPSBnZXRfb3JkZXIoc2NhdHRlcl9lbGVtX3N6KTtcXG4xODk4OlxcdHJldHJ5OlxcbjE4OTk6XFx0XFx0cmV0X3N6ID0gMSBcXHUwMDNjXFx1MDAzYyAoUEFHRV9TSElGVCArIG9yZGVyKTtcXG4xOTAwOlxcdFxcbjE5MDE6XFx0XFx0Zm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgayBcXHUwMDNjIG14X3NjX2VsZW1zO1xcbjE5MDI6XFx0XFx0ICAgICBrKyssIHJlbV9zeiAtPSByZXRfc3opIHtcXG4xOTAzOlxcdFxcbjE5MDQ6XFx0XFx0XFx0bnVtID0gbWluKHJlbV9zeiwgcmV0X3N6KTtcXG4xOTA1OlxcdFxcbjE5MDY6XFx0XFx0XFx0c2NocC1cXHUwMDNlcGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xcbjE5MDc6XFx0XFx0XFx0aWYgKCFzY2hwLVxcdTAwM2VwYWdlc1trXSlcXG4xOTA4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE5MDk6XFx0XFxuMTkxMDpcXHRcXHRcXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuMTkxMTpcXHRcXHRcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcXFxuXFxcIixcXG4xOTEyOlxcdFxcdFxcdFxcdFxcdCBrLCBudW0sIHJldF9zeikpO1xcbjE5MTM6XFx0XFx0fVxcdFxcdC8qIGVuZCBvZiBmb3IgbG9vcCAqL1xcbjE5MTQ6XFx0XFxuMTkxNTpcXHRcXHRzY2hwLVxcdTAwM2VwYWdlX29yZGVyID0gb3JkZXI7XFxuMTkxNjpcXHRcXHRzY2hwLVxcdTAwM2VrX3VzZV9zZyA9IGs7XFxuMTkxNzpcXHRcXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuMTkxODpcXHRcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrX3VzZV9zZz0lZCwgcmVtX3N6PSVkXFxcXG5cXFwiLFxcbjE5MTk6XFx0XFx0XFx0XFx0IGssIHJlbV9zeikpO1xcbjE5MjA6XFx0XFxuMTkyMTpcXHRcXHRzY2hwLVxcdTAwM2VidWZmbGVuID0gYmxrX3NpemU7XFxuMTkyMjpcXHRcXHRpZiAocmVtX3N6IFxcdTAwM2UgMClcXHQvKiBtdXN0IGhhdmUgZmFpbGVkICovXFxuMTkyMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xOTI0OlxcdFxcdHJldHVybiAwO1xcbjE5MjU6XFx0b3V0OlxcbjE5MjY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGs7IGkrKylcXG4xOTI3OlxcdFxcdFxcdF9fZnJlZV9wYWdlcyhzY2hwLVxcdTAwM2VwYWdlc1tpXSwgb3JkZXIpO1xcbjE5Mjg6XFx0XFxuMTkyOTpcXHRcXHRpZiAoLS1vcmRlciBcXHUwMDNlPSAwKVxcbjE5MzA6XFx0XFx0XFx0Z290byByZXRyeTtcXG4xOTMxOlxcdFxcbjE5MzI6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTkzMzpcXHR9XFxuMTkzNDpcXHRcXG4xOTM1OlxcdHN0YXRpYyB2b2lkXFxuMTkzNjpcXHRzZ19yZW1vdmVfc2NhdChTZ19mZCAqIHNmcCwgU2dfc2NhdHRlcl9ob2xkICogc2NocClcXG4xOTM3OlxcdHtcXG4xOTM4OlxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xOTM5OlxcdFxcdFxcdFxcdCBcXFwic2dfcmVtb3ZlX3NjYXQ6IGtfdXNlX3NnPSVkXFxcXG5cXFwiLCBzY2hwLVxcdTAwM2VrX3VzZV9zZykpO1xcbjE5NDA6XFx0XFx0aWYgKHNjaHAtXFx1MDAzZXBhZ2VzIFxcdTAwMjZcXHUwMDI2IHNjaHAtXFx1MDAzZXNnbGlzdF9sZW4gXFx1MDAzZSAwKSB7XFxuMTk0MTpcXHRcXHRcXHRpZiAoIXNjaHAtXFx1MDAzZWRpb19pbl91c2UpIHtcXG4xOTQyOlxcdFxcdFxcdFxcdGludCBrO1xcbjE5NDM6XFx0XFxuMTk0NDpcXHRcXHRcXHRcXHRmb3IgKGsgPSAwOyBrIFxcdTAwM2Mgc2NocC1cXHUwMDNla191c2Vfc2cgXFx1MDAyNlxcdTAwMjYgc2NocC1cXHUwMDNlcGFnZXNba107IGsrKykge1xcbjE5NDU6XFx0XFx0XFx0XFx0XFx0U0NTSV9MT0dfVElNRU9VVCg1LFxcbjE5NDY6XFx0XFx0XFx0XFx0XFx0XFx0c2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xOTQ3OlxcdFxcdFxcdFxcdFxcdFxcdFxcXCJzZ19yZW1vdmVfc2NhdDogaz0lZCwgcGc9MHglcFxcXFxuXFxcIixcXG4xOTQ4OlxcdFxcdFxcdFxcdFxcdFxcdGssIHNjaHAtXFx1MDAzZXBhZ2VzW2tdKSk7XFxuMTk0OTpcXHRcXHRcXHRcXHRcXHRfX2ZyZWVfcGFnZXMoc2NocC1cXHUwMDNlcGFnZXNba10sIHNjaHAtXFx1MDAzZXBhZ2Vfb3JkZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMDowNTowMi43MzY1Mjk4NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzIwNzM5MjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZXcgVW5pbml0aWFsaXplZCBNZW1vcnkgaW4gU0NTSSBTY2F0dGVyLUdhdGhlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHNjYXR0ZXItZ2F0aGVyIGxpc3QgYWxsb2NhdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLCBhbmQgdGhlbiByaWdvcm91c2x5IGFzc2VzcyB0aGUgS01TQU4gaW1wbGljYXRpb25zLlxuXG5TbywgdGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgZG9lcyB0d28gdGhpbmdzOiBpdCByZWZpbmVzIGhvdyB0aGUgYHNjYXR0ZXJfZWxlbV9zemAgbW9kdWxlIHBhcmFtZXRlciBpcyBoYW5kbGVkLCBtb3ZpbmcgZnJvbSBhIHJhdyBgbW9kdWxlX3BhcmFtX25hbWVkYCB0byBhIGNhbGxiYWNrLCBgbW9kdWxlX3BhcmFtX2NiYC4gVGhpcyBuZXcgY2FsbGJhY2sgZW5mb3JjZXMgYSBzaXplIHJhbmdlLCBlbnN1cmluZyBpdCdzIGF0IGxlYXN0IGEgcGFnZSBhbmQgbm8gbGFyZ2VyIHRoYW4gYE1BWF9QQUdFX09SREVSYCBwYWdlcy4gVGhlIHBhdGNoIGFsc28gcmVtb3ZlcyB0aGUgcmVkdW5kYW50IGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgdmFyaWFibGUgYW5kIHN1YnNlcXVlbnRseSBzaW1wbGlmaWVzIGNhbGN1bGF0aW9ucyBmb3IgYWxsb2NhdGlvbiBvcmRlciBpbiBgc2dfYnVpbGRfaW5kaXJlY3RgLiBUaGlzIGZlZWxzIGxpa2UgYSBjbGVhbnVwIG1vcmUgdGhhbiBhbnl0aGluZyBlbHNlLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgb3Bwb3J0dW5pdGllcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gc25lYWsgaW4sIG9yIG1vZGlmeSBleGlzdGluZyBwYXRocyB0byBoYXZlIG5ldyBhcmVhcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSBzZWUgdGhhdCBhbGwgdGhlIGBhbGxvY19wYWdlc2AgY2FsbHMgdXNlIGBfX0dGUF9aRVJPYCwgYW5kIGFsbCB0aGUgYGt6YWxsb2NgIGFsbG9jYXRpb25zIHdpbGwgYmUgemVyby1pbml0aWFsaXplZC4gSSB3ZW50IHRocm91Z2ggdGhlIGZvdXIgS01TQU4gY3JpdGVyaWE6IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIHRpZWQgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIEJhc2VkIG9uIHRoZSBjb2RlLCBub25lIG9mIHRob3NlIGFwcGx5IGhlcmUuIEkgc2VlIG5vIGNoYW5nZSB0byBob3cgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB1c2Vyc3BhY2UgYW5kIG5vIGNoYW5jZSBmb3IgdGhlIG5ldyBjb2RlIHRvIGxlYXZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF2YWlsYWJsZS5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2suIFRoZSBwYXRjaCBpcyBtb3N0bHkgdG91Y2hpbmcgbW9kdWxlIHBhcmFtZXRlciBoYW5kbGluZyBhbmQgc2NhbGFyIGNhbGN1bGF0aW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0aW5nIHRvIHBhZ2Ugb3JkZXIgYW5kIHNpemUuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIHVsdGltYXRlbHkgcmVsYXRlZCB0byBtZW1vcnkgdGhhdCBoYXMgaGFkIGBfX0dGUF9aRVJPYCB1c2VkIG9yIGBremFsbG9jYC4gTm8gdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgaW4gY2FsY3VsYXRpb24gb3IgcGFyYW1ldGVyIGhhbmRsaW5nIGFyZSB1bmluaXRpYWxpemVkIGJlZm9yZSB1c2FnZS4gVGhpcyBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbi5cblxuVGh1cywgYmFzZWQgb24gdGhlIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuIFRoZSBwYXRjaCBpcyByZWZhY3RvcmluZyBob3cgYHNjYXR0ZXJfZWxlbV9zemAgaXMgaGFuZGxlZCB3aXRoIGlucHV0IHZhbGlkYXRpb24sIGFuZCBpdCByZW1vdmVzIGEgcmVkdW5kYW50IHZhcmlhYmxlLCBzaW1wbGlmeWluZyBvcmRlciBjYWxjdWxhdGlvbnMuIEJlY2F1c2UgdGhlIGFsbG9jYXRpb25zIHVzZSBgX19HRlBfWkVST2AgYW5kIGBremFsbG9jYCwgbm8gbmV3IHBhdGhzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgaW50cm9kdWNlZC4gV2hpbGUgYWxsb2NhdGlvbiBmYWlsdXJlcywgYm91bmRzIGVycm9ycywgb3IgcGFyYW1ldGVyIGhhbmRsaW5nIGlzc3VlcyBjb3VsZCBvY2N1ciwgc3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gc2hvdWxkIGVhc2lseSBkZXRlY3QgdGhlbS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjAsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjA6MDU6MDkuOTQzOTI0NDM3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBmb3IgYHNjYXR0ZXJfZWxlbV9zemAgaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCBieSBhZGRpbmcgYSBjdXN0b20gc2V0dGVyIGNhbGxiYWNrIGBzY2F0dGVyX2VsZW1fc3pfc2V0KClgIHRvIHZhbGlkYXRlIGJvdW5kcywgYW5kIGNsZWFucyB1cCB0aGUgb3JkZXIgY2FsY3VsYXRpb24gbG9naWMgaW4gYHNnX2J1aWxkX2luZGlyZWN0KClgIHdoaWxlIHJlbW92aW5nIHRoZSByZWR1bmRhbnQgYHNjYXR0ZXJfZWxlbV9zel9wcmV2YCB2YXJpYWJsZS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQ6XFxuMS4gTWVtb3J5IGFsbG9jYXRpb25zIGZvciBzY2F0dGVyLWdhdGhlciBwYWdlcyB1c2UgYF9fR0ZQX1pFUk9gIGFuZCB0YWJsZXMgdXNlIGBremFsbG9jYC5cXG4yLiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gb3JkZXIgY2FsY3VsYXRpb24gYW5kIGxvb3AgaW5kZXhpbmcgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHN0YWNrIHByaW1pdGl2ZXMuXFxuMy4gTm8gZGF0YSBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFnZSBhbGxvY2F0aW9uIGJvdW5kcywgYnVmZmVyIHNpemVzLCBvciBvcmRlciBjYWxjdWxhdGlvbnMgZmFsbCB1bmRlciBzdGFuZGFyZCBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IHNhZmV0eSBjYXVnaHQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGRldGVjdGVkIGJ5IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbW9kdWxlIHBhcmFtZXRlciB2YWxpZGF0aW9uIGZvciBgc2NhdHRlcl9lbGVtX3N6YCBpbiBgZHJpdmVycy9zY3NpL3NnLmNgIGJ5IGFkZGluZyBhIGN1c3RvbSBzZXR0ZXIgY2FsbGJhY2sgYHNjYXR0ZXJfZWxlbV9zel9zZXQoKWAgdG8gdmFsaWRhdGUgYm91bmRzLCBhbmQgY2xlYW5zIHVwIHRoZSBvcmRlciBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgc2dfYnVpbGRfaW5kaXJlY3QoKWAgd2hpbGUgcmVtb3ZpbmcgdGhlIHJlZHVuZGFudCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgIHZhcmlhYmxlLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgZXhwb3NlZDpcXG4xLiBNZW1vcnkgYWxsb2NhdGlvbnMgZm9yIHNjYXR0ZXItZ2F0aGVyIHBhZ2VzIHVzZSBgX19HRlBfWkVST2AgYW5kIHRhYmxlcyB1c2UgYGt6YWxsb2NgLlxcbjIuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiBvcmRlciBjYWxjdWxhdGlvbiBhbmQgbG9vcCBpbmRleGluZyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgc3RhY2sgcHJpbWl0aXZlcy5cXG4zLiBObyBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUuXFxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIGFsbG9jYXRpb24gYm91bmRzLCBidWZmZXIgc2l6ZXMsIG9yIG9yZGVyIGNhbGN1bGF0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgc2FmZXR5IGNhdWdodCBieSBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgZGV0ZWN0ZWQgYnkgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6hrx[1] Phase: Succeeded StartedAt: 2026-09-09 20:05:21 +0000 UTC FinishedAt: 2026-09-09 20:05:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 20:05:21 +0000 UTC FinishedAt: 2026-09-09 20:05:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2] Phase: Succeeded StartedAt: 2026-09-09 20:05:21 +0000 UTC FinishedAt: 2026-09-09 23:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 20:05:21 +0000 UTC FinishedAt: 2026-09-09 23:49:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 20:05:21 +0000 UTC FinishedAt: 2026-09-09 20:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 20:05:21 +0000 UTC FinishedAt: 2026-09-09 20:05:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd6hrx/series-workflowd6hrx-convert-artifact-2653966172/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 20:05:31 +0000 UTC FinishedAt: 2026-09-09 20:22:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 20:05:31 +0000 UTC FinishedAt: 2026-09-09 20:22:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*abd8dcda-8b78-48eb-8e97-cf5767c476a3,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-workflowd6hrx/series-workflowd6hrx-convert-artifact-2653966172/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": "30958d09-f741-4682-b47c-d5b672e9a48e", "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-workflowd6hrx/series-workflowd6hrx-build-action-3976364682/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 20:05:31 +0000 UTC FinishedAt: 2026-09-09 20:22:15 +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:*abd8dcda-8b78-48eb-8e97-cf5767c476a3,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-workflowd6hrx/series-workflowd6hrx-convert-artifact-2653966172/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": "30958d09-f741-4682-b47c-d5b672e9a48e", "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-workflowd6hrx/series-workflowd6hrx-build-action-3976364682/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 20:22:25 +0000 UTC FinishedAt: 2026-09-09 20:22:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 20:22:25 +0000 UTC FinishedAt: 2026-09-09 20:22:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 20:22:25 +0000 UTC FinishedAt: 2026-09-09 20:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 20:22:25 +0000 UTC FinishedAt: 2026-09-09 20:22:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd6hrx/series-workflowd6hrx-convert-artifact-3298687131/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 20:22:35 +0000 UTC FinishedAt: 2026-09-09 20:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 20:22:35 +0000 UTC FinishedAt: 2026-09-09 20:24:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*30958d09-f741-4682-b47c-d5b672e9a48e,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-workflowd6hrx/series-workflowd6hrx-build-action-3976364682/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-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 20:24:46 +0000 UTC FinishedAt: 2026-09-09 20:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 20:24:46 +0000 UTC FinishedAt: 2026-09-09 20:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 20:24:46 +0000 UTC FinishedAt: 2026-09-09 20:41:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 20:24:46 +0000 UTC FinishedAt: 2026-09-09 20:41:34 +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:*abd8dcda-8b78-48eb-8e97-cf5767c476a3,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-workflowd6hrx/series-workflowd6hrx-convert-artifact-3298687131/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": "c2097d58-40e5-4acc-a8e8-958bbe480641", "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-workflowd6hrx/series-workflowd6hrx-build-action-653091903/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 20:24:46 +0000 UTC FinishedAt: 2026-09-09 20:41:24 +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:*abd8dcda-8b78-48eb-8e97-cf5767c476a3,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-workflowd6hrx/series-workflowd6hrx-convert-artifact-3298687131/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": "c2097d58-40e5-4acc-a8e8-958bbe480641", "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-workflowd6hrx/series-workflowd6hrx-build-action-653091903/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 20:41:34 +0000 UTC FinishedAt: 2026-09-09 20:41:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 20:41:34 +0000 UTC FinishedAt: 2026-09-09 20:41:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 20:41:34 +0000 UTC FinishedAt: 2026-09-09 20:43:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 20:41:34 +0000 UTC FinishedAt: 2026-09-09 20:43:23 +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:*c2097d58-40e5-4acc-a8e8-958bbe480641,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-workflowd6hrx/series-workflowd6hrx-build-action-653091903/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-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 20:43:33 +0000 UTC FinishedAt: 2026-09-09 23:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 20:43:33 +0000 UTC FinishedAt: 2026-09-09 23:49:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"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:*30958d09-f741-4682-b47c-d5b672e9a48e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c2097d58-40e5-4acc-a8e8-958bbe480641,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-workflowd6hrx/series-workflowd6hrx-build-action-3976364682/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-workflowd6hrx/series-workflowd6hrx-build-action-653091903/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 20:43:33 +0000 UTC FinishedAt: 2026-09-09 20:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 20:43:33 +0000 UTC FinishedAt: 2026-09-09 20:43:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"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-workflowd6hrx/series-workflowd6hrx-convert-artifact-2314631060/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 20:43:33 +0000 UTC FinishedAt: 2026-09-09 20:43:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 20:43:33 +0000 UTC FinishedAt: 2026-09-09 20:43:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 20:43:33 +0000 UTC FinishedAt: 2026-09-09 20:43:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 20:43:43 +0000 UTC FinishedAt: 2026-09-09 23:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd6hrx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","scatter_elem_sz_set","sg_build_reserve"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCSI","CHR_DEV_SG"],"series_id":"92434e3b-e73b-48fe-9cdc-82bc2a06a70b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 20:43:43 +0000 UTC FinishedAt: 2026-09-09 23:49:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*30958d09-f741-4682-b47c-d5b672e9a48e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c2097d58-40e5-4acc-a8e8-958bbe480641,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-workflowd6hrx/series-workflowd6hrx-build-action-3976364682/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-workflowd6hrx/series-workflowd6hrx-build-action-653091903/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-workflowd6hrx/series-workflowd6hrx-convert-artifact-2314631060/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,}