Name: series-workflowv5zmx Phase: Succeeded StartedAt: 2026-07-01 14:21:05 +0000 UTC FinishedAt: 2026-07-01 18:39:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[0] Phase: Succeeded StartedAt: 2026-07-01 14:21:05 +0000 UTC FinishedAt: 2026-07-01 14:33:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 14:21:05 +0000 UTC FinishedAt: 2026-07-01 14:33:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED" ], "series_id": "3c01c9bd-105d-469e-98df-a13cd25ea754" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "disk_alloc_zone_resources", "disk_free_zone_resources", "disk_release_zone_resources", "blk_revalidate_disk_zones" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE0OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2Rpc2tfZnJlZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7YmxrX3JldmFsaWRhdGVfZGlza196b25lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgbGlmZWN5Y2xlIG9mIHRoZSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGZvciB6b25lZCBibG9jayBkZXZpY2VzLiBJdCBwcmV2ZW50cyB0aGUgd29ya3F1ZXVlIGZyb20gYmVpbmcgZGVzdHJveWVkIGR1cmluZyB6b25lIHJldmFsaWRhdGlvbiwgaW5zdGVhZCBkcmFpbmluZyBpdCBhbmQgZGVmZXJyaW5nIGRlc3RydWN0aW9uIHRvIGRpc2sgcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgZm9yIHpvbmVkIGRldmljZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmlydHVhbGl6ZWQgem9uZWQgYmxvY2sgZGV2aWNlcyAobGlrZSBudWxsX2JsaykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYTNhNjE5ZWUyZGI3ODJkY2I0ZGZlMjU0YmVkN2VmYzM5MWYxM2E1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxNDozMTowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstem9uZWQuYyBiL2Jsb2NrL2Jsay16b25lZC5jXG5pbmRleCBiZWE4MTdmM2RlNTYwMi4uY2EzMGNhZWM4MzhlNzMgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstem9uZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXpvbmVkLmNcbkBAIC0xOTIzLDExICYjNDM7MTkyMywyMCBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbClcbiBcdFx0Z290byBmcmVlX2hhc2g7XG4gXG4tXHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxID1cbi1cdFx0YWxsb2Nfd29ya3F1ZXVlKFwmIzM0OyVzX3p3cGx1Z3NcJiMzNDssIFdRX01FTV9SRUNMQUlNIHwgV1FfSElHSFBSSSB8IFdRX1BFUkNQVSxcbi1cdFx0XHRcdHBvb2xfc2l6ZSwgZGlzay1cdTAwM2VkaXNrX25hbWUpO1xuLVx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKVxuLVx0XHRnb3RvIGRlc3Ryb3lfcG9vbDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIG1heSBhbHJlYWR5IGhhdmUgYSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGFzIHRoaXMgZnVuY3Rpb24gbWF5XG4mIzQzO1x0ICogYmUgY2FsbGVkIGFmdGVyIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcygpLCB3aGljaCBkb2VzIG5vdCBkZXN0cm95XG4mIzQzO1x0ICogdGhlIHdvcmtxdWV1ZSAodGhlIHpvbmUgd3JpdGUgcGx1Z3Mgd29ya3F1ZXVlIGlzIGRlc3Ryb3llZCBhdFxuJiM0MztcdCAqIGRpc2tfcmVsZWFzZSgpIHRpbWUpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSkge1xuJiM0MztcdFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9XG4mIzQzO1x0XHRcdGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslc196d3BsdWdzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0V1FfTUVNX1JFQ0xBSU0gfCBXUV9ISUdIUFJJIHwgV1FfUEVSQ1BVLFxuJiM0MztcdFx0XHRcdFx0cG9vbF9zaXplLCBkaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG4mIzQzO1x0XHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpXG4mIzQzO1x0XHRcdGdvdG8gZGVzdHJveV9wb29sO1xuJiM0MztcdH1cbiBcbiBcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyID1cbiBcdFx0a3RocmVhZF9jcmVhdGUoZGlza196b25lX3dwbHVnc193b3JrZXIsIGRpc2ssXG5AQCAtMTkzNSwxNSAmIzQzOzE5NDQsMTIgQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0aWYgKElTX0VSUihkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcikpIHtcbiBcdFx0cmV0ID0gUFRSX0VSUihkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XG4gXHRcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyID0gTlVMTDtcbi1cdFx0Z290byBkZXN0cm95X3dxO1xuJiM0MztcdFx0Z290byBkZXN0cm95X3Bvb2w7XG4gXHR9XG4gXHR3YWtlX3VwX3Byb2Nlc3MoZGlzay1cdTAwM2V6b25lX3dwbHVnc193b3JrZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4tZGVzdHJveV93cTpcbi1cdGRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xuLVx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9IE5VTEw7XG4gZGVzdHJveV9wb29sOlxuIFx0bWVtcG9vbF9kZXN0cm95KGRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbCk7XG4gXHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wgPSBOVUxMO1xuQEAgLTE5OTksNyAmIzQzOzIwMDUsNyBAQCBzdGF0aWMgdm9pZCBkaXNrX3NldF96b25lc19jb25kX2FycmF5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCAqem9uZXNfY29uZClcbiBcdGtmcmVlX3JjdV9taWdodHNsZWVwKHpvbmVzX2NvbmQpO1xuIH1cbiBcbi12b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiYjNDM7c3RhdGljIHZvaWQgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbiBcdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcikge1xuIFx0XHRrdGhyZWFkX3N0b3AoZGlzay1cdTAwM2V6b25lX3dwbHVnc193b3JrZXIpO1xuQEAgLTIwMDcsMTAgJiM0MzsyMDEzLDggQEAgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHR9XG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19saXN0KSk7XG4gXG4tXHRpZiAoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSkge1xuLVx0XHRkZXN0cm95X3dvcmtxdWV1ZShkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKTtcbi1cdFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9IE5VTEw7XG4tXHR9XG4mIzQzO1x0aWYgKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpXG4mIzQzO1x0XHRkcmFpbl93b3JrcXVldWUoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSk7XG4gXG4gXHRkaXNrX2Rlc3Ryb3lfem9uZV93cGx1Z3NfaGFzaF90YWJsZShkaXNrKTtcbiBcbkBAIC0yMDIwLDYgJiM0MzsyMDI0LDE2IEBAIHZvaWQgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0ZGlzay1cdTAwM2Vucl96b25lcyA9IDA7XG4gfVxuIFxuJiM0Mzt2b2lkIGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiYjNDM7e1xuJiM0MztcdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKSB7XG4mIzQzO1x0XHRkZXN0cm95X3dvcmtxdWV1ZShkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKTtcbiYjNDM7XHRcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xuJiM0Mzt9XG4mIzQzO1xuIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3Mge1xuIFx0c3RydWN0IGdlbmRpc2tcdCpkaXNrO1xuIFx0dThcdFx0KnpvbmVzX2NvbmQ7XG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaFxuaW5kZXggMjVhZjhhYzVlZjBmNzcuLmZiOTVkM2M1ODk1MGMxIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay5oXG5AQCAtNTI4LDcgJiM0Mzs1MjgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW9jX2NsZWFyX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuIFxuICNpZmRlZiBDT05GSUdfQkxLX0RFVl9aT05FRFxuIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbi12b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XG4mIzQzO3ZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbiBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX3pvbmVfd3JpdGVfcGx1Z2dpbmcoc3RydWN0IGJpbyAqYmlvKVxuIHtcbiBcdHJldHVybiBiaW9fZmxhZ2dlZChiaW8sIEJJT19aT05FX1dSSVRFX1BMVUdHSU5HKTtcbkBAIC01ODEsNyAmIzQzOzU4MSw3IEBAIGludCBibGtkZXZfem9uZV9tZ210X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4gfVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fem9uZV93cml0ZV9wbHVnZ2luZyhzdHJ1Y3QgYmlvICpiaW8pXG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcbmluZGV4IGY4NGI2YTM1NWI1NzRhLi4zMGFjMGZmZTY1MTc0NSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2dlbmhkLmNcbkBAIC0xMzAwLDcgJiM0MzsxMzAwLDcgQEAgc3RhdGljIHZvaWQgZGlza19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcbiBcdGRpc2tfcmVsZWFzZV9ldmVudHMoZGlzayk7XG4gXHRrZnJlZShkaXNrLVx1MDAzZXJhbmRvbSk7XG4tXHRkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoZGlzayk7XG4mIzQzO1x0ZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xuIFx0eGFfZGVzdHJveShcdTAwMjZkaXNrLVx1MDAzZXBhcnRfdGJsKTtcbiBcbiBcdGtvYmplY3RfcHV0KFx1MDAyNmRpc2stXHUwMDNlcXVldWVfa29iaik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7ZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2Rpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHpvbmUgd3JpdGUgcGx1ZyB3b3JrcXVldWUgZm9yIHpvbmVkIGJsb2NrIGRldmljZXMuIEl0IHByZXZlbnRzIHRoZSB3b3JrcXVldWUgZnJvbSBiZWluZyBkZXN0cm95ZWQgZHVyaW5nIHpvbmUgcmV2YWxpZGF0aW9uLCBpbnN0ZWFkIGRyYWluaW5nIGl0IGFuZCBkZWZlcnJpbmcgZGVzdHJ1Y3Rpb24gdG8gZGlzayByZWxlYXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyBmb3Igem9uZWQgZGV2aWNlcyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB2aXJ0dWFsaXplZCB6b25lZCBibG9jayBkZXZpY2VzIChsaWtlIG51bGxfYmxrKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWEzYTYxOWVlMmRiNzgyZGNiNGRmZTI1NGJlZDdlZmMzOTFmMTNhNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMTQ6MzE6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9ibGstem9uZWQuYyBiL2Jsb2NrL2Jsay16b25lZC5jCmluZGV4IGJlYTgxN2YzZGU1NjAyLi5jYTMwY2FlYzgzOGU3MyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXpvbmVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXpvbmVkLmMKQEAgLTE5MjMsMTEgJiM0MzsxOTIzLDIwIEBAIHN0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlpZiAoIWRpc2stJmd0O3pvbmVfd3BsdWdzX3Bvb2wpCiAJCWdvdG8gZnJlZV9oYXNoOwogCi0JZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EgPQotCQlhbGxvY193b3JrcXVldWUoJiMzNDslc196d3BsdWdzJiMzNDssIFdRX01FTV9SRUNMQUlNIHwgV1FfSElHSFBSSSB8IFdRX1BFUkNQVSwKLQkJCQlwb29sX3NpemUsIGRpc2stJmd0O2Rpc2tfbmFtZSk7Ci0JaWYgKCFkaXNrLSZndDt6b25lX3dwbHVnc193cSkKLQkJZ290byBkZXN0cm95X3Bvb2w7CiYjNDM7CS8qCiYjNDM7CSAqIFdlIG1heSBhbHJlYWR5IGhhdmUgYSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGFzIHRoaXMgZnVuY3Rpb24gbWF5CiYjNDM7CSAqIGJlIGNhbGxlZCBhZnRlciBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoKSwgd2hpY2ggZG9lcyBub3QgZGVzdHJveQomIzQzOwkgKiB0aGUgd29ya3F1ZXVlICh0aGUgem9uZSB3cml0ZSBwbHVncyB3b3JrcXVldWUgaXMgZGVzdHJveWVkIGF0CiYjNDM7CSAqIGRpc2tfcmVsZWFzZSgpIHRpbWUpLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFkaXNrLSZndDt6b25lX3dwbHVnc193cSkgewomIzQzOwkJZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EgPQomIzQzOwkJCWFsbG9jX3dvcmtxdWV1ZSgmIzM0OyVzX3p3cGx1Z3MmIzM0OywKJiM0MzsJCQkJCVdRX01FTV9SRUNMQUlNIHwgV1FfSElHSFBSSSB8IFdRX1BFUkNQVSwKJiM0MzsJCQkJCXBvb2xfc2l6ZSwgZGlzay0mZ3Q7ZGlza19uYW1lKTsKJiM0MzsJCWlmICghZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EpCiYjNDM7CQkJZ290byBkZXN0cm95X3Bvb2w7CiYjNDM7CX0KIAogCWRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlciA9CiAJCWt0aHJlYWRfY3JlYXRlKGRpc2tfem9uZV93cGx1Z3Nfd29ya2VyLCBkaXNrLApAQCAtMTkzNSwxNSAmIzQzOzE5NDQsMTIgQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLAogCWlmIChJU19FUlIoZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd29ya2VyKSkgewogCQlyZXQgPSBQVFJfRVJSKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlcik7CiAJCWRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlciA9IE5VTEw7Ci0JCWdvdG8gZGVzdHJveV93cTsKJiM0MzsJCWdvdG8gZGVzdHJveV9wb29sOwogCX0KIAl3YWtlX3VwX3Byb2Nlc3MoZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd29ya2VyKTsKIAogCXJldHVybiAwOwogCi1kZXN0cm95X3dxOgotCWRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dxKTsKLQlkaXNrLSZndDt6b25lX3dwbHVnc193cSA9IE5VTEw7CiBkZXN0cm95X3Bvb2w6CiAJbWVtcG9vbF9kZXN0cm95KGRpc2stJmd0O3pvbmVfd3BsdWdzX3Bvb2wpOwogCWRpc2stJmd0O3pvbmVfd3BsdWdzX3Bvb2wgPSBOVUxMOwpAQCAtMTk5OSw3ICYjNDM7MjAwNSw3IEBAIHN0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX2NvbmRfYXJyYXkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4ICp6b25lc19jb25kKQogCWtmcmVlX3JjdV9taWdodHNsZWVwKHpvbmVzX2NvbmQpOwogfQogCi12b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKJiM0MztzdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7CiAJaWYgKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlcikgewogCQlrdGhyZWFkX3N0b3AoZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd29ya2VyKTsKQEAgLTIwMDcsMTAgJiM0MzsyMDEzLDggQEAgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCiAJfQogCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO2Rpc2stJmd0O3pvbmVfd3BsdWdzX2xpc3QpKTsKIAotCWlmIChkaXNrLSZndDt6b25lX3dwbHVnc193cSkgewotCQlkZXN0cm95X3dvcmtxdWV1ZShkaXNrLSZndDt6b25lX3dwbHVnc193cSk7Ci0JCWRpc2stJmd0O3pvbmVfd3BsdWdzX3dxID0gTlVMTDsKLQl9CiYjNDM7CWlmIChkaXNrLSZndDt6b25lX3dwbHVnc193cSkKJiM0MzsJCWRyYWluX3dvcmtxdWV1ZShkaXNrLSZndDt6b25lX3dwbHVnc193cSk7CiAKIAlkaXNrX2Rlc3Ryb3lfem9uZV93cGx1Z3NfaGFzaF90YWJsZShkaXNrKTsKIApAQCAtMjAyMCw2ICYjNDM7MjAyNCwxNiBAQCB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAlkaXNrLSZndDtucl96b25lcyA9IDA7CiB9CiAKJiM0Mzt2b2lkIGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKJiM0Mzt7CiYjNDM7CWlmIChkaXNrLSZndDt6b25lX3dwbHVnc193cSkgewomIzQzOwkJZGVzdHJveV93b3JrcXVldWUoZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EpOwomIzQzOwkJZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzIHsKIAlzdHJ1Y3QgZ2VuZGlzawkqZGlzazsKIAl1OAkJKnpvbmVzX2NvbmQ7CmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oCmluZGV4IDI1YWY4YWM1ZWYwZjc3Li5mYjk1ZDNjNTg5NTBjMSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLmgKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLmgKQEAgLTUyOCw3ICYjNDM7NTI4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGlvY19jbGVhcl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX1pPTkVECiB2b2lkIGRpc2tfaW5pdF96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7Ci12b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7CiYjNDM7dm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spOwogc3RhdGljIGlubGluZSBib29sIGJpb196b25lX3dyaXRlX3BsdWdnaW5nKHN0cnVjdCBiaW8gKmJpbykKIHsKIAlyZXR1cm4gYmlvX2ZsYWdnZWQoYmlvLCBCSU9fWk9ORV9XUklURV9QTFVHR0lORyk7CkBAIC01ODEsNyAmIzQzOzU4MSw3IEBAIGludCBibGtkZXZfem9uZV9tZ210X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSwKIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7CiB9CiBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX3pvbmVfd3JpdGVfcGx1Z2dpbmcoc3RydWN0IGJpbyAqYmlvKQpkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggZjg0YjZhMzU1YjU3NGEuLjMwYWMwZmZlNjUxNzQ1IDEwMDY0NAotLS0gYS9ibG9jay9nZW5oZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2dlbmhkLmMKQEAgLTEzMDAsNyAmIzQzOzEzMDAsNyBAQCBzdGF0aWMgdm9pZCBkaXNrX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogCiAJZGlza19yZWxlYXNlX2V2ZW50cyhkaXNrKTsKIAlrZnJlZShkaXNrLSZndDtyYW5kb20pOwotCWRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTsKJiM0MzsJZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKGRpc2spOwogCXhhX2Rlc3Ryb3koJmFtcDtkaXNrLSZndDtwYXJ0X3RibCk7CiAKIAlrb2JqZWN0X3B1dCgmYW1wO2Rpc2stJmd0O3F1ZXVlX2tvYmopOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjYwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWm9uZSBSZXNvdXJjZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHR3ZWFraW5nIGhvdyB6b25lZCByZXNvdXJjZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBibG9jayBsYXllciwgc3BlY2lmaWNhbGx5IGluIGBibG9jay9ibGstem9uZWQuY2AsIGBibG9jay9ibGsuaGAsIGFuZCBgYmxvY2svZ2VuaGQuY2AuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgc3VidGxlIHJhY2UgY29uZGl0aW9uIG9yIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWUgYXJvdW5kIGBkaXNrLSZndDt6b25lX3dwbHVnc193cWAuICBJbnN0ZWFkIG9mIGEgc2ltcGxlIGRlc3Ryb3kgb2YgdGhlIHdvcmtxdWV1ZSBpbiBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKClgLCB0aGUgY29kZSBpcyBub3cgZHJhaW5pbmcgaXQgZmlyc3QsIGFuZCB0aGUgKmFjdHVhbCogZGVzdHJ1Y3Rpb24gaXMgZGVsZWdhdGVkIHRvIHRoaXMgbmV3IGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoKWAgZnVuY3Rpb24uICBUaGF0IG9uZSBpcyBjYWxsZWQgZnJvbSBgZGlza19yZWxlYXNlKClgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyB0aGUgZmluYWwgY2xlYW51cC4gIEFuZCBgZGlza19hbGxvY196b25lX3Jlc291cmNlcygpYCBpcyBiZWluZyBhZGFwdGVkIHRvIHJldXNlIHRoZSB3b3JrcXVldWUgaWYgaXQmIzM5O3MgYWxyZWFkeSB0aGVyZS4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGtub3cgd2hpY2ggQ09ORklHIG9wdGlvbnMgYXJlIHJlbGV2YW50LiBTaW5jZSB0aGUgcGF0Y2ggdG91Y2hlcyBgYmxvY2svYmxrLXpvbmVkLmNgIGFuZCBgYmxvY2svYmxrLmhgLCBJIGV4cGVjdCBhdCBsZWFzdCBgQ09ORklHX0JMS19ERVZfWk9ORURgIHRvIGJlIGluIHBsYXkuIExvb2tpbmcgYXQgYGJsb2NrL2Jsay5oYCwgdGhlIHByZXNlbmNlIG9mIGBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMoKWAgYW5kIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoKWAgZGVmaW5pdGlvbnMsIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfQkxLX0RFVl9aT05FRGAsIGNvbmZpcm1zIG15IHN1c3BpY2lvbi4KCk5vdyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgcXVpY2tseSB2ZXJpZnkgdGhhdCBgYmxvY2svYmxrLXpvbmVkLmNgIGlzIGluZGVlZCBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19CTEtfREVWX1pPTkVEYCBpcyBlbmFibGVkIHRvIGJlIHN1cmUuIEl0JiMzOTtzIHVzdWFsbHkgdGhlIG1vc3QgY29tbW9uIGRlcGVuZGVuY3kuIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrLXpvbmVkLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpICYjNDM7PSBiaW8taW50ZWdyaXR5Lm8gYmxrLWludGVncml0eS5vIHQxMC1waS5vIFxcXG5ibG9jay9NYWtlZmlsZS0zMi1cdFx0XHRcdCAgIGJpby1pbnRlZ3JpdHktYXV0by5vIGJpby1pbnRlZ3JpdHktZnMub1xuYmxvY2svTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX0JMS19ERVZfWk9ORUQpXHQmIzQzOz0gYmxrLXpvbmVkLm9cbmJsb2NrL01ha2VmaWxlLTM0LW9iai0kKENPTkZJR19CTEtfV0JUKVx0XHQmIzQzOz0gYmxrLXdidC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgWm9uZWQgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gYENPTkZJR19CTEtfREVWX1pPTkVEYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgdG8gbmFpbCBkb3duLiBUaGlzIHBhdGNoIGlzIGdvaW5nIHRvIGJlIGRpZ2dpbmcgaW50byB0aGUgem9uZWQgYmxvY2sgZGV2aWNlIHJlc291cmNlIG1hbmFnZW1lbnQuCgpOb3csIGl0IGxvb2tzIGxpa2UgdGhpcyB1cGRhdGUgaXMgemVyb2luZyBpbiBvbiB0aHJlZSBjb3JlIGZ1bmN0aW9uczogYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgLCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCwgYW5kIHRoZSBuZXdseSBpbnRyb2R1Y2VkIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyBmb3IgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgIGFuZCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYC4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aG9zZSBhcmUgY2FsbGVkIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIHBhdGNoIGludGVuZHMgdG8gaW1wYWN0IHRoZSBvdmVyYWxsIHpvbmUgbGlmZWN5Y2xlLCBmcm9tIHJlc291cmNlIGFsbG9jYXRpb24gdG8gcmVsZWFzZS4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dHMgaW4gd2hpY2ggcmVzb3VyY2VzIGFyZSBtYW5hZ2VkLCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYWRkaW5nIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgLiBJdCYjMzk7cyBhbGwgYWJvdXQgc2NvcGluZyB0aGUgaW1wYWN0LCBhbmQgc2VlaW5nIGhvdyBpdCBmaXRzIGludG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgYWZmYWlycywgc28gSSBjYW4gc3RhcnQgZm9ybWluZyBzb21lIG9waW5pb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE0OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmM9MTg4NT12b2lkIGRpc2tfaW5pdF96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstem9uZWQuYy0xOTAxLVxuYmxvY2svYmxrLXpvbmVkLmM6MTkwMjpzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9ibGstem9uZWQuYy0xOTAzLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgcG9vbF9zaXplKVxuLS1cbmJsb2NrL2Jsay16b25lZC5jPTIwNDc9c3RhdGljIGludCBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMjA3NS1cdGlmICghZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoKSB7XG5ibG9jay9ibGstem9uZWQuYzoyMDc2Olx0XHRyZXQgPSBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKGRpc2ssIHBvb2xfc2l6ZSk7XG5ibG9jay9ibGstem9uZWQuYy0yMDc3LVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRGlzayBab25lIFJlc291cmNlIFZhbGlkYXRpb24qKgoKQWxyaWdodCwgc28gYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgIGlzIGNsZWFybHkgYSBkb3duc3RyZWFtIGZ1bmN0aW9uLCBjYWxsZWQgYnkgYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQgc2V0cyB1cCBhIHNwZWNpZmljIGRlcGVuZGVuY3kuJiMzNDsgTm93LCBteSBmb2N1cyBzaGlmdHMgdG8gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0OiB3aGVyZSAqaXMqIGBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXNgIGFjdHVhbGx5IHRyaWdnZXJlZD8gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBrZXkgdG8gdHJhY2luZyB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiBsaWZlY3ljbGUgYW5kIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGhpZ2gtbGV2ZWwgcHVycG9zZSBvZiB0aGUgY2FsbCwgYW5kIHdoZXRoZXIgb3Igbm90IGl0IGlzIGNyaXRpY2FsIGluIGEgcGVyZm9ybWFuY2Ugc2NlbmFyaW8uIFdoZXJlIGFyZSB3ZSBpbiB0aGUgYXJjaGl0ZWN0dXJlLCBhbmQgd2hhdOKAmXMgZHJpdmluZyB0aGVzZSB2YWxpZGF0aW9ucz8gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBjb250cm9sIGFuZCBwb3RlbnRpYWwgdGltaW5nIGlzc3VlcyBpbnZvbHZlZCB3aXRoIHpvbmUgcmVzb3VyY2UgYWxsb2NhdGlvbi4gTGV04oCZcyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNoYWluIG9mIGV2ZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmM9MjAzNz1zdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzIHtcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMDQ2LVxuYmxvY2svYmxrLXpvbmVkLmM6MjA0NzpzdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbmJsb2NrL2Jsay16b25lZC5jLTIwNDgtXHRcdFx0XHRzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzICphcmdzKVxuLS1cbmJsb2NrL2Jsay16b25lZC5jPTIzNDQ9aW50IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMjM3Ny1cdG5vaW9fZmxhZyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuYmxvY2svYmxrLXpvbmVkLmM6MjM3ODpcdHJldCA9IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhkaXNrLCBcdTAwMjZhcmdzKTtcbmJsb2NrL2Jsay16b25lZC5jLTIzNzktXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE0OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gRGlzayBab25lIFJldmFsaWRhdGlvbioqCgpSaWdodCwgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLi4uIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmV2YWxpZGF0aW9uIHByb2Nlc3MgZm9yIGRpc2sgem9uZXMsIHNvIHdoZXJlIGlzIHRoYXQgY3J1Y2lhbCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBmdW5jdGlvbiBjYWxsZWQ/IFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB3ZSYjMzk7cmUgY2xlYW5pbmcgdXAgYWZ0ZXIgYSByZXZhbGlkYXRpb24gZXZlbnQuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBjYWxsIHBhdGggZnJvbSB0aGF0IGVudHJ5IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24uIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgdHJhY2UgdGhlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE0OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc2tfZnJlZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstem9uZWQuYz0xOTAyPXN0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi0tXG5ibG9jay9ibGstem9uZWQuYy0xOTI3LVx0ICogV2UgbWF5IGFscmVhZHkgaGF2ZSBhIHpvbmUgd3JpdGUgcGx1ZyB3b3JrcXVldWUgYXMgdGhpcyBmdW5jdGlvbiBtYXlcbmJsb2NrL2Jsay16b25lZC5jOjE5Mjg6XHQgKiBiZSBjYWxsZWQgYWZ0ZXIgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKCksIHdoaWNoIGRvZXMgbm90IGRlc3Ryb3lcbmJsb2NrL2Jsay16b25lZC5jLTE5MjktXHQgKiB0aGUgd29ya3F1ZXVlICh0aGUgem9uZSB3cml0ZSBwbHVncyB3b3JrcXVldWUgaXMgZGVzdHJveWVkIGF0XG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MTk5Nj1zdGF0aWMgdm9pZCBkaXNrX3NldF96b25lc19jb25kX2FycmF5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCAqem9uZXNfY29uZClcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMDA3LVxuYmxvY2svYmxrLXpvbmVkLmM6MjAwODpzdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9ibGstem9uZWQuYy0yMDA5LXtcbi0tXG5ibG9jay9ibGstem9uZWQuYz0yMDI3PXZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTIwMzMtXG5ibG9jay9ibGstem9uZWQuYzoyMDM0Olx0ZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xuYmxvY2svYmxrLXpvbmVkLmMtMjAzNS19XG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MjM0ND1pbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yNDE1LVx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuYmxvY2svYmxrLXpvbmVkLmM6MjQxNjpcdGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTtcbmJsb2NrL2Jsay16b25lZC5jLTI0MTctXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzg3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJsb2NrIExheWVyIFBhdGNoIGZvciBab25lZCBCbG9jayBEZXZpY2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBhbmQgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2AgYXJlIGtleSBoZXJlLCBib3RoIG9mIHdoaWNoIGFyZSBjYWxsZWQgd2l0aGluIGRpZmZlcmVudCBhcmVhcyBvZiB0aGUgY29kZS4gSXQgc2VlbXMgbGlrZSBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBnZXRzIGNhbGxlZCBmcm9tIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCBhbmQsIGNydWNpYWxseSwgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2AgaXMgY2FsbGVkIGZyb20gYGRpc2tfcmVsZWFzZWAgaW4gYGJsb2NrL2dlbmhkLmNgLiBUaGUgcHJvYmxlbSBsaWVzIGluIHRoZSBsaWZlY3ljbGUgb2YgYSB3b3JrcXVldWUuIEJhc2ljYWxseSwgYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2Agd2FzIGRlc3Ryb3lpbmcgdGhlIHdvcmtxdWV1ZSwgYnV0IGl0IHdhcyBiZWluZyByZS1jcmVhdGVkIGFnYWluIGJ5IGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCB3aXRoaW4gcmV2YWxpZGF0aW9uLiBTbywgdGhpcyBwYXRjaCBtYWtlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGFkZHJlc3MgdGhlIHdvcmtxdWV1ZS4gVGhlIGZpeCBJJiMzOTttIHNlZWluZyBpcyB0byBkcmFpbiB0aGUgd29ya3F1ZXVlIGluIGBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXNgLCBhbmQgKnRoZW4qIGRlc3Ryb3kgaXQgaW4gYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2AsIHdoaWNoIGlzIHRoZSBhcHByb3ByaWF0ZSBwbGFjZS4gVGhpcyBvbmx5IGhhcHBlbnMgd2hlbiB0aGUgZGlzayBpcyBmdWxseSByZWxlYXNlZC4KClRoaXMgaXMgYWxsIHByZXR0eSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHpvbmVkIGJsb2NrIGRldmljZXMuIEl0JiMzOTtzIGRlZmluaXRlbHkgYSBidWcgZml4IHJlbGF0ZWQgdG8gd29ya3F1ZXVlIGxpZmVjeWNsZS4gSXQmIzM5O3MgcmVhY2hhYmxlIHZpYSB0aGUgc3RhbmRhcmQgaW1wbGVtZW50YXRpb25zIG9mIHpvbmVkIGJsb2NrIGRldmljZXMgbGlrZSBudWxsX2JsayBpbiB6b25lZCBtb2RlLCBvciBzY3NpX2RlYnVnIGFsc28gd2hlbiBpbiB6b25lZCBtb2RlLiBTaW5jZSBpdCYjMzk7cyByZWFjaGFibGUgYW5kIGZpeGVzIGEgY3J1Y2lhbCB3b3JrcXVldWUgaXNzdWUsIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQmIzM5O3Mgd29ydGggZnV6emluZyBhbmQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKR2l2ZW4gYWxsIG9mIHRoYXQsIGxldCYjMzk7cyBjb25maXJtIHdoZXRoZXIgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgIGlzIGEgZ29vZCBmb2N1cyBzeW1ib2wgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuIFRoZSBzdGF0aWMgZnVuY3Rpb25zIGxpa2UgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgIGFuZCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBhbmQgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2AgYXJlIG9mIGludGVyZXN0IHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3JldmFsaWRhdGVfZGlza196b25lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstem9uZWQuYz01MDM9c3RhdGljIGJvb2wgZGlza19pbnNlcnRfem9uZV93cGx1ZyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi0tXG5ibG9jay9ibGstem9uZWQuYy01MjgtXHQgKiBhdHRhY2hlZCB0byB0aGUgZGlzaywgdGhlbiB0aGlzIGlzIGEgem9uZSB3cml0ZSBwbHVnIGluc2VydCBmcm9tIHRoZVxuYmxvY2svYmxrLXpvbmVkLmM6NTI5Olx0ICogZmlyc3QgY2FsbCB0byBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKCksIGluIHdoaWNoIGNhc2UgdGhlIHpvbmUgaXNcbmJsb2NrL2Jsay16b25lZC5jLTUzMC1cdCAqIG5lY2Vzc2FyaWxseSBpbiB0aGUgYWN0aXZlIGNvbmRpdGlvbi5cbi0tXG5ibG9jay9ibGstem9uZWQuYz0yMjYyPXN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfem9uZV9jYihzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMjMzMS0vKipcbmJsb2NrL2Jsay16b25lZC5jOjIzMzI6ICogYmxrX3JldmFsaWRhdGVfZGlza196b25lcyAtIChyZSlhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB6b25lIHdyaXRlIHBsdWdzXG5ibG9jay9ibGstem9uZWQuYy0yMzMzLSAqIEBkaXNrOlx0VGFyZ2V0IGRpc2tcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMzQzLSAqL1xuYmxvY2svYmxrLXpvbmVkLmM6MjM0NDppbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbmJsb2NrL2Jsay16b25lZC5jLTIzNDUte1xuLS1cbmJsb2NrL2Jsay16b25lZC5jLTI0MjAtfVxuYmxvY2svYmxrLXpvbmVkLmM6MjQyMTpFWFBPUlRfU1lNQk9MX0dQTChibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKTtcbmJsb2NrL2Jsay16b25lZC5jLTI0MjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NjgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2AgVXNhZ2UqKgoKT2theSwgc28gYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgIGlzIGV4cG9ydGVkLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBwb3RlbnRpYWxseSB1c2VkIG91dHNpZGUgdGhlIGJsb2NrIHN1YnN5c3RlbSBwcm9wZXIuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkga25vdyB0aGF0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCB6b25lIHJldmFsaWRhdGlvbiwgcHJvYmFibHkgaW52b2x2aW5nIHRoaW5ncyBsaWtlIFNNUiBkcml2ZXMsIG1heWJlIFNTRCB3ZWFyIGxldmVsaW5nLCBvciBzb21lIG90aGVyIHN0b3JhZ2Ugb3B0aW1pemF0aW9uIG9yIGRhdGEgaW50ZWdyaXR5IGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQgbWVhbnMgc29tZW9uZSBkZWNpZGVkIHRoYXQgZnVuY3Rpb25hbGl0eSB3YXMgdmFsdWFibGUgZW5vdWdoIHRvIGV4cG9zZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgKndobyogaXMgdXNpbmcgaXQsIGFuZCAqd2h5Ki4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY2FsbCBzaXRlcy4gR290dGEgc2VlIHdoYXQgb3RoZXIgc3Vic3lzdGVtcyBhcmUgY2FsbGluZyB0aGlzIGFuZCB3aGF0IHRoZXkgYXJlIGRvaW5nIHdpdGggaXQuIExldCYjMzk7cyBzZWUuLi4gb3V0c2lkZSBvZiBgYmxvY2svYCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgYml0cyB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTE3NT1pbnQgbnVsbF9yZWdpc3Rlcl96b25lZF9kZXYoc3RydWN0IG51bGxiICpudWxsYilcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTgzLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjE4NDpcdHJldHVybiBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKGRpc2spO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE4NS19XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU1OD1zdGF0aWMgaW50IHVibGtfZ2V0X25yX3pvbmVzKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU2NS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NjY6c3RhdGljIGludCB1YmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU2Ny17XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTY4Olx0cmV0dXJuIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXModWItXHUwMDNldWJfZGlzayk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTY5LX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NzY1PXN0YXRpYyB2b2lkIHVibGtfZGV2X3BhcmFtX3pvbmVkX2FwcGx5KHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTc2OC1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo3Njk6c3RhdGljIGludCB1YmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTc3MC17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTQ0MDk9c3RhdGljIGludCB1YmxrX2N0cmxfc3RhcnRfZGV2KHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ1MzgtXHRpZiAodWJsa19kZXZfaXNfem9uZWQodWIpKSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDUzOTpcdFx0cmV0ID0gdWJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXModWIpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ1NDAtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTQzOD1zdGF0aWMgaW50IHZpcnRibGtfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTUzNy1cdCAgICAobGltLmZlYXR1cmVzIFx1MDAyNiBCTEtfRkVBVF9aT05FRCkpIHtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjE1Mzg6XHRcdGVyciA9IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXModmJsay1cdTAwM2VkaXNrKTtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE1MzktXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTExNzM9c3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMzEwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEzMTE6XHRyZXQgPSBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHpsby1cdTAwM2VkaXNrKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMzEyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL21kL2RtLXpvbmUuYz0xNTA9Ym9vbCBkbV9pc196b25lX3dyaXRlKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgc3RydWN0IGJpbyAqYmlvKVxuLS1cbmRyaXZlcnMvbWQvZG0tem9uZS5jLTE2OC0gKiBmb3Igem9uZSBhcHBlbmQgZW11bGF0aW9uLiBOb3RlIHRoYXQgd2UgY2Fubm90IHNpbXBseSB1c2UgdGhlIGJsb2NrIGxheWVyXG5kcml2ZXJzL21kL2RtLXpvbmUuYzoxNjk6ICogYmxrX3JldmFsaWRhdGVfZGlza196b25lcygpIGZ1bmN0aW9uIGhlcmUgYXMgdGhlIG1hcHBlZCBkZXZpY2UgaXMgc3VzcGVuZGVkXG5kcml2ZXJzL21kL2RtLXpvbmUuYy0xNzAtICogKHRoaXMgaXMgY2FsbGVkIGZyb20gX19iaW5kKCkgY29udGV4dCkuXG4tLVxuZHJpdmVycy9tZC9kbS16b25lLmM9MTcyPWludCBkbV9yZXZhbGlkYXRlX3pvbmVzKHN0cnVjdCBkbV90YWJsZSAqdCwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4tLVxuZHJpdmVycy9tZC9kbS16b25lLmMtMTk4LVx0bWQtXHUwMDNlcmV2YWxpZGF0ZV9tYXBfdGFzayA9IGN1cnJlbnQ7XG5kcml2ZXJzL21kL2RtLXpvbmUuYzoxOTk6XHRyZXQgPSBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKGRpc2spO1xuZHJpdmVycy9tZC9kbS16b25lLmMtMjAwLVx0bWQtXHUwMDNlcmV2YWxpZGF0ZV9tYXBfdGFzayA9IE5VTEw7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIzODc9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQ5OS1cdGlmIChibGtfcXVldWVfaXNfem9uZWQobnMtXHUwMDNlcXVldWUpKSB7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjUwMDpcdFx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhucy1cdTAwM2VkaXNrKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTAxLVx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAhbnZtZV9maXJzdF9zY2FuKG5zLVx1MDAzZWRpc2spKVxuLS1cbmRyaXZlcnMvc2NzaS9zZF96YmMuYz01MTk9c3RhdGljIHZvaWQgc2RfemJjX3ByaW50X3pvbmVzKHN0cnVjdCBzY3NpX2Rpc2sgKnNka3ApXG4tLVxuZHJpdmVycy9zY3NpL3NkX3piYy5jLTUzNi0vKlxuZHJpdmVycy9zY3NpL3NkX3piYy5jOjUzNzogKiBDYWxsIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoKSBpZiBhbnkgb2YgdGhlIHpvbmVkIGRpc2sgcHJvcGVydGllcyBoYXZlXG5kcml2ZXJzL3Njc2kvc2RfemJjLmMtNTM4LSAqIGNoYW5nZWQgdGhhdCBtYWtlIGl0IG5lY2Vzc2FyeSB0byBjYWxsIHRoYXQgZnVuY3Rpb24uIENhbGxlZCBieVxuLS1cbmRyaXZlcnMvc2NzaS9zZF96YmMuYz01NDE9aW50IHNkX3piY19yZXZhbGlkYXRlX3pvbmVzKHN0cnVjdCBzY3NpX2Rpc2sgKnNka3ApXG4tLVxuZHJpdmVycy9zY3NpL3NkX3piYy5jLTU2NS1cdGZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG5kcml2ZXJzL3Njc2kvc2RfemJjLmM6NTY2Olx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhkaXNrKTtcbmRyaXZlcnMvc2NzaS9zZF96YmMuYy01NjctXHRtZW1hbGxvY19ub2lvX3Jlc3RvcmUoZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTIxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFpvbmVkIEJsb2NrIERldmljZSBJbnZlc3RpZ2F0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoaXMgcHJvYmxlbS4gYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgIGZlZWxzIGxpa2UgYSBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgZnVuY3Rpb24gdG8gc3RhcnQgd2l0aDsgdGhhdCYjMzk7cyBhIGdvb2Qga2V5IHN5bWJvbC4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIGxvb2sgY2xvc2VseSBhdCBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AsIGBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXNgLCBhbmQgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2Agd2hpbGUgSSYjMzk7bSBhdCBpdC4gVGhvc2Ugc2VlbSBsaWtlIHRoZXkmIzM5O2QgYmUgaW50aW1hdGVseSBpbnZvbHZlZCB3aXRoIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuCgpOb3csIGxldCYjMzk7cyBzZWUgYWJvdXQgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgY2VudGVyZWQgYXJvdW5kIHpvbmVkIGJsb2NrIGRldmljZXMsIHNvIGBDT05GSUdfQkxLX0RFVl9aT05FRGAgaXMgZ29pbmcgdG8gYmUgdGhlIG1haW4gY29uZmlndXJhdGlvbiBrbm9iIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLCBvZiBjb3Vyc2UuIEJ1dCBhcmUgdGhlcmUgYW55IG90aGVyIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YsIGVzcGVjaWFsbHkgdG8gaGVscCB0ZXN0IHpvbmVkIGJsb2NrIGRldmljZXM/IEluIHRoZSBwYXN0LCBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgIGFsb25nc2lkZSBgQ09ORklHX0JMS19ERVZfWk9ORURgIGhhcyBvZnRlbiBiZWVuIHN1ZmZpY2llbnQgZm9yIHRlc3Rpbmcgem9uZWQgYmxvY2sgZGV2aWNlcyB1c2luZyB0aGUgbnVsbF9ibGsgZHJpdmVyLCB3aGljaCBpcyBjb252ZW5pZW50LiBTbyBJJiMzOTtsbCBkZWZpbml0ZWx5IHdhbnQgdG8gdmVyaWZ5IHRoYXQuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgZHJpdmVycy9ibG9jay9LY29uZmlnYCB0byBjaGVjayB1cCBvbiBgTlVMTF9CTEtgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX05VTExfQkxLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk4MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIE5VTExfQkxLIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEluc3RlYWQgb2YgZ3Vlc3NpbmcsIEkmIzM5O20gdGhpbmtpbmcgbGV0JiMzOTtzIGV4YW1pbmUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBgTlVMTF9CTEtgIGNvbmZpZ3VyYXRpb24uIFRoZSBxdWVzdGlvbiBpc24mIzM5O3Qgd2hldGhlciBpdCYjMzk7cyAqZGVmaW5lZCosIGJ1dCBob3cgaXQmIzM5O3MgKmNvbmZpZ3VyZWQqIG9yICpjb25kaXRpb25hbGl6ZWQqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIGl0cyBhdmFpbGFiaWxpdHkgaXMgdGllZCB0byBhbnkgb3RoZXIgc3BlY2lmaWMgYGNvbmZpZ2Agb3B0aW9ucy4gSSB3YW50IHRvIGtub3csIGltbWVkaWF0ZWx5LCBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gb3RoZXIgZmVhdHVyZSBmbGFncy4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBtb3N0IGRpcmVjdCBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBibG9jayBkcml2ZXIgaXMgY29udHJvbGxlZCBhbmQgd2hldGhlciBpdCYjMzk7cyB1bml2ZXJzYWxseSBhY2Nlc3NpYmxlIG9yIHJlc3RyaWN0ZWQgaW4gaXRzIGJ1aWxkLXRpbWUgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIyOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0aGlua2luZywgd2hlcmUgd291bGQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgbnVsbCBibG9jayBkZXZpY2UsIG9yIHNvbWV0aGluZyBhbmFsb2dvdXMsIHJlc2lkZT8gVGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3Igc29tZXRoaW5nIGxpa2UgdGhhdCB3b3VsZCBiZSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgdW5kZXIgdGhlIGBkcml2ZXJzL2Jsb2NrYCBkaXJlY3RvcnkuIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgY2hlY2tpbmcgdGhlIGBudWxsX2Jsa2AgZGlyZWN0b3J5LCBpZiBvbmUgZXhpc3RzLCBmb3IgaXRzIGBLY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIHBsYWNlIHdoZXJlIGZlYXR1cmVzIGFuZCBvcHRpb25zIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBibG9jayBkcml2ZXIgYXJlIGRlZmluZWQuIEl0JiMzOTtsbCBnaXZlIG1lIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGRlZmF1bHQgc2V0dGluZ3MgdGhhdCB0aGUgZHJpdmVyIHVzZXMuIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgZHJpdmVyLCB0aGUgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBibG9jayBkZXZpY2VzIGl0IHdpbGwgY3JlYXRlLCB0aGUgZGVmYXVsdCBzaXplIG9mIHRoZSBkZXZpY2VzIGFuZCBvcHRpb25zIGZvciB0aGUgbnVtYmVyIG9mIGRldmljZXMgaXQgY3JlYXRlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBibG9jayBkZXZpY2UgaXMgZW5hYmxlZCBhbmQgaWYgaXQgbmVlZHMgYW55IG90aGVyIGRyaXZlcnMgdG8gbWFrZSB0aGUgYmxvY2sgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLiBJZiBgbnVsbF9ibGtgIGlzbiYjMzk7dCB0aGVyZSwgSSYjMzk7bGwgYnJvYWRlbiB0aGUgc2VhcmNoLCBidXQgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHRoZSBnby10by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svTWFrZWZpbGU9MzU9b2JqLSQoQ09ORklHX0JMS19ERVZfUk5CRClcdCYjNDM7PSBybmJkL1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0zNi1cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0JMS19ERVZfTlVMTF9CTEspXHQmIzQzOz0gbnVsbF9ibGsvXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19CTEtfREVWX1JVU1RfTlVMTCkgJiM0Mzs9IHJudWxsL1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy01LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7TnVsbCB0ZXN0IGJsb2NrIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy05LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjEwOmNvbmZpZyBCTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTExLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZhdWx0IGluamVjdGlvbiBmb3IgTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclwmIzM0O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjEyOlx0ZGVwZW5kcyBvbiBCTEtfREVWX05VTExfQkxLIFx1MDAyNlx1MDAyNiBGQVVMVF9JTkpFQ1RJT05fQ09ORklHRlNcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlPTQ9Y2NmbGFncy15XHRcdFx0JiM0Mzs9IC1JJChzcmMpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlLTUtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0JMS19ERVZfTlVMTF9CTEspXHQmIzQzOz0gbnVsbF9ibGsub1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZS03LW51bGxfYmxrLW9ianNcdFx0XHQ6PSBtYWluLm9cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjIyOiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIzLXN0YXRpYyBERUNMQVJFX0ZBVUxUX0FUVFIobnVsbF90aW1lb3V0X2F0dHIpO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTk4PU1PRFVMRV9QQVJNX0RFU0MoaG9tZV9ub2RlLCBcJiMzNDtIb21lIG5vZGUgZm9yIHRoZSBkZXZpY2VcJiMzNDspO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtOTktXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMDA6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTAxLS8qXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NjQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudWxsYl9kZXZpY2VfdHlwZSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02NTQtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo2NTU6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNjU2LVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTc3Nz1zdGF0aWMgc3RydWN0IG51bGxiX2RldmljZSAqbnVsbF9hbGxvY19kZXYodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03ODQtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo3ODU6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzg2LVx0ZGV2LVx1MDAzZXRpbWVvdXRfY29uZmlnLmF0dHIgPSBudWxsX3RpbWVvdXRfYXR0cjtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNDg0PXN0YXRpYyB2b2lkIG51bGxiX3NldHVwX2J3dGltZXIoc3RydWN0IG51bGxiICpudWxsYilcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDkyLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQ5MzojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDk0LVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE4ODU9c3RhdGljIGludCBudWxsX3ZhbGlkYXRlX2NvbmYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5MjctXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxOTI4OiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5Mjktc3RhdGljIGJvb2wgX19udWxsX3NldHVwX2ZhdWx0KHN0cnVjdCBmYXVsdF9hdHRyICphdHRyLCBjaGFyICpzdHIpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTk0Mj1zdGF0aWMgYm9vbCBudWxsX3NldHVwX2ZhdWx0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTQzLXtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE5NDQ6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk0NS1cdGlmICghX19udWxsX3NldHVwX2ZhdWx0KFx1MDAyNm51bGxfdGltZW91dF9hdHRyLCBnX3RpbWVvdXRfc3RyKSlcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg9NTM9c3RydWN0IG51bGxiX2RldmljZSB7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTU1LVx0c3RydWN0IGNvbmZpZ19ncm91cCBncm91cDtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDo1NjojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtNTctXHRzdHJ1Y3QgZmF1bHRfY29uZmlnIHRpbWVvdXRfY29uZmlnO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nLCBgQkxLX0RFVl9OVUxMX0JMS2Agc2VlbXMgbGlrZSBhIHNvbGlkIGNob2ljZSBmb3IgZ2VuZXJhbCBibG9jayBkZXZpY2UgdGVzdGluZy4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGF2b2lkIG92ZXJseSBnZW5lcmljIGNvbmZpZ3MuIFdlIHdhbnQgdG8gZm9jdXMgb24gd2hhdCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHRoZSBjaGFuZ2VzIGluIHRoZSBjb2RlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYmFzZWQgb24gdGhlIGNvbnRleHQsIGBCTEtfREVWX1pPTkVEYCBpcyB0aGUgY29uZmlnIHRoYXQmIzM5O3MgZGlyZWN0bHkgcmVsZXZhbnQgdG8gdGhlIG1vZGlmaWNhdGlvbnMuCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIOKAkyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1bmN0aW9ucyBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgaXMgc3RhdGljLiBMb29rcyBsaWtlIEkgd2FzIHJpZ2h0LCBhbmQgdGhhdCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBpcyBhbHNvIHN0YXRpYy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgIGV4cG9ydGVkLCBvciBnbG9iYWw/IEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGJ5IGxvb2tpbmcgaW50byBgYmxvY2svYmxrLXpvbmVkLmNgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay16b25lZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay16b25lZC5jPTIwMDg9c3RhdGljIHZvaWQgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTIwMjYtXG5ibG9jay9ibGstem9uZWQuYzoyMDI3OnZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuYmxvY2svYmxrLXpvbmVkLmMtMjAyOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE0OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjI4CgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDM3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBab25lZCBCbG9jayBEZXZpY2UgTGlmZWN5Y2xlIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgbm90IGV4cG9ydGVkLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgY29yZSB0byB0aGUgc3lzdGVtLCBhbmQgcHJvYmFibHkgc29tZXRoaW5nIHN1YnRsZS4gSXQmIzM5O3MgdXNlZCBpbiBgYmxvY2svZ2VuaGQuY2AsIHdoaWNoIGlzIGJ1aWx0LWluLCBzbyBJIGtub3cgd2hlcmUgdGhlIGVudHJ5IHBvaW50IGlzLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4KCkdpdmVuIHRoYXQgY29udGV4dCwgdGhlIGNyaXRpY2FsIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AsIGBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXNgLCBgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzYCwgYW5kIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYC4gVGhvc2UgYXJlIHRoZSBlbnRyeXBvaW50cyBhbmQgcmVzb3VyY2VzIHRoYXQgYXJlIGxpa2VseSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMuCgpUaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgem9uZSB3cml0ZSBwbHVnIHdvcmtxdWV1ZSBsaWZlY3ljbGUgc3BlY2lmaWNhbGx5IGZvciB6b25lZCBibG9jayBkZXZpY2VzLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFib3V0IHByZXZlbnRpbmcgdGhlIHdvcmtxdWV1ZSBmcm9tIGJlaW5nIHByZW1hdHVyZWx5IGRlc3Ryb3llZCBkdXJpbmcgem9uZSByZXZhbGlkYXRpb247IGl0IG5vdyBkcmFpbnMgdGhlIHF1ZXVlIGFuZCBkZWZlcnMgdGhlIGRlc3RydWN0aW9uIHVudGlsIGRpc2sgcmVsZWFzZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyBmb3Igem9uZWQgZGV2aWNlcy4gVGhlIGZhY3QgdGhhdCBpdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmlydHVhbGl6ZWQgem9uZWQgYmxvY2sgZGV2aWNlcywgbGlrZSBgbnVsbF9ibGtgLCBtZWFucyBpdCYjMzk7cyBwcmV0dHkgaW1wb3J0YW50LCBhcyBpdCBpbXBhY3RzIG1vcmUgdGhhbiBqdXN0IGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucy4KClNvLCBmb3IgZnV6emluZywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGl0OyBpdCYjMzk7cyBhIGxpZmVjeWNsZSBpc3N1ZSBhZmZlY3RpbmcgYSBjb3JlIGNvbXBvbmVudC4gVGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyBhIGxpZmVjeWNsZSBidWcsIGl0IGFmZmVjdHMgem9uZWQgZGV2aWNlcywgaXQmIzM5O3MgY29yZSBibG9jayBsYXllciBsb2dpYywgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgdmlydHVhbGl6YXRpb24uIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBhcyBsaXN0ZWQgYWJvdmUuCgpUaGUgZW5hYmxlIGNvbmZpZyBpcyBgQkxLX0RFVl9aT05FRGAsIGFuZCBhIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgaXQmIzM5O3MgdGhlIG9ubHkgb25lIHRoYXQgZ3VhcmRzIGBibGstem9uZWQuY2AuIEdvb2QsIHRoYXQgbWVhbnMgdGhlIGRlcGVuZGVuY2llcyBhcmUgc2ltcGxlLiBUaW1lIHRvIGZsYWcgdGhpcyBmb3IgZnVydGhlciBhbmFseXNpcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2Rpc2tfZnJlZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7YmxrX3JldmFsaWRhdGVfZGlza196b25lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgbGlmZWN5Y2xlIG9mIHRoZSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGZvciB6b25lZCBibG9jayBkZXZpY2VzLiBJdCBwcmV2ZW50cyB0aGUgd29ya3F1ZXVlIGZyb20gYmVpbmcgZGVzdHJveWVkIGR1cmluZyB6b25lIHJldmFsaWRhdGlvbiwgaW5zdGVhZCBkcmFpbmluZyBpdCBhbmQgZGVmZXJyaW5nIGRlc3RydWN0aW9uIHRvIGRpc2sgcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgZm9yIHpvbmVkIGRldmljZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmlydHVhbGl6ZWQgem9uZWQgYmxvY2sgZGV2aWNlcyAobGlrZSBudWxsX2JsaykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2Rpc2tfZnJlZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7YmxrX3JldmFsaWRhdGVfZGlza196b25lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgbGlmZWN5Y2xlIG9mIHRoZSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGZvciB6b25lZCBibG9jayBkZXZpY2VzLiBJdCBwcmV2ZW50cyB0aGUgd29ya3F1ZXVlIGZyb20gYmVpbmcgZGVzdHJveWVkIGR1cmluZyB6b25lIHJldmFsaWRhdGlvbiwgaW5zdGVhZCBkcmFpbmluZyBpdCBhbmQgZGVmZXJyaW5nIGRlc3RydWN0aW9uIHRvIGRpc2sgcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgZm9yIHpvbmVkIGRldmljZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmlydHVhbGl6ZWQgem9uZWQgYmxvY2sgZGV2aWNlcyAobGlrZSBudWxsX2JsaykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMTowNS41MDg5MzMzODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY1MDIwNzY0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9aT05FRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNcIixcbiAgICBcImRpc2tfZnJlZV96b25lX3Jlc291cmNlc1wiLFxuICAgIFwiZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGxpZmVjeWNsZSBvZiB0aGUgem9uZSB3cml0ZSBwbHVnIHdvcmtxdWV1ZSBmb3Igem9uZWQgYmxvY2sgZGV2aWNlcy4gSXQgcHJldmVudHMgdGhlIHdvcmtxdWV1ZSBmcm9tIGJlaW5nIGRlc3Ryb3llZCBkdXJpbmcgem9uZSByZXZhbGlkYXRpb24sIGluc3RlYWQgZHJhaW5pbmcgaXQgYW5kIGRlZmVycmluZyBkZXN0cnVjdGlvbiB0byBkaXNrIHJlbGVhc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJsb2NrIGxheWVyIGxvZ2ljIGZvciB6b25lZCBkZXZpY2VzIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHZpcnR1YWxpemVkIHpvbmVkIGJsb2NrIGRldmljZXMgKGxpa2UgbnVsbF9ibGspLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMTowNS41MDg5Mzg2OTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzM2NzQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFhM2E2MTllZTJkYjc4MmRjYjRkZmUyNTRiZWQ3ZWZjMzkxZjEzYTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAxNDozMTowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstem9uZWQuYyBiL2Jsb2NrL2Jsay16b25lZC5jXFxuaW5kZXggYmVhODE3ZjNkZTU2MDIuLmNhMzBjYWVjODM4ZTczIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay16b25lZC5jXFxuKysrIGIvYmxvY2svYmxrLXpvbmVkLmNcXG5AQCAtMTkyMywxMSArMTkyMywyMCBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdGlmICghZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfcG9vbClcXG4gXFx0XFx0Z290byBmcmVlX2hhc2g7XFxuIFxcbi1cXHRkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193cSA9XFxuLVxcdFxcdGFsbG9jX3dvcmtxdWV1ZShcXFwiJXNfendwbHVnc1xcXCIsIFdRX01FTV9SRUNMQUlNIHwgV1FfSElHSFBSSSB8IFdRX1BFUkNQVSxcXG4tXFx0XFx0XFx0XFx0cG9vbF9zaXplLCBkaXNrLVxcdTAwM2VkaXNrX25hbWUpO1xcbi1cXHRpZiAoIWRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxKVxcbi1cXHRcXHRnb3RvIGRlc3Ryb3lfcG9vbDtcXG4rXFx0LypcXG4rXFx0ICogV2UgbWF5IGFscmVhZHkgaGF2ZSBhIHpvbmUgd3JpdGUgcGx1ZyB3b3JrcXVldWUgYXMgdGhpcyBmdW5jdGlvbiBtYXlcXG4rXFx0ICogYmUgY2FsbGVkIGFmdGVyIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcygpLCB3aGljaCBkb2VzIG5vdCBkZXN0cm95XFxuK1xcdCAqIHRoZSB3b3JrcXVldWUgKHRoZSB6b25lIHdyaXRlIHBsdWdzIHdvcmtxdWV1ZSBpcyBkZXN0cm95ZWQgYXRcXG4rXFx0ICogZGlza19yZWxlYXNlKCkgdGltZSkuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxKSB7XFxuK1xcdFxcdGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxID1cXG4rXFx0XFx0XFx0YWxsb2Nfd29ya3F1ZXVlKFxcXCIlc196d3BsdWdzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0V1FfTUVNX1JFQ0xBSU0gfCBXUV9ISUdIUFJJIHwgV1FfUEVSQ1BVLFxcbitcXHRcXHRcXHRcXHRcXHRwb29sX3NpemUsIGRpc2stXFx1MDAzZWRpc2tfbmFtZSk7XFxuK1xcdFxcdGlmICghZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpXFxuK1xcdFxcdFxcdGdvdG8gZGVzdHJveV9wb29sO1xcbitcXHR9XFxuIFxcbiBcXHRkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193b3JrZXIgPVxcbiBcXHRcXHRrdGhyZWFkX2NyZWF0ZShkaXNrX3pvbmVfd3BsdWdzX3dvcmtlciwgZGlzayxcXG5AQCAtMTkzNSwxNSArMTk0NCwxMiBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdGlmIChJU19FUlIoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyKSkge1xcbiBcXHRcXHRyZXQgPSBQVFJfRVJSKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XFxuIFxcdFxcdGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlciA9IE5VTEw7XFxuLVxcdFxcdGdvdG8gZGVzdHJveV93cTtcXG4rXFx0XFx0Z290byBkZXN0cm95X3Bvb2w7XFxuIFxcdH1cXG4gXFx0d2FrZV91cF9wcm9jZXNzKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLWRlc3Ryb3lfd3E6XFxuLVxcdGRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxKTtcXG4tXFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EgPSBOVUxMO1xcbiBkZXN0cm95X3Bvb2w6XFxuIFxcdG1lbXBvb2xfZGVzdHJveShkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19wb29sKTtcXG4gXFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IE5VTEw7XFxuQEAgLTE5OTksNyArMjAwNSw3IEBAIHN0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX2NvbmRfYXJyYXkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4ICp6b25lc19jb25kKVxcbiBcXHRrZnJlZV9yY3VfbWlnaHRzbGVlcCh6b25lc19jb25kKTtcXG4gfVxcbiBcXG4tdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuK3N0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4ge1xcbiBcXHRpZiAoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyKSB7XFxuIFxcdFxcdGt0aHJlYWRfc3RvcChkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193b3JrZXIpO1xcbkBAIC0yMDA3LDEwICsyMDEzLDggQEAgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuIFxcdH1cXG4gXFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19saXN0KSk7XFxuIFxcbi1cXHRpZiAoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcXG4tXFx0XFx0ZGVzdHJveV93b3JrcXVldWUoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xcbi1cXHRcXHRkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193cSA9IE5VTEw7XFxuLVxcdH1cXG4rXFx0aWYgKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxKVxcbitcXHRcXHRkcmFpbl93b3JrcXVldWUoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xcbiBcXG4gXFx0ZGlza19kZXN0cm95X3pvbmVfd3BsdWdzX2hhc2hfdGFibGUoZGlzayk7XFxuIFxcbkBAIC0yMDIwLDYgKzIwMjQsMTYgQEAgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuIFxcdGRpc2stXFx1MDAzZW5yX3pvbmVzID0gMDtcXG4gfVxcbiBcXG4rdm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuK3tcXG4rXFx0aWYgKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxKSB7XFxuK1xcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxKTtcXG4rXFx0XFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EgPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoZGlzayk7XFxuK31cXG4rXFxuIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3Mge1xcbiBcXHRzdHJ1Y3QgZ2VuZGlza1xcdCpkaXNrO1xcbiBcXHR1OFxcdFxcdCp6b25lc19jb25kO1xcbmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oXFxuaW5kZXggMjVhZjhhYzVlZjBmNzcuLmZiOTVkM2M1ODk1MGMxIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay5oXFxuKysrIGIvYmxvY2svYmxrLmhcXG5AQCAtNTI4LDcgKzUyOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpb2NfY2xlYXJfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuIFxcbiAjaWZkZWYgQ09ORklHX0JMS19ERVZfWk9ORURcXG4gdm9pZCBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spO1xcbi12b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XFxuK3ZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcXG4gc3RhdGljIGlubGluZSBib29sIGJpb196b25lX3dyaXRlX3BsdWdnaW5nKHN0cnVjdCBiaW8gKmJpbylcXG4ge1xcbiBcXHRyZXR1cm4gYmlvX2ZsYWdnZWQoYmlvLCBCSU9fWk9ORV9XUklURV9QTFVHR0lORyk7XFxuQEAgLTU4MSw3ICs1ODEsNyBAQCBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuIHtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiB7XFxuIH1cXG4gc3RhdGljIGlubGluZSBib29sIGJpb196b25lX3dyaXRlX3BsdWdnaW5nKHN0cnVjdCBiaW8gKmJpbylcXG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcXG5pbmRleCBmODRiNmEzNTViNTc0YS4uMzBhYzBmZmU2NTE3NDUgMTAwNjQ0XFxuLS0tIGEvYmxvY2svZ2VuaGQuY1xcbisrKyBiL2Jsb2NrL2dlbmhkLmNcXG5AQCAtMTMwMCw3ICsxMzAwLDcgQEAgc3RhdGljIHZvaWQgZGlza19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFxuIFxcdGRpc2tfcmVsZWFzZV9ldmVudHMoZGlzayk7XFxuIFxcdGtmcmVlKGRpc2stXFx1MDAzZXJhbmRvbSk7XFxuLVxcdGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTtcXG4rXFx0ZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xcbiBcXHR4YV9kZXN0cm95KFxcdTAwMjZkaXNrLVxcdTAwM2VwYXJ0X3RibCk7XFxuIFxcbiBcXHRrb2JqZWN0X3B1dChcXHUwMDI2ZGlzay1cXHUwMDNlcXVldWVfa29iaik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE0OjMxOjA1Ljk0MzE5NTg4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2MDY3ODAyNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXNcIixcbiAgICBcImRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc1wiLFxuICAgIFwiYmxrX3JldmFsaWRhdGVfZGlza196b25lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHpvbmUgd3JpdGUgcGx1ZyB3b3JrcXVldWUgZm9yIHpvbmVkIGJsb2NrIGRldmljZXMuIEl0IHByZXZlbnRzIHRoZSB3b3JrcXVldWUgZnJvbSBiZWluZyBkZXN0cm95ZWQgZHVyaW5nIHpvbmUgcmV2YWxpZGF0aW9uLCBpbnN0ZWFkIGRyYWluaW5nIGl0IGFuZCBkZWZlcnJpbmcgZGVzdHJ1Y3Rpb24gdG8gZGlzayByZWxlYXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyBmb3Igem9uZWQgZGV2aWNlcyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB2aXJ0dWFsaXplZCB6b25lZCBibG9jayBkZXZpY2VzIChsaWtlIG51bGxfYmxrKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYTNhNjE5ZWUyZGI3ODJkY2I0ZGZlMjU0YmVkN2VmYzM5MWYxM2E1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxNDozMTowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay16b25lZC5jIGIvYmxvY2svYmxrLXpvbmVkLmNcbmluZGV4IGJlYTgxN2YzZGU1NjAyLi5jYTMwY2FlYzgzOGU3MyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay16b25lZC5jXG4rKysgYi9ibG9jay9ibGstem9uZWQuY1xuQEAgLTE5MjMsMTEgKzE5MjMsMjAgQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wpXG4gXHRcdGdvdG8gZnJlZV9oYXNoO1xuIFxuLVx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9XG4tXHRcdGFsbG9jX3dvcmtxdWV1ZShcIiVzX3p3cGx1Z3NcIiwgV1FfTUVNX1JFQ0xBSU0gfCBXUV9ISUdIUFJJIHwgV1FfUEVSQ1BVLFxuLVx0XHRcdFx0cG9vbF9zaXplLCBkaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG4tXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpXG4tXHRcdGdvdG8gZGVzdHJveV9wb29sO1xuK1x0LypcbitcdCAqIFdlIG1heSBhbHJlYWR5IGhhdmUgYSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGFzIHRoaXMgZnVuY3Rpb24gbWF5XG4rXHQgKiBiZSBjYWxsZWQgYWZ0ZXIgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKCksIHdoaWNoIGRvZXMgbm90IGRlc3Ryb3lcbitcdCAqIHRoZSB3b3JrcXVldWUgKHRoZSB6b25lIHdyaXRlIHBsdWdzIHdvcmtxdWV1ZSBpcyBkZXN0cm95ZWQgYXRcbitcdCAqIGRpc2tfcmVsZWFzZSgpIHRpbWUpLlxuK1x0ICovXG4rXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcbitcdFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9XG4rXHRcdFx0YWxsb2Nfd29ya3F1ZXVlKFwiJXNfendwbHVnc1wiLFxuK1x0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsXG4rXHRcdFx0XHRcdHBvb2xfc2l6ZSwgZGlzay1cdTAwM2VkaXNrX25hbWUpO1xuK1x0XHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpXG4rXHRcdFx0Z290byBkZXN0cm95X3Bvb2w7XG4rXHR9XG4gXG4gXHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlciA9XG4gXHRcdGt0aHJlYWRfY3JlYXRlKGRpc2tfem9uZV93cGx1Z3Nfd29ya2VyLCBkaXNrLFxuQEAgLTE5MzUsMTUgKzE5NDQsMTIgQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0aWYgKElTX0VSUihkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcikpIHtcbiBcdFx0cmV0ID0gUFRSX0VSUihkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XG4gXHRcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyID0gTlVMTDtcbi1cdFx0Z290byBkZXN0cm95X3dxO1xuK1x0XHRnb3RvIGRlc3Ryb3lfcG9vbDtcbiBcdH1cbiBcdHdha2VfdXBfcHJvY2VzcyhkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1kZXN0cm95X3dxOlxuLVx0ZGVzdHJveV93b3JrcXVldWUoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSk7XG4tXHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxID0gTlVMTDtcbiBkZXN0cm95X3Bvb2w6XG4gXHRtZW1wb29sX2Rlc3Ryb3koZGlzay1cdTAwM2V6b25lX3dwbHVnc19wb29sKTtcbiBcdGRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IE5VTEw7XG5AQCAtMTk5OSw3ICsyMDA1LDcgQEAgc3RhdGljIHZvaWQgZGlza19zZXRfem9uZXNfY29uZF9hcnJheShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggKnpvbmVzX2NvbmQpXG4gXHRrZnJlZV9yY3VfbWlnaHRzbGVlcCh6b25lc19jb25kKTtcbiB9XG4gXG4tdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4rc3RhdGljIHZvaWQgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbiBcdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcikge1xuIFx0XHRrdGhyZWFkX3N0b3AoZGlzay1cdTAwM2V6b25lX3dwbHVnc193b3JrZXIpO1xuQEAgLTIwMDcsMTAgKzIwMTMsOCBAQCB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdH1cbiBcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2xpc3QpKTtcbiBcbi1cdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKSB7XG4tXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xuLVx0XHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxID0gTlVMTDtcbi1cdH1cbitcdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKVxuK1x0XHRkcmFpbl93b3JrcXVldWUoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSk7XG4gXG4gXHRkaXNrX2Rlc3Ryb3lfem9uZV93cGx1Z3NfaGFzaF90YWJsZShkaXNrKTtcbiBcbkBAIC0yMDIwLDYgKzIwMjQsMTYgQEAgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRkaXNrLVx1MDAzZW5yX3pvbmVzID0gMDtcbiB9XG4gXG4rdm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4re1xuK1x0aWYgKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcbitcdFx0ZGVzdHJveV93b3JrcXVldWUoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSk7XG4rXHRcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EgPSBOVUxMO1xuK1x0fVxuK1xuK1x0ZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xuK31cbitcbiBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzIHtcbiBcdHN0cnVjdCBnZW5kaXNrXHQqZGlzaztcbiBcdHU4XHRcdCp6b25lc19jb25kO1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcbmluZGV4IDI1YWY4YWM1ZWYwZjc3Li5mYjk1ZDNjNTg5NTBjMSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay5oXG4rKysgYi9ibG9jay9ibGsuaFxuQEAgLTUyOCw3ICs1MjgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW9jX2NsZWFyX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuIFxuICNpZmRlZiBDT05GSUdfQkxLX0RFVl9aT05FRFxuIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbi12b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XG4rdm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fem9uZV93cml0ZV9wbHVnZ2luZyhzdHJ1Y3QgYmlvICpiaW8pXG4ge1xuIFx0cmV0dXJuIGJpb19mbGFnZ2VkKGJpbywgQklPX1pPTkVfV1JJVEVfUExVR0dJTkcpO1xuQEAgLTU4MSw3ICs1ODEsNyBAQCBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4gc3RhdGljIGlubGluZSB2b2lkIGRpc2tfaW5pdF96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4rc3RhdGljIGlubGluZSB2b2lkIGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4gfVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fem9uZV93cml0ZV9wbHVnZ2luZyhzdHJ1Y3QgYmlvICpiaW8pXG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcbmluZGV4IGY4NGI2YTM1NWI1NzRhLi4zMGFjMGZmZTY1MTc0NSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcbisrKyBiL2Jsb2NrL2dlbmhkLmNcbkBAIC0xMzAwLDcgKzEzMDAsNyBAQCBzdGF0aWMgdm9pZCBkaXNrX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIFxuIFx0ZGlza19yZWxlYXNlX2V2ZW50cyhkaXNrKTtcbiBcdGtmcmVlKGRpc2stXHUwMDNlcmFuZG9tKTtcbi1cdGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTtcbitcdGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyhkaXNrKTtcbiBcdHhhX2Rlc3Ryb3koXHUwMDI2ZGlzay1cdTAwM2VwYXJ0X3RibCk7XG4gXG4gXHRrb2JqZWN0X3B1dChcdTAwMjZkaXNrLVx1MDAzZXF1ZXVlX2tvYmopO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6MDUuOTQzMTk3NjY4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkyMzM3NTQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpvbmUgUmVzb3VyY2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0d2Vha2luZyBob3cgem9uZWQgcmVzb3VyY2VzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIsIHNwZWNpZmljYWxseSBpbiBgYmxvY2svYmxrLXpvbmVkLmNgLCBgYmxvY2svYmxrLmhgLCBhbmQgYGJsb2NrL2dlbmhkLmNgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgc3VidGxlIHJhY2UgY29uZGl0aW9uIG9yIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWUgYXJvdW5kIGBkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxYC4gIEluc3RlYWQgb2YgYSBzaW1wbGUgZGVzdHJveSBvZiB0aGUgd29ya3F1ZXVlIGluIGBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoKWAsIHRoZSBjb2RlIGlzIG5vdyBkcmFpbmluZyBpdCBmaXJzdCwgYW5kIHRoZSAqYWN0dWFsKiBkZXN0cnVjdGlvbiBpcyBkZWxlZ2F0ZWQgdG8gdGhpcyBuZXcgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcygpYCBmdW5jdGlvbi4gIFRoYXQgb25lIGlzIGNhbGxlZCBmcm9tIGBkaXNrX3JlbGVhc2UoKWAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIHRoZSBmaW5hbCBjbGVhbnVwLiAgQW5kIGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKClgIGlzIGJlaW5nIGFkYXB0ZWQgdG8gcmV1c2UgdGhlIHdvcmtxdWV1ZSBpZiBpdCdzIGFscmVhZHkgdGhlcmUuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGtub3cgd2hpY2ggQ09ORklHIG9wdGlvbnMgYXJlIHJlbGV2YW50LiBTaW5jZSB0aGUgcGF0Y2ggdG91Y2hlcyBgYmxvY2svYmxrLXpvbmVkLmNgIGFuZCBgYmxvY2svYmxrLmhgLCBJIGV4cGVjdCBhdCBsZWFzdCBgQ09ORklHX0JMS19ERVZfWk9ORURgIHRvIGJlIGluIHBsYXkuIExvb2tpbmcgYXQgYGJsb2NrL2Jsay5oYCwgdGhlIHByZXNlbmNlIG9mIGBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMoKWAgYW5kIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoKWAgZGVmaW5pdGlvbnMsIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfQkxLX0RFVl9aT05FRGAsIGNvbmZpcm1zIG15IHN1c3BpY2lvbi5cblxuTm93IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhhdCBgYmxvY2svYmxrLXpvbmVkLmNgIGlzIGluZGVlZCBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19CTEtfREVWX1pPTkVEYCBpcyBlbmFibGVkIHRvIGJlIHN1cmUuIEl0J3MgdXN1YWxseSB0aGUgbW9zdCBjb21tb24gZGVwZW5kZW5jeS4gSSdsbCBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjYwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6MTQuODY2NTc2MDQ5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1Mjk4NTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsay16b25lZC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL01ha2VmaWxlPTMxPW9iai0kKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkgKz0gYmlvLWludGVncml0eS5vIGJsay1pbnRlZ3JpdHkubyB0MTAtcGkubyBcXFxcXFxuYmxvY2svTWFrZWZpbGUtMzItXFx0XFx0XFx0XFx0ICAgYmlvLWludGVncml0eS1hdXRvLm8gYmlvLWludGVncml0eS1mcy5vXFxuYmxvY2svTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX0JMS19ERVZfWk9ORUQpXFx0Kz0gYmxrLXpvbmVkLm9cXG5ibG9jay9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfQkxLX1dCVClcXHRcXHQrPSBibGstd2J0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6MTQuOTQxODg0MzcxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyOTAyNjYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBab25lZCBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfQkxLX0RFVl9aT05FRGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZS4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBuYWlsIGRvd24uIFRoaXMgcGF0Y2ggaXMgZ29pbmcgdG8gYmUgZGlnZ2luZyBpbnRvIHRoZSB6b25lZCBibG9jayBkZXZpY2UgcmVzb3VyY2UgbWFuYWdlbWVudC5cblxuTm93LCBpdCBsb29rcyBsaWtlIHRoaXMgdXBkYXRlIGlzIHplcm9pbmcgaW4gb24gdGhyZWUgY29yZSBmdW5jdGlvbnM6IGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCwgYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2AsIGFuZCB0aGUgbmV3bHkgaW50cm9kdWNlZCBgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzYC4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgZm9yIGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCBhbmQgYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2AuIFVuZGVyc3RhbmRpbmcgd2hlcmUgdGhvc2UgYXJlIGNhbGxlZCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvbiBob3cgdGhpcyBwYXRjaCBpbnRlbmRzIHRvIGltcGFjdCB0aGUgb3ZlcmFsbCB6b25lIGxpZmVjeWNsZSwgZnJvbSByZXNvdXJjZSBhbGxvY2F0aW9uIHRvIHJlbGVhc2UuIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHRzIGluIHdoaWNoIHJlc291cmNlcyBhcmUgbWFuYWdlZCwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFkZGluZyBgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzYC4gSXQncyBhbGwgYWJvdXQgc2NvcGluZyB0aGUgaW1wYWN0LCBhbmQgc2VlaW5nIGhvdyBpdCBmaXRzIGludG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgYWZmYWlycywgc28gSSBjYW4gc3RhcnQgZm9ybWluZyBzb21lIG9waW5pb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDg2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6MTkuMzcwOTE1MTU1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTcyNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay16b25lZC5jPTE4ODU9dm9pZCBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0xOTAxLVxcbmJsb2NrL2Jsay16b25lZC5jOjE5MDI6c3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay16b25lZC5jLTE5MDMtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgcG9vbF9zaXplKVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MjA0Nz1zdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIwNzUtXFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoKSB7XFxuYmxvY2svYmxrLXpvbmVkLmM6MjA3NjpcXHRcXHRyZXQgPSBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKGRpc2ssIHBvb2xfc2l6ZSk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMjA3Ny1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMToxOS40NDM4OTg4NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzE0MzAwOTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgRGlzayBab25lIFJlc291cmNlIFZhbGlkYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgaXMgY2xlYXJseSBhIGRvd25zdHJlYW0gZnVuY3Rpb24sIGNhbGxlZCBieSBgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgdGhhdCBzZXRzIHVwIGEgc3BlY2lmaWMgZGVwZW5kZW5jeS5cIiBOb3csIG15IGZvY3VzIHNoaWZ0cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGNvbnRleHQ6IHdoZXJlICppcyogYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2AgYWN0dWFsbHkgdHJpZ2dlcmVkPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIGlzIGtleSB0byB0cmFjaW5nIHRoZSByZXNvdXJjZSBhbGxvY2F0aW9uIGxpZmVjeWNsZSBhbmQgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgaGlnaC1sZXZlbCBwdXJwb3NlIG9mIHRoZSBjYWxsLCBhbmQgd2hldGhlciBvciBub3QgaXQgaXMgY3JpdGljYWwgaW4gYSBwZXJmb3JtYW5jZSBzY2VuYXJpby4gV2hlcmUgYXJlIHdlIGluIHRoZSBhcmNoaXRlY3R1cmUsIGFuZCB3aGF04oCZcyBkcml2aW5nIHRoZXNlIHZhbGlkYXRpb25zPyBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIGNvbnRyb2wgYW5kIHBvdGVudGlhbCB0aW1pbmcgaXNzdWVzIGludm9sdmVkIHdpdGggem9uZSByZXNvdXJjZSBhbGxvY2F0aW9uLiBMZXTigJlzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB0aGUgY2hhaW4gb2YgZXZlbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjU4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6MjkuMTU4MjAxODRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MDk1MzUyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay16b25lZC5jPTIwMzc9c3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyB7XFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0yMDQ2LVxcbmJsb2NrL2Jsay16b25lZC5jOjIwNDc6c3RhdGljIGludCBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuYmxvY2svYmxrLXpvbmVkLmMtMjA0OC1cXHRcXHRcXHRcXHRzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzICphcmdzKVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MjM0ND1pbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIzNzctXFx0bm9pb19mbGFnID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XFxuYmxvY2svYmxrLXpvbmVkLmM6MjM3ODpcXHRyZXQgPSBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgXFx1MDAyNmFyZ3MpO1xcbmJsb2NrL2Jsay16b25lZC5jLTIzNzktXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMTozMC41MjkxNjEzNjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA5MjQ5MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIERpc2sgWm9uZSBSZXZhbGlkYXRpb24qKlxuXG5SaWdodCwgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLi4uIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZXZhbGlkYXRpb24gcHJvY2VzcyBmb3IgZGlzayB6b25lcywgc28gd2hlcmUgaXMgdGhhdCBjcnVjaWFsIGBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXNgIGZ1bmN0aW9uIGNhbGxlZD8gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgd2UncmUgY2xlYW5pbmcgdXAgYWZ0ZXIgYSByZXZhbGlkYXRpb24gZXZlbnQuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgcGF0aCBmcm9tIHRoYXQgZW50cnkgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbi4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHRyYWNlIHRoZSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQ4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6MzQuNzM4NDEzMDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzgwMDY0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay16b25lZC5jPTE5MDI9c3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMTkyNy1cXHQgKiBXZSBtYXkgYWxyZWFkeSBoYXZlIGEgem9uZSB3cml0ZSBwbHVnIHdvcmtxdWV1ZSBhcyB0aGlzIGZ1bmN0aW9uIG1heVxcbmJsb2NrL2Jsay16b25lZC5jOjE5Mjg6XFx0ICogYmUgY2FsbGVkIGFmdGVyIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcygpLCB3aGljaCBkb2VzIG5vdCBkZXN0cm95XFxuYmxvY2svYmxrLXpvbmVkLmMtMTkyOS1cXHQgKiB0aGUgd29ya3F1ZXVlICh0aGUgem9uZSB3cml0ZSBwbHVncyB3b3JrcXVldWUgaXMgZGVzdHJveWVkIGF0XFxuLS1cXG5ibG9jay9ibGstem9uZWQuYz0xOTk2PXN0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX2NvbmRfYXJyYXkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4ICp6b25lc19jb25kKVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMjAwNy1cXG5ibG9jay9ibGstem9uZWQuYzoyMDA4OnN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9ibGstem9uZWQuYy0yMDA5LXtcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTIwMjc9dm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0yMDMzLVxcbmJsb2NrL2Jsay16b25lZC5jOjIwMzQ6XFx0ZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xcbmJsb2NrL2Jsay16b25lZC5jLTIwMzUtfVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MjM0ND1pbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTI0MTUtXFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xcbmJsb2NrL2Jsay16b25lZC5jOjI0MTY6XFx0ZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xcbmJsb2NrL2Jsay16b25lZC5jLTI0MTctXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6MzUuMjcyMjIxNzg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMDUzMjQwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQmxvY2sgTGF5ZXIgUGF0Y2ggZm9yIFpvbmVkIEJsb2NrIERldmljZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBhbmQgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2AgYXJlIGtleSBoZXJlLCBib3RoIG9mIHdoaWNoIGFyZSBjYWxsZWQgd2l0aGluIGRpZmZlcmVudCBhcmVhcyBvZiB0aGUgY29kZS4gSXQgc2VlbXMgbGlrZSBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBnZXRzIGNhbGxlZCBmcm9tIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCBhbmQsIGNydWNpYWxseSwgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2AgaXMgY2FsbGVkIGZyb20gYGRpc2tfcmVsZWFzZWAgaW4gYGJsb2NrL2dlbmhkLmNgLiBUaGUgcHJvYmxlbSBsaWVzIGluIHRoZSBsaWZlY3ljbGUgb2YgYSB3b3JrcXVldWUuIEJhc2ljYWxseSwgYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2Agd2FzIGRlc3Ryb3lpbmcgdGhlIHdvcmtxdWV1ZSwgYnV0IGl0IHdhcyBiZWluZyByZS1jcmVhdGVkIGFnYWluIGJ5IGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCB3aXRoaW4gcmV2YWxpZGF0aW9uLiBTbywgdGhpcyBwYXRjaCBtYWtlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGFkZHJlc3MgdGhlIHdvcmtxdWV1ZS4gVGhlIGZpeCBJJ20gc2VlaW5nIGlzIHRvIGRyYWluIHRoZSB3b3JrcXVldWUgaW4gYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2AsIGFuZCAqdGhlbiogZGVzdHJveSBpdCBpbiBgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzYCwgd2hpY2ggaXMgdGhlIGFwcHJvcHJpYXRlIHBsYWNlLiBUaGlzIG9ubHkgaGFwcGVucyB3aGVuIHRoZSBkaXNrIGlzIGZ1bGx5IHJlbGVhc2VkLlxuXG5UaGlzIGlzIGFsbCBwcmV0dHkgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGJsb2NrIGxheWVyLCBhbmQgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB6b25lZCBibG9jayBkZXZpY2VzLiBJdCdzIGRlZmluaXRlbHkgYSBidWcgZml4IHJlbGF0ZWQgdG8gd29ya3F1ZXVlIGxpZmVjeWNsZS4gSXQncyByZWFjaGFibGUgdmlhIHRoZSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbnMgb2Ygem9uZWQgYmxvY2sgZGV2aWNlcyBsaWtlIG51bGxfYmxrIGluIHpvbmVkIG1vZGUsIG9yIHNjc2lfZGVidWcgYWxzbyB3aGVuIGluIHpvbmVkIG1vZGUuIFNpbmNlIGl0J3MgcmVhY2hhYmxlIGFuZCBmaXhlcyBhIGNydWNpYWwgd29ya3F1ZXVlIGlzc3VlLCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0J3Mgd29ydGggZnV6emluZyBhbmQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5HaXZlbiBhbGwgb2YgdGhhdCwgbGV0J3MgY29uZmlybSB3aGV0aGVyIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCBpcyBhIGdvb2QgZm9jdXMgc3ltYm9sIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBUaGUgc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCBhbmQgYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2AgYW5kIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgIGFyZSBvZiBpbnRlcmVzdCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3ODcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6NDEuNDc3NTQ5Mzc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA4NDA5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3JldmFsaWRhdGVfZGlza196b25lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLXpvbmVkLmM9NTAzPXN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy01MjgtXFx0ICogYXR0YWNoZWQgdG8gdGhlIGRpc2ssIHRoZW4gdGhpcyBpcyBhIHpvbmUgd3JpdGUgcGx1ZyBpbnNlcnQgZnJvbSB0aGVcXG5ibG9jay9ibGstem9uZWQuYzo1Mjk6XFx0ICogZmlyc3QgY2FsbCB0byBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKCksIGluIHdoaWNoIGNhc2UgdGhlIHpvbmUgaXNcXG5ibG9jay9ibGstem9uZWQuYy01MzAtXFx0ICogbmVjZXNzYXJpbGx5IGluIHRoZSBhY3RpdmUgY29uZGl0aW9uLlxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MjI2Mj1zdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3pvbmVfY2Ioc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LFxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMjMzMS0vKipcXG5ibG9jay9ibGstem9uZWQuYzoyMzMyOiAqIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMgLSAocmUpYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgem9uZSB3cml0ZSBwbHVnc1xcbmJsb2NrL2Jsay16b25lZC5jLTIzMzMtICogQGRpc2s6XFx0VGFyZ2V0IGRpc2tcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIzNDMtICovXFxuYmxvY2svYmxrLXpvbmVkLmM6MjM0NDppbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9ibGstem9uZWQuYy0yMzQ1LXtcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTI0MjAtfVxcbmJsb2NrL2Jsay16b25lZC5jOjI0MjE6RVhQT1JUX1NZTUJPTF9HUEwoYmxrX3JldmFsaWRhdGVfZGlza196b25lcyk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMjQyMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6NDIuMDA4Mzk1MzI0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MDc3MDQzNjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCBVc2FnZSoqXG5cbk9rYXksIHNvIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCBpcyBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgcG90ZW50aWFsbHkgdXNlZCBvdXRzaWRlIHRoZSBibG9jayBzdWJzeXN0ZW0gcHJvcGVyLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgdGhhdCBtZWFucyBpdCdzIGxpa2VseSBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCB6b25lIHJldmFsaWRhdGlvbiwgcHJvYmFibHkgaW52b2x2aW5nIHRoaW5ncyBsaWtlIFNNUiBkcml2ZXMsIG1heWJlIFNTRCB3ZWFyIGxldmVsaW5nLCBvciBzb21lIG90aGVyIHN0b3JhZ2Ugb3B0aW1pemF0aW9uIG9yIGRhdGEgaW50ZWdyaXR5IGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoZSBmYWN0IHRoYXQgaXQncyBleHBvcnRlZCBtZWFucyBzb21lb25lIGRlY2lkZWQgdGhhdCBmdW5jdGlvbmFsaXR5IHdhcyB2YWx1YWJsZSBlbm91Z2ggdG8gZXhwb3NlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCAqd2hvKiBpcyB1c2luZyBpdCwgYW5kICp3aHkqLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc2l0ZXMuIEdvdHRhIHNlZSB3aGF0IG90aGVyIHN1YnN5c3RlbXMgYXJlIGNhbGxpbmcgdGhpcyBhbmQgd2hhdCB0aGV5IGFyZSBkb2luZyB3aXRoIGl0LiBMZXQncyBzZWUuLi4gb3V0c2lkZSBvZiBgYmxvY2svYCwgdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIHdpbGwgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMjozNy4wODU0NDE1NjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTQ4MjAxNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3JldmFsaWRhdGVfZGlza196b25lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9MTc1PWludCBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGIgKm51bGxiKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE4My1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6MTg0OlxcdHJldHVybiBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKGRpc2spO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xODUtfVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU1OD1zdGF0aWMgaW50IHVibGtfZ2V0X25yX3pvbmVzKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTY1LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NjY6c3RhdGljIGludCB1YmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01Njcte1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1Njg6XFx0cmV0dXJuIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXModWItXFx1MDAzZXViX2Rpc2spO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NjktfVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTc2NT1zdGF0aWMgdm9pZCB1YmxrX2Rldl9wYXJhbV96b25lZF9hcHBseShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTc2OC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NzY5OnN0YXRpYyBpbnQgdWJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IHVibGtfZGV2aWNlICp1YilcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNzcwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00NDA5PXN0YXRpYyBpbnQgdWJsa19jdHJsX3N0YXJ0X2RldihzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ1MzgtXFx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSkge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0NTM5OlxcdFxcdHJldCA9IHVibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHViKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDU0MC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTQzOD1zdGF0aWMgaW50IHZpcnRibGtfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNTM3LVxcdCAgICAobGltLmZlYXR1cmVzIFxcdTAwMjYgQkxLX0ZFQVRfWk9ORUQpKSB7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6MTUzODpcXHRcXHRlcnIgPSBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHZibGstXFx1MDAzZWRpc2spO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE1MzktXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMTczPXN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMzEwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMzExOlxcdHJldCA9IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoemxvLVxcdTAwM2VkaXNrKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTMxMi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9tZC9kbS16b25lLmM9MTUwPWJvb2wgZG1faXNfem9uZV93cml0ZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tem9uZS5jLTE2OC0gKiBmb3Igem9uZSBhcHBlbmQgZW11bGF0aW9uLiBOb3RlIHRoYXQgd2UgY2Fubm90IHNpbXBseSB1c2UgdGhlIGJsb2NrIGxheWVyXFxuZHJpdmVycy9tZC9kbS16b25lLmM6MTY5OiAqIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoKSBmdW5jdGlvbiBoZXJlIGFzIHRoZSBtYXBwZWQgZGV2aWNlIGlzIHN1c3BlbmRlZFxcbmRyaXZlcnMvbWQvZG0tem9uZS5jLTE3MC0gKiAodGhpcyBpcyBjYWxsZWQgZnJvbSBfX2JpbmQoKSBjb250ZXh0KS5cXG4tLVxcbmRyaXZlcnMvbWQvZG0tem9uZS5jPTE3Mj1pbnQgZG1fcmV2YWxpZGF0ZV96b25lcyhzdHJ1Y3QgZG1fdGFibGUgKnQsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbi0tXFxuZHJpdmVycy9tZC9kbS16b25lLmMtMTk4LVxcdG1kLVxcdTAwM2VyZXZhbGlkYXRlX21hcF90YXNrID0gY3VycmVudDtcXG5kcml2ZXJzL21kL2RtLXpvbmUuYzoxOTk6XFx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhkaXNrKTtcXG5kcml2ZXJzL21kL2RtLXpvbmUuYy0yMDAtXFx0bWQtXFx1MDAzZXJldmFsaWRhdGVfbWFwX3Rhc2sgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIzODc9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDk5LVxcdGlmIChibGtfcXVldWVfaXNfem9uZWQobnMtXFx1MDAzZXF1ZXVlKSkge1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTAwOlxcdFxcdHJldCA9IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMobnMtXFx1MDAzZWRpc2spO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTAxLVxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgIW52bWVfZmlyc3Rfc2Nhbihucy1cXHUwMDNlZGlzaykpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2RfemJjLmM9NTE5PXN0YXRpYyB2b2lkIHNkX3piY19wcmludF96b25lcyhzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwKVxcbi0tXFxuZHJpdmVycy9zY3NpL3NkX3piYy5jLTUzNi0vKlxcbmRyaXZlcnMvc2NzaS9zZF96YmMuYzo1Mzc6ICogQ2FsbCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKCkgaWYgYW55IG9mIHRoZSB6b25lZCBkaXNrIHByb3BlcnRpZXMgaGF2ZVxcbmRyaXZlcnMvc2NzaS9zZF96YmMuYy01MzgtICogY2hhbmdlZCB0aGF0IG1ha2UgaXQgbmVjZXNzYXJ5IHRvIGNhbGwgdGhhdCBmdW5jdGlvbi4gQ2FsbGVkIGJ5XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2RfemJjLmM9NTQxPWludCBzZF96YmNfcmV2YWxpZGF0ZV96b25lcyhzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwKVxcbi0tXFxuZHJpdmVycy9zY3NpL3NkX3piYy5jLTU2NS1cXHRmbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xcbmRyaXZlcnMvc2NzaS9zZF96YmMuYzo1NjY6XFx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhkaXNrKTtcXG5kcml2ZXJzL3Njc2kvc2RfemJjLmMtNTY3LVxcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShmbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE0OjMyOjM4LjgwMDI2ODUxN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDE5ODU5NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFpvbmVkIEJsb2NrIERldmljZSBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGlzIHByb2JsZW0uIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCBmZWVscyBsaWtlIGEgcGFydGljdWxhcmx5IHJlbGV2YW50IGZ1bmN0aW9uIHRvIHN0YXJ0IHdpdGg7IHRoYXQncyBhIGdvb2Qga2V5IHN5bWJvbC4gSSdsbCBhbHNvIHdhbnQgdG8gbG9vayBjbG9zZWx5IGF0IGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCwgYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2AsIGFuZCBgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzYCB3aGlsZSBJJ20gYXQgaXQuIFRob3NlIHNlZW0gbGlrZSB0aGV5J2QgYmUgaW50aW1hdGVseSBpbnZvbHZlZCB3aXRoIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGNlbnRlcmVkIGFyb3VuZCB6b25lZCBibG9jayBkZXZpY2VzLCBzbyBgQ09ORklHX0JMS19ERVZfWk9ORURgIGlzIGdvaW5nIHRvIGJlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24ga25vYiB3ZSdyZSBpbnRlcmVzdGVkIGluLCBvZiBjb3Vyc2UuIEJ1dCBhcmUgdGhlcmUgYW55IG90aGVyIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YsIGVzcGVjaWFsbHkgdG8gaGVscCB0ZXN0IHpvbmVkIGJsb2NrIGRldmljZXM/IEluIHRoZSBwYXN0LCBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgIGFsb25nc2lkZSBgQ09ORklHX0JMS19ERVZfWk9ORURgIGhhcyBvZnRlbiBiZWVuIHN1ZmZpY2llbnQgZm9yIHRlc3Rpbmcgem9uZWQgYmxvY2sgZGV2aWNlcyB1c2luZyB0aGUgbnVsbF9ibGsgZHJpdmVyLCB3aGljaCBpcyBjb252ZW5pZW50LiBTbyBJJ2xsIGRlZmluaXRlbHkgd2FudCB0byB2ZXJpZnkgdGhhdC4gSSdsbCBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgdG8gY2hlY2sgdXAgb24gYE5VTExfQkxLYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUyMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMjo0My4yMjAxMjk5ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQ5MTQ0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTlVMTF9CTEtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMjo0My4zMjI2Mjg2MDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2NzA3ODc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgTlVMTF9CTEsgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJbnN0ZWFkIG9mIGd1ZXNzaW5nLCBJJ20gdGhpbmtpbmcgbGV0J3MgZXhhbWluZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYC4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgYE5VTExfQkxLYCBjb25maWd1cmF0aW9uLiBUaGUgcXVlc3Rpb24gaXNuJ3Qgd2hldGhlciBpdCdzICpkZWZpbmVkKiwgYnV0IGhvdyBpdCdzICpjb25maWd1cmVkKiBvciAqY29uZGl0aW9uYWxpemVkKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBpdHMgYXZhaWxhYmlsaXR5IGlzIHRpZWQgdG8gYW55IG90aGVyIHNwZWNpZmljIGBjb25maWdgIG9wdGlvbnMuIEkgd2FudCB0byBrbm93LCBpbW1lZGlhdGVseSwgaWYgaXQncyBkZXBlbmRlbnQgb24gb3RoZXIgZmVhdHVyZSBmbGFncy4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIG1vc3QgZGlyZWN0IHBhdGggdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGJsb2NrIGRyaXZlciBpcyBjb250cm9sbGVkIGFuZCB3aGV0aGVyIGl0J3MgdW5pdmVyc2FsbHkgYWNjZXNzaWJsZSBvciByZXN0cmljdGVkIGluIGl0cyBidWlsZC10aW1lIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMjo0Ni4zODk3MTIwNDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDY5NjY2OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQkxLX0RFVl9OVUxMX0JMS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE0OjMyOjQ2LjUxMDQxNjczN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY0ODUyMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcsIHdoZXJlIHdvdWxkIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIG51bGwgYmxvY2sgZGV2aWNlLCBvciBzb21ldGhpbmcgYW5hbG9nb3VzLCByZXNpZGU/IFRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHNvbWV0aGluZyBsaWtlIHRoYXQgd291bGQgYmUgd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgdW5kZXIgdGhlIGBkcml2ZXJzL2Jsb2NrYCBkaXJlY3RvcnkuIEknbSBsZWFuaW5nIHRvd2FyZCBjaGVja2luZyB0aGUgYG51bGxfYmxrYCBkaXJlY3RvcnksIGlmIG9uZSBleGlzdHMsIGZvciBpdHMgYEtjb25maWdgIGZpbGUuIFRoYXQncyB1c3VhbGx5IHRoZSBwbGFjZSB3aGVyZSBmZWF0dXJlcyBhbmQgb3B0aW9ucyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgYmxvY2sgZHJpdmVyIGFyZSBkZWZpbmVkLiBJdCdsbCBnaXZlIG1lIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGRlZmF1bHQgc2V0dGluZ3MgdGhhdCB0aGUgZHJpdmVyIHVzZXMuIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgZHJpdmVyLCB0aGUgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBibG9jayBkZXZpY2VzIGl0IHdpbGwgY3JlYXRlLCB0aGUgZGVmYXVsdCBzaXplIG9mIHRoZSBkZXZpY2VzIGFuZCBvcHRpb25zIGZvciB0aGUgbnVtYmVyIG9mIGRldmljZXMgaXQgY3JlYXRlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBibG9jayBkZXZpY2UgaXMgZW5hYmxlZCBhbmQgaWYgaXQgbmVlZHMgYW55IG90aGVyIGRyaXZlcnMgdG8gbWFrZSB0aGUgYmxvY2sgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLiBJZiBgbnVsbF9ibGtgIGlzbid0IHRoZXJlLCBJJ2xsIGJyb2FkZW4gdGhlIHNlYXJjaCwgYnV0IGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSB0aGUgZ28tdG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMjgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMjo1MC4wNzUyNzI0NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjEyMzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCTEtfREVWX05VTExfQkxLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svTWFrZWZpbGU9MzU9b2JqLSQoQ09ORklHX0JMS19ERVZfUk5CRClcXHQrPSBybmJkL1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMzYtXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfQkxLX0RFVl9OVUxMX0JMSylcXHQrPSBudWxsX2Jsay9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19CTEtfREVWX1JVU1RfTlVMTCkgKz0gcm51bGwvXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWc6Njpjb25maWcgQkxLX0RFVl9OVUxMX0JMS1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJOdWxsIHRlc3QgYmxvY2sgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTktXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjEwOmNvbmZpZyBCTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy0xMS1cXHRib29sIFxcXCJTdXBwb3J0IGZhdWx0IGluamVjdGlvbiBmb3IgTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclxcXCJcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWc6MTI6XFx0ZGVwZW5kcyBvbiBCTEtfREVWX05VTExfQkxLIFxcdTAwMjZcXHUwMDI2IEZBVUxUX0lOSkVDVElPTl9DT05GSUdGU1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZT00PWNjZmxhZ3MteVxcdFxcdFxcdCs9IC1JJChzcmMpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZS01LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQkxLX0RFVl9OVUxMX0JMSylcXHQrPSBudWxsX2Jsay5vXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZS03LW51bGxfYmxrLW9ianNcXHRcXHRcXHQ6PSBtYWluLm9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIxLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjIyOiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMy1zdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKG51bGxfdGltZW91dF9hdHRyKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTk4PU1PRFVMRV9QQVJNX0RFU0MoaG9tZV9ub2RlLCBcXFwiSG9tZSBub2RlIGZvciB0aGUgZGV2aWNlXFxcIik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtOTktXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTAwOiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMDEtLypcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTY0OT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnVsbGJfZGV2aWNlX3R5cGUgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02NTQtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NjU1OiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02NTYtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz03Nzc9c3RhdGljIHN0cnVjdCBudWxsYl9kZXZpY2UgKm51bGxfYWxsb2NfZGV2KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03ODQtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6Nzg1OiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03ODYtXFx0ZGV2LVxcdTAwM2V0aW1lb3V0X2NvbmZpZy5hdHRyID0gbnVsbF90aW1lb3V0X2F0dHI7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNDg0PXN0YXRpYyB2b2lkIG51bGxiX3NldHVwX2J3dGltZXIoc3RydWN0IG51bGxiICpudWxsYilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0OTItXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQ5MzojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQ5NC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE4ODU9c3RhdGljIGludCBudWxsX3ZhbGlkYXRlX2NvbmYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTkyNy1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxOTI4OiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTI5LXN0YXRpYyBib29sIF9fbnVsbF9zZXR1cF9mYXVsdChzdHJ1Y3QgZmF1bHRfYXR0ciAqYXR0ciwgY2hhciAqc3RyKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTk0Mj1zdGF0aWMgYm9vbCBudWxsX3NldHVwX2ZhdWx0KHZvaWQpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk0My17XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTk0NDojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk0NS1cXHRpZiAoIV9fbnVsbF9zZXR1cF9mYXVsdChcXHUwMDI2bnVsbF90aW1lb3V0X2F0dHIsIGdfdGltZW91dF9zdHIpKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oPTUzPXN0cnVjdCBudWxsYl9kZXZpY2Uge1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTU1LVxcdHN0cnVjdCBjb25maWdfZ3JvdXAgZ3JvdXA7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjU2OiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtNTctXFx0c3RydWN0IGZhdWx0X2NvbmZpZyB0aW1lb3V0X2NvbmZpZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzI6NTAuMTc3NDAxNjY2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTkxMDUzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcsIGBCTEtfREVWX05VTExfQkxLYCBzZWVtcyBsaWtlIGEgc29saWQgY2hvaWNlIGZvciBnZW5lcmFsIGJsb2NrIGRldmljZSB0ZXN0aW5nLiBIb3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogYXZvaWQgb3Zlcmx5IGdlbmVyaWMgY29uZmlncy4gV2Ugd2FudCB0byBmb2N1cyBvbiB3aGF0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIGNoYW5nZXMgaW4gdGhlIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgYEJMS19ERVZfWk9ORURgIGlzIHRoZSBjb25maWcgdGhhdCdzIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBtb2RpZmljYXRpb25zLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIOKAkyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1bmN0aW9ucyBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgaXMgc3RhdGljLiBMb29rcyBsaWtlIEkgd2FzIHJpZ2h0LCBhbmQgdGhhdCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBpcyBhbHNvIHN0YXRpYy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgIGV4cG9ydGVkLCBvciBnbG9iYWw/IEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGJ5IGxvb2tpbmcgaW50byBgYmxvY2svYmxrLXpvbmVkLmNgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzc0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE0OjMyOjU0LjI3NjUwOTk5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NDcxODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9ibGstem9uZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstem9uZWQuYz0yMDA4PXN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIwMjYtXFxuYmxvY2svYmxrLXpvbmVkLmM6MjAyNzp2b2lkIGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9ibGstem9uZWQuYy0yMDI4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzI6NTQuNDEzOTg5MDE3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NTE0MTQ5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgWm9uZWQgQmxvY2sgRGV2aWNlIExpZmVjeWNsZSBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uLCBub3QgZXhwb3J0ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGNvcmUgdG8gdGhlIHN5c3RlbSwgYW5kIHByb2JhYmx5IHNvbWV0aGluZyBzdWJ0bGUuIEl0J3MgdXNlZCBpbiBgYmxvY2svZ2VuaGQuY2AsIHdoaWNoIGlzIGJ1aWx0LWluLCBzbyBJIGtub3cgd2hlcmUgdGhlIGVudHJ5IHBvaW50IGlzLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi5cblxuR2l2ZW4gdGhhdCBjb250ZXh0LCB0aGUgY3JpdGljYWwgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCwgYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2AsIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgLCBhbmQgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLiBUaG9zZSBhcmUgdGhlIGVudHJ5cG9pbnRzIGFuZCByZXNvdXJjZXMgdGhhdCBhcmUgbGlrZWx5IHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBhZGRyZXNzZXMgYSBidWcgaW4gdGhlIHpvbmUgd3JpdGUgcGx1ZyB3b3JrcXVldWUgbGlmZWN5Y2xlIHNwZWNpZmljYWxseSBmb3Igem9uZWQgYmxvY2sgZGV2aWNlcy4gSXQgbG9va3MgbGlrZSBpdCdzIGFib3V0IHByZXZlbnRpbmcgdGhlIHdvcmtxdWV1ZSBmcm9tIGJlaW5nIHByZW1hdHVyZWx5IGRlc3Ryb3llZCBkdXJpbmcgem9uZSByZXZhbGlkYXRpb247IGl0IG5vdyBkcmFpbnMgdGhlIHF1ZXVlIGFuZCBkZWZlcnMgdGhlIGRlc3RydWN0aW9uIHVudGlsIGRpc2sgcmVsZWFzZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyBmb3Igem9uZWQgZGV2aWNlcy4gVGhlIGZhY3QgdGhhdCBpdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmlydHVhbGl6ZWQgem9uZWQgYmxvY2sgZGV2aWNlcywgbGlrZSBgbnVsbF9ibGtgLCBtZWFucyBpdCdzIHByZXR0eSBpbXBvcnRhbnQsIGFzIGl0IGltcGFjdHMgbW9yZSB0aGFuIGp1c3QgaGFyZHdhcmUgaW1wbGVtZW50YXRpb25zLlxuXG5TbywgZm9yIGZ1enppbmcsIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBpdDsgaXQncyBhIGxpZmVjeWNsZSBpc3N1ZSBhZmZlY3RpbmcgYSBjb3JlIGNvbXBvbmVudC4gVGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIGEgbGlmZWN5Y2xlIGJ1ZywgaXQgYWZmZWN0cyB6b25lZCBkZXZpY2VzLCBpdCdzIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMsIGFuZCBpdCdzIHJlYWNoYWJsZSB2aWEgdmlydHVhbGl6YXRpb24uIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBhcyBsaXN0ZWQgYWJvdmUuXG5cblRoZSBlbmFibGUgY29uZmlnIGlzIGBCTEtfREVWX1pPTkVEYCwgYW5kIGEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBpdCdzIHRoZSBvbmx5IG9uZSB0aGF0IGd1YXJkcyBgYmxrLXpvbmVkLmNgLiBHb29kLCB0aGF0IG1lYW5zIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHNpbXBsZS4gVGltZSB0byBmbGFnIHRoaXMgZm9yIGZ1cnRoZXIgYW5hbHlzaXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjI4LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMzowMS44NjU0MDYyNDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1ODU1NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXNcIixcbiAgICBcImRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc1wiLFxuICAgIFwiYmxrX3JldmFsaWRhdGVfZGlza196b25lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHpvbmUgd3JpdGUgcGx1ZyB3b3JrcXVldWUgZm9yIHpvbmVkIGJsb2NrIGRldmljZXMuIEl0IHByZXZlbnRzIHRoZSB3b3JrcXVldWUgZnJvbSBiZWluZyBkZXN0cm95ZWQgZHVyaW5nIHpvbmUgcmV2YWxpZGF0aW9uLCBpbnN0ZWFkIGRyYWluaW5nIGl0IGFuZCBkZWZlcnJpbmcgZGVzdHJ1Y3Rpb24gdG8gZGlzayByZWxlYXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyBmb3Igem9uZWQgZGV2aWNlcyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB2aXJ0dWFsaXplZCB6b25lZCBibG9jayBkZXZpY2VzIChsaWtlIG51bGxfYmxrKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1pPTkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlza19hbGxvY196b25lX3Jlc291cmNlc1wiLFxuICAgIFwiZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNcIixcbiAgICBcImJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgbGlmZWN5Y2xlIG9mIHRoZSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGZvciB6b25lZCBibG9jayBkZXZpY2VzLiBJdCBwcmV2ZW50cyB0aGUgd29ya3F1ZXVlIGZyb20gYmVpbmcgZGVzdHJveWVkIGR1cmluZyB6b25lIHJldmFsaWRhdGlvbiwgaW5zdGVhZCBkcmFpbmluZyBpdCBhbmQgZGVmZXJyaW5nIGRlc3RydWN0aW9uIHRvIGRpc2sgcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgZm9yIHpvbmVkIGRldmljZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmlydHVhbGl6ZWQgem9uZWQgYmxvY2sgZGV2aWNlcyAobGlrZSBudWxsX2JsaykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowv5zmx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 14:21:05 +0000 UTC FinishedAt: 2026-07-01 14:33:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED" ], "series_id": "3c01c9bd-105d-469e-98df-a13cd25ea754" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "disk_alloc_zone_resources", "disk_free_zone_resources", "disk_release_zone_resources", "blk_revalidate_disk_zones" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE0OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2Rpc2tfZnJlZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7YmxrX3JldmFsaWRhdGVfZGlza196b25lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgbGlmZWN5Y2xlIG9mIHRoZSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGZvciB6b25lZCBibG9jayBkZXZpY2VzLiBJdCBwcmV2ZW50cyB0aGUgd29ya3F1ZXVlIGZyb20gYmVpbmcgZGVzdHJveWVkIGR1cmluZyB6b25lIHJldmFsaWRhdGlvbiwgaW5zdGVhZCBkcmFpbmluZyBpdCBhbmQgZGVmZXJyaW5nIGRlc3RydWN0aW9uIHRvIGRpc2sgcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgZm9yIHpvbmVkIGRldmljZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmlydHVhbGl6ZWQgem9uZWQgYmxvY2sgZGV2aWNlcyAobGlrZSBudWxsX2JsaykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYTNhNjE5ZWUyZGI3ODJkY2I0ZGZlMjU0YmVkN2VmYzM5MWYxM2E1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxNDozMTowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstem9uZWQuYyBiL2Jsb2NrL2Jsay16b25lZC5jXG5pbmRleCBiZWE4MTdmM2RlNTYwMi4uY2EzMGNhZWM4MzhlNzMgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstem9uZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXpvbmVkLmNcbkBAIC0xOTIzLDExICYjNDM7MTkyMywyMCBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbClcbiBcdFx0Z290byBmcmVlX2hhc2g7XG4gXG4tXHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxID1cbi1cdFx0YWxsb2Nfd29ya3F1ZXVlKFwmIzM0OyVzX3p3cGx1Z3NcJiMzNDssIFdRX01FTV9SRUNMQUlNIHwgV1FfSElHSFBSSSB8IFdRX1BFUkNQVSxcbi1cdFx0XHRcdHBvb2xfc2l6ZSwgZGlzay1cdTAwM2VkaXNrX25hbWUpO1xuLVx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKVxuLVx0XHRnb3RvIGRlc3Ryb3lfcG9vbDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIG1heSBhbHJlYWR5IGhhdmUgYSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGFzIHRoaXMgZnVuY3Rpb24gbWF5XG4mIzQzO1x0ICogYmUgY2FsbGVkIGFmdGVyIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcygpLCB3aGljaCBkb2VzIG5vdCBkZXN0cm95XG4mIzQzO1x0ICogdGhlIHdvcmtxdWV1ZSAodGhlIHpvbmUgd3JpdGUgcGx1Z3Mgd29ya3F1ZXVlIGlzIGRlc3Ryb3llZCBhdFxuJiM0MztcdCAqIGRpc2tfcmVsZWFzZSgpIHRpbWUpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSkge1xuJiM0MztcdFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9XG4mIzQzO1x0XHRcdGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslc196d3BsdWdzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0V1FfTUVNX1JFQ0xBSU0gfCBXUV9ISUdIUFJJIHwgV1FfUEVSQ1BVLFxuJiM0MztcdFx0XHRcdFx0cG9vbF9zaXplLCBkaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG4mIzQzO1x0XHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpXG4mIzQzO1x0XHRcdGdvdG8gZGVzdHJveV9wb29sO1xuJiM0MztcdH1cbiBcbiBcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyID1cbiBcdFx0a3RocmVhZF9jcmVhdGUoZGlza196b25lX3dwbHVnc193b3JrZXIsIGRpc2ssXG5AQCAtMTkzNSwxNSAmIzQzOzE5NDQsMTIgQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0aWYgKElTX0VSUihkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcikpIHtcbiBcdFx0cmV0ID0gUFRSX0VSUihkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XG4gXHRcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyID0gTlVMTDtcbi1cdFx0Z290byBkZXN0cm95X3dxO1xuJiM0MztcdFx0Z290byBkZXN0cm95X3Bvb2w7XG4gXHR9XG4gXHR3YWtlX3VwX3Byb2Nlc3MoZGlzay1cdTAwM2V6b25lX3dwbHVnc193b3JrZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4tZGVzdHJveV93cTpcbi1cdGRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xuLVx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9IE5VTEw7XG4gZGVzdHJveV9wb29sOlxuIFx0bWVtcG9vbF9kZXN0cm95KGRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbCk7XG4gXHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wgPSBOVUxMO1xuQEAgLTE5OTksNyAmIzQzOzIwMDUsNyBAQCBzdGF0aWMgdm9pZCBkaXNrX3NldF96b25lc19jb25kX2FycmF5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCAqem9uZXNfY29uZClcbiBcdGtmcmVlX3JjdV9taWdodHNsZWVwKHpvbmVzX2NvbmQpO1xuIH1cbiBcbi12b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiYjNDM7c3RhdGljIHZvaWQgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbiBcdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcikge1xuIFx0XHRrdGhyZWFkX3N0b3AoZGlzay1cdTAwM2V6b25lX3dwbHVnc193b3JrZXIpO1xuQEAgLTIwMDcsMTAgJiM0MzsyMDEzLDggQEAgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHR9XG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19saXN0KSk7XG4gXG4tXHRpZiAoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSkge1xuLVx0XHRkZXN0cm95X3dvcmtxdWV1ZShkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKTtcbi1cdFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9IE5VTEw7XG4tXHR9XG4mIzQzO1x0aWYgKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpXG4mIzQzO1x0XHRkcmFpbl93b3JrcXVldWUoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSk7XG4gXG4gXHRkaXNrX2Rlc3Ryb3lfem9uZV93cGx1Z3NfaGFzaF90YWJsZShkaXNrKTtcbiBcbkBAIC0yMDIwLDYgJiM0MzsyMDI0LDE2IEBAIHZvaWQgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0ZGlzay1cdTAwM2Vucl96b25lcyA9IDA7XG4gfVxuIFxuJiM0Mzt2b2lkIGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiYjNDM7e1xuJiM0MztcdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKSB7XG4mIzQzO1x0XHRkZXN0cm95X3dvcmtxdWV1ZShkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKTtcbiYjNDM7XHRcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xuJiM0Mzt9XG4mIzQzO1xuIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3Mge1xuIFx0c3RydWN0IGdlbmRpc2tcdCpkaXNrO1xuIFx0dThcdFx0KnpvbmVzX2NvbmQ7XG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaFxuaW5kZXggMjVhZjhhYzVlZjBmNzcuLmZiOTVkM2M1ODk1MGMxIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay5oXG5AQCAtNTI4LDcgJiM0Mzs1MjgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW9jX2NsZWFyX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuIFxuICNpZmRlZiBDT05GSUdfQkxLX0RFVl9aT05FRFxuIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbi12b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XG4mIzQzO3ZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbiBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX3pvbmVfd3JpdGVfcGx1Z2dpbmcoc3RydWN0IGJpbyAqYmlvKVxuIHtcbiBcdHJldHVybiBiaW9fZmxhZ2dlZChiaW8sIEJJT19aT05FX1dSSVRFX1BMVUdHSU5HKTtcbkBAIC01ODEsNyAmIzQzOzU4MSw3IEBAIGludCBibGtkZXZfem9uZV9tZ210X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4gfVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fem9uZV93cml0ZV9wbHVnZ2luZyhzdHJ1Y3QgYmlvICpiaW8pXG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcbmluZGV4IGY4NGI2YTM1NWI1NzRhLi4zMGFjMGZmZTY1MTc0NSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2dlbmhkLmNcbkBAIC0xMzAwLDcgJiM0MzsxMzAwLDcgQEAgc3RhdGljIHZvaWQgZGlza19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcbiBcdGRpc2tfcmVsZWFzZV9ldmVudHMoZGlzayk7XG4gXHRrZnJlZShkaXNrLVx1MDAzZXJhbmRvbSk7XG4tXHRkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoZGlzayk7XG4mIzQzO1x0ZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xuIFx0eGFfZGVzdHJveShcdTAwMjZkaXNrLVx1MDAzZXBhcnRfdGJsKTtcbiBcbiBcdGtvYmplY3RfcHV0KFx1MDAyNmRpc2stXHUwMDNlcXVldWVfa29iaik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7ZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2Rpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHpvbmUgd3JpdGUgcGx1ZyB3b3JrcXVldWUgZm9yIHpvbmVkIGJsb2NrIGRldmljZXMuIEl0IHByZXZlbnRzIHRoZSB3b3JrcXVldWUgZnJvbSBiZWluZyBkZXN0cm95ZWQgZHVyaW5nIHpvbmUgcmV2YWxpZGF0aW9uLCBpbnN0ZWFkIGRyYWluaW5nIGl0IGFuZCBkZWZlcnJpbmcgZGVzdHJ1Y3Rpb24gdG8gZGlzayByZWxlYXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyBmb3Igem9uZWQgZGV2aWNlcyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB2aXJ0dWFsaXplZCB6b25lZCBibG9jayBkZXZpY2VzIChsaWtlIG51bGxfYmxrKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWEzYTYxOWVlMmRiNzgyZGNiNGRmZTI1NGJlZDdlZmMzOTFmMTNhNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMTQ6MzE6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9ibGstem9uZWQuYyBiL2Jsb2NrL2Jsay16b25lZC5jCmluZGV4IGJlYTgxN2YzZGU1NjAyLi5jYTMwY2FlYzgzOGU3MyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXpvbmVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXpvbmVkLmMKQEAgLTE5MjMsMTEgJiM0MzsxOTIzLDIwIEBAIHN0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlpZiAoIWRpc2stJmd0O3pvbmVfd3BsdWdzX3Bvb2wpCiAJCWdvdG8gZnJlZV9oYXNoOwogCi0JZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EgPQotCQlhbGxvY193b3JrcXVldWUoJiMzNDslc196d3BsdWdzJiMzNDssIFdRX01FTV9SRUNMQUlNIHwgV1FfSElHSFBSSSB8IFdRX1BFUkNQVSwKLQkJCQlwb29sX3NpemUsIGRpc2stJmd0O2Rpc2tfbmFtZSk7Ci0JaWYgKCFkaXNrLSZndDt6b25lX3dwbHVnc193cSkKLQkJZ290byBkZXN0cm95X3Bvb2w7CiYjNDM7CS8qCiYjNDM7CSAqIFdlIG1heSBhbHJlYWR5IGhhdmUgYSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGFzIHRoaXMgZnVuY3Rpb24gbWF5CiYjNDM7CSAqIGJlIGNhbGxlZCBhZnRlciBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoKSwgd2hpY2ggZG9lcyBub3QgZGVzdHJveQomIzQzOwkgKiB0aGUgd29ya3F1ZXVlICh0aGUgem9uZSB3cml0ZSBwbHVncyB3b3JrcXVldWUgaXMgZGVzdHJveWVkIGF0CiYjNDM7CSAqIGRpc2tfcmVsZWFzZSgpIHRpbWUpLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFkaXNrLSZndDt6b25lX3dwbHVnc193cSkgewomIzQzOwkJZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EgPQomIzQzOwkJCWFsbG9jX3dvcmtxdWV1ZSgmIzM0OyVzX3p3cGx1Z3MmIzM0OywKJiM0MzsJCQkJCVdRX01FTV9SRUNMQUlNIHwgV1FfSElHSFBSSSB8IFdRX1BFUkNQVSwKJiM0MzsJCQkJCXBvb2xfc2l6ZSwgZGlzay0mZ3Q7ZGlza19uYW1lKTsKJiM0MzsJCWlmICghZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EpCiYjNDM7CQkJZ290byBkZXN0cm95X3Bvb2w7CiYjNDM7CX0KIAogCWRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlciA9CiAJCWt0aHJlYWRfY3JlYXRlKGRpc2tfem9uZV93cGx1Z3Nfd29ya2VyLCBkaXNrLApAQCAtMTkzNSwxNSAmIzQzOzE5NDQsMTIgQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLAogCWlmIChJU19FUlIoZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd29ya2VyKSkgewogCQlyZXQgPSBQVFJfRVJSKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlcik7CiAJCWRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlciA9IE5VTEw7Ci0JCWdvdG8gZGVzdHJveV93cTsKJiM0MzsJCWdvdG8gZGVzdHJveV9wb29sOwogCX0KIAl3YWtlX3VwX3Byb2Nlc3MoZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd29ya2VyKTsKIAogCXJldHVybiAwOwogCi1kZXN0cm95X3dxOgotCWRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dxKTsKLQlkaXNrLSZndDt6b25lX3dwbHVnc193cSA9IE5VTEw7CiBkZXN0cm95X3Bvb2w6CiAJbWVtcG9vbF9kZXN0cm95KGRpc2stJmd0O3pvbmVfd3BsdWdzX3Bvb2wpOwogCWRpc2stJmd0O3pvbmVfd3BsdWdzX3Bvb2wgPSBOVUxMOwpAQCAtMTk5OSw3ICYjNDM7MjAwNSw3IEBAIHN0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX2NvbmRfYXJyYXkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4ICp6b25lc19jb25kKQogCWtmcmVlX3JjdV9taWdodHNsZWVwKHpvbmVzX2NvbmQpOwogfQogCi12b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKJiM0MztzdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7CiAJaWYgKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlcikgewogCQlrdGhyZWFkX3N0b3AoZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd29ya2VyKTsKQEAgLTIwMDcsMTAgJiM0MzsyMDEzLDggQEAgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCiAJfQogCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO2Rpc2stJmd0O3pvbmVfd3BsdWdzX2xpc3QpKTsKIAotCWlmIChkaXNrLSZndDt6b25lX3dwbHVnc193cSkgewotCQlkZXN0cm95X3dvcmtxdWV1ZShkaXNrLSZndDt6b25lX3dwbHVnc193cSk7Ci0JCWRpc2stJmd0O3pvbmVfd3BsdWdzX3dxID0gTlVMTDsKLQl9CiYjNDM7CWlmIChkaXNrLSZndDt6b25lX3dwbHVnc193cSkKJiM0MzsJCWRyYWluX3dvcmtxdWV1ZShkaXNrLSZndDt6b25lX3dwbHVnc193cSk7CiAKIAlkaXNrX2Rlc3Ryb3lfem9uZV93cGx1Z3NfaGFzaF90YWJsZShkaXNrKTsKIApAQCAtMjAyMCw2ICYjNDM7MjAyNCwxNiBAQCB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAlkaXNrLSZndDtucl96b25lcyA9IDA7CiB9CiAKJiM0Mzt2b2lkIGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKJiM0Mzt7CiYjNDM7CWlmIChkaXNrLSZndDt6b25lX3dwbHVnc193cSkgewomIzQzOwkJZGVzdHJveV93b3JrcXVldWUoZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EpOwomIzQzOwkJZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzIHsKIAlzdHJ1Y3QgZ2VuZGlzawkqZGlzazsKIAl1OAkJKnpvbmVzX2NvbmQ7CmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oCmluZGV4IDI1YWY4YWM1ZWYwZjc3Li5mYjk1ZDNjNTg5NTBjMSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLmgKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLmgKQEAgLTUyOCw3ICYjNDM7NTI4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGlvY19jbGVhcl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX1pPTkVECiB2b2lkIGRpc2tfaW5pdF96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7Ci12b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7CiYjNDM7dm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spOwogc3RhdGljIGlubGluZSBib29sIGJpb196b25lX3dyaXRlX3BsdWdnaW5nKHN0cnVjdCBiaW8gKmJpbykKIHsKIAlyZXR1cm4gYmlvX2ZsYWdnZWQoYmlvLCBCSU9fWk9ORV9XUklURV9QTFVHR0lORyk7CkBAIC01ODEsNyAmIzQzOzU4MSw3IEBAIGludCBibGtkZXZfem9uZV9tZ210X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSwKIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7CiB9CiBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX3pvbmVfd3JpdGVfcGx1Z2dpbmcoc3RydWN0IGJpbyAqYmlvKQpkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggZjg0YjZhMzU1YjU3NGEuLjMwYWMwZmZlNjUxNzQ1IDEwMDY0NAotLS0gYS9ibG9jay9nZW5oZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2dlbmhkLmMKQEAgLTEzMDAsNyAmIzQzOzEzMDAsNyBAQCBzdGF0aWMgdm9pZCBkaXNrX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogCiAJZGlza19yZWxlYXNlX2V2ZW50cyhkaXNrKTsKIAlrZnJlZShkaXNrLSZndDtyYW5kb20pOwotCWRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTsKJiM0MzsJZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKGRpc2spOwogCXhhX2Rlc3Ryb3koJmFtcDtkaXNrLSZndDtwYXJ0X3RibCk7CiAKIAlrb2JqZWN0X3B1dCgmYW1wO2Rpc2stJmd0O3F1ZXVlX2tvYmopOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjYwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWm9uZSBSZXNvdXJjZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHR3ZWFraW5nIGhvdyB6b25lZCByZXNvdXJjZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBibG9jayBsYXllciwgc3BlY2lmaWNhbGx5IGluIGBibG9jay9ibGstem9uZWQuY2AsIGBibG9jay9ibGsuaGAsIGFuZCBgYmxvY2svZ2VuaGQuY2AuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgc3VidGxlIHJhY2UgY29uZGl0aW9uIG9yIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWUgYXJvdW5kIGBkaXNrLSZndDt6b25lX3dwbHVnc193cWAuICBJbnN0ZWFkIG9mIGEgc2ltcGxlIGRlc3Ryb3kgb2YgdGhlIHdvcmtxdWV1ZSBpbiBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKClgLCB0aGUgY29kZSBpcyBub3cgZHJhaW5pbmcgaXQgZmlyc3QsIGFuZCB0aGUgKmFjdHVhbCogZGVzdHJ1Y3Rpb24gaXMgZGVsZWdhdGVkIHRvIHRoaXMgbmV3IGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoKWAgZnVuY3Rpb24uICBUaGF0IG9uZSBpcyBjYWxsZWQgZnJvbSBgZGlza19yZWxlYXNlKClgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyB0aGUgZmluYWwgY2xlYW51cC4gIEFuZCBgZGlza19hbGxvY196b25lX3Jlc291cmNlcygpYCBpcyBiZWluZyBhZGFwdGVkIHRvIHJldXNlIHRoZSB3b3JrcXVldWUgaWYgaXQmIzM5O3MgYWxyZWFkeSB0aGVyZS4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGtub3cgd2hpY2ggQ09ORklHIG9wdGlvbnMgYXJlIHJlbGV2YW50LiBTaW5jZSB0aGUgcGF0Y2ggdG91Y2hlcyBgYmxvY2svYmxrLXpvbmVkLmNgIGFuZCBgYmxvY2svYmxrLmhgLCBJIGV4cGVjdCBhdCBsZWFzdCBgQ09ORklHX0JMS19ERVZfWk9ORURgIHRvIGJlIGluIHBsYXkuIExvb2tpbmcgYXQgYGJsb2NrL2Jsay5oYCwgdGhlIHByZXNlbmNlIG9mIGBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMoKWAgYW5kIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoKWAgZGVmaW5pdGlvbnMsIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfQkxLX0RFVl9aT05FRGAsIGNvbmZpcm1zIG15IHN1c3BpY2lvbi4KCk5vdyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgcXVpY2tseSB2ZXJpZnkgdGhhdCBgYmxvY2svYmxrLXpvbmVkLmNgIGlzIGluZGVlZCBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19CTEtfREVWX1pPTkVEYCBpcyBlbmFibGVkIHRvIGJlIHN1cmUuIEl0JiMzOTtzIHVzdWFsbHkgdGhlIG1vc3QgY29tbW9uIGRlcGVuZGVuY3kuIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrLXpvbmVkLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpICYjNDM7PSBiaW8taW50ZWdyaXR5Lm8gYmxrLWludGVncml0eS5vIHQxMC1waS5vIFxcXG5ibG9jay9NYWtlZmlsZS0zMi1cdFx0XHRcdCAgIGJpby1pbnRlZ3JpdHktYXV0by5vIGJpby1pbnRlZ3JpdHktZnMub1xuYmxvY2svTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX0JMS19ERVZfWk9ORUQpXHQmIzQzOz0gYmxrLXpvbmVkLm9cbmJsb2NrL01ha2VmaWxlLTM0LW9iai0kKENPTkZJR19CTEtfV0JUKVx0XHQmIzQzOz0gYmxrLXdidC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgWm9uZWQgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gYENPTkZJR19CTEtfREVWX1pPTkVEYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgdG8gbmFpbCBkb3duLiBUaGlzIHBhdGNoIGlzIGdvaW5nIHRvIGJlIGRpZ2dpbmcgaW50byB0aGUgem9uZWQgYmxvY2sgZGV2aWNlIHJlc291cmNlIG1hbmFnZW1lbnQuCgpOb3csIGl0IGxvb2tzIGxpa2UgdGhpcyB1cGRhdGUgaXMgemVyb2luZyBpbiBvbiB0aHJlZSBjb3JlIGZ1bmN0aW9uczogYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgLCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCwgYW5kIHRoZSBuZXdseSBpbnRyb2R1Y2VkIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyBmb3IgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgIGFuZCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYC4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aG9zZSBhcmUgY2FsbGVkIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIHBhdGNoIGludGVuZHMgdG8gaW1wYWN0IHRoZSBvdmVyYWxsIHpvbmUgbGlmZWN5Y2xlLCBmcm9tIHJlc291cmNlIGFsbG9jYXRpb24gdG8gcmVsZWFzZS4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dHMgaW4gd2hpY2ggcmVzb3VyY2VzIGFyZSBtYW5hZ2VkLCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYWRkaW5nIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgLiBJdCYjMzk7cyBhbGwgYWJvdXQgc2NvcGluZyB0aGUgaW1wYWN0LCBhbmQgc2VlaW5nIGhvdyBpdCBmaXRzIGludG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgYWZmYWlycywgc28gSSBjYW4gc3RhcnQgZm9ybWluZyBzb21lIG9waW5pb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE0OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmM9MTg4NT12b2lkIGRpc2tfaW5pdF96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstem9uZWQuYy0xOTAxLVxuYmxvY2svYmxrLXpvbmVkLmM6MTkwMjpzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9ibGstem9uZWQuYy0xOTAzLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgcG9vbF9zaXplKVxuLS1cbmJsb2NrL2Jsay16b25lZC5jPTIwNDc9c3RhdGljIGludCBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMjA3NS1cdGlmICghZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoKSB7XG5ibG9jay9ibGstem9uZWQuYzoyMDc2Olx0XHRyZXQgPSBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKGRpc2ssIHBvb2xfc2l6ZSk7XG5ibG9jay9ibGstem9uZWQuYy0yMDc3LVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRGlzayBab25lIFJlc291cmNlIFZhbGlkYXRpb24qKgoKQWxyaWdodCwgc28gYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgIGlzIGNsZWFybHkgYSBkb3duc3RyZWFtIGZ1bmN0aW9uLCBjYWxsZWQgYnkgYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQgc2V0cyB1cCBhIHNwZWNpZmljIGRlcGVuZGVuY3kuJiMzNDsgTm93LCBteSBmb2N1cyBzaGlmdHMgdG8gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0OiB3aGVyZSAqaXMqIGBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXNgIGFjdHVhbGx5IHRyaWdnZXJlZD8gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBrZXkgdG8gdHJhY2luZyB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiBsaWZlY3ljbGUgYW5kIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGhpZ2gtbGV2ZWwgcHVycG9zZSBvZiB0aGUgY2FsbCwgYW5kIHdoZXRoZXIgb3Igbm90IGl0IGlzIGNyaXRpY2FsIGluIGEgcGVyZm9ybWFuY2Ugc2NlbmFyaW8uIFdoZXJlIGFyZSB3ZSBpbiB0aGUgYXJjaGl0ZWN0dXJlLCBhbmQgd2hhdOKAmXMgZHJpdmluZyB0aGVzZSB2YWxpZGF0aW9ucz8gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBjb250cm9sIGFuZCBwb3RlbnRpYWwgdGltaW5nIGlzc3VlcyBpbnZvbHZlZCB3aXRoIHpvbmUgcmVzb3VyY2UgYWxsb2NhdGlvbi4gTGV04oCZcyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNoYWluIG9mIGV2ZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmM9MjAzNz1zdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzIHtcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMDQ2LVxuYmxvY2svYmxrLXpvbmVkLmM6MjA0NzpzdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbmJsb2NrL2Jsay16b25lZC5jLTIwNDgtXHRcdFx0XHRzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzICphcmdzKVxuLS1cbmJsb2NrL2Jsay16b25lZC5jPTIzNDQ9aW50IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMjM3Ny1cdG5vaW9fZmxhZyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuYmxvY2svYmxrLXpvbmVkLmM6MjM3ODpcdHJldCA9IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhkaXNrLCBcdTAwMjZhcmdzKTtcbmJsb2NrL2Jsay16b25lZC5jLTIzNzktXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE0OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gRGlzayBab25lIFJldmFsaWRhdGlvbioqCgpSaWdodCwgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLi4uIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmV2YWxpZGF0aW9uIHByb2Nlc3MgZm9yIGRpc2sgem9uZXMsIHNvIHdoZXJlIGlzIHRoYXQgY3J1Y2lhbCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBmdW5jdGlvbiBjYWxsZWQ/IFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB3ZSYjMzk7cmUgY2xlYW5pbmcgdXAgYWZ0ZXIgYSByZXZhbGlkYXRpb24gZXZlbnQuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBjYWxsIHBhdGggZnJvbSB0aGF0IGVudHJ5IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24uIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgdHJhY2UgdGhlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE0OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc2tfZnJlZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstem9uZWQuYz0xOTAyPXN0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi0tXG5ibG9jay9ibGstem9uZWQuYy0xOTI3LVx0ICogV2UgbWF5IGFscmVhZHkgaGF2ZSBhIHpvbmUgd3JpdGUgcGx1ZyB3b3JrcXVldWUgYXMgdGhpcyBmdW5jdGlvbiBtYXlcbmJsb2NrL2Jsay16b25lZC5jOjE5Mjg6XHQgKiBiZSBjYWxsZWQgYWZ0ZXIgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKCksIHdoaWNoIGRvZXMgbm90IGRlc3Ryb3lcbmJsb2NrL2Jsay16b25lZC5jLTE5MjktXHQgKiB0aGUgd29ya3F1ZXVlICh0aGUgem9uZSB3cml0ZSBwbHVncyB3b3JrcXVldWUgaXMgZGVzdHJveWVkIGF0XG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MTk5Nj1zdGF0aWMgdm9pZCBkaXNrX3NldF96b25lc19jb25kX2FycmF5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCAqem9uZXNfY29uZClcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMDA3LVxuYmxvY2svYmxrLXpvbmVkLmM6MjAwODpzdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9ibGstem9uZWQuYy0yMDA5LXtcbi0tXG5ibG9jay9ibGstem9uZWQuYz0yMDI3PXZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTIwMzMtXG5ibG9jay9ibGstem9uZWQuYzoyMDM0Olx0ZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xuYmxvY2svYmxrLXpvbmVkLmMtMjAzNS19XG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MjM0ND1pbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yNDE1LVx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuYmxvY2svYmxrLXpvbmVkLmM6MjQxNjpcdGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTtcbmJsb2NrL2Jsay16b25lZC5jLTI0MTctXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzg3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJsb2NrIExheWVyIFBhdGNoIGZvciBab25lZCBCbG9jayBEZXZpY2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBhbmQgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2AgYXJlIGtleSBoZXJlLCBib3RoIG9mIHdoaWNoIGFyZSBjYWxsZWQgd2l0aGluIGRpZmZlcmVudCBhcmVhcyBvZiB0aGUgY29kZS4gSXQgc2VlbXMgbGlrZSBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBnZXRzIGNhbGxlZCBmcm9tIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCBhbmQsIGNydWNpYWxseSwgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2AgaXMgY2FsbGVkIGZyb20gYGRpc2tfcmVsZWFzZWAgaW4gYGJsb2NrL2dlbmhkLmNgLiBUaGUgcHJvYmxlbSBsaWVzIGluIHRoZSBsaWZlY3ljbGUgb2YgYSB3b3JrcXVldWUuIEJhc2ljYWxseSwgYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2Agd2FzIGRlc3Ryb3lpbmcgdGhlIHdvcmtxdWV1ZSwgYnV0IGl0IHdhcyBiZWluZyByZS1jcmVhdGVkIGFnYWluIGJ5IGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCB3aXRoaW4gcmV2YWxpZGF0aW9uLiBTbywgdGhpcyBwYXRjaCBtYWtlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGFkZHJlc3MgdGhlIHdvcmtxdWV1ZS4gVGhlIGZpeCBJJiMzOTttIHNlZWluZyBpcyB0byBkcmFpbiB0aGUgd29ya3F1ZXVlIGluIGBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXNgLCBhbmQgKnRoZW4qIGRlc3Ryb3kgaXQgaW4gYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2AsIHdoaWNoIGlzIHRoZSBhcHByb3ByaWF0ZSBwbGFjZS4gVGhpcyBvbmx5IGhhcHBlbnMgd2hlbiB0aGUgZGlzayBpcyBmdWxseSByZWxlYXNlZC4KClRoaXMgaXMgYWxsIHByZXR0eSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHpvbmVkIGJsb2NrIGRldmljZXMuIEl0JiMzOTtzIGRlZmluaXRlbHkgYSBidWcgZml4IHJlbGF0ZWQgdG8gd29ya3F1ZXVlIGxpZmVjeWNsZS4gSXQmIzM5O3MgcmVhY2hhYmxlIHZpYSB0aGUgc3RhbmRhcmQgaW1wbGVtZW50YXRpb25zIG9mIHpvbmVkIGJsb2NrIGRldmljZXMgbGlrZSBudWxsX2JsayBpbiB6b25lZCBtb2RlLCBvciBzY3NpX2RlYnVnIGFsc28gd2hlbiBpbiB6b25lZCBtb2RlLiBTaW5jZSBpdCYjMzk7cyByZWFjaGFibGUgYW5kIGZpeGVzIGEgY3J1Y2lhbCB3b3JrcXVldWUgaXNzdWUsIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQmIzM5O3Mgd29ydGggZnV6emluZyBhbmQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKR2l2ZW4gYWxsIG9mIHRoYXQsIGxldCYjMzk7cyBjb25maXJtIHdoZXRoZXIgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgIGlzIGEgZ29vZCBmb2N1cyBzeW1ib2wgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuIFRoZSBzdGF0aWMgZnVuY3Rpb25zIGxpa2UgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgIGFuZCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBhbmQgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2AgYXJlIG9mIGludGVyZXN0IHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3JldmFsaWRhdGVfZGlza196b25lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstem9uZWQuYz01MDM9c3RhdGljIGJvb2wgZGlza19pbnNlcnRfem9uZV93cGx1ZyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi0tXG5ibG9jay9ibGstem9uZWQuYy01MjgtXHQgKiBhdHRhY2hlZCB0byB0aGUgZGlzaywgdGhlbiB0aGlzIGlzIGEgem9uZSB3cml0ZSBwbHVnIGluc2VydCBmcm9tIHRoZVxuYmxvY2svYmxrLXpvbmVkLmM6NTI5Olx0ICogZmlyc3QgY2FsbCB0byBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKCksIGluIHdoaWNoIGNhc2UgdGhlIHpvbmUgaXNcbmJsb2NrL2Jsay16b25lZC5jLTUzMC1cdCAqIG5lY2Vzc2FyaWxseSBpbiB0aGUgYWN0aXZlIGNvbmRpdGlvbi5cbi0tXG5ibG9jay9ibGstem9uZWQuYz0yMjYyPXN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfem9uZV9jYihzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMjMzMS0vKipcbmJsb2NrL2Jsay16b25lZC5jOjIzMzI6ICogYmxrX3JldmFsaWRhdGVfZGlza196b25lcyAtIChyZSlhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB6b25lIHdyaXRlIHBsdWdzXG5ibG9jay9ibGstem9uZWQuYy0yMzMzLSAqIEBkaXNrOlx0VGFyZ2V0IGRpc2tcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMzQzLSAqL1xuYmxvY2svYmxrLXpvbmVkLmM6MjM0NDppbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbmJsb2NrL2Jsay16b25lZC5jLTIzNDUte1xuLS1cbmJsb2NrL2Jsay16b25lZC5jLTI0MjAtfVxuYmxvY2svYmxrLXpvbmVkLmM6MjQyMTpFWFBPUlRfU1lNQk9MX0dQTChibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKTtcbmJsb2NrL2Jsay16b25lZC5jLTI0MjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NjgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2AgVXNhZ2UqKgoKT2theSwgc28gYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgIGlzIGV4cG9ydGVkLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBwb3RlbnRpYWxseSB1c2VkIG91dHNpZGUgdGhlIGJsb2NrIHN1YnN5c3RlbSBwcm9wZXIuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkga25vdyB0aGF0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCB6b25lIHJldmFsaWRhdGlvbiwgcHJvYmFibHkgaW52b2x2aW5nIHRoaW5ncyBsaWtlIFNNUiBkcml2ZXMsIG1heWJlIFNTRCB3ZWFyIGxldmVsaW5nLCBvciBzb21lIG90aGVyIHN0b3JhZ2Ugb3B0aW1pemF0aW9uIG9yIGRhdGEgaW50ZWdyaXR5IGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQgbWVhbnMgc29tZW9uZSBkZWNpZGVkIHRoYXQgZnVuY3Rpb25hbGl0eSB3YXMgdmFsdWFibGUgZW5vdWdoIHRvIGV4cG9zZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgKndobyogaXMgdXNpbmcgaXQsIGFuZCAqd2h5Ki4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY2FsbCBzaXRlcy4gR290dGEgc2VlIHdoYXQgb3RoZXIgc3Vic3lzdGVtcyBhcmUgY2FsbGluZyB0aGlzIGFuZCB3aGF0IHRoZXkgYXJlIGRvaW5nIHdpdGggaXQuIExldCYjMzk7cyBzZWUuLi4gb3V0c2lkZSBvZiBgYmxvY2svYCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgYml0cyB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTE3NT1pbnQgbnVsbF9yZWdpc3Rlcl96b25lZF9kZXYoc3RydWN0IG51bGxiICpudWxsYilcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTgzLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjE4NDpcdHJldHVybiBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKGRpc2spO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE4NS19XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU1OD1zdGF0aWMgaW50IHVibGtfZ2V0X25yX3pvbmVzKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU2NS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NjY6c3RhdGljIGludCB1YmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU2Ny17XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTY4Olx0cmV0dXJuIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXModWItXHUwMDNldWJfZGlzayk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTY5LX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NzY1PXN0YXRpYyB2b2lkIHVibGtfZGV2X3BhcmFtX3pvbmVkX2FwcGx5KHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTc2OC1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo3Njk6c3RhdGljIGludCB1YmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTc3MC17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTQ0MDk9c3RhdGljIGludCB1YmxrX2N0cmxfc3RhcnRfZGV2KHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ1MzgtXHRpZiAodWJsa19kZXZfaXNfem9uZWQodWIpKSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDUzOTpcdFx0cmV0ID0gdWJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXModWIpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ1NDAtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTQzOD1zdGF0aWMgaW50IHZpcnRibGtfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTUzNy1cdCAgICAobGltLmZlYXR1cmVzIFx1MDAyNiBCTEtfRkVBVF9aT05FRCkpIHtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjE1Mzg6XHRcdGVyciA9IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXModmJsay1cdTAwM2VkaXNrKTtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE1MzktXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTExNzM9c3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMzEwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEzMTE6XHRyZXQgPSBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHpsby1cdTAwM2VkaXNrKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMzEyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL21kL2RtLXpvbmUuYz0xNTA9Ym9vbCBkbV9pc196b25lX3dyaXRlKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgc3RydWN0IGJpbyAqYmlvKVxuLS1cbmRyaXZlcnMvbWQvZG0tem9uZS5jLTE2OC0gKiBmb3Igem9uZSBhcHBlbmQgZW11bGF0aW9uLiBOb3RlIHRoYXQgd2UgY2Fubm90IHNpbXBseSB1c2UgdGhlIGJsb2NrIGxheWVyXG5kcml2ZXJzL21kL2RtLXpvbmUuYzoxNjk6ICogYmxrX3JldmFsaWRhdGVfZGlza196b25lcygpIGZ1bmN0aW9uIGhlcmUgYXMgdGhlIG1hcHBlZCBkZXZpY2UgaXMgc3VzcGVuZGVkXG5kcml2ZXJzL21kL2RtLXpvbmUuYy0xNzAtICogKHRoaXMgaXMgY2FsbGVkIGZyb20gX19iaW5kKCkgY29udGV4dCkuXG4tLVxuZHJpdmVycy9tZC9kbS16b25lLmM9MTcyPWludCBkbV9yZXZhbGlkYXRlX3pvbmVzKHN0cnVjdCBkbV90YWJsZSAqdCwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4tLVxuZHJpdmVycy9tZC9kbS16b25lLmMtMTk4LVx0bWQtXHUwMDNlcmV2YWxpZGF0ZV9tYXBfdGFzayA9IGN1cnJlbnQ7XG5kcml2ZXJzL21kL2RtLXpvbmUuYzoxOTk6XHRyZXQgPSBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKGRpc2spO1xuZHJpdmVycy9tZC9kbS16b25lLmMtMjAwLVx0bWQtXHUwMDNlcmV2YWxpZGF0ZV9tYXBfdGFzayA9IE5VTEw7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIzODc9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQ5OS1cdGlmIChibGtfcXVldWVfaXNfem9uZWQobnMtXHUwMDNlcXVldWUpKSB7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjUwMDpcdFx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhucy1cdTAwM2VkaXNrKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTAxLVx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAhbnZtZV9maXJzdF9zY2FuKG5zLVx1MDAzZWRpc2spKVxuLS1cbmRyaXZlcnMvc2NzaS9zZF96YmMuYz01MTk9c3RhdGljIHZvaWQgc2RfemJjX3ByaW50X3pvbmVzKHN0cnVjdCBzY3NpX2Rpc2sgKnNka3ApXG4tLVxuZHJpdmVycy9zY3NpL3NkX3piYy5jLTUzNi0vKlxuZHJpdmVycy9zY3NpL3NkX3piYy5jOjUzNzogKiBDYWxsIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoKSBpZiBhbnkgb2YgdGhlIHpvbmVkIGRpc2sgcHJvcGVydGllcyBoYXZlXG5kcml2ZXJzL3Njc2kvc2RfemJjLmMtNTM4LSAqIGNoYW5nZWQgdGhhdCBtYWtlIGl0IG5lY2Vzc2FyeSB0byBjYWxsIHRoYXQgZnVuY3Rpb24uIENhbGxlZCBieVxuLS1cbmRyaXZlcnMvc2NzaS9zZF96YmMuYz01NDE9aW50IHNkX3piY19yZXZhbGlkYXRlX3pvbmVzKHN0cnVjdCBzY3NpX2Rpc2sgKnNka3ApXG4tLVxuZHJpdmVycy9zY3NpL3NkX3piYy5jLTU2NS1cdGZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG5kcml2ZXJzL3Njc2kvc2RfemJjLmM6NTY2Olx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhkaXNrKTtcbmRyaXZlcnMvc2NzaS9zZF96YmMuYy01NjctXHRtZW1hbGxvY19ub2lvX3Jlc3RvcmUoZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTIxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFpvbmVkIEJsb2NrIERldmljZSBJbnZlc3RpZ2F0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoaXMgcHJvYmxlbS4gYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgIGZlZWxzIGxpa2UgYSBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgZnVuY3Rpb24gdG8gc3RhcnQgd2l0aDsgdGhhdCYjMzk7cyBhIGdvb2Qga2V5IHN5bWJvbC4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIGxvb2sgY2xvc2VseSBhdCBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AsIGBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXNgLCBhbmQgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2Agd2hpbGUgSSYjMzk7bSBhdCBpdC4gVGhvc2Ugc2VlbSBsaWtlIHRoZXkmIzM5O2QgYmUgaW50aW1hdGVseSBpbnZvbHZlZCB3aXRoIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuCgpOb3csIGxldCYjMzk7cyBzZWUgYWJvdXQgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgY2VudGVyZWQgYXJvdW5kIHpvbmVkIGJsb2NrIGRldmljZXMsIHNvIGBDT05GSUdfQkxLX0RFVl9aT05FRGAgaXMgZ29pbmcgdG8gYmUgdGhlIG1haW4gY29uZmlndXJhdGlvbiBrbm9iIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLCBvZiBjb3Vyc2UuIEJ1dCBhcmUgdGhlcmUgYW55IG90aGVyIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YsIGVzcGVjaWFsbHkgdG8gaGVscCB0ZXN0IHpvbmVkIGJsb2NrIGRldmljZXM/IEluIHRoZSBwYXN0LCBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgIGFsb25nc2lkZSBgQ09ORklHX0JMS19ERVZfWk9ORURgIGhhcyBvZnRlbiBiZWVuIHN1ZmZpY2llbnQgZm9yIHRlc3Rpbmcgem9uZWQgYmxvY2sgZGV2aWNlcyB1c2luZyB0aGUgbnVsbF9ibGsgZHJpdmVyLCB3aGljaCBpcyBjb252ZW5pZW50LiBTbyBJJiMzOTtsbCBkZWZpbml0ZWx5IHdhbnQgdG8gdmVyaWZ5IHRoYXQuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgZHJpdmVycy9ibG9jay9LY29uZmlnYCB0byBjaGVjayB1cCBvbiBgTlVMTF9CTEtgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX05VTExfQkxLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk4MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIE5VTExfQkxLIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEluc3RlYWQgb2YgZ3Vlc3NpbmcsIEkmIzM5O20gdGhpbmtpbmcgbGV0JiMzOTtzIGV4YW1pbmUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBgTlVMTF9CTEtgIGNvbmZpZ3VyYXRpb24uIFRoZSBxdWVzdGlvbiBpc24mIzM5O3Qgd2hldGhlciBpdCYjMzk7cyAqZGVmaW5lZCosIGJ1dCBob3cgaXQmIzM5O3MgKmNvbmZpZ3VyZWQqIG9yICpjb25kaXRpb25hbGl6ZWQqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIGl0cyBhdmFpbGFiaWxpdHkgaXMgdGllZCB0byBhbnkgb3RoZXIgc3BlY2lmaWMgYGNvbmZpZ2Agb3B0aW9ucy4gSSB3YW50IHRvIGtub3csIGltbWVkaWF0ZWx5LCBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gb3RoZXIgZmVhdHVyZSBmbGFncy4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBtb3N0IGRpcmVjdCBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBibG9jayBkcml2ZXIgaXMgY29udHJvbGxlZCBhbmQgd2hldGhlciBpdCYjMzk7cyB1bml2ZXJzYWxseSBhY2Nlc3NpYmxlIG9yIHJlc3RyaWN0ZWQgaW4gaXRzIGJ1aWxkLXRpbWUgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIyOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0aGlua2luZywgd2hlcmUgd291bGQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgbnVsbCBibG9jayBkZXZpY2UsIG9yIHNvbWV0aGluZyBhbmFsb2dvdXMsIHJlc2lkZT8gVGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3Igc29tZXRoaW5nIGxpa2UgdGhhdCB3b3VsZCBiZSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgdW5kZXIgdGhlIGBkcml2ZXJzL2Jsb2NrYCBkaXJlY3RvcnkuIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgY2hlY2tpbmcgdGhlIGBudWxsX2Jsa2AgZGlyZWN0b3J5LCBpZiBvbmUgZXhpc3RzLCBmb3IgaXRzIGBLY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIHBsYWNlIHdoZXJlIGZlYXR1cmVzIGFuZCBvcHRpb25zIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBibG9jayBkcml2ZXIgYXJlIGRlZmluZWQuIEl0JiMzOTtsbCBnaXZlIG1lIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGRlZmF1bHQgc2V0dGluZ3MgdGhhdCB0aGUgZHJpdmVyIHVzZXMuIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgZHJpdmVyLCB0aGUgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBibG9jayBkZXZpY2VzIGl0IHdpbGwgY3JlYXRlLCB0aGUgZGVmYXVsdCBzaXplIG9mIHRoZSBkZXZpY2VzIGFuZCBvcHRpb25zIGZvciB0aGUgbnVtYmVyIG9mIGRldmljZXMgaXQgY3JlYXRlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBibG9jayBkZXZpY2UgaXMgZW5hYmxlZCBhbmQgaWYgaXQgbmVlZHMgYW55IG90aGVyIGRyaXZlcnMgdG8gbWFrZSB0aGUgYmxvY2sgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLiBJZiBgbnVsbF9ibGtgIGlzbiYjMzk7dCB0aGVyZSwgSSYjMzk7bGwgYnJvYWRlbiB0aGUgc2VhcmNoLCBidXQgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHRoZSBnby10by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svTWFrZWZpbGU9MzU9b2JqLSQoQ09ORklHX0JMS19ERVZfUk5CRClcdCYjNDM7PSBybmJkL1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0zNi1cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0JMS19ERVZfTlVMTF9CTEspXHQmIzQzOz0gbnVsbF9ibGsvXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19CTEtfREVWX1JVU1RfTlVMTCkgJiM0Mzs9IHJudWxsL1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy01LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7TnVsbCB0ZXN0IGJsb2NrIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy05LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjEwOmNvbmZpZyBCTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTExLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZhdWx0IGluamVjdGlvbiBmb3IgTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclwmIzM0O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjEyOlx0ZGVwZW5kcyBvbiBCTEtfREVWX05VTExfQkxLIFx1MDAyNlx1MDAyNiBGQVVMVF9JTkpFQ1RJT05fQ09ORklHRlNcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlPTQ9Y2NmbGFncy15XHRcdFx0JiM0Mzs9IC1JJChzcmMpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlLTUtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0JMS19ERVZfTlVMTF9CTEspXHQmIzQzOz0gbnVsbF9ibGsub1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZS03LW51bGxfYmxrLW9ianNcdFx0XHQ6PSBtYWluLm9cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjIyOiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIzLXN0YXRpYyBERUNMQVJFX0ZBVUxUX0FUVFIobnVsbF90aW1lb3V0X2F0dHIpO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTk4PU1PRFVMRV9QQVJNX0RFU0MoaG9tZV9ub2RlLCBcJiMzNDtIb21lIG5vZGUgZm9yIHRoZSBkZXZpY2VcJiMzNDspO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtOTktXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMDA6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTAxLS8qXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NjQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudWxsYl9kZXZpY2VfdHlwZSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02NTQtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo2NTU6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNjU2LVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTc3Nz1zdGF0aWMgc3RydWN0IG51bGxiX2RldmljZSAqbnVsbF9hbGxvY19kZXYodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03ODQtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo3ODU6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzg2LVx0ZGV2LVx1MDAzZXRpbWVvdXRfY29uZmlnLmF0dHIgPSBudWxsX3RpbWVvdXRfYXR0cjtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNDg0PXN0YXRpYyB2b2lkIG51bGxiX3NldHVwX2J3dGltZXIoc3RydWN0IG51bGxiICpudWxsYilcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDkyLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQ5MzojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDk0LVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE4ODU9c3RhdGljIGludCBudWxsX3ZhbGlkYXRlX2NvbmYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5MjctXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxOTI4OiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5Mjktc3RhdGljIGJvb2wgX19udWxsX3NldHVwX2ZhdWx0KHN0cnVjdCBmYXVsdF9hdHRyICphdHRyLCBjaGFyICpzdHIpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTk0Mj1zdGF0aWMgYm9vbCBudWxsX3NldHVwX2ZhdWx0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTQzLXtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE5NDQ6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk0NS1cdGlmICghX19udWxsX3NldHVwX2ZhdWx0KFx1MDAyNm51bGxfdGltZW91dF9hdHRyLCBnX3RpbWVvdXRfc3RyKSlcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg9NTM9c3RydWN0IG51bGxiX2RldmljZSB7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTU1LVx0c3RydWN0IGNvbmZpZ19ncm91cCBncm91cDtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDo1NjojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtNTctXHRzdHJ1Y3QgZmF1bHRfY29uZmlnIHRpbWVvdXRfY29uZmlnO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nLCBgQkxLX0RFVl9OVUxMX0JMS2Agc2VlbXMgbGlrZSBhIHNvbGlkIGNob2ljZSBmb3IgZ2VuZXJhbCBibG9jayBkZXZpY2UgdGVzdGluZy4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGF2b2lkIG92ZXJseSBnZW5lcmljIGNvbmZpZ3MuIFdlIHdhbnQgdG8gZm9jdXMgb24gd2hhdCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHRoZSBjaGFuZ2VzIGluIHRoZSBjb2RlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYmFzZWQgb24gdGhlIGNvbnRleHQsIGBCTEtfREVWX1pPTkVEYCBpcyB0aGUgY29uZmlnIHRoYXQmIzM5O3MgZGlyZWN0bHkgcmVsZXZhbnQgdG8gdGhlIG1vZGlmaWNhdGlvbnMuCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIOKAkyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1bmN0aW9ucyBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgaXMgc3RhdGljLiBMb29rcyBsaWtlIEkgd2FzIHJpZ2h0LCBhbmQgdGhhdCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBpcyBhbHNvIHN0YXRpYy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgIGV4cG9ydGVkLCBvciBnbG9iYWw/IEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGJ5IGxvb2tpbmcgaW50byBgYmxvY2svYmxrLXpvbmVkLmNgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay16b25lZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay16b25lZC5jPTIwMDg9c3RhdGljIHZvaWQgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTIwMjYtXG5ibG9jay9ibGstem9uZWQuYzoyMDI3OnZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuYmxvY2svYmxrLXpvbmVkLmMtMjAyOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE0OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjI4CgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDM3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBab25lZCBCbG9jayBEZXZpY2UgTGlmZWN5Y2xlIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgbm90IGV4cG9ydGVkLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgY29yZSB0byB0aGUgc3lzdGVtLCBhbmQgcHJvYmFibHkgc29tZXRoaW5nIHN1YnRsZS4gSXQmIzM5O3MgdXNlZCBpbiBgYmxvY2svZ2VuaGQuY2AsIHdoaWNoIGlzIGJ1aWx0LWluLCBzbyBJIGtub3cgd2hlcmUgdGhlIGVudHJ5IHBvaW50IGlzLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4KCkdpdmVuIHRoYXQgY29udGV4dCwgdGhlIGNyaXRpY2FsIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AsIGBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXNgLCBgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzYCwgYW5kIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYC4gVGhvc2UgYXJlIHRoZSBlbnRyeXBvaW50cyBhbmQgcmVzb3VyY2VzIHRoYXQgYXJlIGxpa2VseSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMuCgpUaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgem9uZSB3cml0ZSBwbHVnIHdvcmtxdWV1ZSBsaWZlY3ljbGUgc3BlY2lmaWNhbGx5IGZvciB6b25lZCBibG9jayBkZXZpY2VzLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFib3V0IHByZXZlbnRpbmcgdGhlIHdvcmtxdWV1ZSBmcm9tIGJlaW5nIHByZW1hdHVyZWx5IGRlc3Ryb3llZCBkdXJpbmcgem9uZSByZXZhbGlkYXRpb247IGl0IG5vdyBkcmFpbnMgdGhlIHF1ZXVlIGFuZCBkZWZlcnMgdGhlIGRlc3RydWN0aW9uIHVudGlsIGRpc2sgcmVsZWFzZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyBmb3Igem9uZWQgZGV2aWNlcy4gVGhlIGZhY3QgdGhhdCBpdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmlydHVhbGl6ZWQgem9uZWQgYmxvY2sgZGV2aWNlcywgbGlrZSBgbnVsbF9ibGtgLCBtZWFucyBpdCYjMzk7cyBwcmV0dHkgaW1wb3J0YW50LCBhcyBpdCBpbXBhY3RzIG1vcmUgdGhhbiBqdXN0IGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucy4KClNvLCBmb3IgZnV6emluZywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGl0OyBpdCYjMzk7cyBhIGxpZmVjeWNsZSBpc3N1ZSBhZmZlY3RpbmcgYSBjb3JlIGNvbXBvbmVudC4gVGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyBhIGxpZmVjeWNsZSBidWcsIGl0IGFmZmVjdHMgem9uZWQgZGV2aWNlcywgaXQmIzM5O3MgY29yZSBibG9jayBsYXllciBsb2dpYywgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgdmlydHVhbGl6YXRpb24uIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBhcyBsaXN0ZWQgYWJvdmUuCgpUaGUgZW5hYmxlIGNvbmZpZyBpcyBgQkxLX0RFVl9aT05FRGAsIGFuZCBhIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgaXQmIzM5O3MgdGhlIG9ubHkgb25lIHRoYXQgZ3VhcmRzIGBibGstem9uZWQuY2AuIEdvb2QsIHRoYXQgbWVhbnMgdGhlIGRlcGVuZGVuY2llcyBhcmUgc2ltcGxlLiBUaW1lIHRvIGZsYWcgdGhpcyBmb3IgZnVydGhlciBhbmFseXNpcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTQ6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2Rpc2tfZnJlZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7YmxrX3JldmFsaWRhdGVfZGlza196b25lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgbGlmZWN5Y2xlIG9mIHRoZSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGZvciB6b25lZCBibG9jayBkZXZpY2VzLiBJdCBwcmV2ZW50cyB0aGUgd29ya3F1ZXVlIGZyb20gYmVpbmcgZGVzdHJveWVkIGR1cmluZyB6b25lIHJldmFsaWRhdGlvbiwgaW5zdGVhZCBkcmFpbmluZyBpdCBhbmQgZGVmZXJyaW5nIGRlc3RydWN0aW9uIHRvIGRpc2sgcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgZm9yIHpvbmVkIGRldmljZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmlydHVhbGl6ZWQgem9uZWQgYmxvY2sgZGV2aWNlcyAobGlrZSBudWxsX2JsaykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2Rpc2tfZnJlZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7YmxrX3JldmFsaWRhdGVfZGlza196b25lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgbGlmZWN5Y2xlIG9mIHRoZSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGZvciB6b25lZCBibG9jayBkZXZpY2VzLiBJdCBwcmV2ZW50cyB0aGUgd29ya3F1ZXVlIGZyb20gYmVpbmcgZGVzdHJveWVkIGR1cmluZyB6b25lIHJldmFsaWRhdGlvbiwgaW5zdGVhZCBkcmFpbmluZyBpdCBhbmQgZGVmZXJyaW5nIGRlc3RydWN0aW9uIHRvIGRpc2sgcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgZm9yIHpvbmVkIGRldmljZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmlydHVhbGl6ZWQgem9uZWQgYmxvY2sgZGV2aWNlcyAobGlrZSBudWxsX2JsaykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMTowNS41MDg5MzMzODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY1MDIwNzY0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9aT05FRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNcIixcbiAgICBcImRpc2tfZnJlZV96b25lX3Jlc291cmNlc1wiLFxuICAgIFwiZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGxpZmVjeWNsZSBvZiB0aGUgem9uZSB3cml0ZSBwbHVnIHdvcmtxdWV1ZSBmb3Igem9uZWQgYmxvY2sgZGV2aWNlcy4gSXQgcHJldmVudHMgdGhlIHdvcmtxdWV1ZSBmcm9tIGJlaW5nIGRlc3Ryb3llZCBkdXJpbmcgem9uZSByZXZhbGlkYXRpb24sIGluc3RlYWQgZHJhaW5pbmcgaXQgYW5kIGRlZmVycmluZyBkZXN0cnVjdGlvbiB0byBkaXNrIHJlbGVhc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJsb2NrIGxheWVyIGxvZ2ljIGZvciB6b25lZCBkZXZpY2VzIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHZpcnR1YWxpemVkIHpvbmVkIGJsb2NrIGRldmljZXMgKGxpa2UgbnVsbF9ibGspLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMTowNS41MDg5Mzg2OTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzM2NzQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFhM2E2MTllZTJkYjc4MmRjYjRkZmUyNTRiZWQ3ZWZjMzkxZjEzYTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAxNDozMTowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstem9uZWQuYyBiL2Jsb2NrL2Jsay16b25lZC5jXFxuaW5kZXggYmVhODE3ZjNkZTU2MDIuLmNhMzBjYWVjODM4ZTczIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay16b25lZC5jXFxuKysrIGIvYmxvY2svYmxrLXpvbmVkLmNcXG5AQCAtMTkyMywxMSArMTkyMywyMCBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdGlmICghZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfcG9vbClcXG4gXFx0XFx0Z290byBmcmVlX2hhc2g7XFxuIFxcbi1cXHRkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193cSA9XFxuLVxcdFxcdGFsbG9jX3dvcmtxdWV1ZShcXFwiJXNfendwbHVnc1xcXCIsIFdRX01FTV9SRUNMQUlNIHwgV1FfSElHSFBSSSB8IFdRX1BFUkNQVSxcXG4tXFx0XFx0XFx0XFx0cG9vbF9zaXplLCBkaXNrLVxcdTAwM2VkaXNrX25hbWUpO1xcbi1cXHRpZiAoIWRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxKVxcbi1cXHRcXHRnb3RvIGRlc3Ryb3lfcG9vbDtcXG4rXFx0LypcXG4rXFx0ICogV2UgbWF5IGFscmVhZHkgaGF2ZSBhIHpvbmUgd3JpdGUgcGx1ZyB3b3JrcXVldWUgYXMgdGhpcyBmdW5jdGlvbiBtYXlcXG4rXFx0ICogYmUgY2FsbGVkIGFmdGVyIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcygpLCB3aGljaCBkb2VzIG5vdCBkZXN0cm95XFxuK1xcdCAqIHRoZSB3b3JrcXVldWUgKHRoZSB6b25lIHdyaXRlIHBsdWdzIHdvcmtxdWV1ZSBpcyBkZXN0cm95ZWQgYXRcXG4rXFx0ICogZGlza19yZWxlYXNlKCkgdGltZSkuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxKSB7XFxuK1xcdFxcdGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxID1cXG4rXFx0XFx0XFx0YWxsb2Nfd29ya3F1ZXVlKFxcXCIlc196d3BsdWdzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0V1FfTUVNX1JFQ0xBSU0gfCBXUV9ISUdIUFJJIHwgV1FfUEVSQ1BVLFxcbitcXHRcXHRcXHRcXHRcXHRwb29sX3NpemUsIGRpc2stXFx1MDAzZWRpc2tfbmFtZSk7XFxuK1xcdFxcdGlmICghZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpXFxuK1xcdFxcdFxcdGdvdG8gZGVzdHJveV9wb29sO1xcbitcXHR9XFxuIFxcbiBcXHRkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193b3JrZXIgPVxcbiBcXHRcXHRrdGhyZWFkX2NyZWF0ZShkaXNrX3pvbmVfd3BsdWdzX3dvcmtlciwgZGlzayxcXG5AQCAtMTkzNSwxNSArMTk0NCwxMiBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdGlmIChJU19FUlIoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyKSkge1xcbiBcXHRcXHRyZXQgPSBQVFJfRVJSKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XFxuIFxcdFxcdGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlciA9IE5VTEw7XFxuLVxcdFxcdGdvdG8gZGVzdHJveV93cTtcXG4rXFx0XFx0Z290byBkZXN0cm95X3Bvb2w7XFxuIFxcdH1cXG4gXFx0d2FrZV91cF9wcm9jZXNzKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLWRlc3Ryb3lfd3E6XFxuLVxcdGRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxKTtcXG4tXFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EgPSBOVUxMO1xcbiBkZXN0cm95X3Bvb2w6XFxuIFxcdG1lbXBvb2xfZGVzdHJveShkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19wb29sKTtcXG4gXFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IE5VTEw7XFxuQEAgLTE5OTksNyArMjAwNSw3IEBAIHN0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX2NvbmRfYXJyYXkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4ICp6b25lc19jb25kKVxcbiBcXHRrZnJlZV9yY3VfbWlnaHRzbGVlcCh6b25lc19jb25kKTtcXG4gfVxcbiBcXG4tdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuK3N0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4ge1xcbiBcXHRpZiAoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyKSB7XFxuIFxcdFxcdGt0aHJlYWRfc3RvcChkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193b3JrZXIpO1xcbkBAIC0yMDA3LDEwICsyMDEzLDggQEAgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuIFxcdH1cXG4gXFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19saXN0KSk7XFxuIFxcbi1cXHRpZiAoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcXG4tXFx0XFx0ZGVzdHJveV93b3JrcXVldWUoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xcbi1cXHRcXHRkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193cSA9IE5VTEw7XFxuLVxcdH1cXG4rXFx0aWYgKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxKVxcbitcXHRcXHRkcmFpbl93b3JrcXVldWUoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xcbiBcXG4gXFx0ZGlza19kZXN0cm95X3pvbmVfd3BsdWdzX2hhc2hfdGFibGUoZGlzayk7XFxuIFxcbkBAIC0yMDIwLDYgKzIwMjQsMTYgQEAgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuIFxcdGRpc2stXFx1MDAzZW5yX3pvbmVzID0gMDtcXG4gfVxcbiBcXG4rdm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuK3tcXG4rXFx0aWYgKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxKSB7XFxuK1xcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxKTtcXG4rXFx0XFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EgPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoZGlzayk7XFxuK31cXG4rXFxuIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3Mge1xcbiBcXHRzdHJ1Y3QgZ2VuZGlza1xcdCpkaXNrO1xcbiBcXHR1OFxcdFxcdCp6b25lc19jb25kO1xcbmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oXFxuaW5kZXggMjVhZjhhYzVlZjBmNzcuLmZiOTVkM2M1ODk1MGMxIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay5oXFxuKysrIGIvYmxvY2svYmxrLmhcXG5AQCAtNTI4LDcgKzUyOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpb2NfY2xlYXJfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuIFxcbiAjaWZkZWYgQ09ORklHX0JMS19ERVZfWk9ORURcXG4gdm9pZCBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spO1xcbi12b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XFxuK3ZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcXG4gc3RhdGljIGlubGluZSBib29sIGJpb196b25lX3dyaXRlX3BsdWdnaW5nKHN0cnVjdCBiaW8gKmJpbylcXG4ge1xcbiBcXHRyZXR1cm4gYmlvX2ZsYWdnZWQoYmlvLCBCSU9fWk9ORV9XUklURV9QTFVHR0lORyk7XFxuQEAgLTU4MSw3ICs1ODEsNyBAQCBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuIHtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiB7XFxuIH1cXG4gc3RhdGljIGlubGluZSBib29sIGJpb196b25lX3dyaXRlX3BsdWdnaW5nKHN0cnVjdCBiaW8gKmJpbylcXG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcXG5pbmRleCBmODRiNmEzNTViNTc0YS4uMzBhYzBmZmU2NTE3NDUgMTAwNjQ0XFxuLS0tIGEvYmxvY2svZ2VuaGQuY1xcbisrKyBiL2Jsb2NrL2dlbmhkLmNcXG5AQCAtMTMwMCw3ICsxMzAwLDcgQEAgc3RhdGljIHZvaWQgZGlza19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFxuIFxcdGRpc2tfcmVsZWFzZV9ldmVudHMoZGlzayk7XFxuIFxcdGtmcmVlKGRpc2stXFx1MDAzZXJhbmRvbSk7XFxuLVxcdGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTtcXG4rXFx0ZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xcbiBcXHR4YV9kZXN0cm95KFxcdTAwMjZkaXNrLVxcdTAwM2VwYXJ0X3RibCk7XFxuIFxcbiBcXHRrb2JqZWN0X3B1dChcXHUwMDI2ZGlzay1cXHUwMDNlcXVldWVfa29iaik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE0OjMxOjA1Ljk0MzE5NTg4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2MDY3ODAyNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXNcIixcbiAgICBcImRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc1wiLFxuICAgIFwiYmxrX3JldmFsaWRhdGVfZGlza196b25lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHpvbmUgd3JpdGUgcGx1ZyB3b3JrcXVldWUgZm9yIHpvbmVkIGJsb2NrIGRldmljZXMuIEl0IHByZXZlbnRzIHRoZSB3b3JrcXVldWUgZnJvbSBiZWluZyBkZXN0cm95ZWQgZHVyaW5nIHpvbmUgcmV2YWxpZGF0aW9uLCBpbnN0ZWFkIGRyYWluaW5nIGl0IGFuZCBkZWZlcnJpbmcgZGVzdHJ1Y3Rpb24gdG8gZGlzayByZWxlYXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyBmb3Igem9uZWQgZGV2aWNlcyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB2aXJ0dWFsaXplZCB6b25lZCBibG9jayBkZXZpY2VzIChsaWtlIG51bGxfYmxrKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYTNhNjE5ZWUyZGI3ODJkY2I0ZGZlMjU0YmVkN2VmYzM5MWYxM2E1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxNDozMTowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay16b25lZC5jIGIvYmxvY2svYmxrLXpvbmVkLmNcbmluZGV4IGJlYTgxN2YzZGU1NjAyLi5jYTMwY2FlYzgzOGU3MyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay16b25lZC5jXG4rKysgYi9ibG9jay9ibGstem9uZWQuY1xuQEAgLTE5MjMsMTEgKzE5MjMsMjAgQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wpXG4gXHRcdGdvdG8gZnJlZV9oYXNoO1xuIFxuLVx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9XG4tXHRcdGFsbG9jX3dvcmtxdWV1ZShcIiVzX3p3cGx1Z3NcIiwgV1FfTUVNX1JFQ0xBSU0gfCBXUV9ISUdIUFJJIHwgV1FfUEVSQ1BVLFxuLVx0XHRcdFx0cG9vbF9zaXplLCBkaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG4tXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpXG4tXHRcdGdvdG8gZGVzdHJveV9wb29sO1xuK1x0LypcbitcdCAqIFdlIG1heSBhbHJlYWR5IGhhdmUgYSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGFzIHRoaXMgZnVuY3Rpb24gbWF5XG4rXHQgKiBiZSBjYWxsZWQgYWZ0ZXIgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKCksIHdoaWNoIGRvZXMgbm90IGRlc3Ryb3lcbitcdCAqIHRoZSB3b3JrcXVldWUgKHRoZSB6b25lIHdyaXRlIHBsdWdzIHdvcmtxdWV1ZSBpcyBkZXN0cm95ZWQgYXRcbitcdCAqIGRpc2tfcmVsZWFzZSgpIHRpbWUpLlxuK1x0ICovXG4rXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcbitcdFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9XG4rXHRcdFx0YWxsb2Nfd29ya3F1ZXVlKFwiJXNfendwbHVnc1wiLFxuK1x0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsXG4rXHRcdFx0XHRcdHBvb2xfc2l6ZSwgZGlzay1cdTAwM2VkaXNrX25hbWUpO1xuK1x0XHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpXG4rXHRcdFx0Z290byBkZXN0cm95X3Bvb2w7XG4rXHR9XG4gXG4gXHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlciA9XG4gXHRcdGt0aHJlYWRfY3JlYXRlKGRpc2tfem9uZV93cGx1Z3Nfd29ya2VyLCBkaXNrLFxuQEAgLTE5MzUsMTUgKzE5NDQsMTIgQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0aWYgKElTX0VSUihkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcikpIHtcbiBcdFx0cmV0ID0gUFRSX0VSUihkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XG4gXHRcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyID0gTlVMTDtcbi1cdFx0Z290byBkZXN0cm95X3dxO1xuK1x0XHRnb3RvIGRlc3Ryb3lfcG9vbDtcbiBcdH1cbiBcdHdha2VfdXBfcHJvY2VzcyhkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1kZXN0cm95X3dxOlxuLVx0ZGVzdHJveV93b3JrcXVldWUoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSk7XG4tXHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxID0gTlVMTDtcbiBkZXN0cm95X3Bvb2w6XG4gXHRtZW1wb29sX2Rlc3Ryb3koZGlzay1cdTAwM2V6b25lX3dwbHVnc19wb29sKTtcbiBcdGRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IE5VTEw7XG5AQCAtMTk5OSw3ICsyMDA1LDcgQEAgc3RhdGljIHZvaWQgZGlza19zZXRfem9uZXNfY29uZF9hcnJheShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggKnpvbmVzX2NvbmQpXG4gXHRrZnJlZV9yY3VfbWlnaHRzbGVlcCh6b25lc19jb25kKTtcbiB9XG4gXG4tdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4rc3RhdGljIHZvaWQgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbiBcdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcikge1xuIFx0XHRrdGhyZWFkX3N0b3AoZGlzay1cdTAwM2V6b25lX3dwbHVnc193b3JrZXIpO1xuQEAgLTIwMDcsMTAgKzIwMTMsOCBAQCB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdH1cbiBcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2xpc3QpKTtcbiBcbi1cdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKSB7XG4tXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xuLVx0XHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxID0gTlVMTDtcbi1cdH1cbitcdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKVxuK1x0XHRkcmFpbl93b3JrcXVldWUoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSk7XG4gXG4gXHRkaXNrX2Rlc3Ryb3lfem9uZV93cGx1Z3NfaGFzaF90YWJsZShkaXNrKTtcbiBcbkBAIC0yMDIwLDYgKzIwMjQsMTYgQEAgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRkaXNrLVx1MDAzZW5yX3pvbmVzID0gMDtcbiB9XG4gXG4rdm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4re1xuK1x0aWYgKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcbitcdFx0ZGVzdHJveV93b3JrcXVldWUoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSk7XG4rXHRcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EgPSBOVUxMO1xuK1x0fVxuK1xuK1x0ZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xuK31cbitcbiBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzIHtcbiBcdHN0cnVjdCBnZW5kaXNrXHQqZGlzaztcbiBcdHU4XHRcdCp6b25lc19jb25kO1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcbmluZGV4IDI1YWY4YWM1ZWYwZjc3Li5mYjk1ZDNjNTg5NTBjMSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay5oXG4rKysgYi9ibG9jay9ibGsuaFxuQEAgLTUyOCw3ICs1MjgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW9jX2NsZWFyX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuIFxuICNpZmRlZiBDT05GSUdfQkxLX0RFVl9aT05FRFxuIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbi12b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XG4rdm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fem9uZV93cml0ZV9wbHVnZ2luZyhzdHJ1Y3QgYmlvICpiaW8pXG4ge1xuIFx0cmV0dXJuIGJpb19mbGFnZ2VkKGJpbywgQklPX1pPTkVfV1JJVEVfUExVR0dJTkcpO1xuQEAgLTU4MSw3ICs1ODEsNyBAQCBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4gc3RhdGljIGlubGluZSB2b2lkIGRpc2tfaW5pdF96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4rc3RhdGljIGlubGluZSB2b2lkIGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4gfVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fem9uZV93cml0ZV9wbHVnZ2luZyhzdHJ1Y3QgYmlvICpiaW8pXG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcbmluZGV4IGY4NGI2YTM1NWI1NzRhLi4zMGFjMGZmZTY1MTc0NSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcbisrKyBiL2Jsb2NrL2dlbmhkLmNcbkBAIC0xMzAwLDcgKzEzMDAsNyBAQCBzdGF0aWMgdm9pZCBkaXNrX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIFxuIFx0ZGlza19yZWxlYXNlX2V2ZW50cyhkaXNrKTtcbiBcdGtmcmVlKGRpc2stXHUwMDNlcmFuZG9tKTtcbi1cdGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTtcbitcdGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyhkaXNrKTtcbiBcdHhhX2Rlc3Ryb3koXHUwMDI2ZGlzay1cdTAwM2VwYXJ0X3RibCk7XG4gXG4gXHRrb2JqZWN0X3B1dChcdTAwMjZkaXNrLVx1MDAzZXF1ZXVlX2tvYmopO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6MDUuOTQzMTk3NjY4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkyMzM3NTQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpvbmUgUmVzb3VyY2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0d2Vha2luZyBob3cgem9uZWQgcmVzb3VyY2VzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIsIHNwZWNpZmljYWxseSBpbiBgYmxvY2svYmxrLXpvbmVkLmNgLCBgYmxvY2svYmxrLmhgLCBhbmQgYGJsb2NrL2dlbmhkLmNgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgc3VidGxlIHJhY2UgY29uZGl0aW9uIG9yIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWUgYXJvdW5kIGBkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxYC4gIEluc3RlYWQgb2YgYSBzaW1wbGUgZGVzdHJveSBvZiB0aGUgd29ya3F1ZXVlIGluIGBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoKWAsIHRoZSBjb2RlIGlzIG5vdyBkcmFpbmluZyBpdCBmaXJzdCwgYW5kIHRoZSAqYWN0dWFsKiBkZXN0cnVjdGlvbiBpcyBkZWxlZ2F0ZWQgdG8gdGhpcyBuZXcgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcygpYCBmdW5jdGlvbi4gIFRoYXQgb25lIGlzIGNhbGxlZCBmcm9tIGBkaXNrX3JlbGVhc2UoKWAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIHRoZSBmaW5hbCBjbGVhbnVwLiAgQW5kIGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKClgIGlzIGJlaW5nIGFkYXB0ZWQgdG8gcmV1c2UgdGhlIHdvcmtxdWV1ZSBpZiBpdCdzIGFscmVhZHkgdGhlcmUuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGtub3cgd2hpY2ggQ09ORklHIG9wdGlvbnMgYXJlIHJlbGV2YW50LiBTaW5jZSB0aGUgcGF0Y2ggdG91Y2hlcyBgYmxvY2svYmxrLXpvbmVkLmNgIGFuZCBgYmxvY2svYmxrLmhgLCBJIGV4cGVjdCBhdCBsZWFzdCBgQ09ORklHX0JMS19ERVZfWk9ORURgIHRvIGJlIGluIHBsYXkuIExvb2tpbmcgYXQgYGJsb2NrL2Jsay5oYCwgdGhlIHByZXNlbmNlIG9mIGBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMoKWAgYW5kIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoKWAgZGVmaW5pdGlvbnMsIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfQkxLX0RFVl9aT05FRGAsIGNvbmZpcm1zIG15IHN1c3BpY2lvbi5cblxuTm93IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhhdCBgYmxvY2svYmxrLXpvbmVkLmNgIGlzIGluZGVlZCBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19CTEtfREVWX1pPTkVEYCBpcyBlbmFibGVkIHRvIGJlIHN1cmUuIEl0J3MgdXN1YWxseSB0aGUgbW9zdCBjb21tb24gZGVwZW5kZW5jeS4gSSdsbCBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjYwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6MTQuODY2NTc2MDQ5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1Mjk4NTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsay16b25lZC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL01ha2VmaWxlPTMxPW9iai0kKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkgKz0gYmlvLWludGVncml0eS5vIGJsay1pbnRlZ3JpdHkubyB0MTAtcGkubyBcXFxcXFxuYmxvY2svTWFrZWZpbGUtMzItXFx0XFx0XFx0XFx0ICAgYmlvLWludGVncml0eS1hdXRvLm8gYmlvLWludGVncml0eS1mcy5vXFxuYmxvY2svTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX0JMS19ERVZfWk9ORUQpXFx0Kz0gYmxrLXpvbmVkLm9cXG5ibG9jay9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfQkxLX1dCVClcXHRcXHQrPSBibGstd2J0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6MTQuOTQxODg0MzcxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyOTAyNjYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBab25lZCBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfQkxLX0RFVl9aT05FRGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZS4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBuYWlsIGRvd24uIFRoaXMgcGF0Y2ggaXMgZ29pbmcgdG8gYmUgZGlnZ2luZyBpbnRvIHRoZSB6b25lZCBibG9jayBkZXZpY2UgcmVzb3VyY2UgbWFuYWdlbWVudC5cblxuTm93LCBpdCBsb29rcyBsaWtlIHRoaXMgdXBkYXRlIGlzIHplcm9pbmcgaW4gb24gdGhyZWUgY29yZSBmdW5jdGlvbnM6IGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCwgYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2AsIGFuZCB0aGUgbmV3bHkgaW50cm9kdWNlZCBgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzYC4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgZm9yIGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCBhbmQgYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2AuIFVuZGVyc3RhbmRpbmcgd2hlcmUgdGhvc2UgYXJlIGNhbGxlZCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvbiBob3cgdGhpcyBwYXRjaCBpbnRlbmRzIHRvIGltcGFjdCB0aGUgb3ZlcmFsbCB6b25lIGxpZmVjeWNsZSwgZnJvbSByZXNvdXJjZSBhbGxvY2F0aW9uIHRvIHJlbGVhc2UuIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHRzIGluIHdoaWNoIHJlc291cmNlcyBhcmUgbWFuYWdlZCwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFkZGluZyBgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzYC4gSXQncyBhbGwgYWJvdXQgc2NvcGluZyB0aGUgaW1wYWN0LCBhbmQgc2VlaW5nIGhvdyBpdCBmaXRzIGludG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgYWZmYWlycywgc28gSSBjYW4gc3RhcnQgZm9ybWluZyBzb21lIG9waW5pb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDg2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6MTkuMzcwOTE1MTU1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTcyNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay16b25lZC5jPTE4ODU9dm9pZCBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0xOTAxLVxcbmJsb2NrL2Jsay16b25lZC5jOjE5MDI6c3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay16b25lZC5jLTE5MDMtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgcG9vbF9zaXplKVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MjA0Nz1zdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIwNzUtXFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoKSB7XFxuYmxvY2svYmxrLXpvbmVkLmM6MjA3NjpcXHRcXHRyZXQgPSBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKGRpc2ssIHBvb2xfc2l6ZSk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMjA3Ny1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMToxOS40NDM4OTg4NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzE0MzAwOTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgRGlzayBab25lIFJlc291cmNlIFZhbGlkYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgaXMgY2xlYXJseSBhIGRvd25zdHJlYW0gZnVuY3Rpb24sIGNhbGxlZCBieSBgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgdGhhdCBzZXRzIHVwIGEgc3BlY2lmaWMgZGVwZW5kZW5jeS5cIiBOb3csIG15IGZvY3VzIHNoaWZ0cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGNvbnRleHQ6IHdoZXJlICppcyogYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2AgYWN0dWFsbHkgdHJpZ2dlcmVkPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIGlzIGtleSB0byB0cmFjaW5nIHRoZSByZXNvdXJjZSBhbGxvY2F0aW9uIGxpZmVjeWNsZSBhbmQgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgaGlnaC1sZXZlbCBwdXJwb3NlIG9mIHRoZSBjYWxsLCBhbmQgd2hldGhlciBvciBub3QgaXQgaXMgY3JpdGljYWwgaW4gYSBwZXJmb3JtYW5jZSBzY2VuYXJpby4gV2hlcmUgYXJlIHdlIGluIHRoZSBhcmNoaXRlY3R1cmUsIGFuZCB3aGF04oCZcyBkcml2aW5nIHRoZXNlIHZhbGlkYXRpb25zPyBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIGNvbnRyb2wgYW5kIHBvdGVudGlhbCB0aW1pbmcgaXNzdWVzIGludm9sdmVkIHdpdGggem9uZSByZXNvdXJjZSBhbGxvY2F0aW9uLiBMZXTigJlzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB0aGUgY2hhaW4gb2YgZXZlbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjU4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6MjkuMTU4MjAxODRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MDk1MzUyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay16b25lZC5jPTIwMzc9c3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyB7XFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0yMDQ2LVxcbmJsb2NrL2Jsay16b25lZC5jOjIwNDc6c3RhdGljIGludCBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuYmxvY2svYmxrLXpvbmVkLmMtMjA0OC1cXHRcXHRcXHRcXHRzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzICphcmdzKVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MjM0ND1pbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIzNzctXFx0bm9pb19mbGFnID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XFxuYmxvY2svYmxrLXpvbmVkLmM6MjM3ODpcXHRyZXQgPSBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgXFx1MDAyNmFyZ3MpO1xcbmJsb2NrL2Jsay16b25lZC5jLTIzNzktXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMTozMC41MjkxNjEzNjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA5MjQ5MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIERpc2sgWm9uZSBSZXZhbGlkYXRpb24qKlxuXG5SaWdodCwgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLi4uIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZXZhbGlkYXRpb24gcHJvY2VzcyBmb3IgZGlzayB6b25lcywgc28gd2hlcmUgaXMgdGhhdCBjcnVjaWFsIGBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXNgIGZ1bmN0aW9uIGNhbGxlZD8gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgd2UncmUgY2xlYW5pbmcgdXAgYWZ0ZXIgYSByZXZhbGlkYXRpb24gZXZlbnQuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgcGF0aCBmcm9tIHRoYXQgZW50cnkgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbi4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHRyYWNlIHRoZSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQ4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6MzQuNzM4NDEzMDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzgwMDY0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay16b25lZC5jPTE5MDI9c3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMTkyNy1cXHQgKiBXZSBtYXkgYWxyZWFkeSBoYXZlIGEgem9uZSB3cml0ZSBwbHVnIHdvcmtxdWV1ZSBhcyB0aGlzIGZ1bmN0aW9uIG1heVxcbmJsb2NrL2Jsay16b25lZC5jOjE5Mjg6XFx0ICogYmUgY2FsbGVkIGFmdGVyIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcygpLCB3aGljaCBkb2VzIG5vdCBkZXN0cm95XFxuYmxvY2svYmxrLXpvbmVkLmMtMTkyOS1cXHQgKiB0aGUgd29ya3F1ZXVlICh0aGUgem9uZSB3cml0ZSBwbHVncyB3b3JrcXVldWUgaXMgZGVzdHJveWVkIGF0XFxuLS1cXG5ibG9jay9ibGstem9uZWQuYz0xOTk2PXN0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX2NvbmRfYXJyYXkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4ICp6b25lc19jb25kKVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMjAwNy1cXG5ibG9jay9ibGstem9uZWQuYzoyMDA4OnN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9ibGstem9uZWQuYy0yMDA5LXtcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTIwMjc9dm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0yMDMzLVxcbmJsb2NrL2Jsay16b25lZC5jOjIwMzQ6XFx0ZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xcbmJsb2NrL2Jsay16b25lZC5jLTIwMzUtfVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MjM0ND1pbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTI0MTUtXFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xcbmJsb2NrL2Jsay16b25lZC5jOjI0MTY6XFx0ZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xcbmJsb2NrL2Jsay16b25lZC5jLTI0MTctXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6MzUuMjcyMjIxNzg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMDUzMjQwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQmxvY2sgTGF5ZXIgUGF0Y2ggZm9yIFpvbmVkIEJsb2NrIERldmljZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBhbmQgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2AgYXJlIGtleSBoZXJlLCBib3RoIG9mIHdoaWNoIGFyZSBjYWxsZWQgd2l0aGluIGRpZmZlcmVudCBhcmVhcyBvZiB0aGUgY29kZS4gSXQgc2VlbXMgbGlrZSBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBnZXRzIGNhbGxlZCBmcm9tIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCBhbmQsIGNydWNpYWxseSwgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2AgaXMgY2FsbGVkIGZyb20gYGRpc2tfcmVsZWFzZWAgaW4gYGJsb2NrL2dlbmhkLmNgLiBUaGUgcHJvYmxlbSBsaWVzIGluIHRoZSBsaWZlY3ljbGUgb2YgYSB3b3JrcXVldWUuIEJhc2ljYWxseSwgYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2Agd2FzIGRlc3Ryb3lpbmcgdGhlIHdvcmtxdWV1ZSwgYnV0IGl0IHdhcyBiZWluZyByZS1jcmVhdGVkIGFnYWluIGJ5IGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCB3aXRoaW4gcmV2YWxpZGF0aW9uLiBTbywgdGhpcyBwYXRjaCBtYWtlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGFkZHJlc3MgdGhlIHdvcmtxdWV1ZS4gVGhlIGZpeCBJJ20gc2VlaW5nIGlzIHRvIGRyYWluIHRoZSB3b3JrcXVldWUgaW4gYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2AsIGFuZCAqdGhlbiogZGVzdHJveSBpdCBpbiBgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzYCwgd2hpY2ggaXMgdGhlIGFwcHJvcHJpYXRlIHBsYWNlLiBUaGlzIG9ubHkgaGFwcGVucyB3aGVuIHRoZSBkaXNrIGlzIGZ1bGx5IHJlbGVhc2VkLlxuXG5UaGlzIGlzIGFsbCBwcmV0dHkgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGJsb2NrIGxheWVyLCBhbmQgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB6b25lZCBibG9jayBkZXZpY2VzLiBJdCdzIGRlZmluaXRlbHkgYSBidWcgZml4IHJlbGF0ZWQgdG8gd29ya3F1ZXVlIGxpZmVjeWNsZS4gSXQncyByZWFjaGFibGUgdmlhIHRoZSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbnMgb2Ygem9uZWQgYmxvY2sgZGV2aWNlcyBsaWtlIG51bGxfYmxrIGluIHpvbmVkIG1vZGUsIG9yIHNjc2lfZGVidWcgYWxzbyB3aGVuIGluIHpvbmVkIG1vZGUuIFNpbmNlIGl0J3MgcmVhY2hhYmxlIGFuZCBmaXhlcyBhIGNydWNpYWwgd29ya3F1ZXVlIGlzc3VlLCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0J3Mgd29ydGggZnV6emluZyBhbmQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5HaXZlbiBhbGwgb2YgdGhhdCwgbGV0J3MgY29uZmlybSB3aGV0aGVyIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCBpcyBhIGdvb2QgZm9jdXMgc3ltYm9sIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBUaGUgc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCBhbmQgYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2AgYW5kIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgIGFyZSBvZiBpbnRlcmVzdCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3ODcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6NDEuNDc3NTQ5Mzc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA4NDA5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3JldmFsaWRhdGVfZGlza196b25lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLXpvbmVkLmM9NTAzPXN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy01MjgtXFx0ICogYXR0YWNoZWQgdG8gdGhlIGRpc2ssIHRoZW4gdGhpcyBpcyBhIHpvbmUgd3JpdGUgcGx1ZyBpbnNlcnQgZnJvbSB0aGVcXG5ibG9jay9ibGstem9uZWQuYzo1Mjk6XFx0ICogZmlyc3QgY2FsbCB0byBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKCksIGluIHdoaWNoIGNhc2UgdGhlIHpvbmUgaXNcXG5ibG9jay9ibGstem9uZWQuYy01MzAtXFx0ICogbmVjZXNzYXJpbGx5IGluIHRoZSBhY3RpdmUgY29uZGl0aW9uLlxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MjI2Mj1zdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3pvbmVfY2Ioc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LFxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMjMzMS0vKipcXG5ibG9jay9ibGstem9uZWQuYzoyMzMyOiAqIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMgLSAocmUpYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgem9uZSB3cml0ZSBwbHVnc1xcbmJsb2NrL2Jsay16b25lZC5jLTIzMzMtICogQGRpc2s6XFx0VGFyZ2V0IGRpc2tcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIzNDMtICovXFxuYmxvY2svYmxrLXpvbmVkLmM6MjM0NDppbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9ibGstem9uZWQuYy0yMzQ1LXtcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTI0MjAtfVxcbmJsb2NrL2Jsay16b25lZC5jOjI0MjE6RVhQT1JUX1NZTUJPTF9HUEwoYmxrX3JldmFsaWRhdGVfZGlza196b25lcyk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMjQyMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzE6NDIuMDA4Mzk1MzI0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MDc3MDQzNjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCBVc2FnZSoqXG5cbk9rYXksIHNvIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCBpcyBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgcG90ZW50aWFsbHkgdXNlZCBvdXRzaWRlIHRoZSBibG9jayBzdWJzeXN0ZW0gcHJvcGVyLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgdGhhdCBtZWFucyBpdCdzIGxpa2VseSBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCB6b25lIHJldmFsaWRhdGlvbiwgcHJvYmFibHkgaW52b2x2aW5nIHRoaW5ncyBsaWtlIFNNUiBkcml2ZXMsIG1heWJlIFNTRCB3ZWFyIGxldmVsaW5nLCBvciBzb21lIG90aGVyIHN0b3JhZ2Ugb3B0aW1pemF0aW9uIG9yIGRhdGEgaW50ZWdyaXR5IGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoZSBmYWN0IHRoYXQgaXQncyBleHBvcnRlZCBtZWFucyBzb21lb25lIGRlY2lkZWQgdGhhdCBmdW5jdGlvbmFsaXR5IHdhcyB2YWx1YWJsZSBlbm91Z2ggdG8gZXhwb3NlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCAqd2hvKiBpcyB1c2luZyBpdCwgYW5kICp3aHkqLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc2l0ZXMuIEdvdHRhIHNlZSB3aGF0IG90aGVyIHN1YnN5c3RlbXMgYXJlIGNhbGxpbmcgdGhpcyBhbmQgd2hhdCB0aGV5IGFyZSBkb2luZyB3aXRoIGl0LiBMZXQncyBzZWUuLi4gb3V0c2lkZSBvZiBgYmxvY2svYCwgdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIHdpbGwgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMjozNy4wODU0NDE1NjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTQ4MjAxNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3JldmFsaWRhdGVfZGlza196b25lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9MTc1PWludCBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGIgKm51bGxiKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE4My1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6MTg0OlxcdHJldHVybiBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKGRpc2spO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xODUtfVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU1OD1zdGF0aWMgaW50IHVibGtfZ2V0X25yX3pvbmVzKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTY1LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NjY6c3RhdGljIGludCB1YmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01Njcte1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1Njg6XFx0cmV0dXJuIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXModWItXFx1MDAzZXViX2Rpc2spO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NjktfVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTc2NT1zdGF0aWMgdm9pZCB1YmxrX2Rldl9wYXJhbV96b25lZF9hcHBseShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTc2OC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NzY5OnN0YXRpYyBpbnQgdWJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IHVibGtfZGV2aWNlICp1YilcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNzcwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00NDA5PXN0YXRpYyBpbnQgdWJsa19jdHJsX3N0YXJ0X2RldihzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ1MzgtXFx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSkge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0NTM5OlxcdFxcdHJldCA9IHVibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHViKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDU0MC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTQzOD1zdGF0aWMgaW50IHZpcnRibGtfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNTM3LVxcdCAgICAobGltLmZlYXR1cmVzIFxcdTAwMjYgQkxLX0ZFQVRfWk9ORUQpKSB7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6MTUzODpcXHRcXHRlcnIgPSBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHZibGstXFx1MDAzZWRpc2spO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE1MzktXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMTczPXN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMzEwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMzExOlxcdHJldCA9IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoemxvLVxcdTAwM2VkaXNrKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTMxMi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9tZC9kbS16b25lLmM9MTUwPWJvb2wgZG1faXNfem9uZV93cml0ZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tem9uZS5jLTE2OC0gKiBmb3Igem9uZSBhcHBlbmQgZW11bGF0aW9uLiBOb3RlIHRoYXQgd2UgY2Fubm90IHNpbXBseSB1c2UgdGhlIGJsb2NrIGxheWVyXFxuZHJpdmVycy9tZC9kbS16b25lLmM6MTY5OiAqIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoKSBmdW5jdGlvbiBoZXJlIGFzIHRoZSBtYXBwZWQgZGV2aWNlIGlzIHN1c3BlbmRlZFxcbmRyaXZlcnMvbWQvZG0tem9uZS5jLTE3MC0gKiAodGhpcyBpcyBjYWxsZWQgZnJvbSBfX2JpbmQoKSBjb250ZXh0KS5cXG4tLVxcbmRyaXZlcnMvbWQvZG0tem9uZS5jPTE3Mj1pbnQgZG1fcmV2YWxpZGF0ZV96b25lcyhzdHJ1Y3QgZG1fdGFibGUgKnQsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbi0tXFxuZHJpdmVycy9tZC9kbS16b25lLmMtMTk4LVxcdG1kLVxcdTAwM2VyZXZhbGlkYXRlX21hcF90YXNrID0gY3VycmVudDtcXG5kcml2ZXJzL21kL2RtLXpvbmUuYzoxOTk6XFx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhkaXNrKTtcXG5kcml2ZXJzL21kL2RtLXpvbmUuYy0yMDAtXFx0bWQtXFx1MDAzZXJldmFsaWRhdGVfbWFwX3Rhc2sgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIzODc9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDk5LVxcdGlmIChibGtfcXVldWVfaXNfem9uZWQobnMtXFx1MDAzZXF1ZXVlKSkge1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTAwOlxcdFxcdHJldCA9IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMobnMtXFx1MDAzZWRpc2spO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTAxLVxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgIW52bWVfZmlyc3Rfc2Nhbihucy1cXHUwMDNlZGlzaykpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2RfemJjLmM9NTE5PXN0YXRpYyB2b2lkIHNkX3piY19wcmludF96b25lcyhzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwKVxcbi0tXFxuZHJpdmVycy9zY3NpL3NkX3piYy5jLTUzNi0vKlxcbmRyaXZlcnMvc2NzaS9zZF96YmMuYzo1Mzc6ICogQ2FsbCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKCkgaWYgYW55IG9mIHRoZSB6b25lZCBkaXNrIHByb3BlcnRpZXMgaGF2ZVxcbmRyaXZlcnMvc2NzaS9zZF96YmMuYy01MzgtICogY2hhbmdlZCB0aGF0IG1ha2UgaXQgbmVjZXNzYXJ5IHRvIGNhbGwgdGhhdCBmdW5jdGlvbi4gQ2FsbGVkIGJ5XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2RfemJjLmM9NTQxPWludCBzZF96YmNfcmV2YWxpZGF0ZV96b25lcyhzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwKVxcbi0tXFxuZHJpdmVycy9zY3NpL3NkX3piYy5jLTU2NS1cXHRmbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xcbmRyaXZlcnMvc2NzaS9zZF96YmMuYzo1NjY6XFx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhkaXNrKTtcXG5kcml2ZXJzL3Njc2kvc2RfemJjLmMtNTY3LVxcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShmbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE0OjMyOjM4LjgwMDI2ODUxN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDE5ODU5NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFpvbmVkIEJsb2NrIERldmljZSBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGlzIHByb2JsZW0uIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCBmZWVscyBsaWtlIGEgcGFydGljdWxhcmx5IHJlbGV2YW50IGZ1bmN0aW9uIHRvIHN0YXJ0IHdpdGg7IHRoYXQncyBhIGdvb2Qga2V5IHN5bWJvbC4gSSdsbCBhbHNvIHdhbnQgdG8gbG9vayBjbG9zZWx5IGF0IGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCwgYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2AsIGFuZCBgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzYCB3aGlsZSBJJ20gYXQgaXQuIFRob3NlIHNlZW0gbGlrZSB0aGV5J2QgYmUgaW50aW1hdGVseSBpbnZvbHZlZCB3aXRoIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGNlbnRlcmVkIGFyb3VuZCB6b25lZCBibG9jayBkZXZpY2VzLCBzbyBgQ09ORklHX0JMS19ERVZfWk9ORURgIGlzIGdvaW5nIHRvIGJlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24ga25vYiB3ZSdyZSBpbnRlcmVzdGVkIGluLCBvZiBjb3Vyc2UuIEJ1dCBhcmUgdGhlcmUgYW55IG90aGVyIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YsIGVzcGVjaWFsbHkgdG8gaGVscCB0ZXN0IHpvbmVkIGJsb2NrIGRldmljZXM/IEluIHRoZSBwYXN0LCBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgIGFsb25nc2lkZSBgQ09ORklHX0JMS19ERVZfWk9ORURgIGhhcyBvZnRlbiBiZWVuIHN1ZmZpY2llbnQgZm9yIHRlc3Rpbmcgem9uZWQgYmxvY2sgZGV2aWNlcyB1c2luZyB0aGUgbnVsbF9ibGsgZHJpdmVyLCB3aGljaCBpcyBjb252ZW5pZW50LiBTbyBJJ2xsIGRlZmluaXRlbHkgd2FudCB0byB2ZXJpZnkgdGhhdC4gSSdsbCBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgdG8gY2hlY2sgdXAgb24gYE5VTExfQkxLYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUyMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMjo0My4yMjAxMjk5ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQ5MTQ0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTlVMTF9CTEtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMjo0My4zMjI2Mjg2MDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2NzA3ODc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgTlVMTF9CTEsgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJbnN0ZWFkIG9mIGd1ZXNzaW5nLCBJJ20gdGhpbmtpbmcgbGV0J3MgZXhhbWluZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYC4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgYE5VTExfQkxLYCBjb25maWd1cmF0aW9uLiBUaGUgcXVlc3Rpb24gaXNuJ3Qgd2hldGhlciBpdCdzICpkZWZpbmVkKiwgYnV0IGhvdyBpdCdzICpjb25maWd1cmVkKiBvciAqY29uZGl0aW9uYWxpemVkKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBpdHMgYXZhaWxhYmlsaXR5IGlzIHRpZWQgdG8gYW55IG90aGVyIHNwZWNpZmljIGBjb25maWdgIG9wdGlvbnMuIEkgd2FudCB0byBrbm93LCBpbW1lZGlhdGVseSwgaWYgaXQncyBkZXBlbmRlbnQgb24gb3RoZXIgZmVhdHVyZSBmbGFncy4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIG1vc3QgZGlyZWN0IHBhdGggdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGJsb2NrIGRyaXZlciBpcyBjb250cm9sbGVkIGFuZCB3aGV0aGVyIGl0J3MgdW5pdmVyc2FsbHkgYWNjZXNzaWJsZSBvciByZXN0cmljdGVkIGluIGl0cyBidWlsZC10aW1lIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMjo0Ni4zODk3MTIwNDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDY5NjY2OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQkxLX0RFVl9OVUxMX0JMS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE0OjMyOjQ2LjUxMDQxNjczN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY0ODUyMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcsIHdoZXJlIHdvdWxkIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIG51bGwgYmxvY2sgZGV2aWNlLCBvciBzb21ldGhpbmcgYW5hbG9nb3VzLCByZXNpZGU/IFRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHNvbWV0aGluZyBsaWtlIHRoYXQgd291bGQgYmUgd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgdW5kZXIgdGhlIGBkcml2ZXJzL2Jsb2NrYCBkaXJlY3RvcnkuIEknbSBsZWFuaW5nIHRvd2FyZCBjaGVja2luZyB0aGUgYG51bGxfYmxrYCBkaXJlY3RvcnksIGlmIG9uZSBleGlzdHMsIGZvciBpdHMgYEtjb25maWdgIGZpbGUuIFRoYXQncyB1c3VhbGx5IHRoZSBwbGFjZSB3aGVyZSBmZWF0dXJlcyBhbmQgb3B0aW9ucyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgYmxvY2sgZHJpdmVyIGFyZSBkZWZpbmVkLiBJdCdsbCBnaXZlIG1lIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGRlZmF1bHQgc2V0dGluZ3MgdGhhdCB0aGUgZHJpdmVyIHVzZXMuIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgZHJpdmVyLCB0aGUgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBibG9jayBkZXZpY2VzIGl0IHdpbGwgY3JlYXRlLCB0aGUgZGVmYXVsdCBzaXplIG9mIHRoZSBkZXZpY2VzIGFuZCBvcHRpb25zIGZvciB0aGUgbnVtYmVyIG9mIGRldmljZXMgaXQgY3JlYXRlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBibG9jayBkZXZpY2UgaXMgZW5hYmxlZCBhbmQgaWYgaXQgbmVlZHMgYW55IG90aGVyIGRyaXZlcnMgdG8gbWFrZSB0aGUgYmxvY2sgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLiBJZiBgbnVsbF9ibGtgIGlzbid0IHRoZXJlLCBJJ2xsIGJyb2FkZW4gdGhlIHNlYXJjaCwgYnV0IGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSB0aGUgZ28tdG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMjgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMjo1MC4wNzUyNzI0NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjEyMzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCTEtfREVWX05VTExfQkxLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svTWFrZWZpbGU9MzU9b2JqLSQoQ09ORklHX0JMS19ERVZfUk5CRClcXHQrPSBybmJkL1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMzYtXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfQkxLX0RFVl9OVUxMX0JMSylcXHQrPSBudWxsX2Jsay9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19CTEtfREVWX1JVU1RfTlVMTCkgKz0gcm51bGwvXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWc6Njpjb25maWcgQkxLX0RFVl9OVUxMX0JMS1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJOdWxsIHRlc3QgYmxvY2sgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTktXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjEwOmNvbmZpZyBCTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy0xMS1cXHRib29sIFxcXCJTdXBwb3J0IGZhdWx0IGluamVjdGlvbiBmb3IgTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclxcXCJcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWc6MTI6XFx0ZGVwZW5kcyBvbiBCTEtfREVWX05VTExfQkxLIFxcdTAwMjZcXHUwMDI2IEZBVUxUX0lOSkVDVElPTl9DT05GSUdGU1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZT00PWNjZmxhZ3MteVxcdFxcdFxcdCs9IC1JJChzcmMpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZS01LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQkxLX0RFVl9OVUxMX0JMSylcXHQrPSBudWxsX2Jsay5vXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZS03LW51bGxfYmxrLW9ianNcXHRcXHRcXHQ6PSBtYWluLm9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIxLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjIyOiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMy1zdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKG51bGxfdGltZW91dF9hdHRyKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTk4PU1PRFVMRV9QQVJNX0RFU0MoaG9tZV9ub2RlLCBcXFwiSG9tZSBub2RlIGZvciB0aGUgZGV2aWNlXFxcIik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtOTktXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTAwOiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMDEtLypcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTY0OT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnVsbGJfZGV2aWNlX3R5cGUgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02NTQtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NjU1OiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02NTYtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz03Nzc9c3RhdGljIHN0cnVjdCBudWxsYl9kZXZpY2UgKm51bGxfYWxsb2NfZGV2KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03ODQtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6Nzg1OiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03ODYtXFx0ZGV2LVxcdTAwM2V0aW1lb3V0X2NvbmZpZy5hdHRyID0gbnVsbF90aW1lb3V0X2F0dHI7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNDg0PXN0YXRpYyB2b2lkIG51bGxiX3NldHVwX2J3dGltZXIoc3RydWN0IG51bGxiICpudWxsYilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0OTItXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQ5MzojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQ5NC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE4ODU9c3RhdGljIGludCBudWxsX3ZhbGlkYXRlX2NvbmYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTkyNy1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxOTI4OiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTI5LXN0YXRpYyBib29sIF9fbnVsbF9zZXR1cF9mYXVsdChzdHJ1Y3QgZmF1bHRfYXR0ciAqYXR0ciwgY2hhciAqc3RyKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTk0Mj1zdGF0aWMgYm9vbCBudWxsX3NldHVwX2ZhdWx0KHZvaWQpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk0My17XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTk0NDojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk0NS1cXHRpZiAoIV9fbnVsbF9zZXR1cF9mYXVsdChcXHUwMDI2bnVsbF90aW1lb3V0X2F0dHIsIGdfdGltZW91dF9zdHIpKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oPTUzPXN0cnVjdCBudWxsYl9kZXZpY2Uge1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTU1LVxcdHN0cnVjdCBjb25maWdfZ3JvdXAgZ3JvdXA7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjU2OiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtNTctXFx0c3RydWN0IGZhdWx0X2NvbmZpZyB0aW1lb3V0X2NvbmZpZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzI6NTAuMTc3NDAxNjY2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTkxMDUzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcsIGBCTEtfREVWX05VTExfQkxLYCBzZWVtcyBsaWtlIGEgc29saWQgY2hvaWNlIGZvciBnZW5lcmFsIGJsb2NrIGRldmljZSB0ZXN0aW5nLiBIb3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogYXZvaWQgb3Zlcmx5IGdlbmVyaWMgY29uZmlncy4gV2Ugd2FudCB0byBmb2N1cyBvbiB3aGF0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIGNoYW5nZXMgaW4gdGhlIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgYEJMS19ERVZfWk9ORURgIGlzIHRoZSBjb25maWcgdGhhdCdzIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBtb2RpZmljYXRpb25zLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIOKAkyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1bmN0aW9ucyBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgaXMgc3RhdGljLiBMb29rcyBsaWtlIEkgd2FzIHJpZ2h0LCBhbmQgdGhhdCBgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzYCBpcyBhbHNvIHN0YXRpYy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgIGV4cG9ydGVkLCBvciBnbG9iYWw/IEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGJ5IGxvb2tpbmcgaW50byBgYmxvY2svYmxrLXpvbmVkLmNgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzc0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE0OjMyOjU0LjI3NjUwOTk5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NDcxODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9ibGstem9uZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstem9uZWQuYz0yMDA4PXN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIwMjYtXFxuYmxvY2svYmxrLXpvbmVkLmM6MjAyNzp2b2lkIGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9ibGstem9uZWQuYy0yMDI4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTQ6MzI6NTQuNDEzOTg5MDE3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NTE0MTQ5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgWm9uZWQgQmxvY2sgRGV2aWNlIExpZmVjeWNsZSBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uLCBub3QgZXhwb3J0ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGNvcmUgdG8gdGhlIHN5c3RlbSwgYW5kIHByb2JhYmx5IHNvbWV0aGluZyBzdWJ0bGUuIEl0J3MgdXNlZCBpbiBgYmxvY2svZ2VuaGQuY2AsIHdoaWNoIGlzIGJ1aWx0LWluLCBzbyBJIGtub3cgd2hlcmUgdGhlIGVudHJ5IHBvaW50IGlzLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi5cblxuR2l2ZW4gdGhhdCBjb250ZXh0LCB0aGUgY3JpdGljYWwgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCwgYGRpc2tfZnJlZV96b25lX3Jlc291cmNlc2AsIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgLCBhbmQgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLiBUaG9zZSBhcmUgdGhlIGVudHJ5cG9pbnRzIGFuZCByZXNvdXJjZXMgdGhhdCBhcmUgbGlrZWx5IHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBhZGRyZXNzZXMgYSBidWcgaW4gdGhlIHpvbmUgd3JpdGUgcGx1ZyB3b3JrcXVldWUgbGlmZWN5Y2xlIHNwZWNpZmljYWxseSBmb3Igem9uZWQgYmxvY2sgZGV2aWNlcy4gSXQgbG9va3MgbGlrZSBpdCdzIGFib3V0IHByZXZlbnRpbmcgdGhlIHdvcmtxdWV1ZSBmcm9tIGJlaW5nIHByZW1hdHVyZWx5IGRlc3Ryb3llZCBkdXJpbmcgem9uZSByZXZhbGlkYXRpb247IGl0IG5vdyBkcmFpbnMgdGhlIHF1ZXVlIGFuZCBkZWZlcnMgdGhlIGRlc3RydWN0aW9uIHVudGlsIGRpc2sgcmVsZWFzZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyBmb3Igem9uZWQgZGV2aWNlcy4gVGhlIGZhY3QgdGhhdCBpdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmlydHVhbGl6ZWQgem9uZWQgYmxvY2sgZGV2aWNlcywgbGlrZSBgbnVsbF9ibGtgLCBtZWFucyBpdCdzIHByZXR0eSBpbXBvcnRhbnQsIGFzIGl0IGltcGFjdHMgbW9yZSB0aGFuIGp1c3QgaGFyZHdhcmUgaW1wbGVtZW50YXRpb25zLlxuXG5TbywgZm9yIGZ1enppbmcsIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBpdDsgaXQncyBhIGxpZmVjeWNsZSBpc3N1ZSBhZmZlY3RpbmcgYSBjb3JlIGNvbXBvbmVudC4gVGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIGEgbGlmZWN5Y2xlIGJ1ZywgaXQgYWZmZWN0cyB6b25lZCBkZXZpY2VzLCBpdCdzIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMsIGFuZCBpdCdzIHJlYWNoYWJsZSB2aWEgdmlydHVhbGl6YXRpb24uIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBhcyBsaXN0ZWQgYWJvdmUuXG5cblRoZSBlbmFibGUgY29uZmlnIGlzIGBCTEtfREVWX1pPTkVEYCwgYW5kIGEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBpdCdzIHRoZSBvbmx5IG9uZSB0aGF0IGd1YXJkcyBgYmxrLXpvbmVkLmNgLiBHb29kLCB0aGF0IG1lYW5zIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHNpbXBsZS4gVGltZSB0byBmbGFnIHRoaXMgZm9yIGZ1cnRoZXIgYW5hbHlzaXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjI4LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNDozMzowMS44NjU0MDYyNDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1ODU1NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXNcIixcbiAgICBcImRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc1wiLFxuICAgIFwiYmxrX3JldmFsaWRhdGVfZGlza196b25lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHpvbmUgd3JpdGUgcGx1ZyB3b3JrcXVldWUgZm9yIHpvbmVkIGJsb2NrIGRldmljZXMuIEl0IHByZXZlbnRzIHRoZSB3b3JrcXVldWUgZnJvbSBiZWluZyBkZXN0cm95ZWQgZHVyaW5nIHpvbmUgcmV2YWxpZGF0aW9uLCBpbnN0ZWFkIGRyYWluaW5nIGl0IGFuZCBkZWZlcnJpbmcgZGVzdHJ1Y3Rpb24gdG8gZGlzayByZWxlYXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyBmb3Igem9uZWQgZGV2aWNlcyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB2aXJ0dWFsaXplZCB6b25lZCBibG9jayBkZXZpY2VzIChsaWtlIG51bGxfYmxrKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1pPTkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlza19hbGxvY196b25lX3Jlc291cmNlc1wiLFxuICAgIFwiZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNcIixcbiAgICBcImJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgbGlmZWN5Y2xlIG9mIHRoZSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGZvciB6b25lZCBibG9jayBkZXZpY2VzLiBJdCBwcmV2ZW50cyB0aGUgd29ya3F1ZXVlIGZyb20gYmVpbmcgZGVzdHJveWVkIGR1cmluZyB6b25lIHJldmFsaWRhdGlvbiwgaW5zdGVhZCBkcmFpbmluZyBpdCBhbmQgZGVmZXJyaW5nIGRlc3RydWN0aW9uIHRvIGRpc2sgcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgZm9yIHpvbmVkIGRldmljZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmlydHVhbGl6ZWQgem9uZWQgYmxvY2sgZGV2aWNlcyAobGlrZSBudWxsX2JsaykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowv5zmx[1] Phase: Succeeded StartedAt: 2026-07-01 14:33:14 +0000 UTC FinishedAt: 2026-07-01 14:33:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 14:33:14 +0000 UTC FinishedAt: 2026-07-01 14:33:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2] Phase: Succeeded StartedAt: 2026-07-01 14:33:14 +0000 UTC FinishedAt: 2026-07-01 18:39:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-01 14:33:14 +0000 UTC FinishedAt: 2026-07-01 18:39:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-01 14:33:14 +0000 UTC FinishedAt: 2026-07-01 14:33:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-01 14:33:14 +0000 UTC FinishedAt: 2026-07-01 14:33:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowv5zmx/series-workflowv5zmx-convert-artifact-2144981901/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-01 14:33:34 +0000 UTC FinishedAt: 2026-07-01 15:03:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-01 14:33:34 +0000 UTC FinishedAt: 2026-07-01 15:03:12 +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:*a1c3f196-42a3-4b15-be67-2d4f490096a9,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-workflowv5zmx/series-workflowv5zmx-convert-artifact-2144981901/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": "38dd21db-2cb6-4ce6-963d-304ee7dd9d94", "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-workflowv5zmx/series-workflowv5zmx-build-action-1888562947/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-01 14:33:34 +0000 UTC FinishedAt: 2026-07-01 15:03:02 +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:*a1c3f196-42a3-4b15-be67-2d4f490096a9,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-workflowv5zmx/series-workflowv5zmx-convert-artifact-2144981901/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": "38dd21db-2cb6-4ce6-963d-304ee7dd9d94", "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-workflowv5zmx/series-workflowv5zmx-build-action-1888562947/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-01 15:03:12 +0000 UTC FinishedAt: 2026-07-01 15:03:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-01 15:03:12 +0000 UTC FinishedAt: 2026-07-01 15:03:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-01 15:03:12 +0000 UTC FinishedAt: 2026-07-01 15:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-01 15:03:12 +0000 UTC FinishedAt: 2026-07-01 15:03:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowv5zmx/series-workflowv5zmx-convert-artifact-1329918696/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-01 15:03:46 +0000 UTC FinishedAt: 2026-07-01 15:06:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-01 15:03:46 +0000 UTC FinishedAt: 2026-07-01 15:05:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*38dd21db-2cb6-4ce6-963d-304ee7dd9d94,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-workflowv5zmx/series-workflowv5zmx-build-action-1888562947/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-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-01 15:06:05 +0000 UTC FinishedAt: 2026-07-01 15:06:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-01 15:06:05 +0000 UTC FinishedAt: 2026-07-01 15:06:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-01 15:06:05 +0000 UTC FinishedAt: 2026-07-01 15:35:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-01 15:06:05 +0000 UTC FinishedAt: 2026-07-01 15:35:08 +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:*a1c3f196-42a3-4b15-be67-2d4f490096a9,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-workflowv5zmx/series-workflowv5zmx-convert-artifact-1329918696/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": "90e1c583-ccfa-45f4-881b-a208761cd227", "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-workflowv5zmx/series-workflowv5zmx-build-action-1999743636/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-01 15:06:05 +0000 UTC FinishedAt: 2026-07-01 15:34:45 +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:*a1c3f196-42a3-4b15-be67-2d4f490096a9,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-workflowv5zmx/series-workflowv5zmx-convert-artifact-1329918696/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": "90e1c583-ccfa-45f4-881b-a208761cd227", "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-workflowv5zmx/series-workflowv5zmx-build-action-1999743636/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-01 15:35:08 +0000 UTC FinishedAt: 2026-07-01 15:35:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-01 15:35:08 +0000 UTC FinishedAt: 2026-07-01 15:35:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-01 15:35:08 +0000 UTC FinishedAt: 2026-07-01 15:36:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-01 15:35:08 +0000 UTC FinishedAt: 2026-07-01 15:36:46 +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:*90e1c583-ccfa-45f4-881b-a208761cd227,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-workflowv5zmx/series-workflowv5zmx-build-action-1999743636/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-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-01 15:36:56 +0000 UTC FinishedAt: 2026-07-01 18:39:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-01 15:36:56 +0000 UTC FinishedAt: 2026-07-01 18:39:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"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:*38dd21db-2cb6-4ce6-963d-304ee7dd9d94,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*90e1c583-ccfa-45f4-881b-a208761cd227,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-workflowv5zmx/series-workflowv5zmx-build-action-1888562947/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-workflowv5zmx/series-workflowv5zmx-build-action-1999743636/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-01 15:36:56 +0000 UTC FinishedAt: 2026-07-01 15:37:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-01 15:36:56 +0000 UTC FinishedAt: 2026-07-01 15:37:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"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-workflowv5zmx/series-workflowv5zmx-convert-artifact-714564897/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-01 15:36:56 +0000 UTC FinishedAt: 2026-07-01 15:36:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-01 15:36:56 +0000 UTC FinishedAt: 2026-07-01 15:36:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-01 15:36:56 +0000 UTC FinishedAt: 2026-07-01 15:36:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-01 15:37:16 +0000 UTC FinishedAt: 2026-07-01 18:39:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5zmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disk_alloc_zone_resources","disk_free_zone_resources","disk_release_zone_resources","blk_revalidate_disk_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED"],"series_id":"3c01c9bd-105d-469e-98df-a13cd25ea754","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-01 15:37:16 +0000 UTC FinishedAt: 2026-07-01 18:39:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*38dd21db-2cb6-4ce6-963d-304ee7dd9d94,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*90e1c583-ccfa-45f4-881b-a208761cd227,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-workflowv5zmx/series-workflowv5zmx-build-action-1888562947/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-workflowv5zmx/series-workflowv5zmx-build-action-1999743636/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-workflowv5zmx/series-workflowv5zmx-convert-artifact-714564897/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,}