Name: series-workflowhh7dc Phase: Succeeded StartedAt: 2026-09-05 16:24:38 +0000 UTC FinishedAt: 2026-09-05 17:48:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[0] Phase: Succeeded StartedAt: 2026-09-05 16:24:38 +0000 UTC FinishedAt: 2026-09-05 17:08:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 16:24:38 +0000 UTC FinishedAt: 2026-09-05 17:08:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP" ], "series_id": "c0eb2ffe-1bcd-40ae-928a-548d4b9577c5" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blkcg_fill_root_iostats", "blkcg_print_stat" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtjZ19maWxsX3Jvb3RfaW9zdGF0cyYjMzQ7LAogICAgJiMzNDtibGtjZ19wcmludF9zdGF0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSBkdXJpbmcgc2VjdG9yLXRvLWJ5dGUgY29udmVyc2lvbiBpbiBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHMoKWAgYnkgY2FzdGluZyBgY3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1suLi5dYCB0byBgKHU2NClgIGFuZCB1c2luZyBgU0VDVE9SX1NISUZUYCBpbnN0ZWFkIG9mIGA5YC4gXG5cblRoZSBsb2NhbCBzdHJ1Y3R1cmUgYHN0cnVjdCBibGtnX2lvc3RhdCB0bXBgIGlzIGFscmVhZHkgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0KFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpYCBiZWZvcmUgYWNjdW11bGF0aW5nIHN0YXRzLCBhbmQgdGhlIHBlci1jcHUgc3RhdHMgcmVhZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIGNvdW50ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgdW5pbml0aWFsaXplZCBkYXRhIHBhdGhzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBwcmVzZW50IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJvb3QgY2dyb3VwIEkvTyBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uIGluIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBjYXN0IHBlci1jcHUgc2VjdG9yIGNvdW50cyB0byB1NjQgYW5kIHVzZSBTRUNUT1JfU0hJRlQgYmVmb3JlIGFjY3VtdWxhdGluZyBpbnRvIGJ5dGUgY291bnRlcnMuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBibG9jayBjZ3JvdXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKGUuZy4gcmVhZGluZyBpby5zdGF0IG9uIHRoZSByb290IGNncm91cCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYzg4ZWFmNTc0MTNkYjExNWIwNTAxY2FjMjVkOTViYjdmYmIwYjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNzowNzo0NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcbmluZGV4IDJiNWMyOTQzNGU0MjYuLjQ3MWNmZDIzNDdjOWUgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuQEAgLTExMTgsMTEgJiM0MzsxMTE4LDExIEBAIHN0YXRpYyB2b2lkIGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKHZvaWQpXG4gXHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2Vpb3NbU1RBVF9ESVNDQVJEXTtcbiBcdFx0XHQvLyBjb252ZXJ0IHNlY3RvcnMgdG8gYnl0ZXNcbiBcdFx0XHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfUkVBRF0gJiM0Mzs9XG4tXHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfUkVBRF0gXHUwMDNjXHUwMDNjIDk7XG4mIzQzO1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfUkVBRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbiBcdFx0XHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICYjNDM7PVxuLVx0XHRcdFx0Y3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX1dSSVRFXSBcdTAwM2NcdTAwM2MgOTtcbiYjNDM7XHRcdFx0XHQodTY0KWNwdV9ka3N0YXRzLVx1MDAzZXNlY3RvcnNbU1RBVF9XUklURV0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbiBcdFx0XHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfRElTQ0FSRF0gJiM0Mzs9XG4tXHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXHUwMDNjXHUwMDNjIDk7XG4mIzQzO1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbiBcdFx0fVxuIFxuIFx0XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZibGtnLVx1MDAzZWlvc3RhdC5zeW5jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrY2dfZmlsbF9yb290X2lvc3RhdHMmIzM0OywKICAgICYjMzQ7YmxrY2dfcHJpbnRfc3RhdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByb290IGNncm91cCBJL08gc3RhdGlzdGljcyBjYWxjdWxhdGlvbiBpbiBibG9jay9ibGstY2dyb3VwLmMgdG8gY2FzdCBwZXItY3B1IHNlY3RvciBjb3VudHMgdG8gdTY0IGFuZCB1c2UgU0VDVE9SX1NISUZUIGJlZm9yZSBhY2N1bXVsYXRpbmcgaW50byBieXRlIGNvdW50ZXJzLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgYmxvY2sgY2dyb3VwIHN0YXRpc3RpY3MgcmVwb3J0aW5nIChlLmcuIHJlYWRpbmcgaW8uc3RhdCBvbiB0aGUgcm9vdCBjZ3JvdXApLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGM4OGVhZjU3NDEzZGIxMTViMDUwMWNhYzI1ZDk1YmI3ZmJiMGI4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTc6MDc6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmMKaW5kZXggMmI1YzI5NDM0ZTQyNi4uNDcxY2ZkMjM0N2M5ZSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1jZ3JvdXAuYwpAQCAtMTExOCwxMSAmIzQzOzExMTgsMTEgQEAgc3RhdGljIHZvaWQgYmxrY2dfZmlsbF9yb290X2lvc3RhdHModm9pZCkKIAkJCQljcHVfZGtzdGF0cy0mZ3Q7aW9zW1NUQVRfRElTQ0FSRF07CiAJCQkvLyBjb252ZXJ0IHNlY3RvcnMgdG8gYnl0ZXMKIAkJCXRtcC5ieXRlc1tCTEtHX0lPU1RBVF9SRUFEXSAmIzQzOz0KLQkJCQljcHVfZGtzdGF0cy0mZ3Q7c2VjdG9yc1tTVEFUX1JFQURdICZsdDsmbHQ7IDk7CiYjNDM7CQkJCSh1NjQpY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNbU1RBVF9SRUFEXSAmbHQ7Jmx0OyBTRUNUT1JfU0hJRlQ7CiAJCQl0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICYjNDM7PQotCQkJCWNwdV9ka3N0YXRzLSZndDtzZWN0b3JzW1NUQVRfV1JJVEVdICZsdDsmbHQ7IDk7CiYjNDM7CQkJCSh1NjQpY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNbU1RBVF9XUklURV0gJmx0OyZsdDsgU0VDVE9SX1NISUZUOwogCQkJdG1wLmJ5dGVzW0JMS0dfSU9TVEFUX0RJU0NBUkRdICYjNDM7PQotCQkJCWNwdV9ka3N0YXRzLSZndDtzZWN0b3JzW1NUQVRfRElTQ0FSRF0gJmx0OyZsdDsgOTsKJiM0MzsJCQkJKHU2NCljcHVfZGtzdGF0cy0mZ3Q7c2VjdG9yc1tTVEFUX0RJU0NBUkRdICZsdDsmbHQ7IFNFQ1RPUl9TSElGVDsKIAkJfQogCiAJCWZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKCZhbXA7YmxrZy0mZ3Q7aW9zdGF0LnN5bmMpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJsb2NrIEkvTyBDZ3JvdXAgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSB0aGUgY29kZSBtb2RpZmljYXRpb24gd2l0aGluIGBibG9jay9ibGstY2dyb3VwLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gdGhlIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3NpbmcgYW4gaXNzdWUgcmVsYXRlZCB0byBJL08gc3RhdGlzdGljcywgc3BlY2lmaWNhbGx5IHRoZSBjb252ZXJzaW9uIG9mIHNlY3RvcnMgdG8gYnl0ZXMuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBhIGxlZnQgYml0IHNoaWZ0IGJ5IDkgKGAmbHQ7Jmx0OyA5YCkgdG8gY29udmVydCBzZWN0b3JzIHRvIGJ5dGVzLCBhbmQgbm93IHdlIGFyZSB1c2luZyBhIGJpdCBzaGlmdCB3aXRoIGBTRUNUT1JfU0hJRlRgLgoKVGhlIHJlbGV2YW50IGNvZGUgc25pcHBldCBsb29rcyBsaWtlIHRoaXM6CgpgYGBjCgkJCS8vIGNvbnZlcnQgc2VjdG9ycyB0byBieXRlcwoJCQl0bXAuYnl0ZXNbQkxLR19JT1NUQVRfUkVBRF0gJiM0Mzs9Ci0JCQkJY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNbU1RBVF9SRUFEXSAmbHQ7Jmx0OyA5OwomIzQzOwkJCQkodTY0KWNwdV9ka3N0YXRzLSZndDtzZWN0b3JzW1NUQVRfUkVBRF0gJmx0OyZsdDsgU0VDVE9SX1NISUZUOwoJCQl0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICYjNDM7PQotCQkJCWNwdV9ka3N0YXRzLSZndDtzZWN0b3JzW1NUQVRfV1JJVEVdICZsdDsmbHQ7IDk7CiYjNDM7CQkJCSh1NjQpY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNbU1RBVF9XUklURV0gJmx0OyZsdDsgU0VDVE9SX1NISUZUOwoJCQl0bXAuYnl0ZXNbQkxLR19JT1NUQVRfRElTQ0FSRF0gJiM0Mzs9Ci0JCQkJY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNbU1RBVF9ESVNDQVJEXSAmbHQ7Jmx0OyA5OwomIzQzOwkJCQkodTY0KWNwdV9ka3N0YXRzLSZndDtzZWN0b3JzW1NUQVRfRElTQ0FSRF0gJmx0OyZsdDsgU0VDVE9SX1NISUZUOwpgYGAKClRoaXMgaXMgZGVmaW5pdGVseSB0aGUgcGFydCBvZiB0aGUgY29kZSB0aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQuIFRoZSBjYXN0IHRvIGAodTY0KWAgaW5kaWNhdGVzIGEgcG90ZW50aWFsIG92ZXJmbG93IG9yIGRhdGEtd2lkdGggY29uY2VybiB0aGF0JiMzOTtzIGJlaW5nIGFkZHJlc3NlZCBhcyB3ZWxsLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0OgoKKiAgIEhvdyBpcyBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHNgIGFjdHVhbGx5IGNhbGxlZD8gV2hhdCB0cmlnZ2VycyBpdHMgZXhlY3V0aW9uPwoqICAgQXJlIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgY29uZGl0aW9ucyB0aGF0IGd1YXJkIGl0cyBleGVjdXRpb24/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPwoKSSYjMzk7bGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uIG9mIGBibG9jay9ibGstY2dyb3VwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTExOCwgdG8gZ2V0IHRoYXQgc3Vycm91bmRpbmcgY29udGV4dC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNoYW5nZSBhbmQgYW55IGltcGxpY2F0aW9ucyBpdCBtaWdodCBoYXZlIHdpdGhpbiB0aGUgYmxvY2sgSS9PIGNncm91cCBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIGZvcm0gYSBtb3JlIGNvbXBsZXRlIGFzc2Vzc21lbnQgb2YgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTAwOlx0XHRjbGFzc19kZXZfaXRlcl9pbml0KFx1MDAyNml0ZXIsIFx1MDAyNmJsb2NrX2NsYXNzLCBOVUxMLCBcdTAwMjZkaXNrX3R5cGUpO1xuMTEwMTpcdFx0d2hpbGUgKChkZXYgPSBjbGFzc19kZXZfaXRlcl9uZXh0KFx1MDAyNml0ZXIpKSkge1xuMTEwMjpcdFx0XHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gZGV2X3RvX2JkZXYoZGV2KTtcbjExMDM6XHRcdFx0c3RydWN0IGJsa2NnX2dxICpibGtnID0gYmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZXF1ZXVlLVx1MDAzZXJvb3RfYmxrZztcbjExMDQ6XHRcdFx0c3RydWN0IGJsa2dfaW9zdGF0IHRtcDtcbjExMDU6XHRcdFx0aW50IGNwdTtcbjExMDY6XHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjExMDc6XHRcbjExMDg6XHRcdFx0bWVtc2V0KFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpO1xuMTEwOTpcdFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4xMTEwOlx0XHRcdFx0c3RydWN0IGRpc2tfc3RhdHMgKmNwdV9ka3N0YXRzO1xuMTExMTpcdFxuMTExMjpcdFx0XHRcdGNwdV9ka3N0YXRzID0gcGVyX2NwdV9wdHIoYmRldi1cdTAwM2ViZF9zdGF0cywgY3B1KTtcbjExMTM6XHRcdFx0XHR0bXAuaW9zW0JMS0dfSU9TVEFUX1JFQURdICYjNDM7PVxuMTExNDpcdFx0XHRcdFx0Y3B1X2Rrc3RhdHMtXHUwMDNlaW9zW1NUQVRfUkVBRF07XG4xMTE1Olx0XHRcdFx0dG1wLmlvc1tCTEtHX0lPU1RBVF9XUklURV0gJiM0Mzs9XG4xMTE2Olx0XHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2Vpb3NbU1RBVF9XUklURV07XG4xMTE3Olx0XHRcdFx0dG1wLmlvc1tCTEtHX0lPU1RBVF9ESVNDQVJEXSAmIzQzOz1cbjExMTg6XHRcdFx0XHRcdGNwdV9ka3N0YXRzLVx1MDAzZWlvc1tTVEFUX0RJU0NBUkRdO1xuMTExOTpcdFx0XHRcdC8vIGNvbnZlcnQgc2VjdG9ycyB0byBieXRlc1xuMTEyMDpcdFx0XHRcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9SRUFEXSAmIzQzOz1cbjExMjE6XHRcdFx0XHRcdCh1NjQpY3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX1JFQURdIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQ7XG4xMTIyOlx0XHRcdFx0dG1wLmJ5dGVzW0JMS0dfSU9TVEFUX1dSSVRFXSAmIzQzOz1cbjExMjM6XHRcdFx0XHRcdCh1NjQpY3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX1dSSVRFXSBcdTAwM2NcdTAwM2MgU0VDVE9SX1NISUZUO1xuMTEyNDpcdFx0XHRcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9ESVNDQVJEXSAmIzQzOz1cbjExMjU6XHRcdFx0XHRcdCh1NjQpY3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX0RJU0NBUkRdIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQ7XG4xMTI2Olx0XHRcdH1cbjExMjc6XHRcbjExMjg6XHRcdFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2YmxrZy1cdTAwM2Vpb3N0YXQuc3luYyk7XG4xMTI5Olx0XHRcdGJsa2dfaW9zdGF0X3NldChcdTAwMjZibGtnLVx1MDAzZWlvc3RhdC5jdXIsIFx1MDAyNnRtcCk7XG4xMTMwOlx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXHUwMDI2YmxrZy1cdTAwM2Vpb3N0YXQuc3luYywgZmxhZ3MpO1xuMTEzMTpcdFx0fVxuMTEzMjpcdFx0Y2xhc3NfZGV2X2l0ZXJfZXhpdChcdTAwMjZpdGVyKTtcbjExMzM6XHR9XG4xMTM0Olx0XG4xMTM1Olx0c3RhdGljIHZvaWQgYmxrY2dfcHJpbnRfb25lX3N0YXQoc3RydWN0IGJsa2NnX2dxICpibGtnLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXG4xMTM2Olx0e1xuMTEzNzpcdFx0c3RydWN0IGJsa2dfaW9zdGF0X3NldCAqYmlzID0gXHUwMDI2YmxrZy1cdTAwM2Vpb3N0YXQ7XG4xMTM4Olx0XHR1NjQgcmJ5dGVzLCB3Ynl0ZXMsIHJpb3MsIHdpb3MsIGRieXRlcywgZGlvcztcbjExMzk6XHRcdGNvbnN0IGNoYXIgKmRuYW1lO1xuMTE0MDpcdFx0dW5zaWduZWQgc2VxO1xuMTE0MTpcdFx0aW50IGk7XG4xMTQyOlx0XG4xMTQzOlx0XHRpZiAoIWJsa2ctXHUwMDNlb25saW5lKVxuMTE0NDpcdFx0XHRyZXR1cm47XG4xMTQ1Olx0XG4xMTQ2Olx0XHRkbmFtZSA9IGJsa2dfZGV2X25hbWUoYmxrZyk7XG4xMTQ3Olx0XHRpZiAoIWRuYW1lKVxuMTE0ODpcdFx0XHRyZXR1cm47XG4xMTQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHNgIENhbGwgU2l0ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgcmVsYXRlZCB0byBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHNgLiBUaW1lIHRvIHRyYWNlIGl0cyBjYWxsIGdyYXBoLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBiYXNpYyBncmVwLCBvciBtYXliZSB1c2UgY3Njb3BlIG9yIGN0YWdzIGlmIEkmIzM5O20gZmVlbGluZyBmYW5jeS4gSSB3YW50IHRvIHF1aWNrbHkgaWRlbnRpZnkgZXZlcnkgZnVuY3Rpb24gdGhhdCAqZGlyZWN0bHkqIGNhbGxzIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AuIFVuZGVyc3RhbmRpbmcgdGhlIGltbWVkaWF0ZSBjYWxsZXJzIGlzIHRoZSBmaXJzdCBzdGVwLiBUaGVuLCBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIEkgbWlnaHQgbmVlZCB0byBtb3ZlIHVwIHRoZSBjYWxsIHN0YWNrLCBleHBsb3JpbmcgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIHRob3NlIGNhbGxlcnMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCDigJMgdGhlIGFyZ3VtZW50cyBwYXNzZWQsIHRoZSBjb25kaXRpb25hbCBleGVjdXRpb24gcGF0aHMsIGFuZCBhbnkgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW52b2x2ZWQuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIGdpdmVuIHRoYXQgdGhpcyBkZWFscyB3aXRoIEkvTyBzdGF0aXN0aWNzIGF0IHRoZSByb290IGxldmVsIG9mIGJsb2NrIEkvTyBjb250cm9sIGdyb3Vwcy4gVGhpcyB3aWxsIHByb2JhYmx5IHByb3ZpZGUgaW5zaWdodHMgaW50byB3aGF0IGNvZGUgcGF0aHMgYXJlIHJlbGV2YW50IHRvIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBvciBpZiB0aGVyZSYjMzk7cyBhbnkgYXJlYSB0aGF0JiMzOTtzIHdvcnRoIHR1bmluZy4gSSYjMzk7bSBrZWVuIHRvIGF2b2lkIGdldHRpbmcgbG9zdCBpbiBhIG1hemUgb2YgaW5kaXJlY3QgY2FsbHMgYW5kIG1hY3Jvcywgc28gSSYjMzk7bGwgdHJ5IHRvIGtlZXAgdGhlIGZvY3VzIG5hcnJvdywgYXQgbGVhc3QgaW5pdGlhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jZ3JvdXAuYz0xMDc2PXN0YXRpYyB2b2lkIGJsa2NnX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTEwOTQtICovXG5ibG9jay9ibGstY2dyb3VwLmM6MTA5NTpzdGF0aWMgdm9pZCBibGtjZ19maWxsX3Jvb3RfaW9zdGF0cyh2b2lkKVxuYmxvY2svYmxrLWNncm91cC5jLTEwOTYte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz0xMTg3PXN0YXRpYyBpbnQgYmxrY2dfcHJpbnRfc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMTkyLVx0aWYgKCFzZXFfY3NzKHNmKS1cdTAwM2VwYXJlbnQpXG5ibG9jay9ibGstY2dyb3VwLmM6MTE5MzpcdFx0YmxrY2dfZmlsbF9yb290X2lvc3RhdHMoKTtcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMTk0LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBCbGstQ2dyb3VwIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBibGstY2dyb3VwLmNgIGJ1c2luZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgY29uZmlndXJlZCwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoZSBgYmxvY2svYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgYnVpbGQgc3lzdGVtIHRpZXMgdGhpbmdzIHRvZ2V0aGVyLiBNeSBnb2FsIGlzIHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgd2hldGhlciB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUgZ2V0cyBjb21waWxlZCBhbmQgaW5jbHVkZWQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaXMga2V5IHRvIGdyYXNwaW5nIGhvdyB0aGlzIGJsay1jZ3JvdXAgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIG9yIGRpc2FibGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHJlZmVyZW5jZXMgdG8gY29uZmlndXJhdGlvbiBzeW1ib2xzIHJlbGF0ZWQgdG8gYmxvY2sgSS9PIGNvbnRyb2wgZ3JvdXBzLCBhbmQgdGhlbiBJIGNhbiBkZWx2ZSBpbnRvIHRoZSBkZWZpbml0aW9ucyBvZiB0aG9zZSBzeW1ib2xzIHRvIGRldGVybWluZSB0aGVpciBtZWFuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsay1jZ3JvdXBcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL01ha2VmaWxlPTE4PW9iai0kKENPTkZJR19CTEtfREVWX0JTR0xJQilcdCYjNDM7PSBic2ctbGliLm9cbmJsb2NrL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19CTEtfQ0dST1VQKVx0JiM0Mzs9IGJsay1jZ3JvdXAub1xuYmxvY2svTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX0JMS19DR1JPVVBfUldTVEFUKVx0JiM0Mzs9IGJsay1jZ3JvdXAtcndzdGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjIzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKktjb25maWcgRGl2ZSBmb3IgQkxLX0NHUk9VUCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgQkxLX0NHUk9VUGAgaXMgZGVmaW5lZC4gS25vd2luZyB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbSwgbXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgc28gYSBLY29uZmlnIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBHaXZlbiBpdCYjMzk7cyByZWxhdGVkIHRvIGJsb2NrIGRldmljZXMsIGBibG9jay9LY29uZmlnYCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbG9jYXRpb24uIExldCYjMzk7cyBoZWFkIG92ZXIgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIEhvcGVmdWxseSBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQsIGFuZCBJIGNhbiBxdWlja2x5IGdyYXNwIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHB1cnBvc2UgZnJvbSB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfQ0dST1VQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXG4tLVxuYmxvY2svS2NvbmZpZy00MS1cbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXG5ibG9jay9LY29uZmlnLTQzLVx0Ym9vbFxuYmxvY2svS2NvbmZpZy00NC1cbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cbmJsb2NrL0tjb25maWctNDYtXHRib29sXG4tLVxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcbi0tXG5ibG9jay9LY29uZmlnLTEzMy1cbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxuYmxvY2svS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNDQtXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuYmxvY2svS2NvbmZpZy0xNDYtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNTMtXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcbmJsb2NrL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTYzLVxuYmxvY2svS2NvbmZpZzoxNjQ6Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXG5ibG9jay9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7Q2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYGNvbmZpZyBCTEtfQ0dST1VQYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgY29uZmlnIEJMS19DR1JPVVBgIHdpdGhpbiB0aGlzIHdob2xlIGNvZGViYXNlLCByaWdodD8gVGhpcyBtZWFucyBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIEtjb25maWcgZmlsZXMsIG9yIHBvdGVudGlhbGx5IGdlbmVyYXRlZCBoZWFkZXIgZmlsZXMgaWYgaXQmIzM5O3MgYmVpbmcgdXNlZCBjb25kaXRpb25hbGx5LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBydW4gYSBzZWFyY2ggYWNyb3NzIHRoZSBlbnRpcmUgcHJvamVjdCBzdHJ1Y3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIHRoZSByaWdodCB0b29sIGZvciB0aGUgam9iLiBgZ3JlcGAgd2l0aCB0aGUgYC1SYCBmbGFnIChvciBgZmluZGAgYW5kIGBncmVwYCB0b2dldGhlciBmb3IgbW9yZSBjb250cm9sKSBpcyBwcm9iYWJseSBteSBiZXN0IGJldCBoZXJlLiBJIHNob3VsZCBrZWVwIGluIG1pbmQgdGhhdCBJIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCB2YXJpYXRpb25zIG9mIHRoZSBuYW1lIChlLmcuLCBgI2RlZmluZSBCTEtfQ0dST1VQYCwgb3IgaW4gS2NvbmZpZyBzb21ldGhpbmcgbGlrZSBgY29uZmlnIEJMS19DR1JPVVBgKS4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29uc2lkZXIgYW55IHBvdGVudGlhbCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gQmFzZWQgb24gd2hlcmUgSSBmaW5kIHRoZSBkZWZpbml0aW9uIEkgY2FuIHRoZW4gbG9vayBhdCB3aGljaCBjb2RlIHNlY3Rpb25zIGFyZSBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVAkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMTA4PWNvbmZpZyBNRU1DR19WMVxuLS1cbmluaXQvS2NvbmZpZy0xMTI0LVxuaW5pdC9LY29uZmlnOjExMjU6Y29uZmlnIEJMS19DR1JPVVBcbmluaXQvS2NvbmZpZy0xMTI2LVx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIERpdmUqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIHRoaXMuIFRoZSBwcm9ibGVtIHNtZWxscyBsaWtlIGl0IGNvdWxkIGJlIGNvbmZpZ3VyYXRpb24tcmVsYXRlZCwgc28gbGV0JiMzOTtzIGp1bXAgcmlnaHQgaW50byBgaW5pdC9LY29uZmlnYC4gTGluZSAxMTI1Li4ucmlnaHQgYXJvdW5kIHRoZXJlIHNob3VsZCBwcm92aWRlIHNvbWUgY2x1ZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBkZWZpbml0aW9uLCBwb3NzaWJseSBhIGJvb2xlYW4gb3IgdHJpc3RhdGUsIHRoYXQgZ292ZXJucyBzb21lIGFzcGVjdCBvZiBpbml0aWFsaXphdGlvbiBvciBlYXJseSBib290IGJlaGF2aW9yLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgcG90ZW50aWFsbHkgYW55IHN5bWJvbHMgaXQgZGVwZW5kcyBvbiB0aGF0IG1pZ2h0IGJlIHRoZSBzb3VyY2Ugb2Ygb3VyIGlzc3VlLiBJJiMzOTtsbCBuZWVkIHRvIHJhcGlkbHkgcGFyc2UgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhhdCBsaW5lIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIHB1cnBvc2UgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyBhdCBwbGF5LiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aG9zZSBkZXBlbmRlbmNpZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTIwOlx0XHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcbjExMjE6XHRcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxuMTEyMjpcdFxuMTEyMzpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMTI0Olx0XG4xMTI1Olx0Y29uZmlnIEJMS19DR1JPVVBcbjExMjY6XHRcdGJvb2wgXCYjMzQ7SU8gY29udHJvbGxlclwmIzM0O1xuMTEyNzpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuMTEyODpcdFx0ZGVmYXVsdCBuXG4xMTI5Olx0XHRoZWxwXG4xMTMwOlx0XHRHZW5lcmljIGJsb2NrIElPIGNvbnRyb2xsZXIgY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyB0aGUgY29tbW9uXG4xMTMxOlx0XHRjZ3JvdXAgaW50ZXJmYWNlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHZhcmlvdXMgSU8gY29udHJvbGxpbmdcbjExMzI6XHRcdHBvbGljaWVzLlxuMTEzMzpcdFxuMTEzNDpcdFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxuMTEzNTpcdFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxuMTEzNjpcdFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXG4xMTM3Olx0XHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXG4xMTM4Olx0XG4xMTM5Olx0XHRUaGlzIG9wdGlvbiBvbmx5IGVuYWJsZXMgZ2VuZXJpYyBCbG9jayBJTyBjb250cm9sbGVyIGluZnJhc3RydWN0dXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDMyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEaXNrIFN0YXRzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgYmxvY2svYmxrLWNncm91cC5jYCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHNgIGZ1bmN0aW9uLiBUaGUga2V5IGlzc3VlIGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSBgY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNgIGZpZWxkLiBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgbGlrZSB0aGlzIGJlZm9yZS4gVGhlIGxpbmUgaW4gcXVlc3Rpb24gc2VlbXMgdG8gYmUgdXNpbmcgYSBsZWZ0IGJpdHdpc2Ugc2hpZnQgb2YgYCZsdDsmbHQ7IDlgIGJ1dCB3aXRob3V0IGEgY2FzdCB0byBhIDY0LWJpdCBpbnRlZ2VyLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBzZXRzIG9mZiBhbGFybSBiZWxscy4gVGhpcyBsb29rcyBsaWtlIGEgY2xhc3NpYyBwb3RlbnRpYWwgb3ZlcmZsb3cgYnVnLCBkZXBlbmRpbmcgb24gdGhlIGRhdGEgdHlwZSBvZiBgY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNgLiBJdCYjMzk7cyBsaWtlbHkgYHVuc2lnbmVkIGxvbmdgIG9yIGB1bnNpZ25lZCBpbnRgLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlZmluaXRpb24gd2l0aGluIHRoZSBgc3RydWN0IGRpc2tfc3RhdHNgLiBMZXQmIzM5O3MgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgc3RydWN0IHRvIGJlIHN1cmUuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIGtlcm5lbCBjb2RlIHNob3VsZCBjbGVhciB1cCB0aGUgc3BlY2lmaWMgZGF0YSB0eXBlIGFuZCBjb25maXJtIG15IGluaXRpYWwgaHlwb3RoZXNpcy4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGV4YWN0IHByb2JsZW0gYW5kIHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZGlza19zdGF0cyBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYXJ0X3N0YXQuaC03LVxuaW5jbHVkZS9saW51eC9wYXJ0X3N0YXQuaDo4OnN0cnVjdCBkaXNrX3N0YXRzIHtcbmluY2x1ZGUvbGludXgvcGFydF9zdGF0LmgtOS1cdHU2NCBuc2Vjc1tOUl9TVEFUX0dST1VQU107XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBwYXJ0X3N0YXQuaGAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgaW5jbHVkZS9saW51eC9wYXJ0X3N0YXQuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4LiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGJlIHNlZWluZyBkZWZpbml0aW9ucyBmb3IgdGhlIHN0YXRpc3RpY3MgbWFpbnRhaW5lZCBieSB0aGUgcGFydGl0aW9uIGxheWVyLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJlcyBjb250YWluaW5nIGNvdW50ZXJzIGZvciBJL08gb3BlcmF0aW9ucywgdGltaW5ncywgYW5kIHBlcmhhcHMgZXJyb3IgdHJhY2tpbmcuIEkmIzM5O20gcmVhbGx5IGtlZW4gb24gaG93IHRoZXNlIGFyZSBsYWlkIG91dCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IG5vdGV3b3J0aHkgb3B0aW1pemF0aW9ucyAob3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzKSBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMuIFRoaXMgZmlsZSBpcyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCB0cmFja3MgYW5kIGV4cG9zZXMgcGFydGl0aW9uLWxldmVsIHBlcmZvcm1hbmNlIG1ldHJpY3MsIHNvIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFydF9zdGF0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuICAgMjpcdCNpZm5kZWYgX0xJTlVYX1BBUlRfU1RBVF9IXG4gICAzOlx0I2RlZmluZSBfTElOVVhfUEFSVF9TVEFUX0hcbiAgIDQ6XHRcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtkZXYuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2FzbS9sb2NhbC5oXHUwMDNlXG4gICA3Olx0XG4gICA4Olx0c3RydWN0IGRpc2tfc3RhdHMge1xuICAgOTpcdFx0dTY0IG5zZWNzW05SX1NUQVRfR1JPVVBTXTtcbiAgMTA6XHRcdHVuc2lnbmVkIGxvbmcgc2VjdG9yc1tOUl9TVEFUX0dST1VQU107XG4gIDExOlx0XHR1bnNpZ25lZCBsb25nIGlvc1tOUl9TVEFUX0dST1VQU107XG4gIDEyOlx0XHR1bnNpZ25lZCBsb25nIG1lcmdlc1tOUl9TVEFUX0dST1VQU107XG4gIDEzOlx0XHR1bnNpZ25lZCBsb25nIGlvX3RpY2tzO1xuICAxNDpcdFx0bG9jYWxfdCBpbl9mbGlnaHRbMl07XG4gIDE1Olx0fTtcbiAgMTY6XHRcbiAgMTc6XHQvKlxuICAxODpcdCAqIE1hY3JvcyB0byBvcGVyYXRlIG9uIHBlcmNwdSBkaXNrIHN0YXRpc3RpY3M6XG4gIDE5Olx0ICpcbiAgMjA6XHQgKiBwYXJ0X3N0YXRfe2FkZHxzdWJ8aW5jfGRlY30oKSBtb2RpZnkgdGhlIHN0YXQgY291bnRlcnMgYW5kIHNob3VsZFxuICAyMTpcdCAqIGJlIGNhbGxlZCBiZXR3ZWVuIHBhcnRfc3RhdF9sb2NrKCkgYW5kIHBhcnRfc3RhdF91bmxvY2soKS5cbiAgMjI6XHQgKlxuICAyMzpcdCAqIHBhcnRfc3RhdF9yZWFkKCkgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZS5cbiAgMjQ6XHQgKi9cbiAgMjU6XHQjZGVmaW5lIHBhcnRfc3RhdF9sb2NrKClcdHByZWVtcHRfZGlzYWJsZSgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0OTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyBhYm91dCBpdHMgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nLiBUaGUgY3J1eCBvZiBpdCBzZWVtcyB0byBiZSBwcmV2ZW50aW5nIGFuIGludGVnZXIgb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyBkaXNrIEkvTyBzdGF0aXN0aWNzIG9uIDMyLWJpdCBzeXN0ZW1zLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjcHVfZGtzdGF0cy0mZ3Q7c2VjdG9yc1suLi5dICZsdDsmbHQ7IDlgLiBUaGUgc2hpZnQgY291bGQgY2F1c2UgYW4gb3ZlcmZsb3cgYXQgYSBmYWlybHkgY29tbW9uIGRpc2sgc2l6ZSwgYW5kIGNhc3RpbmcgdG8gYCh1NjQpYCBpcyB0aGUgZml4LiBUaGV5JiMzOTt2ZSBhbHNvIGNsZWFuZWQgaXQgdXAgYnkgcmVwbGFjaW5nIHRoZSBtYWdpYyBudW1iZXIgOSB3aXRoIGBTRUNUT1JfU0hJRlRgLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyAqcmVhY2hhYmxlKiBjb2RlPyBBbmQgdGhlIGFuc3dlciwgdGhhbmtmdWxseSwgaXMgeWVzISBJdCBsb29rcyBsaWtlIGBibGtjZ19wcmludF9zdGF0YCBpcyBjYWxsZWQgd2hlbiByZWFkaW5nIGBpby5zdGF0YCBvciBgYmxrY2dgIGZpbGVzIHdpdGhpbiBjZ3JvdXBzLiBUaGlzIGhhcHBlbnMgaW4gYm90aCBjZ3JvdXAgdjEgYW5kIHYyLCBwYXJ0aWN1bGFybHkgd2hlbiByZWFkaW5nIHRoZSByb290IGNncm91cCYjMzk7cyBgaW8uc3RhdGAuIFRoYXQgcGF0aCB0YWtlcyB1cyB0aHJvdWdoIHRoZSBibG9jayBjZ3JvdXAgc3Vic3lzdGVtLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgaW4gY29yZSBrZXJuZWwgdGVycml0b3J54oCUYmxvY2sgbGF5ZXIgYW5kIGNncm91cHMuIFRoYXTigJlzIGEgcG9zaXRpdmUgaW5kaWNhdG9yIGZvciBmdXp6aW5nLgoKTm93LCBkb2VzIGl0IG1lZXQgdGhlIGZ1enppbmcgY3JpdGVyaWE/ICBXZSYjMzk7cmUgZGVhbGluZyB3aXRoICYjMzQ7Y29yZSBzdWJzeXN0ZW1zJiMzNDsg4oCTIHNwZWNpZmljYWxseSwgdGhlIGJsb2NrIGxheWVyIGFuZCBjZ3JvdXBzLCB3aGljaCBhcmUga2V5IHBhcnRzIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgcmVzb3VyY2VzLiBXZSYjMzk7cmUgYWxzbyByZXN0cnVjdHVyaW5nIGRhdGEgc3RydWN0dXJlcyB0byBwcmV2ZW50IG92ZXJmbG93LCB3aGljaCBmaXRzIHRoZWlyIGRlZmluaXRpb24gb2YgcmVmYWN0b3JpbmcgYW5kIGNvZGUgY2xlYW51cC4gU28geWVzLCB0aGlzIHBhc3NlcyB0aGF0IHRlc3QuCgpDYW4gd2UgcmVhY2ggdGhpcyBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBsaWtlIHRoZSBvbmVzIHVzZWQgYnkgU3l6a2FsbGVyPyBZZXMhIENncm91cHMgYW5kIGJsb2NrIGRldmljZXMgKGxvb3BiYWNrLCBudWxsX2JsaywgdmlydGlvX2JsaywgcmFtZGlzaywgZXRjLikgYXJlIGFsbCBjb21tb24uICBSZWFkaW5nIGAvc3lzL2ZzL2Nncm91cC9pby5zdGF0YCBkaXJlY3RseSBpbnZva2VzIHRoZSBmdW5jdGlvbnMgd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4sIGBibGtjZ19wcmludF9zdGF0YCBhbmQgYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzYCwgd2hpY2ggaXMgZ3JlYXQuCgpUaGUgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXI6IGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AgYW5kIGBibGtjZ19wcmludF9zdGF0YC4KClJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCB3ZSYjMzk7bGwgbmVlZCBgQkxLX0NHUk9VUGAsIHdoaWNoLCB0aGFua2Z1bGx5LCBkZXBlbmRzIG9uIGBCTE9DS2AuIGBCTE9DS2AgaXMgcHJldHR5IHN0YW5kYXJkLiBJJiMzOTtsbCBkb3VibGUgY2hlY2sgYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzYCBpbiBgYmxvY2svYmxrLWNncm91cC5jYCBqdXN0IHRvIGJlIHN1cmUsIGJ1dCBpdCBzZWVtcyB0aGF0IGBCTEtfQ0dST1VQYCBzaG91bGQgYmUgc3VmZmljaWVudC4gSSB0aGluayB0aGlzIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtjZ19maWxsX3Jvb3RfaW9zdGF0cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmM9MTA3Nj1zdGF0aWMgdm9pZCBibGtjZ19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMDk0LSAqL1xuYmxvY2svYmxrLWNncm91cC5jOjEwOTU6c3RhdGljIHZvaWQgYmxrY2dfZmlsbF9yb290X2lvc3RhdHModm9pZClcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMDk2LXtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTE4Nz1zdGF0aWMgaW50IGJsa2NnX3ByaW50X3N0YXQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTE5Mi1cdGlmICghc2VxX2NzcyhzZiktXHUwMDNlcGFyZW50KVxuYmxvY2svYmxrLWNncm91cC5jOjExOTM6XHRcdGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKCk7XG5ibG9jay9ibGstY2dyb3VwLmMtMTE5NC1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI3NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdDoKCioqSW5zcGVjdGluZyB0aGUgQmxvY2sgSS9PIENncm91cCBTdGF0aXN0aWNzIEhvb2sqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNvbm5lY3Rpb25zIGJldHdlZW4gYGJsa2NnX3ByaW50X3N0YXRgIGFuZCB0aGUgY2Z0eXBlIGZpbGVzIHdpdGhpbiB0aGUgYGJsb2NrL2Jsay1jZ3JvdXAuY2Agc291cmNlIGZpbGUuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgYW5kIGZpZ3VyZSBvdXQgKmhvdyogdGhlIGJsb2NrIEkvTyBjZ3JvdXAgc3RhdGlzdGljcyBhcmUgYmVpbmcgZXhwb3NlZCBhbmQgY29udHJvbGxlZC4gVW5kZXJzdGFuZGluZyB0aGlzIGludGVyYWN0aW9uIGlzIGtleSB0byBkaWFnbm9zaW5nIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpc3N1ZXMgb3IgZXhwbG9yaW5nIGN1c3RvbSB0dW5pbmcgc3RyYXRlZ2llcy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgc3RydWN0dXJlZCwgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZnVuY3Rpb25zLCBhbmQgdWx0aW1hdGVseSwgaG93IHRob3NlIHN0YXRzIGFyZSBtYWRlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UuIEdvdHRhIGxvdmUgdGhlc2UgZGVlcCBkaXZlcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrY2dfcHJpbnRfc3RhdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmM9MTA3Nj1zdGF0aWMgdm9pZCBibGtjZ19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMDg2LSAqIGNncm91cHMgYXJlIGRlZmluZWQuIEZvciB0aGF0IHJlYXNvbiwgY3NzX3JzdGF0X2ZsdXNoIGluXG5ibG9jay9ibGstY2dyb3VwLmM6MTA4NzogKiBibGtjZ19wcmludF9zdGF0IGRvZXMgbm90IGFjdHVhbGx5IGZpbGwgb3V0IHRoZSBpb3N0YXQgaW4gdGhlIHJvb3RcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMDg4LSAqIGNncm91cCYjMzk7cyBibGtjZ19ncS5cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTEzNT1zdGF0aWMgdm9pZCBibGtjZ19wcmludF9vbmVfc3RhdChzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIHN0cnVjdCBzZXFfZmlsZSAqcylcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTE4Ni1cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMTg3OnN0YXRpYyBpbnQgYmxrY2dfcHJpbnRfc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuYmxvY2svYmxrLWNncm91cC5jLTExODgte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz0xMjA0PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGJsa2NnX2ZpbGVzW10gPSB7XG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTEyMDYtXHRcdC5uYW1lID0gXCYjMzQ7c3RhdFwmIzM0OyxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMjA3Olx0XHQuc2VxX3Nob3cgPSBibGtjZ19wcmludF9zdGF0LFxuYmxvY2svYmxrLWNncm91cC5jLTEyMDgtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODQ4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6ICoqVmVyaWZ5aW5nIGlvX2NncnBfc3Vic3lzIFJlZ2lzdHJhdGlvbioqLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhlIGBibGtjZ19maWxlc2AgYXJlIHByb3Blcmx5IHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgY2dyb3VwX3N1YnN5cyBpb19jZ3JwX3N1YnN5c2AuICBJJiMzOTt2ZSBnb3QgYSBuYWdnaW5nIGZlZWxpbmcgYWJvdXQgdGhpcyBzcGVjaWZpYyBpbnRlcmFjdGlvbiwgYW5kIEkgd2FudCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIGluZnJhc3RydWN0dXJlIGlzIGJlaGF2aW5nIGFzIEkgZXhwZWN0LiBNeSBpbW1lZGlhdGUgcGxhbiBpcyB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYmxvY2svYmxrLWNncm91cC5jYCBmaWxlLiBJJiMzOTttIHRoaW5raW5nLCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UsIHRoZSByZWxldmFudCBsb2dpYyB3aWxsIGxpa2VseSByZXNpZGUgc29tZXdoZXJlIGluIHRoZSB2aWNpbml0eSBvZiBsaW5lIDEyMDAuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAwOlx0XG4xMjAxOlx0XHRyZXR1cm4gMDtcbjEyMDI6XHR9XG4xMjAzOlx0XG4xMjA0Olx0c3RhdGljIHN0cnVjdCBjZnR5cGUgYmxrY2dfZmlsZXNbXSA9IHtcbjEyMDU6XHRcdHtcbjEyMDY6XHRcdFx0Lm5hbWUgPSBcJiMzNDtzdGF0XCYjMzQ7LFxuMTIwNzpcdFx0XHQuc2VxX3Nob3cgPSBibGtjZ19wcmludF9zdGF0LFxuMTIwODpcdFx0fSxcbjEyMDk6XHRcdHsgfVx0LyogdGVybWluYXRlICovXG4xMjEwOlx0fTtcbjEyMTE6XHRcbjEyMTI6XHRzdGF0aWMgc3RydWN0IGNmdHlwZSBibGtjZ19sZWdhY3lfZmlsZXNbXSA9IHtcbjEyMTM6XHRcdHtcbjEyMTQ6XHRcdFx0Lm5hbWUgPSBcJiMzNDtyZXNldF9zdGF0c1wmIzM0OyxcbjEyMTU6XHRcdFx0LndyaXRlX3U2NCA9IGJsa2NnX3Jlc2V0X3N0YXRzLFxuMTIxNjpcdFx0fSxcbjEyMTc6XHRcdHsgfVx0LyogdGVybWluYXRlICovXG4xMjE4Olx0fTtcbjEyMTk6XHRcbjEyMjA6XHQjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbjEyMjE6XHRzdHJ1Y3QgbGlzdF9oZWFkICpibGtjZ19nZXRfY2d3Yl9saXN0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4xMjIyOlx0e1xuMTIyMzpcdFx0cmV0dXJuIFx1MDAyNmNzc190b19ibGtjZyhjc3MpLVx1MDAzZWNnd2JfbGlzdDtcbjEyMjQ6XHR9XG4xMjI1Olx0I2VuZGlmXG4xMjI2Olx0XG4xMjI3Olx0LypcbjEyMjg6XHQgKiBibGtjZyBkZXN0cnVjdGlvbiBpcyBhIHRocmVlLXN0YWdlIHByb2Nlc3MuXG4xMjI5Olx0ICpcbjEyMzA6XHQgKiAxLiBEZXN0cnVjdGlvbiBzdGFydHMuICBUaGUgYmxrY2dfY3NzX29mZmxpbmUoKSBjYWxsYmFjayBpcyBpbnZva2VkXG4xMjMxOlx0ICogICAgd2hpY2ggb2ZmbGluZXMgd3JpdGViYWNrLiAgSGVyZSB3ZSB0aWUgdGhlIG5leHQgc3RhZ2Ugb2YgYmxrZyBkZXN0cnVjdGlvblxuMTIzMjpcdCAqICAgIHRvIHRoZSBjb21wbGV0aW9uIG9mIHdyaXRlYmFjayBhc3NvY2lhdGVkIHdpdGggdGhlIGJsa2NnLiAgVGhpcyBsZXRzIHVzXG4xMjMzOlx0ICogICAgYXZvaWQgcHVudGluZyBwb3RlbnRpYWxseSBsYXJnZSBhbW91bnRzIG9mIG91dHN0YW5kaW5nIHdyaXRlYmFjayB0byByb290XG4xMjM0Olx0ICogICAgd2hpbGUgbWFpbnRhaW5pbmcgYW55IG9uZ29pbmcgcG9saWNpZXMuICBUaGUgbmV4dCBzdGFnZSBpcyB0cmlnZ2VyZWQgd2hlblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5MAoJCQkJCQkJb3V0cHV0OiAxMjYKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgQmxvY2sgSU8gQ2dyb3VwIFN0YXRpc3RpY3MqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoZSBgYmxrY2dfZmlsZXNgIGFuZCBob3cgaXQgZGVmaW5lcyB0aGUgJiMzNDtzdGF0JiMzNDsgZmlsZSDigJMgd2hpY2gsIGFzIEkgdW5kZXJzdGFuZCBpdCwgYmVjb21lcyBgaW8uc3RhdGAgd2hlbiB0aGUgY2dyb3VwIGNvbnRyb2xsZXIgYWRkcyB0aGUgcHJlZml4LiBUaGUgYGJsa2NnX3ByaW50X3N0YXRgIGZ1bmN0aW9uIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGNhbGxzIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0cygpYCB3aGVuIGl04oCZcyBkZWFsaW5nIHdpdGggdGhlIHJvb3QgY2dyb3VwLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoaXMgd2FycmFudHMgZnV6emluZy4gSSYjMzk7dmUgZ290IGEgZ29vZCBmZWVsaW5nIGFib3V0IHRoaXMsIGJhc2VkIG9uIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuCgpNeSBhc3Nlc3NtZW50IGlzOgoKKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlLioqIFRoaXMgZGVmaW5pdGVseSBoaXRzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGFuZCBsaWtlbHkgdG91Y2hlcyBjb3JlIHN1YnN5c3RlbXMgcmVsYXRpbmcgdG8gSU8gbWFuYWdlbWVudC4gVGhlIGNvZGUgY2hhbmdlcyBhcmUgbGlrZWx5IHJlbGV2YW50IHRvIHJlZmFjdG9yaW5nIG9yIGNvZGUgY2xlYW51cCB0b28uCiogICAqKkZvY3VzU3ltYm9sczogXFvigJxibGtjZ19maWxsX3Jvb3RfaW9zdGF0c+KAnSwg4oCcYmxrY2dfcHJpbnRfc3RhdOKAnV0uKiogVGhlc2UgZnVuY3Rpb25zIGFyZSBoaWdobHkgc3BlY2lmaWMuIFRoZXkgYXJlIG5vdCB1YmlxdWl0b3VzIGFjcm9zcyB0aGUga2VybmVsLCB3aGljaCBoZWxwcyBuYXJyb3cgZG93biB0aGUgdGFyZ2V0LiBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHNgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgZGF0YSBwcm9jZXNzaW5nIGVycm9ycyB3aGVuIGZpbGxpbmcgdGhvc2UgSU8gc3RhdHMuCiogICAqKkVuYWJsZUNvbmZpZ3M6IFxb4oCcQkxLX0NHUk9VUOKAnV0uKiogUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgdGhlIGNncm91cCBjb25maWcgaXMgbmVlZGVkLgoKSSYjMzk7dmUgY2FyZWZ1bGx5IGNoZWNrZWQgdGhpcyBhZ2FpbnN0IHRoZSBndWlkZWxpbmVzLiBJdCBzZWVtcyB0byB0aWNrIGFsbCB0aGUgYm94ZXM6IGV4ZWN1dGFibGUgY29kZSwgc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBmb2N1cywgYW5kIHRoZSByaWdodCBjb25maWcgcmVxdWlyZW1lbnQuCgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIOKAkyB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtjZ19maWxsX3Jvb3RfaW9zdGF0cyYjMzQ7LAogICAgJiMzNDtibGtjZ19wcmludF9zdGF0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJvb3QgY2dyb3VwIEkvTyBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uIGluIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBjYXN0IHBlci1jcHUgc2VjdG9yIGNvdW50cyB0byB1NjQgYW5kIHVzZSBTRUNUT1JfU0hJRlQgYmVmb3JlIGFjY3VtdWxhdGluZyBpbnRvIGJ5dGUgY291bnRlcnMuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBibG9jayBjZ3JvdXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKGUuZy4gcmVhZGluZyBpby5zdGF0IG9uIHRoZSByb290IGNncm91cCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtjZ19maWxsX3Jvb3RfaW9zdGF0cyYjMzQ7LAogICAgJiMzNDtibGtjZ19wcmludF9zdGF0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJvb3QgY2dyb3VwIEkvTyBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uIGluIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBjYXN0IHBlci1jcHUgc2VjdG9yIGNvdW50cyB0byB1NjQgYW5kIHVzZSBTRUNUT1JfU0hJRlQgYmVmb3JlIGFjY3VtdWxhdGluZyBpbnRvIGJ5dGUgY291bnRlcnMuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBibG9jayBjZ3JvdXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKGUuZy4gcmVhZGluZyBpby5zdGF0IG9uIHRoZSByb290IGNncm91cCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIGR1cmluZyBzZWN0b3ItdG8tYnl0ZSBjb252ZXJzaW9uIGluIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0cygpYCBieSBjYXN0aW5nIGBjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzWy4uLl1gIHRvIGAodTY0KWAgYW5kIHVzaW5nIGBTRUNUT1JfU0hJRlRgIGluc3RlYWQgb2YgYDlgLiBcblxuVGhlIGxvY2FsIHN0cnVjdHVyZSBgc3RydWN0IGJsa2dfaW9zdGF0IHRtcGAgaXMgYWxyZWFkeSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBhY2N1bXVsYXRpbmcgc3RhdHMsIGFuZCB0aGUgcGVyLWNwdSBzdGF0cyByZWFkIGFyZSBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgY291bnRlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciB1bmluaXRpYWxpemVkIGRhdGEgcGF0aHMgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHByZXNlbnQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRjODhlYWY1NzQxM2RiMTE1YjA1MDFjYWMyNWQ5NWJiN2ZiYjBiOGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDE3OjA3OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jCmluZGV4IDJiNWMyOTQzNGU0MjYuLjQ3MWNmZDIzNDdjOWUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTExMTgsMTEgJiM0MzsxMTE4LDExIEBAIHN0YXRpYyB2b2lkIGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKHZvaWQpCiAJCQkJY3B1X2Rrc3RhdHMtJmd0O2lvc1tTVEFUX0RJU0NBUkRdOwogCQkJLy8gY29udmVydCBzZWN0b3JzIHRvIGJ5dGVzCiAJCQl0bXAuYnl0ZXNbQkxLR19JT1NUQVRfUkVBRF0gJiM0Mzs9Ci0JCQkJY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNbU1RBVF9SRUFEXSAmbHQ7Jmx0OyA5OwomIzQzOwkJCQkodTY0KWNwdV9ka3N0YXRzLSZndDtzZWN0b3JzW1NUQVRfUkVBRF0gJmx0OyZsdDsgU0VDVE9SX1NISUZUOwogCQkJdG1wLmJ5dGVzW0JMS0dfSU9TVEFUX1dSSVRFXSAmIzQzOz0KLQkJCQljcHVfZGtzdGF0cy0mZ3Q7c2VjdG9yc1tTVEFUX1dSSVRFXSAmbHQ7Jmx0OyA5OwomIzQzOwkJCQkodTY0KWNwdV9ka3N0YXRzLSZndDtzZWN0b3JzW1NUQVRfV1JJVEVdICZsdDsmbHQ7IFNFQ1RPUl9TSElGVDsKIAkJCXRtcC5ieXRlc1tCTEtHX0lPU1RBVF9ESVNDQVJEXSAmIzQzOz0KLQkJCQljcHVfZGtzdGF0cy0mZ3Q7c2VjdG9yc1tTVEFUX0RJU0NBUkRdICZsdDsmbHQ7IDk7CiYjNDM7CQkJCSh1NjQpY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNbU1RBVF9ESVNDQVJEXSAmbHQ7Jmx0OyBTRUNUT1JfU0hJRlQ7CiAJCX0KIAogCQlmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgmYW1wO2Jsa2ctJmd0O2lvc3RhdC5zeW5jKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgQmxvY2sgQ0dyb3VwcyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyB0aGUgZml4IGlzIGFwcGFyZW50bHkgbmVzdGxlZCB3aXRoaW4gYGJsb2NrL2Jsay1jZ3JvdXAuY2AuIExldCYjMzk7cyBnZXQgcmlnaHQgdG8gaXQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdXNlIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb24uIExpbmUgMTExOCBzb3VuZHMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4gVGhpcyBzaG91bGQgcXVpY2tseSBoaWdobGlnaHQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIGFuZCBhbGxvdyBtZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIFRoaXMgYXBwcm9hY2ggaGVscHMgbWUgcXVpY2tseSBncmFzcCB0aGUgc2NvcGUgb2YgdGhlIGZpeCBhbmQgYXNzZXNzIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIGNncm91cCBibG9jayBJL08gaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20ga2VlbiB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB0aGlzIGNvZGUsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzaWducyBvZiB0aGUgcHJvYmxlbSBvciB0aGUgZml4LCBzdWNoIGFzIGNvbW1lbnRzIG9yIHZhcmlhYmxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcdGNsYXNzX2Rldl9pdGVyX2luaXQoXHUwMDI2aXRlciwgXHUwMDI2YmxvY2tfY2xhc3MsIE5VTEwsIFx1MDAyNmRpc2tfdHlwZSk7XG4xMTAxOlx0XHR3aGlsZSAoKGRldiA9IGNsYXNzX2Rldl9pdGVyX25leHQoXHUwMDI2aXRlcikpKSB7XG4xMTAyOlx0XHRcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBkZXZfdG9fYmRldihkZXYpO1xuMTEwMzpcdFx0XHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cgPSBiZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlcXVldWUtXHUwMDNlcm9vdF9ibGtnO1xuMTEwNDpcdFx0XHRzdHJ1Y3QgYmxrZ19pb3N0YXQgdG1wO1xuMTEwNTpcdFx0XHRpbnQgY3B1O1xuMTEwNjpcdFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuMTEwNzpcdFxuMTEwODpcdFx0XHRtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSk7XG4xMTA5Olx0XHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbjExMTA6XHRcdFx0XHRzdHJ1Y3QgZGlza19zdGF0cyAqY3B1X2Rrc3RhdHM7XG4xMTExOlx0XG4xMTEyOlx0XHRcdFx0Y3B1X2Rrc3RhdHMgPSBwZXJfY3B1X3B0cihiZGV2LVx1MDAzZWJkX3N0YXRzLCBjcHUpO1xuMTExMzpcdFx0XHRcdHRtcC5pb3NbQkxLR19JT1NUQVRfUkVBRF0gJiM0Mzs9XG4xMTE0Olx0XHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2Vpb3NbU1RBVF9SRUFEXTtcbjExMTU6XHRcdFx0XHR0bXAuaW9zW0JMS0dfSU9TVEFUX1dSSVRFXSAmIzQzOz1cbjExMTY6XHRcdFx0XHRcdGNwdV9ka3N0YXRzLVx1MDAzZWlvc1tTVEFUX1dSSVRFXTtcbjExMTc6XHRcdFx0XHR0bXAuaW9zW0JMS0dfSU9TVEFUX0RJU0NBUkRdICYjNDM7PVxuMTExODpcdFx0XHRcdFx0Y3B1X2Rrc3RhdHMtXHUwMDNlaW9zW1NUQVRfRElTQ0FSRF07XG4xMTE5Olx0XHRcdFx0Ly8gY29udmVydCBzZWN0b3JzIHRvIGJ5dGVzXG4xMTIwOlx0XHRcdFx0dG1wLmJ5dGVzW0JMS0dfSU9TVEFUX1JFQURdICYjNDM7PVxuMTEyMTpcdFx0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfUkVBRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbjExMjI6XHRcdFx0XHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICYjNDM7PVxuMTEyMzpcdFx0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfV1JJVEVdIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQ7XG4xMTI0Olx0XHRcdFx0dG1wLmJ5dGVzW0JMS0dfSU9TVEFUX0RJU0NBUkRdICYjNDM7PVxuMTEyNTpcdFx0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbjExMjY6XHRcdFx0fVxuMTEyNzpcdFxuMTEyODpcdFx0XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZibGtnLVx1MDAzZWlvc3RhdC5zeW5jKTtcbjExMjk6XHRcdFx0YmxrZ19pb3N0YXRfc2V0KFx1MDAyNmJsa2ctXHUwMDNlaW9zdGF0LmN1ciwgXHUwMDI2dG1wKTtcbjExMzA6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZibGtnLVx1MDAzZWlvc3RhdC5zeW5jLCBmbGFncyk7XG4xMTMxOlx0XHR9XG4xMTMyOlx0XHRjbGFzc19kZXZfaXRlcl9leGl0KFx1MDAyNml0ZXIpO1xuMTEzMzpcdH1cbjExMzQ6XHRcbjExMzU6XHRzdGF0aWMgdm9pZCBibGtjZ19wcmludF9vbmVfc3RhdChzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIHN0cnVjdCBzZXFfZmlsZSAqcylcbjExMzY6XHR7XG4xMTM3Olx0XHRzdHJ1Y3QgYmxrZ19pb3N0YXRfc2V0ICpiaXMgPSBcdTAwMjZibGtnLVx1MDAzZWlvc3RhdDtcbjExMzg6XHRcdHU2NCByYnl0ZXMsIHdieXRlcywgcmlvcywgd2lvcywgZGJ5dGVzLCBkaW9zO1xuMTEzOTpcdFx0Y29uc3QgY2hhciAqZG5hbWU7XG4xMTQwOlx0XHR1bnNpZ25lZCBzZXE7XG4xMTQxOlx0XHRpbnQgaTtcbjExNDI6XHRcbjExNDM6XHRcdGlmICghYmxrZy1cdTAwM2VvbmxpbmUpXG4xMTQ0Olx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5MwoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA1OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTZWN0b3ItdG8tQnl0ZSBDb252ZXJzaW9uIENoYW5nZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgZGlmZiwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbnZlcnRpbmcgc2VjdG9yIGNvdW50cyBmcm9tIGBjcHVfZGtzdGF0cy0mZ3Q7c2VjdG9yc2AgdG8gYnl0ZSBjb3VudHMgZm9yIEkvTyBzdGF0aXN0aWNzLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgZG9pbmcgYSBsZWZ0IHNoaWZ0IGJ5IDkgYml0cyAoYCZsdDsmbHQ7IDlgKSwgd2hpY2gsIGFzIEkgc3VzcGVjdGVkLCBjb3VsZCBwb3RlbnRpYWxseSBjYXVzZSBpbnRlZ2VyIG92ZXJmbG93LCBlc3BlY2lhbGx5IG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzIHdoZW4gd29ya2luZyB3aXRoIGB1bnNpZ25lZCBsb25nYCBzZWN0b3IgY291bnRzLiBUaGUgZml4IGludm9sdmVzIGNhc3RpbmcgdG8gYCh1NjQpYCBhbmQgdXNpbmcgYFNFQ1RPUl9TSElGVGAsIHdoaWNoIGlzIGFsbW9zdCBjZXJ0YWlubHkgZGVmaW5lZCBhcyA5IChvciBzb21lIGVxdWl2YWxlbnQgcG93ZXItb2YtdHdvLCB3aGljaCBpcyB0aGUgcHJvcGVyIHdheSB0byBkbyBpdCkuIFRoaXMgcHJldmVudHMgdHJ1bmNhdGlvbiBhbmQgZW5zdXJlcyB0aGUgYnl0ZSBjb3VudCBjYWxjdWxhdGlvbiBpcyBhY2N1cmF0ZSwgZXZlbiB3aXRoIGxhcmdlIHNlY3RvciBjb3VudHMuCgpNeSBuZXh0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSBzZWUgdGhhdCBgc3RydWN0IGJsa2dfaW9zdGF0IHRtcDtgIGlzIGV4cGxpY2l0bHkgY2xlYXJlZCB3aXRoIGBtZW1zZXRgIGJlZm9yZSB0aGUgYWNjdW11bGF0aW9uIGxvb3AuIEZ1cnRoZXJtb3JlLCBgY3B1X2Rrc3RhdHNgIGxvb2tzIHRvIGJlIGRlcml2ZWQgZnJvbSBwcm9wZXJseSBpbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyBhbmQgdGhlIHZhbHVlIGlzIGFjY3VtdWxhdGVkIGludG8gdGhlIHRlbXBvcmFyeSBidWZmZXIuIFRoZXJlIGFyZSBubyBleHBvc2VkIHBvaW50ZXJzIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gbmV3IGFsbG9jYXRpb24gaXNzdWVzLiBUaGUgZGF0YSBpcyBvbmx5IGFjY3VtdWxhdGVkIGluIGB0bXBgIGFuZCBjb3BpZWQgdG8gYGJsa2ctJmd0O2lvc3RhdC5jdXJgIHVzaW5nIGEgZnVuY3Rpb24sIGFuZCBpcyBzYWZlLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGlkZWEgdGhhdCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFyaXRobWV0aWMvdHlwZSBjYXN0aW5nIGNvcnJlY3Rpb24uCgpUaGVyZWZvcmUsIHRoZSBLTVNBTiBxdWVzdGlvbiBpcyBlYXNpbHkgYW5zd2VyZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQsIGFjY2Vzc2VkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBJJiMzOTt2ZSByZXZpZXdlZCB0aGUgY29tbW9uIHNjZW5hcmlvcyB3aGVyZSBLTVNBTiBiZWNvbWVzIHJlbGV2YW50IGFuZCBub25lIG9mIHRob3NlIGFyZSBhcHBsaWNhYmxlIGhlcmUuIFRoZSBgTmVlZHNLTVNBTmAgZmxhZyBpcyBkZWZpbml0aXZlbHkgZmFsc2UuCgpGaW5hbGx5LCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGlzIGNoYW5nZSBpcyBwdXJlbHkgYWJvdXQgdHlwZSBzYWZldHkgYW5kIGF2b2lkcyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBkdXJpbmcgdGhlIHNlY3Rvci10by1ieXRlIGNvbnZlcnNpb24uIEkgYW0gcHJlcGFyZWQgdG8gJiMzOTtzZXQtcmVzdWx0cyYjMzk7LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIGR1cmluZyBzZWN0b3ItdG8tYnl0ZSBjb252ZXJzaW9uIGluIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0cygpYCBieSBjYXN0aW5nIGBjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzWy4uLl1gIHRvIGAodTY0KWAgYW5kIHVzaW5nIGBTRUNUT1JfU0hJRlRgIGluc3RlYWQgb2YgYDlgLiBcblxuVGhlIGxvY2FsIHN0cnVjdHVyZSBgc3RydWN0IGJsa2dfaW9zdGF0IHRtcGAgaXMgYWxyZWFkeSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBhY2N1bXVsYXRpbmcgc3RhdHMsIGFuZCB0aGUgcGVyLWNwdSBzdGF0cyByZWFkIGFyZSBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgY291bnRlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciB1bmluaXRpYWxpemVkIGRhdGEgcGF0aHMgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHByZXNlbnQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgZHVyaW5nIHNlY3Rvci10by1ieXRlIGNvbnZlcnNpb24gaW4gYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKClgIGJ5IGNhc3RpbmcgYGNwdV9ka3N0YXRzLVx1MDAzZXNlY3RvcnNbLi4uXWAgdG8gYCh1NjQpYCBhbmQgdXNpbmcgYFNFQ1RPUl9TSElGVGAgaW5zdGVhZCBvZiBgOWAuIFxuXG5UaGUgbG9jYWwgc3RydWN0dXJlIGBzdHJ1Y3QgYmxrZ19pb3N0YXQgdG1wYCBpcyBhbHJlYWR5IGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldChcdTAwMjZ0bXAsIDAsIHNpemVvZih0bXApKWAgYmVmb3JlIGFjY3VtdWxhdGluZyBzdGF0cywgYW5kIHRoZSBwZXItY3B1IHN0YXRzIHJlYWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGtlcm5lbCBjb3VudGVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBwYXRocyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgcHJlc2VudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowNzo0Ni45NzYwMjgxMDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzk3NDc2Nzk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrY2dfZmlsbF9yb290X2lvc3RhdHNcIixcbiAgICBcImJsa2NnX3ByaW50X3N0YXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgZHVyaW5nIHNlY3Rvci10by1ieXRlIGNvbnZlcnNpb24gaW4gYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKClgIGJ5IGNhc3RpbmcgYGNwdV9ka3N0YXRzLVxcdTAwM2VzZWN0b3JzWy4uLl1gIHRvIGAodTY0KWAgYW5kIHVzaW5nIGBTRUNUT1JfU0hJRlRgIGluc3RlYWQgb2YgYDlgLiBcXG5cXG5UaGUgbG9jYWwgc3RydWN0dXJlIGBzdHJ1Y3QgYmxrZ19pb3N0YXQgdG1wYCBpcyBhbHJlYWR5IGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldChcXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBhY2N1bXVsYXRpbmcgc3RhdHMsIGFuZCB0aGUgcGVyLWNwdSBzdGF0cyByZWFkIGFyZSBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgY291bnRlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciB1bmluaXRpYWxpemVkIGRhdGEgcGF0aHMgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHByZXNlbnQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByb290IGNncm91cCBJL08gc3RhdGlzdGljcyBjYWxjdWxhdGlvbiBpbiBibG9jay9ibGstY2dyb3VwLmMgdG8gY2FzdCBwZXItY3B1IHNlY3RvciBjb3VudHMgdG8gdTY0IGFuZCB1c2UgU0VDVE9SX1NISUZUIGJlZm9yZSBhY2N1bXVsYXRpbmcgaW50byBieXRlIGNvdW50ZXJzLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgYmxvY2sgY2dyb3VwIHN0YXRpc3RpY3MgcmVwb3J0aW5nIChlLmcuIHJlYWRpbmcgaW8uc3RhdCBvbiB0aGUgcm9vdCBjZ3JvdXApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowNzo0Ni45NzYwMzYzOTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTI3Mjk3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYzg4ZWFmNTc0MTNkYjExNWIwNTAxY2FjMjVkOTViYjdmYmIwYjhlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTc6MDc6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jXFxuaW5kZXggMmI1YzI5NDM0ZTQyNi4uNDcxY2ZkMjM0N2M5ZSAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcXG4rKysgYi9ibG9jay9ibGstY2dyb3VwLmNcXG5AQCAtMTExOCwxMSArMTExOCwxMSBAQCBzdGF0aWMgdm9pZCBibGtjZ19maWxsX3Jvb3RfaW9zdGF0cyh2b2lkKVxcbiBcXHRcXHRcXHRcXHRjcHVfZGtzdGF0cy1cXHUwMDNlaW9zW1NUQVRfRElTQ0FSRF07XFxuIFxcdFxcdFxcdC8vIGNvbnZlcnQgc2VjdG9ycyB0byBieXRlc1xcbiBcXHRcXHRcXHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfUkVBRF0gKz1cXG4tXFx0XFx0XFx0XFx0Y3B1X2Rrc3RhdHMtXFx1MDAzZXNlY3RvcnNbU1RBVF9SRUFEXSBcXHUwMDNjXFx1MDAzYyA5O1xcbitcXHRcXHRcXHRcXHQodTY0KWNwdV9ka3N0YXRzLVxcdTAwM2VzZWN0b3JzW1NUQVRfUkVBRF0gXFx1MDAzY1xcdTAwM2MgU0VDVE9SX1NISUZUO1xcbiBcXHRcXHRcXHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICs9XFxuLVxcdFxcdFxcdFxcdGNwdV9ka3N0YXRzLVxcdTAwM2VzZWN0b3JzW1NUQVRfV1JJVEVdIFxcdTAwM2NcXHUwMDNjIDk7XFxuK1xcdFxcdFxcdFxcdCh1NjQpY3B1X2Rrc3RhdHMtXFx1MDAzZXNlY3RvcnNbU1RBVF9XUklURV0gXFx1MDAzY1xcdTAwM2MgU0VDVE9SX1NISUZUO1xcbiBcXHRcXHRcXHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfRElTQ0FSRF0gKz1cXG4tXFx0XFx0XFx0XFx0Y3B1X2Rrc3RhdHMtXFx1MDAzZXNlY3RvcnNbU1RBVF9ESVNDQVJEXSBcXHUwMDNjXFx1MDAzYyA5O1xcbitcXHRcXHRcXHRcXHQodTY0KWNwdV9ka3N0YXRzLVxcdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXFx1MDAzY1xcdTAwM2MgU0VDVE9SX1NISUZUO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2YmxrZy1cXHUwMDNlaW9zdGF0LnN5bmMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowNzo0OC40ODk0NDY0MzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQxNTA2MDUyMDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtjZ19maWxsX3Jvb3RfaW9zdGF0c1wiLFxuICAgIFwiYmxrY2dfcHJpbnRfc3RhdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJvb3QgY2dyb3VwIEkvTyBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uIGluIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBjYXN0IHBlci1jcHUgc2VjdG9yIGNvdW50cyB0byB1NjQgYW5kIHVzZSBTRUNUT1JfU0hJRlQgYmVmb3JlIGFjY3VtdWxhdGluZyBpbnRvIGJ5dGUgY291bnRlcnMuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBibG9jayBjZ3JvdXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKGUuZy4gcmVhZGluZyBpby5zdGF0IG9uIHRoZSByb290IGNncm91cCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGM4OGVhZjU3NDEzZGIxMTViMDUwMWNhYzI1ZDk1YmI3ZmJiMGI4ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTc6MDc6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcbmluZGV4IDJiNWMyOTQzNGU0MjYuLjQ3MWNmZDIzNDdjOWUgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcbisrKyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuQEAgLTExMTgsMTEgKzExMTgsMTEgQEAgc3RhdGljIHZvaWQgYmxrY2dfZmlsbF9yb290X2lvc3RhdHModm9pZClcbiBcdFx0XHRcdGNwdV9ka3N0YXRzLVx1MDAzZWlvc1tTVEFUX0RJU0NBUkRdO1xuIFx0XHRcdC8vIGNvbnZlcnQgc2VjdG9ycyB0byBieXRlc1xuIFx0XHRcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9SRUFEXSArPVxuLVx0XHRcdFx0Y3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX1JFQURdIFx1MDAzY1x1MDAzYyA5O1xuK1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfUkVBRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbiBcdFx0XHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICs9XG4tXHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfV1JJVEVdIFx1MDAzY1x1MDAzYyA5O1xuK1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfV1JJVEVdIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQ7XG4gXHRcdFx0dG1wLmJ5dGVzW0JMS0dfSU9TVEFUX0RJU0NBUkRdICs9XG4tXHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXHUwMDNjXHUwMDNjIDk7XG4rXHRcdFx0XHQodTY0KWNwdV9ka3N0YXRzLVx1MDAzZXNlY3RvcnNbU1RBVF9ESVNDQVJEXSBcdTAwM2NcdTAwM2MgU0VDVE9SX1NISUZUO1xuIFx0XHR9XG4gXG4gXHRcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNmJsa2ctXHUwMDNlaW9zdGF0LnN5bmMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDc6NDguNDg5NDQ4MTQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMxMDA1ODA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCbG9jayBJL08gQ2dyb3VwIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoZSBjb2RlIG1vZGlmaWNhdGlvbiB3aXRoaW4gYGJsb2NrL2Jsay1jZ3JvdXAuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiB0aGUgYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIGFuIGlzc3VlIHJlbGF0ZWQgdG8gSS9PIHN0YXRpc3RpY3MsIHNwZWNpZmljYWxseSB0aGUgY29udmVyc2lvbiBvZiBzZWN0b3JzIHRvIGJ5dGVzLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYSBsZWZ0IGJpdCBzaGlmdCBieSA5IChgXHUwMDNjXHUwMDNjIDlgKSB0byBjb252ZXJ0IHNlY3RvcnMgdG8gYnl0ZXMsIGFuZCBub3cgd2UgYXJlIHVzaW5nIGEgYml0IHNoaWZ0IHdpdGggYFNFQ1RPUl9TSElGVGAuXG5cblRoZSByZWxldmFudCBjb2RlIHNuaXBwZXQgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdFx0XHQvLyBjb252ZXJ0IHNlY3RvcnMgdG8gYnl0ZXNcblx0XHRcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9SRUFEXSArPVxuLVx0XHRcdFx0Y3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX1JFQURdIFx1MDAzY1x1MDAzYyA5O1xuK1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfUkVBRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcblx0XHRcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9XUklURV0gKz1cbi1cdFx0XHRcdGNwdV9ka3N0YXRzLVx1MDAzZXNlY3RvcnNbU1RBVF9XUklURV0gXHUwMDNjXHUwMDNjIDk7XG4rXHRcdFx0XHQodTY0KWNwdV9ka3N0YXRzLVx1MDAzZXNlY3RvcnNbU1RBVF9XUklURV0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcblx0XHRcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9ESVNDQVJEXSArPVxuLVx0XHRcdFx0Y3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX0RJU0NBUkRdIFx1MDAzY1x1MDAzYyA5O1xuK1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbmBgYFxuXG5UaGlzIGlzIGRlZmluaXRlbHkgdGhlIHBhcnQgb2YgdGhlIGNvZGUgdGhhdCdzIGJlaW5nIGNoYW5nZWQuIFRoZSBjYXN0IHRvIGAodTY0KWAgaW5kaWNhdGVzIGEgcG90ZW50aWFsIG92ZXJmbG93IG9yIGRhdGEtd2lkdGggY29uY2VybiB0aGF0J3MgYmVpbmcgYWRkcmVzc2VkIGFzIHdlbGwuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0OlxuXG4qICAgSG93IGlzIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AgYWN0dWFsbHkgY2FsbGVkPyBXaGF0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24/XG4qICAgQXJlIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgY29uZGl0aW9ucyB0aGF0IGd1YXJkIGl0cyBleGVjdXRpb24/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzP1xuXG5JJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiBgYmxvY2svYmxrLWNncm91cC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExMTgsIHRvIGdldCB0aGF0IHN1cnJvdW5kaW5nIGNvbnRleHQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2UgYW5kIGFueSBpbXBsaWNhdGlvbnMgaXQgbWlnaHQgaGF2ZSB3aXRoaW4gdGhlIGJsb2NrIEkvTyBjZ3JvdXAgc3lzdGVtLiBGcm9tIHRoZXJlLCBJIGNhbiBmb3JtIGEgbW9yZSBjb21wbGV0ZSBhc3Nlc3NtZW50IG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjA3OjUyLjc5OTUwODM0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwMDpcXHRcXHRjbGFzc19kZXZfaXRlcl9pbml0KFxcdTAwMjZpdGVyLCBcXHUwMDI2YmxvY2tfY2xhc3MsIE5VTEwsIFxcdTAwMjZkaXNrX3R5cGUpO1xcbjExMDE6XFx0XFx0d2hpbGUgKChkZXYgPSBjbGFzc19kZXZfaXRlcl9uZXh0KFxcdTAwMjZpdGVyKSkpIHtcXG4xMTAyOlxcdFxcdFxcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBkZXZfdG9fYmRldihkZXYpO1xcbjExMDM6XFx0XFx0XFx0c3RydWN0IGJsa2NnX2dxICpibGtnID0gYmRldi1cXHUwMDNlYmRfZGlzay1cXHUwMDNlcXVldWUtXFx1MDAzZXJvb3RfYmxrZztcXG4xMTA0OlxcdFxcdFxcdHN0cnVjdCBibGtnX2lvc3RhdCB0bXA7XFxuMTEwNTpcXHRcXHRcXHRpbnQgY3B1O1xcbjExMDY6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4xMTA3OlxcdFxcbjExMDg6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZ0bXAsIDAsIHNpemVvZih0bXApKTtcXG4xMTA5OlxcdFxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4xMTEwOlxcdFxcdFxcdFxcdHN0cnVjdCBkaXNrX3N0YXRzICpjcHVfZGtzdGF0cztcXG4xMTExOlxcdFxcbjExMTI6XFx0XFx0XFx0XFx0Y3B1X2Rrc3RhdHMgPSBwZXJfY3B1X3B0cihiZGV2LVxcdTAwM2ViZF9zdGF0cywgY3B1KTtcXG4xMTEzOlxcdFxcdFxcdFxcdHRtcC5pb3NbQkxLR19JT1NUQVRfUkVBRF0gKz1cXG4xMTE0OlxcdFxcdFxcdFxcdFxcdGNwdV9ka3N0YXRzLVxcdTAwM2Vpb3NbU1RBVF9SRUFEXTtcXG4xMTE1OlxcdFxcdFxcdFxcdHRtcC5pb3NbQkxLR19JT1NUQVRfV1JJVEVdICs9XFxuMTExNjpcXHRcXHRcXHRcXHRcXHRjcHVfZGtzdGF0cy1cXHUwMDNlaW9zW1NUQVRfV1JJVEVdO1xcbjExMTc6XFx0XFx0XFx0XFx0dG1wLmlvc1tCTEtHX0lPU1RBVF9ESVNDQVJEXSArPVxcbjExMTg6XFx0XFx0XFx0XFx0XFx0Y3B1X2Rrc3RhdHMtXFx1MDAzZWlvc1tTVEFUX0RJU0NBUkRdO1xcbjExMTk6XFx0XFx0XFx0XFx0Ly8gY29udmVydCBzZWN0b3JzIHRvIGJ5dGVzXFxuMTEyMDpcXHRcXHRcXHRcXHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfUkVBRF0gKz1cXG4xMTIxOlxcdFxcdFxcdFxcdFxcdCh1NjQpY3B1X2Rrc3RhdHMtXFx1MDAzZXNlY3RvcnNbU1RBVF9SRUFEXSBcXHUwMDNjXFx1MDAzYyBTRUNUT1JfU0hJRlQ7XFxuMTEyMjpcXHRcXHRcXHRcXHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICs9XFxuMTEyMzpcXHRcXHRcXHRcXHRcXHQodTY0KWNwdV9ka3N0YXRzLVxcdTAwM2VzZWN0b3JzW1NUQVRfV1JJVEVdIFxcdTAwM2NcXHUwMDNjIFNFQ1RPUl9TSElGVDtcXG4xMTI0OlxcdFxcdFxcdFxcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9ESVNDQVJEXSArPVxcbjExMjU6XFx0XFx0XFx0XFx0XFx0KHU2NCljcHVfZGtzdGF0cy1cXHUwMDNlc2VjdG9yc1tTVEFUX0RJU0NBUkRdIFxcdTAwM2NcXHUwMDNjIFNFQ1RPUl9TSElGVDtcXG4xMTI2OlxcdFxcdFxcdH1cXG4xMTI3OlxcdFxcbjExMjg6XFx0XFx0XFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXFx1MDAyNmJsa2ctXFx1MDAzZWlvc3RhdC5zeW5jKTtcXG4xMTI5OlxcdFxcdFxcdGJsa2dfaW9zdGF0X3NldChcXHUwMDI2YmxrZy1cXHUwMDNlaW9zdGF0LmN1ciwgXFx1MDAyNnRtcCk7XFxuMTEzMDpcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFxcdTAwMjZibGtnLVxcdTAwM2Vpb3N0YXQuc3luYywgZmxhZ3MpO1xcbjExMzE6XFx0XFx0fVxcbjExMzI6XFx0XFx0Y2xhc3NfZGV2X2l0ZXJfZXhpdChcXHUwMDI2aXRlcik7XFxuMTEzMzpcXHR9XFxuMTEzNDpcXHRcXG4xMTM1OlxcdHN0YXRpYyB2b2lkIGJsa2NnX3ByaW50X29uZV9zdGF0KHN0cnVjdCBibGtjZ19ncSAqYmxrZywgc3RydWN0IHNlcV9maWxlICpzKVxcbjExMzY6XFx0e1xcbjExMzc6XFx0XFx0c3RydWN0IGJsa2dfaW9zdGF0X3NldCAqYmlzID0gXFx1MDAyNmJsa2ctXFx1MDAzZWlvc3RhdDtcXG4xMTM4OlxcdFxcdHU2NCByYnl0ZXMsIHdieXRlcywgcmlvcywgd2lvcywgZGJ5dGVzLCBkaW9zO1xcbjExMzk6XFx0XFx0Y29uc3QgY2hhciAqZG5hbWU7XFxuMTE0MDpcXHRcXHR1bnNpZ25lZCBzZXE7XFxuMTE0MTpcXHRcXHRpbnQgaTtcXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0aWYgKCFibGtnLVxcdTAwM2VvbmxpbmUpXFxuMTE0NDpcXHRcXHRcXHRyZXR1cm47XFxuMTE0NTpcXHRcXG4xMTQ2OlxcdFxcdGRuYW1lID0gYmxrZ19kZXZfbmFtZShibGtnKTtcXG4xMTQ3OlxcdFxcdGlmICghZG5hbWUpXFxuMTE0ODpcXHRcXHRcXHRyZXR1cm47XFxuMTE0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDc6NTIuNzk5NjIwNDI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4NzAwODAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AgQ2FsbCBTaXRlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IHJlbGF0ZWQgdG8gYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzYC4gVGltZSB0byB0cmFjZSBpdHMgY2FsbCBncmFwaC4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgd2l0aCBhIGJhc2ljIGdyZXAsIG9yIG1heWJlIHVzZSBjc2NvcGUgb3IgY3RhZ3MgaWYgSSdtIGZlZWxpbmcgZmFuY3kuIEkgd2FudCB0byBxdWlja2x5IGlkZW50aWZ5IGV2ZXJ5IGZ1bmN0aW9uIHRoYXQgKmRpcmVjdGx5KiBjYWxscyBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHNgLiBVbmRlcnN0YW5kaW5nIHRoZSBpbW1lZGlhdGUgY2FsbGVycyBpcyB0aGUgZmlyc3Qgc3RlcC4gVGhlbiwgZGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCBJIG1pZ2h0IG5lZWQgdG8gbW92ZSB1cCB0aGUgY2FsbCBzdGFjaywgZXhwbG9yaW5nIHRoZSBsb2dpYyBzdXJyb3VuZGluZyB0aG9zZSBjYWxsZXJzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCDigJMgdGhlIGFyZ3VtZW50cyBwYXNzZWQsIHRoZSBjb25kaXRpb25hbCBleGVjdXRpb24gcGF0aHMsIGFuZCBhbnkgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW52b2x2ZWQuIEknbSBhbnRpY2lwYXRpbmcgc29tZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgZ2l2ZW4gdGhhdCB0aGlzIGRlYWxzIHdpdGggSS9PIHN0YXRpc3RpY3MgYXQgdGhlIHJvb3QgbGV2ZWwgb2YgYmxvY2sgSS9PIGNvbnRyb2wgZ3JvdXBzLiBUaGlzIHdpbGwgcHJvYmFibHkgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHdoYXQgY29kZSBwYXRocyBhcmUgcmVsZXZhbnQgdG8gcGVyZm9ybWFuY2UgYW5hbHlzaXMsIG9yIGlmIHRoZXJlJ3MgYW55IGFyZWEgdGhhdCdzIHdvcnRoIHR1bmluZy4gSSdtIGtlZW4gdG8gYXZvaWQgZ2V0dGluZyBsb3N0IGluIGEgbWF6ZSBvZiBpbmRpcmVjdCBjYWxscyBhbmQgbWFjcm9zLCBzbyBJJ2xsIHRyeSB0byBrZWVwIHRoZSBmb2N1cyBuYXJyb3csIGF0IGxlYXN0IGluaXRpYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDc6NTUuMTg2NjMwMTU4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODU2MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstY2dyb3VwLmM9MTA3Nj1zdGF0aWMgdm9pZCBibGtjZ19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTEwOTQtICovXFxuYmxvY2svYmxrLWNncm91cC5jOjEwOTU6c3RhdGljIHZvaWQgYmxrY2dfZmlsbF9yb290X2lvc3RhdHModm9pZClcXG5ibG9jay9ibGstY2dyb3VwLmMtMTA5Ni17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MTE4Nz1zdGF0aWMgaW50IGJsa2NnX3ByaW50X3N0YXQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMTkyLVxcdGlmICghc2VxX2NzcyhzZiktXFx1MDAzZXBhcmVudClcXG5ibG9jay9ibGstY2dyb3VwLmM6MTE5MzpcXHRcXHRibGtjZ19maWxsX3Jvb3RfaW9zdGF0cygpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMTk0LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDc6NTUuMjMxNDkxNzg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExNzgzMDg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgQmxrLUNncm91cCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGJsay1jZ3JvdXAuY2AgYnVzaW5lc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGNvbmZpZ3VyZWQsIGFuZCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgTWFrZWZpbGVgIHdpdGhpbiB0aGUgYGJsb2NrL2AgZGlyZWN0b3J5LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgYnVpbGQgc3lzdGVtIHRpZXMgdGhpbmdzIHRvZ2V0aGVyLiBNeSBnb2FsIGlzIHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgd2hldGhlciB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUgZ2V0cyBjb21waWxlZCBhbmQgaW5jbHVkZWQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaXMga2V5IHRvIGdyYXNwaW5nIGhvdyB0aGlzIGJsay1jZ3JvdXAgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIG9yIGRpc2FibGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgcmVmZXJlbmNlcyB0byBjb25maWd1cmF0aW9uIHN5bWJvbHMgcmVsYXRlZCB0byBibG9jayBJL08gY29udHJvbCBncm91cHMsIGFuZCB0aGVuIEkgY2FuIGRlbHZlIGludG8gdGhlIGRlZmluaXRpb25zIG9mIHRob3NlIHN5bWJvbHMgdG8gZGV0ZXJtaW5lIHRoZWlyIG1lYW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowNzo1Ny4zNDkzMjQ5NDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyOTkzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrLWNncm91cFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9MTg9b2JqLSQoQ09ORklHX0JMS19ERVZfQlNHTElCKVxcdCs9IGJzZy1saWIub1xcbmJsb2NrL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19CTEtfQ0dST1VQKVxcdCs9IGJsay1jZ3JvdXAub1xcbmJsb2NrL01ha2VmaWxlLTIwLW9iai0kKENPTkZJR19CTEtfQ0dST1VQX1JXU1RBVClcXHQrPSBibGstY2dyb3VwLXJ3c3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjA3OjU3LjM5NTYyOTU3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyODk0OTE2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipLY29uZmlnIERpdmUgZm9yIEJMS19DR1JPVVAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgQkxLX0NHUk9VUGAgaXMgZGVmaW5lZC4gS25vd2luZyB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtLCBteSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBzbyBhIEtjb25maWcgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIEdpdmVuIGl0J3MgcmVsYXRlZCB0byBibG9jayBkZXZpY2VzLCBgYmxvY2svS2NvbmZpZ2Agc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIGxvY2F0aW9uLiBMZXQncyBoZWFkIG92ZXIgdGhlcmUgYW5kIHNlZSB3aGF0J3Mgd2hhdC4gSG9wZWZ1bGx5IGl0J3Mgc3RyYWlnaHRmb3J3YXJkLCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBwdXJwb3NlIGZyb20gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjIzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MDAuNjg1MTIzNzQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTczMDE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcXG4tLVxcbmJsb2NrL0tjb25maWctNDEtXFxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcXG5ibG9jay9LY29uZmlnLTQzLVxcdGJvb2xcXG5ibG9jay9LY29uZmlnLTQ0LVxcbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG5ibG9jay9LY29uZmlnLTQ2LVxcdGJvb2xcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTQ0LVxcbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuYmxvY2svS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTYzLVxcbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbmJsb2NrL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIkNncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MDAuNzM0ODU4ODUzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NjE3NzM4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgY29uZmlnIEJMS19DR1JPVVBgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYGNvbmZpZyBCTEtfQ0dST1VQYCB3aXRoaW4gdGhpcyB3aG9sZSBjb2RlYmFzZSwgcmlnaHQ/IFRoaXMgbWVhbnMgSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIEtjb25maWcgZmlsZXMsIG9yIHBvdGVudGlhbGx5IGdlbmVyYXRlZCBoZWFkZXIgZmlsZXMgaWYgaXQncyBiZWluZyB1c2VkIGNvbmRpdGlvbmFsbHkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHJ1biBhIHNlYXJjaCBhY3Jvc3MgdGhlIGVudGlyZSBwcm9qZWN0IHN0cnVjdHVyZS4gSSdsbCBuZWVkIHRvIHVzZSB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYi4gYGdyZXBgIHdpdGggdGhlIGAtUmAgZmxhZyAob3IgYGZpbmRgIGFuZCBgZ3JlcGAgdG9nZXRoZXIgZm9yIG1vcmUgY29udHJvbCkgaXMgcHJvYmFibHkgbXkgYmVzdCBiZXQgaGVyZS4gSSBzaG91bGQga2VlcCBpbiBtaW5kIHRoYXQgSSBtaWdodCBiZSBkZWFsaW5nIHdpdGggdmFyaWF0aW9ucyBvZiB0aGUgbmFtZSAoZS5nLiwgYCNkZWZpbmUgQkxLX0NHUk9VUGAsIG9yIGluIEtjb25maWcgc29tZXRoaW5nIGxpa2UgYGNvbmZpZyBCTEtfQ0dST1VQYCkuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNvbnNpZGVyIGFueSBwb3RlbnRpYWwgY29udGV4dC4gSSdsbCBuZWVkIHRvIHNlZSB3aGVyZSBpdCdzIGRlZmluZWQgYW5kIGhvdyBpdCdzIHVzZWQuIEJhc2VkIG9uIHdoZXJlIEkgZmluZCB0aGUgZGVmaW5pdGlvbiBJIGNhbiB0aGVuIGxvb2sgYXQgd2hpY2ggY29kZSBzZWN0aW9ucyBhcmUgYWZmZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowODowMy4zOTY2MzU2NDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjY5NjA4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19DR1JPVVAkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMTA4PWNvbmZpZyBNRU1DR19WMVxcbi0tXFxuaW5pdC9LY29uZmlnLTExMjQtXFxuaW5pdC9LY29uZmlnOjExMjU6Y29uZmlnIEJMS19DR1JPVVBcXG5pbml0L0tjb25maWctMTEyNi1cXHRib29sIFxcXCJJTyBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowODowNS43NjM2MDEwMzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyMjYyMjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBEaXZlKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIHRoaXMuIFRoZSBwcm9ibGVtIHNtZWxscyBsaWtlIGl0IGNvdWxkIGJlIGNvbmZpZ3VyYXRpb24tcmVsYXRlZCwgc28gbGV0J3MganVtcCByaWdodCBpbnRvIGBpbml0L0tjb25maWdgLiBMaW5lIDExMjUuLi5yaWdodCBhcm91bmQgdGhlcmUgc2hvdWxkIHByb3ZpZGUgc29tZSBjbHVlcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgZGVmaW5pdGlvbiwgcG9zc2libHkgYSBib29sZWFuIG9yIHRyaXN0YXRlLCB0aGF0IGdvdmVybnMgc29tZSBhc3BlY3Qgb2YgaW5pdGlhbGl6YXRpb24gb3IgZWFybHkgYm9vdCBiZWhhdmlvci4gSSdsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgcG90ZW50aWFsbHkgYW55IHN5bWJvbHMgaXQgZGVwZW5kcyBvbiB0aGF0IG1pZ2h0IGJlIHRoZSBzb3VyY2Ugb2Ygb3VyIGlzc3VlLiBJJ2xsIG5lZWQgdG8gcmFwaWRseSBwYXJzZSB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGF0IGxpbmUgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgcHVycG9zZSBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGF0IHBsYXkuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIHRob3NlIGRlcGVuZGVuY2llcyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjUzOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjA4OjA3LjY4NjIyNjk1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMjA6XFx0XFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXFxuMTEyMTpcXHRcXHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cXG4xMTIyOlxcdFxcbjExMjM6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTEyNDpcXHRcXG4xMTI1OlxcdGNvbmZpZyBCTEtfQ0dST1VQXFxuMTEyNjpcXHRcXHRib29sIFxcXCJJTyBjb250cm9sbGVyXFxcIlxcbjExMjc6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbjExMjg6XFx0XFx0ZGVmYXVsdCBuXFxuMTEyOTpcXHRcXHRoZWxwXFxuMTEzMDpcXHRcXHRHZW5lcmljIGJsb2NrIElPIGNvbnRyb2xsZXIgY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyB0aGUgY29tbW9uXFxuMTEzMTpcXHRcXHRjZ3JvdXAgaW50ZXJmYWNlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHZhcmlvdXMgSU8gY29udHJvbGxpbmdcXG4xMTMyOlxcdFxcdHBvbGljaWVzLlxcbjExMzM6XFx0XFxuMTEzNDpcXHRcXHRDdXJyZW50bHksIENGUSBJTyBzY2hlZHVsZXIgdXNlcyBpdCB0byByZWNvZ25pemUgdGFzayBncm91cHMgYW5kXFxuMTEzNTpcXHRcXHRjb250cm9sIGRpc2sgYmFuZHdpZHRoIGFsbG9jYXRpb24gKHByb3BvcnRpb25hbCB0aW1lIHNsaWNlIGFsbG9jYXRpb24pXFxuMTEzNjpcXHRcXHR0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCBpcyBhbHNvIHVzZWQgYnkgYmlvIHRocm90dGxpbmcgbG9naWMgaW5cXG4xMTM3OlxcdFxcdGJsb2NrIGxheWVyIHRvIGltcGxlbWVudCB1cHBlciBsaW1pdCBpbiBJTyByYXRlcyBvbiBhIGRldmljZS5cXG4xMTM4OlxcdFxcbjExMzk6XFx0XFx0VGhpcyBvcHRpb24gb25seSBlbmFibGVzIGdlbmVyaWMgQmxvY2sgSU8gY29udHJvbGxlciBpbmZyYXN0cnVjdHVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MDcuNjg2MzUwMzc2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTgzMTY3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEaXNrIFN0YXRzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGJsb2NrL2Jsay1jZ3JvdXAuY2AgYW5kIHNwZWNpZmljYWxseSB0aGUgYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzYCBmdW5jdGlvbi4gVGhlIGtleSBpc3N1ZSBhcHBlYXJzIHRvIGJlIHJlbGF0ZWQgdG8gaG93IHdlJ3JlIGhhbmRsaW5nIHRoZSBgY3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc2AgZmllbGQuIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBsaWtlIHRoaXMgYmVmb3JlLiBUaGUgbGluZSBpbiBxdWVzdGlvbiBzZWVtcyB0byBiZSB1c2luZyBhIGxlZnQgYml0d2lzZSBzaGlmdCBvZiBgXHUwMDNjXHUwMDNjIDlgIGJ1dCB3aXRob3V0IGEgY2FzdCB0byBhIDY0LWJpdCBpbnRlZ2VyLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBzZXRzIG9mZiBhbGFybSBiZWxscy4gVGhpcyBsb29rcyBsaWtlIGEgY2xhc3NpYyBwb3RlbnRpYWwgb3ZlcmZsb3cgYnVnLCBkZXBlbmRpbmcgb24gdGhlIGRhdGEgdHlwZSBvZiBgY3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc2AuIEl0J3MgbGlrZWx5IGB1bnNpZ25lZCBsb25nYCBvciBgdW5zaWduZWQgaW50YCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBkZWZpbml0aW9uIHdpdGhpbiB0aGUgYHN0cnVjdCBkaXNrX3N0YXRzYC4gTGV0J3MgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgc3RydWN0IHRvIGJlIHN1cmUuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIGtlcm5lbCBjb2RlIHNob3VsZCBjbGVhciB1cCB0aGUgc3BlY2lmaWMgZGF0YSB0eXBlIGFuZCBjb25maXJtIG15IGluaXRpYWwgaHlwb3RoZXNpcy4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGV4YWN0IHByb2JsZW0gYW5kIHNvbHV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDMyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowODoxMC4wMDQ2Njk3OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyODI1NTA2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZGlza19zdGF0cyBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhcnRfc3RhdC5oLTctXFxuaW5jbHVkZS9saW51eC9wYXJ0X3N0YXQuaDo4OnN0cnVjdCBkaXNrX3N0YXRzIHtcXG5pbmNsdWRlL2xpbnV4L3BhcnRfc3RhdC5oLTktXFx0dTY0IG5zZWNzW05SX1NUQVRfR1JPVVBTXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MTIuNDMyOTI5MjQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTM5MTczMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHBhcnRfc3RhdC5oYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgaW5jbHVkZS9saW51eC9wYXJ0X3N0YXQuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4LiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGJlIHNlZWluZyBkZWZpbml0aW9ucyBmb3IgdGhlIHN0YXRpc3RpY3MgbWFpbnRhaW5lZCBieSB0aGUgcGFydGl0aW9uIGxheWVyLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJlcyBjb250YWluaW5nIGNvdW50ZXJzIGZvciBJL08gb3BlcmF0aW9ucywgdGltaW5ncywgYW5kIHBlcmhhcHMgZXJyb3IgdHJhY2tpbmcuIEknbSByZWFsbHkga2VlbiBvbiBob3cgdGhlc2UgYXJlIGxhaWQgb3V0IGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgbm90ZXdvcnRoeSBvcHRpbWl6YXRpb25zIChvciBwb3RlbnRpYWwgYm90dGxlbmVja3MpIGluIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhlbXNlbHZlcy4gVGhpcyBmaWxlIGlzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIHRyYWNrcyBhbmQgZXhwb3NlcyBwYXJ0aXRpb24tbGV2ZWwgcGVyZm9ybWFuY2UgbWV0cmljcywgc28gbGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDIzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MTQuNDQ2ODQ5ODgxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGFydF9zdGF0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbiAgIDI6XFx0I2lmbmRlZiBfTElOVVhfUEFSVF9TVEFUX0hcXG4gICAzOlxcdCNkZWZpbmUgX0xJTlVYX1BBUlRfU1RBVF9IXFxuICAgNDpcXHRcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGtkZXYuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2Nhc20vbG9jYWwuaFxcdTAwM2VcXG4gICA3OlxcdFxcbiAgIDg6XFx0c3RydWN0IGRpc2tfc3RhdHMge1xcbiAgIDk6XFx0XFx0dTY0IG5zZWNzW05SX1NUQVRfR1JPVVBTXTtcXG4gIDEwOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2VjdG9yc1tOUl9TVEFUX0dST1VQU107XFxuICAxMTpcXHRcXHR1bnNpZ25lZCBsb25nIGlvc1tOUl9TVEFUX0dST1VQU107XFxuICAxMjpcXHRcXHR1bnNpZ25lZCBsb25nIG1lcmdlc1tOUl9TVEFUX0dST1VQU107XFxuICAxMzpcXHRcXHR1bnNpZ25lZCBsb25nIGlvX3RpY2tzO1xcbiAgMTQ6XFx0XFx0bG9jYWxfdCBpbl9mbGlnaHRbMl07XFxuICAxNTpcXHR9O1xcbiAgMTY6XFx0XFxuICAxNzpcXHQvKlxcbiAgMTg6XFx0ICogTWFjcm9zIHRvIG9wZXJhdGUgb24gcGVyY3B1IGRpc2sgc3RhdGlzdGljczpcXG4gIDE5OlxcdCAqXFxuICAyMDpcXHQgKiBwYXJ0X3N0YXRfe2FkZHxzdWJ8aW5jfGRlY30oKSBtb2RpZnkgdGhlIHN0YXQgY291bnRlcnMgYW5kIHNob3VsZFxcbiAgMjE6XFx0ICogYmUgY2FsbGVkIGJldHdlZW4gcGFydF9zdGF0X2xvY2soKSBhbmQgcGFydF9zdGF0X3VubG9jaygpLlxcbiAgMjI6XFx0ICpcXG4gIDIzOlxcdCAqIHBhcnRfc3RhdF9yZWFkKCkgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZS5cXG4gIDI0OlxcdCAqL1xcbiAgMjU6XFx0I2RlZmluZSBwYXJ0X3N0YXRfbG9jaygpXFx0cHJlZW1wdF9kaXNhYmxlKClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MTQuNDQ2OTEzODkxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5Nzk1MzgxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgYWJvdXQgaXRzIGltcGxpY2F0aW9ucyBmb3IgZnV6emluZy4gVGhlIGNydXggb2YgaXQgc2VlbXMgdG8gYmUgcHJldmVudGluZyBhbiBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gY2FsY3VsYXRpbmcgZGlzayBJL08gc3RhdGlzdGljcyBvbiAzMi1iaXQgc3lzdGVtcywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgY3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1suLi5dIFx1MDAzY1x1MDAzYyA5YC4gVGhlIHNoaWZ0IGNvdWxkIGNhdXNlIGFuIG92ZXJmbG93IGF0IGEgZmFpcmx5IGNvbW1vbiBkaXNrIHNpemUsIGFuZCBjYXN0aW5nIHRvIGAodTY0KWAgaXMgdGhlIGZpeC4gVGhleSd2ZSBhbHNvIGNsZWFuZWQgaXQgdXAgYnkgcmVwbGFjaW5nIHRoZSBtYWdpYyBudW1iZXIgOSB3aXRoIGBTRUNUT1JfU0hJRlRgLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzICpyZWFjaGFibGUqIGNvZGU/IEFuZCB0aGUgYW5zd2VyLCB0aGFua2Z1bGx5LCBpcyB5ZXMhIEl0IGxvb2tzIGxpa2UgYGJsa2NnX3ByaW50X3N0YXRgIGlzIGNhbGxlZCB3aGVuIHJlYWRpbmcgYGlvLnN0YXRgIG9yIGBibGtjZ2AgZmlsZXMgd2l0aGluIGNncm91cHMuIFRoaXMgaGFwcGVucyBpbiBib3RoIGNncm91cCB2MSBhbmQgdjIsIHBhcnRpY3VsYXJseSB3aGVuIHJlYWRpbmcgdGhlIHJvb3QgY2dyb3VwJ3MgYGlvLnN0YXRgLiBUaGF0IHBhdGggdGFrZXMgdXMgdGhyb3VnaCB0aGUgYmxvY2sgY2dyb3VwIHN1YnN5c3RlbSwgd2hpY2ggbWVhbnMgd2UncmUgaW4gY29yZSBrZXJuZWwgdGVycml0b3J54oCUYmxvY2sgbGF5ZXIgYW5kIGNncm91cHMuIFRoYXTigJlzIGEgcG9zaXRpdmUgaW5kaWNhdG9yIGZvciBmdXp6aW5nLlxuXG5Ob3csIGRvZXMgaXQgbWVldCB0aGUgZnV6emluZyBjcml0ZXJpYT8gIFdlJ3JlIGRlYWxpbmcgd2l0aCBcImNvcmUgc3Vic3lzdGVtc1wiIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBibG9jayBsYXllciBhbmQgY2dyb3Vwcywgd2hpY2ggYXJlIGtleSBwYXJ0cyBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIHJlc291cmNlcy4gV2UncmUgYWxzbyByZXN0cnVjdHVyaW5nIGRhdGEgc3RydWN0dXJlcyB0byBwcmV2ZW50IG92ZXJmbG93LCB3aGljaCBmaXRzIHRoZWlyIGRlZmluaXRpb24gb2YgcmVmYWN0b3JpbmcgYW5kIGNvZGUgY2xlYW51cC4gU28geWVzLCB0aGlzIHBhc3NlcyB0aGF0IHRlc3QuXG5cbkNhbiB3ZSByZWFjaCB0aGlzIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQsIGxpa2UgdGhlIG9uZXMgdXNlZCBieSBTeXprYWxsZXI/IFllcyEgQ2dyb3VwcyBhbmQgYmxvY2sgZGV2aWNlcyAobG9vcGJhY2ssIG51bGxfYmxrLCB2aXJ0aW9fYmxrLCByYW1kaXNrLCBldGMuKSBhcmUgYWxsIGNvbW1vbi4gIFJlYWRpbmcgYC9zeXMvZnMvY2dyb3VwL2lvLnN0YXRgIGRpcmVjdGx5IGludm9rZXMgdGhlIGZ1bmN0aW9ucyB3ZSdyZSBpbnRlcmVzdGVkIGluLCBgYmxrY2dfcHJpbnRfc3RhdGAgYW5kIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AsIHdoaWNoIGlzIGdyZWF0LlxuXG5UaGUgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXI6IGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AgYW5kIGBibGtjZ19wcmludF9zdGF0YC5cblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIHdlJ2xsIG5lZWQgYEJMS19DR1JPVVBgLCB3aGljaCwgdGhhbmtmdWxseSwgZGVwZW5kcyBvbiBgQkxPQ0tgLiBgQkxPQ0tgIGlzIHByZXR0eSBzdGFuZGFyZC4gSSdsbCBkb3VibGUgY2hlY2sgYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzYCBpbiBgYmxvY2svYmxrLWNncm91cC5jYCBqdXN0IHRvIGJlIHN1cmUsIGJ1dCBpdCBzZWVtcyB0aGF0IGBCTEtfQ0dST1VQYCBzaG91bGQgYmUgc3VmZmljaWVudC4gSSB0aGluayB0aGlzIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDA1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MTkuNDI2NDU0NTg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAzMDU3NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuYz0xMDc2PXN0YXRpYyB2b2lkIGJsa2NnX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTA5NC0gKi9cXG5ibG9jay9ibGstY2dyb3VwLmM6MTA5NTpzdGF0aWMgdm9pZCBibGtjZ19maWxsX3Jvb3RfaW9zdGF0cyh2b2lkKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMDk2LXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xMTg3PXN0YXRpYyBpbnQgYmxrY2dfcHJpbnRfc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTExOTItXFx0aWYgKCFzZXFfY3NzKHNmKS1cXHUwMDNlcGFyZW50KVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMTkzOlxcdFxcdGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKCk7XFxuYmxvY2svYmxrLWNncm91cC5jLTExOTQtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowODoyMC45Mjk1MjEwNjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5MTc3ODIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQ6XG5cbioqSW5zcGVjdGluZyB0aGUgQmxvY2sgSS9PIENncm91cCBTdGF0aXN0aWNzIEhvb2sqKlxuXG5BbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgYmV0d2VlbiBgYmxrY2dfcHJpbnRfc3RhdGAgYW5kIHRoZSBjZnR5cGUgZmlsZXMgd2l0aGluIHRoZSBgYmxvY2svYmxrLWNncm91cC5jYCBzb3VyY2UgZmlsZS4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBmaWd1cmUgb3V0ICpob3cqIHRoZSBibG9jayBJL08gY2dyb3VwIHN0YXRpc3RpY3MgYXJlIGJlaW5nIGV4cG9zZWQgYW5kIGNvbnRyb2xsZWQuIFVuZGVyc3RhbmRpbmcgdGhpcyBpbnRlcmFjdGlvbiBpcyBrZXkgdG8gZGlhZ25vc2luZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaXNzdWVzIG9yIGV4cGxvcmluZyBjdXN0b20gdHVuaW5nIHN0cmF0ZWdpZXMuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQsIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGZ1bmN0aW9ucywgYW5kIHVsdGltYXRlbHksIGhvdyB0aG9zZSBzdGF0cyBhcmUgbWFkZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlLiBHb3R0YSBsb3ZlIHRoZXNlIGRlZXAgZGl2ZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNzcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowODoyMy4wMjEzMDIwODlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTA3MTAxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrY2dfcHJpbnRfc3RhdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstY2dyb3VwLmM9MTA3Nj1zdGF0aWMgdm9pZCBibGtjZ19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTEwODYtICogY2dyb3VwcyBhcmUgZGVmaW5lZC4gRm9yIHRoYXQgcmVhc29uLCBjc3NfcnN0YXRfZmx1c2ggaW5cXG5ibG9jay9ibGstY2dyb3VwLmM6MTA4NzogKiBibGtjZ19wcmludF9zdGF0IGRvZXMgbm90IGFjdHVhbGx5IGZpbGwgb3V0IHRoZSBpb3N0YXQgaW4gdGhlIHJvb3RcXG5ibG9jay9ibGstY2dyb3VwLmMtMTA4OC0gKiBjZ3JvdXAncyBibGtjZ19ncS5cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xMTM1PXN0YXRpYyB2b2lkIGJsa2NnX3ByaW50X29uZV9zdGF0KHN0cnVjdCBibGtjZ19ncSAqYmxrZywgc3RydWN0IHNlcV9maWxlICpzKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTExODYtXFxuYmxvY2svYmxrLWNncm91cC5jOjExODc6c3RhdGljIGludCBibGtjZ19wcmludF9zdGF0KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuYmxvY2svYmxrLWNncm91cC5jLTExODgte1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTEyMDQ9c3RhdGljIHN0cnVjdCBjZnR5cGUgYmxrY2dfZmlsZXNbXSA9IHtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMjA2LVxcdFxcdC5uYW1lID0gXFxcInN0YXRcXFwiLFxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMjA3OlxcdFxcdC5zZXFfc2hvdyA9IGJsa2NnX3ByaW50X3N0YXQsXFxuYmxvY2svYmxrLWNncm91cC5jLTEyMDgtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MjQuNTMyMDE2Mjg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODEzODA0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczogKipWZXJpZnlpbmcgaW9fY2dycF9zdWJzeXMgUmVnaXN0cmF0aW9uKiouIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gd2hldGhlciB0aGUgYGJsa2NnX2ZpbGVzYCBhcmUgcHJvcGVybHkgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGBjZ3JvdXBfc3Vic3lzIGlvX2NncnBfc3Vic3lzYC4gIEkndmUgZ290IGEgbmFnZ2luZyBmZWVsaW5nIGFib3V0IHRoaXMgc3BlY2lmaWMgaW50ZXJhY3Rpb24sIGFuZCBJIHdhbnQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZSBpbmZyYXN0cnVjdHVyZSBpcyBiZWhhdmluZyBhcyBJIGV4cGVjdC4gTXkgaW1tZWRpYXRlIHBsYW4gaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGJsb2NrL2Jsay1jZ3JvdXAuY2AgZmlsZS4gSSdtIHRoaW5raW5nLCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UsIHRoZSByZWxldmFudCBsb2dpYyB3aWxsIGxpa2VseSByZXNpZGUgc29tZXdoZXJlIGluIHRoZSB2aWNpbml0eSBvZiBsaW5lIDEyMDAuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg0OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjA4OjI2LjQxMzM5ODQ5N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDI3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLWNncm91cC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDA6XFx0XFxuMTIwMTpcXHRcXHRyZXR1cm4gMDtcXG4xMjAyOlxcdH1cXG4xMjAzOlxcdFxcbjEyMDQ6XFx0c3RhdGljIHN0cnVjdCBjZnR5cGUgYmxrY2dfZmlsZXNbXSA9IHtcXG4xMjA1OlxcdFxcdHtcXG4xMjA2OlxcdFxcdFxcdC5uYW1lID0gXFxcInN0YXRcXFwiLFxcbjEyMDc6XFx0XFx0XFx0LnNlcV9zaG93ID0gYmxrY2dfcHJpbnRfc3RhdCxcXG4xMjA4OlxcdFxcdH0sXFxuMTIwOTpcXHRcXHR7IH1cXHQvKiB0ZXJtaW5hdGUgKi9cXG4xMjEwOlxcdH07XFxuMTIxMTpcXHRcXG4xMjEyOlxcdHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGJsa2NnX2xlZ2FjeV9maWxlc1tdID0ge1xcbjEyMTM6XFx0XFx0e1xcbjEyMTQ6XFx0XFx0XFx0Lm5hbWUgPSBcXFwicmVzZXRfc3RhdHNcXFwiLFxcbjEyMTU6XFx0XFx0XFx0LndyaXRlX3U2NCA9IGJsa2NnX3Jlc2V0X3N0YXRzLFxcbjEyMTY6XFx0XFx0fSxcXG4xMjE3OlxcdFxcdHsgfVxcdC8qIHRlcm1pbmF0ZSAqL1xcbjEyMTg6XFx0fTtcXG4xMjE5OlxcdFxcbjEyMjA6XFx0I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxuMTIyMTpcXHRzdHJ1Y3QgbGlzdF9oZWFkICpibGtjZ19nZXRfY2d3Yl9saXN0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuMTIyMjpcXHR7XFxuMTIyMzpcXHRcXHRyZXR1cm4gXFx1MDAyNmNzc190b19ibGtjZyhjc3MpLVxcdTAwM2VjZ3diX2xpc3Q7XFxuMTIyNDpcXHR9XFxuMTIyNTpcXHQjZW5kaWZcXG4xMjI2OlxcdFxcbjEyMjc6XFx0LypcXG4xMjI4OlxcdCAqIGJsa2NnIGRlc3RydWN0aW9uIGlzIGEgdGhyZWUtc3RhZ2UgcHJvY2Vzcy5cXG4xMjI5OlxcdCAqXFxuMTIzMDpcXHQgKiAxLiBEZXN0cnVjdGlvbiBzdGFydHMuICBUaGUgYmxrY2dfY3NzX29mZmxpbmUoKSBjYWxsYmFjayBpcyBpbnZva2VkXFxuMTIzMTpcXHQgKiAgICB3aGljaCBvZmZsaW5lcyB3cml0ZWJhY2suICBIZXJlIHdlIHRpZSB0aGUgbmV4dCBzdGFnZSBvZiBibGtnIGRlc3RydWN0aW9uXFxuMTIzMjpcXHQgKiAgICB0byB0aGUgY29tcGxldGlvbiBvZiB3cml0ZWJhY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBibGtjZy4gIFRoaXMgbGV0cyB1c1xcbjEyMzM6XFx0ICogICAgYXZvaWQgcHVudGluZyBwb3RlbnRpYWxseSBsYXJnZSBhbW91bnRzIG9mIG91dHN0YW5kaW5nIHdyaXRlYmFjayB0byByb290XFxuMTIzNDpcXHQgKiAgICB3aGlsZSBtYWludGFpbmluZyBhbnkgb25nb2luZyBwb2xpY2llcy4gIFRoZSBuZXh0IHN0YWdlIGlzIHRyaWdnZXJlZCB3aGVuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjA4OjI2LjQxMzc0MzM2N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTA5ODk2MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIEJsb2NrIElPIENncm91cCBTdGF0aXN0aWNzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGBibGtjZ19maWxlc2AgYW5kIGhvdyBpdCBkZWZpbmVzIHRoZSBcInN0YXRcIiBmaWxlIOKAkyB3aGljaCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBiZWNvbWVzIGBpby5zdGF0YCB3aGVuIHRoZSBjZ3JvdXAgY29udHJvbGxlciBhZGRzIHRoZSBwcmVmaXguIFRoZSBgYmxrY2dfcHJpbnRfc3RhdGAgZnVuY3Rpb24gaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQgY2FsbHMgYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKClgIHdoZW4gaXTigJlzIGRlYWxpbmcgd2l0aCB0aGUgcm9vdCBjZ3JvdXAuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIHRoaXMgd2FycmFudHMgZnV6emluZy4gSSd2ZSBnb3QgYSBnb29kIGZlZWxpbmcgYWJvdXQgdGhpcywgYmFzZWQgb24gdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS5cblxuTXkgYXNzZXNzbWVudCBpczpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlLioqIFRoaXMgZGVmaW5pdGVseSBoaXRzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGFuZCBsaWtlbHkgdG91Y2hlcyBjb3JlIHN1YnN5c3RlbXMgcmVsYXRpbmcgdG8gSU8gbWFuYWdlbWVudC4gVGhlIGNvZGUgY2hhbmdlcyBhcmUgbGlrZWx5IHJlbGV2YW50IHRvIHJlZmFjdG9yaW5nIG9yIGNvZGUgY2xlYW51cCB0b28uXG4qICAgKipGb2N1c1N5bWJvbHM6IFxcW+KAnGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRz4oCdLCDigJxibGtjZ19wcmludF9zdGF04oCdXS4qKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGhpZ2hseSBzcGVjaWZpYy4gVGhleSBhcmUgbm90IHViaXF1aXRvdXMgYWNyb3NzIHRoZSBrZXJuZWwsIHdoaWNoIGhlbHBzIG5hcnJvdyBkb3duIHRoZSB0YXJnZXQuIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkYXRhIHByb2Nlc3NpbmcgZXJyb3JzIHdoZW4gZmlsbGluZyB0aG9zZSBJTyBzdGF0cy5cbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcW+KAnEJMS19DR1JPVVDigJ1dLioqIFByZXR0eSBzdHJhaWdodGZvcndhcmQsIHRoZSBjZ3JvdXAgY29uZmlnIGlzIG5lZWRlZC5cblxuSSd2ZSBjYXJlZnVsbHkgY2hlY2tlZCB0aGlzIGFnYWluc3QgdGhlIGd1aWRlbGluZXMuIEl0IHNlZW1zIHRvIHRpY2sgYWxsIHRoZSBib3hlczogZXhlY3V0YWJsZSBjb2RlLCBzcGVjaWZpYyBmdW5jdGlvbnMgZm9yIGZvY3VzLCBhbmQgdGhlIHJpZ2h0IGNvbmZpZyByZXF1aXJlbWVudC5cblxuTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIOKAkyB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTAsIk91dHB1dFRva2VucyI6MTI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MjkuOTIzNjQxODUzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE4NTM0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtjZ19maWxsX3Jvb3RfaW9zdGF0c1wiLFxuICAgIFwiYmxrY2dfcHJpbnRfc3RhdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJvb3QgY2dyb3VwIEkvTyBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uIGluIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBjYXN0IHBlci1jcHUgc2VjdG9yIGNvdW50cyB0byB1NjQgYW5kIHVzZSBTRUNUT1JfU0hJRlQgYmVmb3JlIGFjY3VtdWxhdGluZyBpbnRvIGJ5dGUgY291bnRlcnMuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBibG9jayBjZ3JvdXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKGUuZy4gcmVhZGluZyBpby5zdGF0IG9uIHRoZSByb290IGNncm91cCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0NHUk9VUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzXCIsXG4gICAgXCJibGtjZ19wcmludF9zdGF0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcm9vdCBjZ3JvdXAgSS9PIHN0YXRpc3RpY3MgY2FsY3VsYXRpb24gaW4gYmxvY2svYmxrLWNncm91cC5jIHRvIGNhc3QgcGVyLWNwdSBzZWN0b3IgY291bnRzIHRvIHU2NCBhbmQgdXNlIFNFQ1RPUl9TSElGVCBiZWZvcmUgYWNjdW11bGF0aW5nIGludG8gYnl0ZSBjb3VudGVycy4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIGJsb2NrIGNncm91cCBzdGF0aXN0aWNzIHJlcG9ydGluZyAoZS5nLiByZWFkaW5nIGlvLnN0YXQgb24gdGhlIHJvb3QgY2dyb3VwKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MjkuOTk1NTAxMjkyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1NTI4NDcyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjA4OjI5Ljk5NTkxMDI3MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwOTU0ODcxOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIGR1cmluZyBzZWN0b3ItdG8tYnl0ZSBjb252ZXJzaW9uIGluIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0cygpYCBieSBjYXN0aW5nIGBjcHVfZGtzdGF0cy1cXHUwMDNlc2VjdG9yc1suLi5dYCB0byBgKHU2NClgIGFuZCB1c2luZyBgU0VDVE9SX1NISUZUYCBpbnN0ZWFkIG9mIGA5YC4gXFxuXFxuVGhlIGxvY2FsIHN0cnVjdHVyZSBgc3RydWN0IGJsa2dfaW9zdGF0IHRtcGAgaXMgYWxyZWFkeSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXQoXFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpYCBiZWZvcmUgYWNjdW11bGF0aW5nIHN0YXRzLCBhbmQgdGhlIHBlci1jcHUgc3RhdHMgcmVhZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIGNvdW50ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgdW5pbml0aWFsaXplZCBkYXRhIHBhdGhzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBwcmVzZW50IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGM4OGVhZjU3NDEzZGIxMTViMDUwMWNhYzI1ZDk1YmI3ZmJiMGI4ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTc6MDc6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcbmluZGV4IDJiNWMyOTQzNGU0MjYuLjQ3MWNmZDIzNDdjOWUgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcbisrKyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuQEAgLTExMTgsMTEgKzExMTgsMTEgQEAgc3RhdGljIHZvaWQgYmxrY2dfZmlsbF9yb290X2lvc3RhdHModm9pZClcbiBcdFx0XHRcdGNwdV9ka3N0YXRzLVx1MDAzZWlvc1tTVEFUX0RJU0NBUkRdO1xuIFx0XHRcdC8vIGNvbnZlcnQgc2VjdG9ycyB0byBieXRlc1xuIFx0XHRcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9SRUFEXSArPVxuLVx0XHRcdFx0Y3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX1JFQURdIFx1MDAzY1x1MDAzYyA5O1xuK1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfUkVBRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbiBcdFx0XHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICs9XG4tXHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfV1JJVEVdIFx1MDAzY1x1MDAzYyA5O1xuK1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfV1JJVEVdIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQ7XG4gXHRcdFx0dG1wLmJ5dGVzW0JMS0dfSU9TVEFUX0RJU0NBUkRdICs9XG4tXHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXHUwMDNjXHUwMDNjIDk7XG4rXHRcdFx0XHQodTY0KWNwdV9ka3N0YXRzLVx1MDAzZXNlY3RvcnNbU1RBVF9ESVNDQVJEXSBcdTAwM2NcdTAwM2MgU0VDVE9SX1NISUZUO1xuIFx0XHR9XG4gXG4gXHRcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNmJsa2ctXHUwMDNlaW9zdGF0LnN5bmMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MjkuOTk1OTEyNzAxWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1ODQ5MTkzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIEJsb2NrIENHcm91cHMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgZml4IGlzIGFwcGFyZW50bHkgbmVzdGxlZCB3aXRoaW4gYGJsb2NrL2Jsay1jZ3JvdXAuY2AuIExldCdzIGdldCByaWdodCB0byBpdC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbi4gTGluZSAxMTE4IHNvdW5kcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgc28gbGV0J3Mgc3RhcnQgdGhlcmUuIFRoaXMgc2hvdWxkIHF1aWNrbHkgaGlnaGxpZ2h0IHRoZSBzdXJyb3VuZGluZyBsb2dpYyBhbmQgYWxsb3cgbWUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlLiBUaGlzIGFwcHJvYWNoIGhlbHBzIG1lIHF1aWNrbHkgZ3Jhc3AgdGhlIHNjb3BlIG9mIHRoZSBmaXggYW5kIGFzc2VzcyBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBjZ3JvdXAgYmxvY2sgSS9PIGluZnJhc3RydWN0dXJlLiBJJ20ga2VlbiB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB0aGlzIGNvZGUsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHRoZSBwcm9ibGVtIG9yIHRoZSBmaXgsIHN1Y2ggYXMgY29tbWVudHMgb3IgdmFyaWFibGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowODozNS41ODA4MzQ2NTVaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTAwOlxcdFxcdGNsYXNzX2Rldl9pdGVyX2luaXQoXFx1MDAyNml0ZXIsIFxcdTAwMjZibG9ja19jbGFzcywgTlVMTCwgXFx1MDAyNmRpc2tfdHlwZSk7XFxuMTEwMTpcXHRcXHR3aGlsZSAoKGRldiA9IGNsYXNzX2Rldl9pdGVyX25leHQoXFx1MDAyNml0ZXIpKSkge1xcbjExMDI6XFx0XFx0XFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGRldl90b19iZGV2KGRldik7XFxuMTEwMzpcXHRcXHRcXHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cgPSBiZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2VxdWV1ZS1cXHUwMDNlcm9vdF9ibGtnO1xcbjExMDQ6XFx0XFx0XFx0c3RydWN0IGJsa2dfaW9zdGF0IHRtcDtcXG4xMTA1OlxcdFxcdFxcdGludCBjcHU7XFxuMTEwNjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjExMDc6XFx0XFxuMTEwODpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpO1xcbjExMDk6XFx0XFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbjExMTA6XFx0XFx0XFx0XFx0c3RydWN0IGRpc2tfc3RhdHMgKmNwdV9ka3N0YXRzO1xcbjExMTE6XFx0XFxuMTExMjpcXHRcXHRcXHRcXHRjcHVfZGtzdGF0cyA9IHBlcl9jcHVfcHRyKGJkZXYtXFx1MDAzZWJkX3N0YXRzLCBjcHUpO1xcbjExMTM6XFx0XFx0XFx0XFx0dG1wLmlvc1tCTEtHX0lPU1RBVF9SRUFEXSArPVxcbjExMTQ6XFx0XFx0XFx0XFx0XFx0Y3B1X2Rrc3RhdHMtXFx1MDAzZWlvc1tTVEFUX1JFQURdO1xcbjExMTU6XFx0XFx0XFx0XFx0dG1wLmlvc1tCTEtHX0lPU1RBVF9XUklURV0gKz1cXG4xMTE2OlxcdFxcdFxcdFxcdFxcdGNwdV9ka3N0YXRzLVxcdTAwM2Vpb3NbU1RBVF9XUklURV07XFxuMTExNzpcXHRcXHRcXHRcXHR0bXAuaW9zW0JMS0dfSU9TVEFUX0RJU0NBUkRdICs9XFxuMTExODpcXHRcXHRcXHRcXHRcXHRjcHVfZGtzdGF0cy1cXHUwMDNlaW9zW1NUQVRfRElTQ0FSRF07XFxuMTExOTpcXHRcXHRcXHRcXHQvLyBjb252ZXJ0IHNlY3RvcnMgdG8gYnl0ZXNcXG4xMTIwOlxcdFxcdFxcdFxcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9SRUFEXSArPVxcbjExMjE6XFx0XFx0XFx0XFx0XFx0KHU2NCljcHVfZGtzdGF0cy1cXHUwMDNlc2VjdG9yc1tTVEFUX1JFQURdIFxcdTAwM2NcXHUwMDNjIFNFQ1RPUl9TSElGVDtcXG4xMTIyOlxcdFxcdFxcdFxcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9XUklURV0gKz1cXG4xMTIzOlxcdFxcdFxcdFxcdFxcdCh1NjQpY3B1X2Rrc3RhdHMtXFx1MDAzZXNlY3RvcnNbU1RBVF9XUklURV0gXFx1MDAzY1xcdTAwM2MgU0VDVE9SX1NISUZUO1xcbjExMjQ6XFx0XFx0XFx0XFx0dG1wLmJ5dGVzW0JMS0dfSU9TVEFUX0RJU0NBUkRdICs9XFxuMTEyNTpcXHRcXHRcXHRcXHRcXHQodTY0KWNwdV9ka3N0YXRzLVxcdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXFx1MDAzY1xcdTAwM2MgU0VDVE9SX1NISUZUO1xcbjExMjY6XFx0XFx0XFx0fVxcbjExMjc6XFx0XFxuMTEyODpcXHRcXHRcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2YmxrZy1cXHUwMDNlaW9zdGF0LnN5bmMpO1xcbjExMjk6XFx0XFx0XFx0YmxrZ19pb3N0YXRfc2V0KFxcdTAwMjZibGtnLVxcdTAwM2Vpb3N0YXQuY3VyLCBcXHUwMDI2dG1wKTtcXG4xMTMwOlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNmJsa2ctXFx1MDAzZWlvc3RhdC5zeW5jLCBmbGFncyk7XFxuMTEzMTpcXHRcXHR9XFxuMTEzMjpcXHRcXHRjbGFzc19kZXZfaXRlcl9leGl0KFxcdTAwMjZpdGVyKTtcXG4xMTMzOlxcdH1cXG4xMTM0OlxcdFxcbjExMzU6XFx0c3RhdGljIHZvaWQgYmxrY2dfcHJpbnRfb25lX3N0YXQoc3RydWN0IGJsa2NnX2dxICpibGtnLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXFxuMTEzNjpcXHR7XFxuMTEzNzpcXHRcXHRzdHJ1Y3QgYmxrZ19pb3N0YXRfc2V0ICpiaXMgPSBcXHUwMDI2YmxrZy1cXHUwMDNlaW9zdGF0O1xcbjExMzg6XFx0XFx0dTY0IHJieXRlcywgd2J5dGVzLCByaW9zLCB3aW9zLCBkYnl0ZXMsIGRpb3M7XFxuMTEzOTpcXHRcXHRjb25zdCBjaGFyICpkbmFtZTtcXG4xMTQwOlxcdFxcdHVuc2lnbmVkIHNlcTtcXG4xMTQxOlxcdFxcdGludCBpO1xcbjExNDI6XFx0XFxuMTE0MzpcXHRcXHRpZiAoIWJsa2ctXFx1MDAzZW9ubGluZSlcXG4xMTQ0OlxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MzUuNTgwOTc5NjU1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNjk3ODQxOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTZWN0b3ItdG8tQnl0ZSBDb252ZXJzaW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBkaWZmLCBpdCdzIHByZXR0eSBjbGVhciB3aGF0J3MgaGFwcGVuaW5nLiBXZSdyZSBkZWFsaW5nIHdpdGggY29udmVydGluZyBzZWN0b3IgY291bnRzIGZyb20gYGNwdV9ka3N0YXRzLVx1MDAzZXNlY3RvcnNgIHRvIGJ5dGUgY291bnRzIGZvciBJL08gc3RhdGlzdGljcy4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGRvaW5nIGEgbGVmdCBzaGlmdCBieSA5IGJpdHMgKGBcdTAwM2NcdTAwM2MgOWApLCB3aGljaCwgYXMgSSBzdXNwZWN0ZWQsIGNvdWxkIHBvdGVudGlhbGx5IGNhdXNlIGludGVnZXIgb3ZlcmZsb3csIGVzcGVjaWFsbHkgb24gMzItYml0IGFyY2hpdGVjdHVyZXMgd2hlbiB3b3JraW5nIHdpdGggYHVuc2lnbmVkIGxvbmdgIHNlY3RvciBjb3VudHMuIFRoZSBmaXggaW52b2x2ZXMgY2FzdGluZyB0byBgKHU2NClgIGFuZCB1c2luZyBgU0VDVE9SX1NISUZUYCwgd2hpY2ggaXMgYWxtb3N0IGNlcnRhaW5seSBkZWZpbmVkIGFzIDkgKG9yIHNvbWUgZXF1aXZhbGVudCBwb3dlci1vZi10d28sIHdoaWNoIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGRvIGl0KS4gVGhpcyBwcmV2ZW50cyB0cnVuY2F0aW9uIGFuZCBlbnN1cmVzIHRoZSBieXRlIGNvdW50IGNhbGN1bGF0aW9uIGlzIGFjY3VyYXRlLCBldmVuIHdpdGggbGFyZ2Ugc2VjdG9yIGNvdW50cy5cblxuTXkgbmV4dCB0aG91Z2h0IGlzIGFsd2F5cyB0byBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEkgc2VlIHRoYXQgYHN0cnVjdCBibGtnX2lvc3RhdCB0bXA7YCBpcyBleHBsaWNpdGx5IGNsZWFyZWQgd2l0aCBgbWVtc2V0YCBiZWZvcmUgdGhlIGFjY3VtdWxhdGlvbiBsb29wLiBGdXJ0aGVybW9yZSwgYGNwdV9ka3N0YXRzYCBsb29rcyB0byBiZSBkZXJpdmVkIGZyb20gcHJvcGVybHkgaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgYW5kIHRoZSB2YWx1ZSBpcyBhY2N1bXVsYXRlZCBpbnRvIHRoZSB0ZW1wb3JhcnkgYnVmZmVyLiBUaGVyZSBhcmUgbm8gZXhwb3NlZCBwb2ludGVycyB0byB1bmluaXRpYWxpemVkIGRhdGEsIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIG5ldyBhbGxvY2F0aW9uIGlzc3Vlcy4gVGhlIGRhdGEgaXMgb25seSBhY2N1bXVsYXRlZCBpbiBgdG1wYCBhbmQgY29waWVkIHRvIGBibGtnLVx1MDAzZWlvc3RhdC5jdXJgIHVzaW5nIGEgZnVuY3Rpb24sIGFuZCBpcyBzYWZlLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGlkZWEgdGhhdCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFyaXRobWV0aWMvdHlwZSBjYXN0aW5nIGNvcnJlY3Rpb24uXG5cblRoZXJlZm9yZSwgdGhlIEtNU0FOIHF1ZXN0aW9uIGlzIGVhc2lseSBhbnN3ZXJlZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgcmVhZCwgYWNjZXNzZWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEkndmUgcmV2aWV3ZWQgdGhlIGNvbW1vbiBzY2VuYXJpb3Mgd2hlcmUgS01TQU4gYmVjb21lcyByZWxldmFudCBhbmQgbm9uZSBvZiB0aG9zZSBhcmUgYXBwbGljYWJsZSBoZXJlLiBUaGUgYE5lZWRzS01TQU5gIGZsYWcgaXMgZGVmaW5pdGl2ZWx5IGZhbHNlLlxuXG5GaW5hbGx5LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoaXMgY2hhbmdlIGlzIHB1cmVseSBhYm91dCB0eXBlIHNhZmV0eSBhbmQgYXZvaWRzIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IGR1cmluZyB0aGUgc2VjdG9yLXRvLWJ5dGUgY29udmVyc2lvbi4gSSBhbSBwcmVwYXJlZCB0byAnc2V0LXJlc3VsdHMnLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjkzLCJPdXRwdXRUb2tlbnMiOjE4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjA4OjQwLjk1MDc2NTk1MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSBkdXJpbmcgc2VjdG9yLXRvLWJ5dGUgY29udmVyc2lvbiBpbiBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHMoKWAgYnkgY2FzdGluZyBgY3B1X2Rrc3RhdHMtXFx1MDAzZXNlY3RvcnNbLi4uXWAgdG8gYCh1NjQpYCBhbmQgdXNpbmcgYFNFQ1RPUl9TSElGVGAgaW5zdGVhZCBvZiBgOWAuIFxcblxcblRoZSBsb2NhbCBzdHJ1Y3R1cmUgYHN0cnVjdCBibGtnX2lvc3RhdCB0bXBgIGlzIGFscmVhZHkgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0KFxcdTAwMjZ0bXAsIDAsIHNpemVvZih0bXApKWAgYmVmb3JlIGFjY3VtdWxhdGluZyBzdGF0cywgYW5kIHRoZSBwZXItY3B1IHN0YXRzIHJlYWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGtlcm5lbCBjb3VudGVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBwYXRocyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgcHJlc2VudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgZHVyaW5nIHNlY3Rvci10by1ieXRlIGNvbnZlcnNpb24gaW4gYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKClgIGJ5IGNhc3RpbmcgYGNwdV9ka3N0YXRzLVxcdTAwM2VzZWN0b3JzWy4uLl1gIHRvIGAodTY0KWAgYW5kIHVzaW5nIGBTRUNUT1JfU0hJRlRgIGluc3RlYWQgb2YgYDlgLiBcXG5cXG5UaGUgbG9jYWwgc3RydWN0dXJlIGBzdHJ1Y3QgYmxrZ19pb3N0YXQgdG1wYCBpcyBhbHJlYWR5IGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldChcXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBhY2N1bXVsYXRpbmcgc3RhdHMsIGFuZCB0aGUgcGVyLWNwdSBzdGF0cyByZWFkIGFyZSBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgY291bnRlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciB1bmluaXRpYWxpemVkIGRhdGEgcGF0aHMgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHByZXNlbnQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh7dc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 16:24:38 +0000 UTC FinishedAt: 2026-09-05 17:08:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP" ], "series_id": "c0eb2ffe-1bcd-40ae-928a-548d4b9577c5" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blkcg_fill_root_iostats", "blkcg_print_stat" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtjZ19maWxsX3Jvb3RfaW9zdGF0cyYjMzQ7LAogICAgJiMzNDtibGtjZ19wcmludF9zdGF0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSBkdXJpbmcgc2VjdG9yLXRvLWJ5dGUgY29udmVyc2lvbiBpbiBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHMoKWAgYnkgY2FzdGluZyBgY3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1suLi5dYCB0byBgKHU2NClgIGFuZCB1c2luZyBgU0VDVE9SX1NISUZUYCBpbnN0ZWFkIG9mIGA5YC4gXG5cblRoZSBsb2NhbCBzdHJ1Y3R1cmUgYHN0cnVjdCBibGtnX2lvc3RhdCB0bXBgIGlzIGFscmVhZHkgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0KFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpYCBiZWZvcmUgYWNjdW11bGF0aW5nIHN0YXRzLCBhbmQgdGhlIHBlci1jcHUgc3RhdHMgcmVhZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIGNvdW50ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgdW5pbml0aWFsaXplZCBkYXRhIHBhdGhzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBwcmVzZW50IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJvb3QgY2dyb3VwIEkvTyBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uIGluIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBjYXN0IHBlci1jcHUgc2VjdG9yIGNvdW50cyB0byB1NjQgYW5kIHVzZSBTRUNUT1JfU0hJRlQgYmVmb3JlIGFjY3VtdWxhdGluZyBpbnRvIGJ5dGUgY291bnRlcnMuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBibG9jayBjZ3JvdXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKGUuZy4gcmVhZGluZyBpby5zdGF0IG9uIHRoZSByb290IGNncm91cCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYzg4ZWFmNTc0MTNkYjExNWIwNTAxY2FjMjVkOTViYjdmYmIwYjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNzowNzo0NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcbmluZGV4IDJiNWMyOTQzNGU0MjYuLjQ3MWNmZDIzNDdjOWUgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuQEAgLTExMTgsMTEgJiM0MzsxMTE4LDExIEBAIHN0YXRpYyB2b2lkIGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKHZvaWQpXG4gXHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2Vpb3NbU1RBVF9ESVNDQVJEXTtcbiBcdFx0XHQvLyBjb252ZXJ0IHNlY3RvcnMgdG8gYnl0ZXNcbiBcdFx0XHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfUkVBRF0gJiM0Mzs9XG4tXHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfUkVBRF0gXHUwMDNjXHUwMDNjIDk7XG4mIzQzO1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfUkVBRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbiBcdFx0XHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICYjNDM7PVxuLVx0XHRcdFx0Y3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX1dSSVRFXSBcdTAwM2NcdTAwM2MgOTtcbiYjNDM7XHRcdFx0XHQodTY0KWNwdV9ka3N0YXRzLVx1MDAzZXNlY3RvcnNbU1RBVF9XUklURV0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbiBcdFx0XHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfRElTQ0FSRF0gJiM0Mzs9XG4tXHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXHUwMDNjXHUwMDNjIDk7XG4mIzQzO1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbiBcdFx0fVxuIFxuIFx0XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZibGtnLVx1MDAzZWlvc3RhdC5zeW5jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrY2dfZmlsbF9yb290X2lvc3RhdHMmIzM0OywKICAgICYjMzQ7YmxrY2dfcHJpbnRfc3RhdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByb290IGNncm91cCBJL08gc3RhdGlzdGljcyBjYWxjdWxhdGlvbiBpbiBibG9jay9ibGstY2dyb3VwLmMgdG8gY2FzdCBwZXItY3B1IHNlY3RvciBjb3VudHMgdG8gdTY0IGFuZCB1c2UgU0VDVE9SX1NISUZUIGJlZm9yZSBhY2N1bXVsYXRpbmcgaW50byBieXRlIGNvdW50ZXJzLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgYmxvY2sgY2dyb3VwIHN0YXRpc3RpY3MgcmVwb3J0aW5nIChlLmcuIHJlYWRpbmcgaW8uc3RhdCBvbiB0aGUgcm9vdCBjZ3JvdXApLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGM4OGVhZjU3NDEzZGIxMTViMDUwMWNhYzI1ZDk1YmI3ZmJiMGI4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTc6MDc6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmMKaW5kZXggMmI1YzI5NDM0ZTQyNi4uNDcxY2ZkMjM0N2M5ZSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1jZ3JvdXAuYwpAQCAtMTExOCwxMSAmIzQzOzExMTgsMTEgQEAgc3RhdGljIHZvaWQgYmxrY2dfZmlsbF9yb290X2lvc3RhdHModm9pZCkKIAkJCQljcHVfZGtzdGF0cy0mZ3Q7aW9zW1NUQVRfRElTQ0FSRF07CiAJCQkvLyBjb252ZXJ0IHNlY3RvcnMgdG8gYnl0ZXMKIAkJCXRtcC5ieXRlc1tCTEtHX0lPU1RBVF9SRUFEXSAmIzQzOz0KLQkJCQljcHVfZGtzdGF0cy0mZ3Q7c2VjdG9yc1tTVEFUX1JFQURdICZsdDsmbHQ7IDk7CiYjNDM7CQkJCSh1NjQpY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNbU1RBVF9SRUFEXSAmbHQ7Jmx0OyBTRUNUT1JfU0hJRlQ7CiAJCQl0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICYjNDM7PQotCQkJCWNwdV9ka3N0YXRzLSZndDtzZWN0b3JzW1NUQVRfV1JJVEVdICZsdDsmbHQ7IDk7CiYjNDM7CQkJCSh1NjQpY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNbU1RBVF9XUklURV0gJmx0OyZsdDsgU0VDVE9SX1NISUZUOwogCQkJdG1wLmJ5dGVzW0JMS0dfSU9TVEFUX0RJU0NBUkRdICYjNDM7PQotCQkJCWNwdV9ka3N0YXRzLSZndDtzZWN0b3JzW1NUQVRfRElTQ0FSRF0gJmx0OyZsdDsgOTsKJiM0MzsJCQkJKHU2NCljcHVfZGtzdGF0cy0mZ3Q7c2VjdG9yc1tTVEFUX0RJU0NBUkRdICZsdDsmbHQ7IFNFQ1RPUl9TSElGVDsKIAkJfQogCiAJCWZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKCZhbXA7YmxrZy0mZ3Q7aW9zdGF0LnN5bmMpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJsb2NrIEkvTyBDZ3JvdXAgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSB0aGUgY29kZSBtb2RpZmljYXRpb24gd2l0aGluIGBibG9jay9ibGstY2dyb3VwLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gdGhlIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3NpbmcgYW4gaXNzdWUgcmVsYXRlZCB0byBJL08gc3RhdGlzdGljcywgc3BlY2lmaWNhbGx5IHRoZSBjb252ZXJzaW9uIG9mIHNlY3RvcnMgdG8gYnl0ZXMuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBhIGxlZnQgYml0IHNoaWZ0IGJ5IDkgKGAmbHQ7Jmx0OyA5YCkgdG8gY29udmVydCBzZWN0b3JzIHRvIGJ5dGVzLCBhbmQgbm93IHdlIGFyZSB1c2luZyBhIGJpdCBzaGlmdCB3aXRoIGBTRUNUT1JfU0hJRlRgLgoKVGhlIHJlbGV2YW50IGNvZGUgc25pcHBldCBsb29rcyBsaWtlIHRoaXM6CgpgYGBjCgkJCS8vIGNvbnZlcnQgc2VjdG9ycyB0byBieXRlcwoJCQl0bXAuYnl0ZXNbQkxLR19JT1NUQVRfUkVBRF0gJiM0Mzs9Ci0JCQkJY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNbU1RBVF9SRUFEXSAmbHQ7Jmx0OyA5OwomIzQzOwkJCQkodTY0KWNwdV9ka3N0YXRzLSZndDtzZWN0b3JzW1NUQVRfUkVBRF0gJmx0OyZsdDsgU0VDVE9SX1NISUZUOwoJCQl0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICYjNDM7PQotCQkJCWNwdV9ka3N0YXRzLSZndDtzZWN0b3JzW1NUQVRfV1JJVEVdICZsdDsmbHQ7IDk7CiYjNDM7CQkJCSh1NjQpY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNbU1RBVF9XUklURV0gJmx0OyZsdDsgU0VDVE9SX1NISUZUOwoJCQl0bXAuYnl0ZXNbQkxLR19JT1NUQVRfRElTQ0FSRF0gJiM0Mzs9Ci0JCQkJY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNbU1RBVF9ESVNDQVJEXSAmbHQ7Jmx0OyA5OwomIzQzOwkJCQkodTY0KWNwdV9ka3N0YXRzLSZndDtzZWN0b3JzW1NUQVRfRElTQ0FSRF0gJmx0OyZsdDsgU0VDVE9SX1NISUZUOwpgYGAKClRoaXMgaXMgZGVmaW5pdGVseSB0aGUgcGFydCBvZiB0aGUgY29kZSB0aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQuIFRoZSBjYXN0IHRvIGAodTY0KWAgaW5kaWNhdGVzIGEgcG90ZW50aWFsIG92ZXJmbG93IG9yIGRhdGEtd2lkdGggY29uY2VybiB0aGF0JiMzOTtzIGJlaW5nIGFkZHJlc3NlZCBhcyB3ZWxsLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0OgoKKiAgIEhvdyBpcyBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHNgIGFjdHVhbGx5IGNhbGxlZD8gV2hhdCB0cmlnZ2VycyBpdHMgZXhlY3V0aW9uPwoqICAgQXJlIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgY29uZGl0aW9ucyB0aGF0IGd1YXJkIGl0cyBleGVjdXRpb24/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPwoKSSYjMzk7bGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uIG9mIGBibG9jay9ibGstY2dyb3VwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTExOCwgdG8gZ2V0IHRoYXQgc3Vycm91bmRpbmcgY29udGV4dC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNoYW5nZSBhbmQgYW55IGltcGxpY2F0aW9ucyBpdCBtaWdodCBoYXZlIHdpdGhpbiB0aGUgYmxvY2sgSS9PIGNncm91cCBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIGZvcm0gYSBtb3JlIGNvbXBsZXRlIGFzc2Vzc21lbnQgb2YgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTAwOlx0XHRjbGFzc19kZXZfaXRlcl9pbml0KFx1MDAyNml0ZXIsIFx1MDAyNmJsb2NrX2NsYXNzLCBOVUxMLCBcdTAwMjZkaXNrX3R5cGUpO1xuMTEwMTpcdFx0d2hpbGUgKChkZXYgPSBjbGFzc19kZXZfaXRlcl9uZXh0KFx1MDAyNml0ZXIpKSkge1xuMTEwMjpcdFx0XHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gZGV2X3RvX2JkZXYoZGV2KTtcbjExMDM6XHRcdFx0c3RydWN0IGJsa2NnX2dxICpibGtnID0gYmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZXF1ZXVlLVx1MDAzZXJvb3RfYmxrZztcbjExMDQ6XHRcdFx0c3RydWN0IGJsa2dfaW9zdGF0IHRtcDtcbjExMDU6XHRcdFx0aW50IGNwdTtcbjExMDY6XHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjExMDc6XHRcbjExMDg6XHRcdFx0bWVtc2V0KFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpO1xuMTEwOTpcdFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4xMTEwOlx0XHRcdFx0c3RydWN0IGRpc2tfc3RhdHMgKmNwdV9ka3N0YXRzO1xuMTExMTpcdFxuMTExMjpcdFx0XHRcdGNwdV9ka3N0YXRzID0gcGVyX2NwdV9wdHIoYmRldi1cdTAwM2ViZF9zdGF0cywgY3B1KTtcbjExMTM6XHRcdFx0XHR0bXAuaW9zW0JMS0dfSU9TVEFUX1JFQURdICYjNDM7PVxuMTExNDpcdFx0XHRcdFx0Y3B1X2Rrc3RhdHMtXHUwMDNlaW9zW1NUQVRfUkVBRF07XG4xMTE1Olx0XHRcdFx0dG1wLmlvc1tCTEtHX0lPU1RBVF9XUklURV0gJiM0Mzs9XG4xMTE2Olx0XHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2Vpb3NbU1RBVF9XUklURV07XG4xMTE3Olx0XHRcdFx0dG1wLmlvc1tCTEtHX0lPU1RBVF9ESVNDQVJEXSAmIzQzOz1cbjExMTg6XHRcdFx0XHRcdGNwdV9ka3N0YXRzLVx1MDAzZWlvc1tTVEFUX0RJU0NBUkRdO1xuMTExOTpcdFx0XHRcdC8vIGNvbnZlcnQgc2VjdG9ycyB0byBieXRlc1xuMTEyMDpcdFx0XHRcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9SRUFEXSAmIzQzOz1cbjExMjE6XHRcdFx0XHRcdCh1NjQpY3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX1JFQURdIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQ7XG4xMTIyOlx0XHRcdFx0dG1wLmJ5dGVzW0JMS0dfSU9TVEFUX1dSSVRFXSAmIzQzOz1cbjExMjM6XHRcdFx0XHRcdCh1NjQpY3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX1dSSVRFXSBcdTAwM2NcdTAwM2MgU0VDVE9SX1NISUZUO1xuMTEyNDpcdFx0XHRcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9ESVNDQVJEXSAmIzQzOz1cbjExMjU6XHRcdFx0XHRcdCh1NjQpY3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX0RJU0NBUkRdIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQ7XG4xMTI2Olx0XHRcdH1cbjExMjc6XHRcbjExMjg6XHRcdFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2YmxrZy1cdTAwM2Vpb3N0YXQuc3luYyk7XG4xMTI5Olx0XHRcdGJsa2dfaW9zdGF0X3NldChcdTAwMjZibGtnLVx1MDAzZWlvc3RhdC5jdXIsIFx1MDAyNnRtcCk7XG4xMTMwOlx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXHUwMDI2YmxrZy1cdTAwM2Vpb3N0YXQuc3luYywgZmxhZ3MpO1xuMTEzMTpcdFx0fVxuMTEzMjpcdFx0Y2xhc3NfZGV2X2l0ZXJfZXhpdChcdTAwMjZpdGVyKTtcbjExMzM6XHR9XG4xMTM0Olx0XG4xMTM1Olx0c3RhdGljIHZvaWQgYmxrY2dfcHJpbnRfb25lX3N0YXQoc3RydWN0IGJsa2NnX2dxICpibGtnLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXG4xMTM2Olx0e1xuMTEzNzpcdFx0c3RydWN0IGJsa2dfaW9zdGF0X3NldCAqYmlzID0gXHUwMDI2YmxrZy1cdTAwM2Vpb3N0YXQ7XG4xMTM4Olx0XHR1NjQgcmJ5dGVzLCB3Ynl0ZXMsIHJpb3MsIHdpb3MsIGRieXRlcywgZGlvcztcbjExMzk6XHRcdGNvbnN0IGNoYXIgKmRuYW1lO1xuMTE0MDpcdFx0dW5zaWduZWQgc2VxO1xuMTE0MTpcdFx0aW50IGk7XG4xMTQyOlx0XG4xMTQzOlx0XHRpZiAoIWJsa2ctXHUwMDNlb25saW5lKVxuMTE0NDpcdFx0XHRyZXR1cm47XG4xMTQ1Olx0XG4xMTQ2Olx0XHRkbmFtZSA9IGJsa2dfZGV2X25hbWUoYmxrZyk7XG4xMTQ3Olx0XHRpZiAoIWRuYW1lKVxuMTE0ODpcdFx0XHRyZXR1cm47XG4xMTQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHNgIENhbGwgU2l0ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgcmVsYXRlZCB0byBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHNgLiBUaW1lIHRvIHRyYWNlIGl0cyBjYWxsIGdyYXBoLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBiYXNpYyBncmVwLCBvciBtYXliZSB1c2UgY3Njb3BlIG9yIGN0YWdzIGlmIEkmIzM5O20gZmVlbGluZyBmYW5jeS4gSSB3YW50IHRvIHF1aWNrbHkgaWRlbnRpZnkgZXZlcnkgZnVuY3Rpb24gdGhhdCAqZGlyZWN0bHkqIGNhbGxzIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AuIFVuZGVyc3RhbmRpbmcgdGhlIGltbWVkaWF0ZSBjYWxsZXJzIGlzIHRoZSBmaXJzdCBzdGVwLiBUaGVuLCBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIEkgbWlnaHQgbmVlZCB0byBtb3ZlIHVwIHRoZSBjYWxsIHN0YWNrLCBleHBsb3JpbmcgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIHRob3NlIGNhbGxlcnMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCDigJMgdGhlIGFyZ3VtZW50cyBwYXNzZWQsIHRoZSBjb25kaXRpb25hbCBleGVjdXRpb24gcGF0aHMsIGFuZCBhbnkgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW52b2x2ZWQuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIGdpdmVuIHRoYXQgdGhpcyBkZWFscyB3aXRoIEkvTyBzdGF0aXN0aWNzIGF0IHRoZSByb290IGxldmVsIG9mIGJsb2NrIEkvTyBjb250cm9sIGdyb3Vwcy4gVGhpcyB3aWxsIHByb2JhYmx5IHByb3ZpZGUgaW5zaWdodHMgaW50byB3aGF0IGNvZGUgcGF0aHMgYXJlIHJlbGV2YW50IHRvIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBvciBpZiB0aGVyZSYjMzk7cyBhbnkgYXJlYSB0aGF0JiMzOTtzIHdvcnRoIHR1bmluZy4gSSYjMzk7bSBrZWVuIHRvIGF2b2lkIGdldHRpbmcgbG9zdCBpbiBhIG1hemUgb2YgaW5kaXJlY3QgY2FsbHMgYW5kIG1hY3Jvcywgc28gSSYjMzk7bGwgdHJ5IHRvIGtlZXAgdGhlIGZvY3VzIG5hcnJvdywgYXQgbGVhc3QgaW5pdGlhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jZ3JvdXAuYz0xMDc2PXN0YXRpYyB2b2lkIGJsa2NnX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTEwOTQtICovXG5ibG9jay9ibGstY2dyb3VwLmM6MTA5NTpzdGF0aWMgdm9pZCBibGtjZ19maWxsX3Jvb3RfaW9zdGF0cyh2b2lkKVxuYmxvY2svYmxrLWNncm91cC5jLTEwOTYte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz0xMTg3PXN0YXRpYyBpbnQgYmxrY2dfcHJpbnRfc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMTkyLVx0aWYgKCFzZXFfY3NzKHNmKS1cdTAwM2VwYXJlbnQpXG5ibG9jay9ibGstY2dyb3VwLmM6MTE5MzpcdFx0YmxrY2dfZmlsbF9yb290X2lvc3RhdHMoKTtcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMTk0LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBCbGstQ2dyb3VwIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBibGstY2dyb3VwLmNgIGJ1c2luZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgY29uZmlndXJlZCwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoZSBgYmxvY2svYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgYnVpbGQgc3lzdGVtIHRpZXMgdGhpbmdzIHRvZ2V0aGVyLiBNeSBnb2FsIGlzIHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgd2hldGhlciB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUgZ2V0cyBjb21waWxlZCBhbmQgaW5jbHVkZWQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaXMga2V5IHRvIGdyYXNwaW5nIGhvdyB0aGlzIGJsay1jZ3JvdXAgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIG9yIGRpc2FibGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHJlZmVyZW5jZXMgdG8gY29uZmlndXJhdGlvbiBzeW1ib2xzIHJlbGF0ZWQgdG8gYmxvY2sgSS9PIGNvbnRyb2wgZ3JvdXBzLCBhbmQgdGhlbiBJIGNhbiBkZWx2ZSBpbnRvIHRoZSBkZWZpbml0aW9ucyBvZiB0aG9zZSBzeW1ib2xzIHRvIGRldGVybWluZSB0aGVpciBtZWFuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsay1jZ3JvdXBcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL01ha2VmaWxlPTE4PW9iai0kKENPTkZJR19CTEtfREVWX0JTR0xJQilcdCYjNDM7PSBic2ctbGliLm9cbmJsb2NrL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19CTEtfQ0dST1VQKVx0JiM0Mzs9IGJsay1jZ3JvdXAub1xuYmxvY2svTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX0JMS19DR1JPVVBfUldTVEFUKVx0JiM0Mzs9IGJsay1jZ3JvdXAtcndzdGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjIzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKktjb25maWcgRGl2ZSBmb3IgQkxLX0NHUk9VUCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgQkxLX0NHUk9VUGAgaXMgZGVmaW5lZC4gS25vd2luZyB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbSwgbXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgc28gYSBLY29uZmlnIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBHaXZlbiBpdCYjMzk7cyByZWxhdGVkIHRvIGJsb2NrIGRldmljZXMsIGBibG9jay9LY29uZmlnYCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbG9jYXRpb24uIExldCYjMzk7cyBoZWFkIG92ZXIgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIEhvcGVmdWxseSBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQsIGFuZCBJIGNhbiBxdWlja2x5IGdyYXNwIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHB1cnBvc2UgZnJvbSB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfQ0dST1VQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXG4tLVxuYmxvY2svS2NvbmZpZy00MS1cbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXG5ibG9jay9LY29uZmlnLTQzLVx0Ym9vbFxuYmxvY2svS2NvbmZpZy00NC1cbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cbmJsb2NrL0tjb25maWctNDYtXHRib29sXG4tLVxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcbi0tXG5ibG9jay9LY29uZmlnLTEzMy1cbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxuYmxvY2svS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNDQtXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuYmxvY2svS2NvbmZpZy0xNDYtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNTMtXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcbmJsb2NrL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTYzLVxuYmxvY2svS2NvbmZpZzoxNjQ6Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXG5ibG9jay9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7Q2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYGNvbmZpZyBCTEtfQ0dST1VQYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgY29uZmlnIEJMS19DR1JPVVBgIHdpdGhpbiB0aGlzIHdob2xlIGNvZGViYXNlLCByaWdodD8gVGhpcyBtZWFucyBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIEtjb25maWcgZmlsZXMsIG9yIHBvdGVudGlhbGx5IGdlbmVyYXRlZCBoZWFkZXIgZmlsZXMgaWYgaXQmIzM5O3MgYmVpbmcgdXNlZCBjb25kaXRpb25hbGx5LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBydW4gYSBzZWFyY2ggYWNyb3NzIHRoZSBlbnRpcmUgcHJvamVjdCBzdHJ1Y3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIHRoZSByaWdodCB0b29sIGZvciB0aGUgam9iLiBgZ3JlcGAgd2l0aCB0aGUgYC1SYCBmbGFnIChvciBgZmluZGAgYW5kIGBncmVwYCB0b2dldGhlciBmb3IgbW9yZSBjb250cm9sKSBpcyBwcm9iYWJseSBteSBiZXN0IGJldCBoZXJlLiBJIHNob3VsZCBrZWVwIGluIG1pbmQgdGhhdCBJIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCB2YXJpYXRpb25zIG9mIHRoZSBuYW1lIChlLmcuLCBgI2RlZmluZSBCTEtfQ0dST1VQYCwgb3IgaW4gS2NvbmZpZyBzb21ldGhpbmcgbGlrZSBgY29uZmlnIEJMS19DR1JPVVBgKS4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29uc2lkZXIgYW55IHBvdGVudGlhbCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gQmFzZWQgb24gd2hlcmUgSSBmaW5kIHRoZSBkZWZpbml0aW9uIEkgY2FuIHRoZW4gbG9vayBhdCB3aGljaCBjb2RlIHNlY3Rpb25zIGFyZSBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVAkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMTA4PWNvbmZpZyBNRU1DR19WMVxuLS1cbmluaXQvS2NvbmZpZy0xMTI0LVxuaW5pdC9LY29uZmlnOjExMjU6Y29uZmlnIEJMS19DR1JPVVBcbmluaXQvS2NvbmZpZy0xMTI2LVx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIERpdmUqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIHRoaXMuIFRoZSBwcm9ibGVtIHNtZWxscyBsaWtlIGl0IGNvdWxkIGJlIGNvbmZpZ3VyYXRpb24tcmVsYXRlZCwgc28gbGV0JiMzOTtzIGp1bXAgcmlnaHQgaW50byBgaW5pdC9LY29uZmlnYC4gTGluZSAxMTI1Li4ucmlnaHQgYXJvdW5kIHRoZXJlIHNob3VsZCBwcm92aWRlIHNvbWUgY2x1ZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBkZWZpbml0aW9uLCBwb3NzaWJseSBhIGJvb2xlYW4gb3IgdHJpc3RhdGUsIHRoYXQgZ292ZXJucyBzb21lIGFzcGVjdCBvZiBpbml0aWFsaXphdGlvbiBvciBlYXJseSBib290IGJlaGF2aW9yLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgcG90ZW50aWFsbHkgYW55IHN5bWJvbHMgaXQgZGVwZW5kcyBvbiB0aGF0IG1pZ2h0IGJlIHRoZSBzb3VyY2Ugb2Ygb3VyIGlzc3VlLiBJJiMzOTtsbCBuZWVkIHRvIHJhcGlkbHkgcGFyc2UgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhhdCBsaW5lIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIHB1cnBvc2UgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyBhdCBwbGF5LiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aG9zZSBkZXBlbmRlbmNpZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTIwOlx0XHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcbjExMjE6XHRcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxuMTEyMjpcdFxuMTEyMzpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMTI0Olx0XG4xMTI1Olx0Y29uZmlnIEJMS19DR1JPVVBcbjExMjY6XHRcdGJvb2wgXCYjMzQ7SU8gY29udHJvbGxlclwmIzM0O1xuMTEyNzpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuMTEyODpcdFx0ZGVmYXVsdCBuXG4xMTI5Olx0XHRoZWxwXG4xMTMwOlx0XHRHZW5lcmljIGJsb2NrIElPIGNvbnRyb2xsZXIgY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyB0aGUgY29tbW9uXG4xMTMxOlx0XHRjZ3JvdXAgaW50ZXJmYWNlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHZhcmlvdXMgSU8gY29udHJvbGxpbmdcbjExMzI6XHRcdHBvbGljaWVzLlxuMTEzMzpcdFxuMTEzNDpcdFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxuMTEzNTpcdFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxuMTEzNjpcdFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXG4xMTM3Olx0XHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXG4xMTM4Olx0XG4xMTM5Olx0XHRUaGlzIG9wdGlvbiBvbmx5IGVuYWJsZXMgZ2VuZXJpYyBCbG9jayBJTyBjb250cm9sbGVyIGluZnJhc3RydWN0dXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDMyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEaXNrIFN0YXRzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgYmxvY2svYmxrLWNncm91cC5jYCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHNgIGZ1bmN0aW9uLiBUaGUga2V5IGlzc3VlIGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSBgY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNgIGZpZWxkLiBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgbGlrZSB0aGlzIGJlZm9yZS4gVGhlIGxpbmUgaW4gcXVlc3Rpb24gc2VlbXMgdG8gYmUgdXNpbmcgYSBsZWZ0IGJpdHdpc2Ugc2hpZnQgb2YgYCZsdDsmbHQ7IDlgIGJ1dCB3aXRob3V0IGEgY2FzdCB0byBhIDY0LWJpdCBpbnRlZ2VyLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBzZXRzIG9mZiBhbGFybSBiZWxscy4gVGhpcyBsb29rcyBsaWtlIGEgY2xhc3NpYyBwb3RlbnRpYWwgb3ZlcmZsb3cgYnVnLCBkZXBlbmRpbmcgb24gdGhlIGRhdGEgdHlwZSBvZiBgY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNgLiBJdCYjMzk7cyBsaWtlbHkgYHVuc2lnbmVkIGxvbmdgIG9yIGB1bnNpZ25lZCBpbnRgLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlZmluaXRpb24gd2l0aGluIHRoZSBgc3RydWN0IGRpc2tfc3RhdHNgLiBMZXQmIzM5O3MgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgc3RydWN0IHRvIGJlIHN1cmUuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIGtlcm5lbCBjb2RlIHNob3VsZCBjbGVhciB1cCB0aGUgc3BlY2lmaWMgZGF0YSB0eXBlIGFuZCBjb25maXJtIG15IGluaXRpYWwgaHlwb3RoZXNpcy4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGV4YWN0IHByb2JsZW0gYW5kIHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZGlza19zdGF0cyBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYXJ0X3N0YXQuaC03LVxuaW5jbHVkZS9saW51eC9wYXJ0X3N0YXQuaDo4OnN0cnVjdCBkaXNrX3N0YXRzIHtcbmluY2x1ZGUvbGludXgvcGFydF9zdGF0LmgtOS1cdHU2NCBuc2Vjc1tOUl9TVEFUX0dST1VQU107XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBwYXJ0X3N0YXQuaGAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgaW5jbHVkZS9saW51eC9wYXJ0X3N0YXQuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4LiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGJlIHNlZWluZyBkZWZpbml0aW9ucyBmb3IgdGhlIHN0YXRpc3RpY3MgbWFpbnRhaW5lZCBieSB0aGUgcGFydGl0aW9uIGxheWVyLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJlcyBjb250YWluaW5nIGNvdW50ZXJzIGZvciBJL08gb3BlcmF0aW9ucywgdGltaW5ncywgYW5kIHBlcmhhcHMgZXJyb3IgdHJhY2tpbmcuIEkmIzM5O20gcmVhbGx5IGtlZW4gb24gaG93IHRoZXNlIGFyZSBsYWlkIG91dCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IG5vdGV3b3J0aHkgb3B0aW1pemF0aW9ucyAob3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzKSBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMuIFRoaXMgZmlsZSBpcyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCB0cmFja3MgYW5kIGV4cG9zZXMgcGFydGl0aW9uLWxldmVsIHBlcmZvcm1hbmNlIG1ldHJpY3MsIHNvIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFydF9zdGF0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuICAgMjpcdCNpZm5kZWYgX0xJTlVYX1BBUlRfU1RBVF9IXG4gICAzOlx0I2RlZmluZSBfTElOVVhfUEFSVF9TVEFUX0hcbiAgIDQ6XHRcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtkZXYuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2FzbS9sb2NhbC5oXHUwMDNlXG4gICA3Olx0XG4gICA4Olx0c3RydWN0IGRpc2tfc3RhdHMge1xuICAgOTpcdFx0dTY0IG5zZWNzW05SX1NUQVRfR1JPVVBTXTtcbiAgMTA6XHRcdHVuc2lnbmVkIGxvbmcgc2VjdG9yc1tOUl9TVEFUX0dST1VQU107XG4gIDExOlx0XHR1bnNpZ25lZCBsb25nIGlvc1tOUl9TVEFUX0dST1VQU107XG4gIDEyOlx0XHR1bnNpZ25lZCBsb25nIG1lcmdlc1tOUl9TVEFUX0dST1VQU107XG4gIDEzOlx0XHR1bnNpZ25lZCBsb25nIGlvX3RpY2tzO1xuICAxNDpcdFx0bG9jYWxfdCBpbl9mbGlnaHRbMl07XG4gIDE1Olx0fTtcbiAgMTY6XHRcbiAgMTc6XHQvKlxuICAxODpcdCAqIE1hY3JvcyB0byBvcGVyYXRlIG9uIHBlcmNwdSBkaXNrIHN0YXRpc3RpY3M6XG4gIDE5Olx0ICpcbiAgMjA6XHQgKiBwYXJ0X3N0YXRfe2FkZHxzdWJ8aW5jfGRlY30oKSBtb2RpZnkgdGhlIHN0YXQgY291bnRlcnMgYW5kIHNob3VsZFxuICAyMTpcdCAqIGJlIGNhbGxlZCBiZXR3ZWVuIHBhcnRfc3RhdF9sb2NrKCkgYW5kIHBhcnRfc3RhdF91bmxvY2soKS5cbiAgMjI6XHQgKlxuICAyMzpcdCAqIHBhcnRfc3RhdF9yZWFkKCkgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZS5cbiAgMjQ6XHQgKi9cbiAgMjU6XHQjZGVmaW5lIHBhcnRfc3RhdF9sb2NrKClcdHByZWVtcHRfZGlzYWJsZSgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0OTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyBhYm91dCBpdHMgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nLiBUaGUgY3J1eCBvZiBpdCBzZWVtcyB0byBiZSBwcmV2ZW50aW5nIGFuIGludGVnZXIgb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyBkaXNrIEkvTyBzdGF0aXN0aWNzIG9uIDMyLWJpdCBzeXN0ZW1zLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjcHVfZGtzdGF0cy0mZ3Q7c2VjdG9yc1suLi5dICZsdDsmbHQ7IDlgLiBUaGUgc2hpZnQgY291bGQgY2F1c2UgYW4gb3ZlcmZsb3cgYXQgYSBmYWlybHkgY29tbW9uIGRpc2sgc2l6ZSwgYW5kIGNhc3RpbmcgdG8gYCh1NjQpYCBpcyB0aGUgZml4LiBUaGV5JiMzOTt2ZSBhbHNvIGNsZWFuZWQgaXQgdXAgYnkgcmVwbGFjaW5nIHRoZSBtYWdpYyBudW1iZXIgOSB3aXRoIGBTRUNUT1JfU0hJRlRgLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyAqcmVhY2hhYmxlKiBjb2RlPyBBbmQgdGhlIGFuc3dlciwgdGhhbmtmdWxseSwgaXMgeWVzISBJdCBsb29rcyBsaWtlIGBibGtjZ19wcmludF9zdGF0YCBpcyBjYWxsZWQgd2hlbiByZWFkaW5nIGBpby5zdGF0YCBvciBgYmxrY2dgIGZpbGVzIHdpdGhpbiBjZ3JvdXBzLiBUaGlzIGhhcHBlbnMgaW4gYm90aCBjZ3JvdXAgdjEgYW5kIHYyLCBwYXJ0aWN1bGFybHkgd2hlbiByZWFkaW5nIHRoZSByb290IGNncm91cCYjMzk7cyBgaW8uc3RhdGAuIFRoYXQgcGF0aCB0YWtlcyB1cyB0aHJvdWdoIHRoZSBibG9jayBjZ3JvdXAgc3Vic3lzdGVtLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgaW4gY29yZSBrZXJuZWwgdGVycml0b3J54oCUYmxvY2sgbGF5ZXIgYW5kIGNncm91cHMuIFRoYXTigJlzIGEgcG9zaXRpdmUgaW5kaWNhdG9yIGZvciBmdXp6aW5nLgoKTm93LCBkb2VzIGl0IG1lZXQgdGhlIGZ1enppbmcgY3JpdGVyaWE/ICBXZSYjMzk7cmUgZGVhbGluZyB3aXRoICYjMzQ7Y29yZSBzdWJzeXN0ZW1zJiMzNDsg4oCTIHNwZWNpZmljYWxseSwgdGhlIGJsb2NrIGxheWVyIGFuZCBjZ3JvdXBzLCB3aGljaCBhcmUga2V5IHBhcnRzIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgcmVzb3VyY2VzLiBXZSYjMzk7cmUgYWxzbyByZXN0cnVjdHVyaW5nIGRhdGEgc3RydWN0dXJlcyB0byBwcmV2ZW50IG92ZXJmbG93LCB3aGljaCBmaXRzIHRoZWlyIGRlZmluaXRpb24gb2YgcmVmYWN0b3JpbmcgYW5kIGNvZGUgY2xlYW51cC4gU28geWVzLCB0aGlzIHBhc3NlcyB0aGF0IHRlc3QuCgpDYW4gd2UgcmVhY2ggdGhpcyBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBsaWtlIHRoZSBvbmVzIHVzZWQgYnkgU3l6a2FsbGVyPyBZZXMhIENncm91cHMgYW5kIGJsb2NrIGRldmljZXMgKGxvb3BiYWNrLCBudWxsX2JsaywgdmlydGlvX2JsaywgcmFtZGlzaywgZXRjLikgYXJlIGFsbCBjb21tb24uICBSZWFkaW5nIGAvc3lzL2ZzL2Nncm91cC9pby5zdGF0YCBkaXJlY3RseSBpbnZva2VzIHRoZSBmdW5jdGlvbnMgd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4sIGBibGtjZ19wcmludF9zdGF0YCBhbmQgYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzYCwgd2hpY2ggaXMgZ3JlYXQuCgpUaGUgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXI6IGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AgYW5kIGBibGtjZ19wcmludF9zdGF0YC4KClJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCB3ZSYjMzk7bGwgbmVlZCBgQkxLX0NHUk9VUGAsIHdoaWNoLCB0aGFua2Z1bGx5LCBkZXBlbmRzIG9uIGBCTE9DS2AuIGBCTE9DS2AgaXMgcHJldHR5IHN0YW5kYXJkLiBJJiMzOTtsbCBkb3VibGUgY2hlY2sgYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzYCBpbiBgYmxvY2svYmxrLWNncm91cC5jYCBqdXN0IHRvIGJlIHN1cmUsIGJ1dCBpdCBzZWVtcyB0aGF0IGBCTEtfQ0dST1VQYCBzaG91bGQgYmUgc3VmZmljaWVudC4gSSB0aGluayB0aGlzIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtjZ19maWxsX3Jvb3RfaW9zdGF0cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmM9MTA3Nj1zdGF0aWMgdm9pZCBibGtjZ19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMDk0LSAqL1xuYmxvY2svYmxrLWNncm91cC5jOjEwOTU6c3RhdGljIHZvaWQgYmxrY2dfZmlsbF9yb290X2lvc3RhdHModm9pZClcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMDk2LXtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTE4Nz1zdGF0aWMgaW50IGJsa2NnX3ByaW50X3N0YXQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTE5Mi1cdGlmICghc2VxX2NzcyhzZiktXHUwMDNlcGFyZW50KVxuYmxvY2svYmxrLWNncm91cC5jOjExOTM6XHRcdGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKCk7XG5ibG9jay9ibGstY2dyb3VwLmMtMTE5NC1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI3NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdDoKCioqSW5zcGVjdGluZyB0aGUgQmxvY2sgSS9PIENncm91cCBTdGF0aXN0aWNzIEhvb2sqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNvbm5lY3Rpb25zIGJldHdlZW4gYGJsa2NnX3ByaW50X3N0YXRgIGFuZCB0aGUgY2Z0eXBlIGZpbGVzIHdpdGhpbiB0aGUgYGJsb2NrL2Jsay1jZ3JvdXAuY2Agc291cmNlIGZpbGUuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgYW5kIGZpZ3VyZSBvdXQgKmhvdyogdGhlIGJsb2NrIEkvTyBjZ3JvdXAgc3RhdGlzdGljcyBhcmUgYmVpbmcgZXhwb3NlZCBhbmQgY29udHJvbGxlZC4gVW5kZXJzdGFuZGluZyB0aGlzIGludGVyYWN0aW9uIGlzIGtleSB0byBkaWFnbm9zaW5nIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpc3N1ZXMgb3IgZXhwbG9yaW5nIGN1c3RvbSB0dW5pbmcgc3RyYXRlZ2llcy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgc3RydWN0dXJlZCwgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZnVuY3Rpb25zLCBhbmQgdWx0aW1hdGVseSwgaG93IHRob3NlIHN0YXRzIGFyZSBtYWRlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UuIEdvdHRhIGxvdmUgdGhlc2UgZGVlcCBkaXZlcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrY2dfcHJpbnRfc3RhdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmM9MTA3Nj1zdGF0aWMgdm9pZCBibGtjZ19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMDg2LSAqIGNncm91cHMgYXJlIGRlZmluZWQuIEZvciB0aGF0IHJlYXNvbiwgY3NzX3JzdGF0X2ZsdXNoIGluXG5ibG9jay9ibGstY2dyb3VwLmM6MTA4NzogKiBibGtjZ19wcmludF9zdGF0IGRvZXMgbm90IGFjdHVhbGx5IGZpbGwgb3V0IHRoZSBpb3N0YXQgaW4gdGhlIHJvb3RcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMDg4LSAqIGNncm91cCYjMzk7cyBibGtjZ19ncS5cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTEzNT1zdGF0aWMgdm9pZCBibGtjZ19wcmludF9vbmVfc3RhdChzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIHN0cnVjdCBzZXFfZmlsZSAqcylcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTE4Ni1cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMTg3OnN0YXRpYyBpbnQgYmxrY2dfcHJpbnRfc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuYmxvY2svYmxrLWNncm91cC5jLTExODgte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz0xMjA0PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGJsa2NnX2ZpbGVzW10gPSB7XG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTEyMDYtXHRcdC5uYW1lID0gXCYjMzQ7c3RhdFwmIzM0OyxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMjA3Olx0XHQuc2VxX3Nob3cgPSBibGtjZ19wcmludF9zdGF0LFxuYmxvY2svYmxrLWNncm91cC5jLTEyMDgtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODQ4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6ICoqVmVyaWZ5aW5nIGlvX2NncnBfc3Vic3lzIFJlZ2lzdHJhdGlvbioqLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhlIGBibGtjZ19maWxlc2AgYXJlIHByb3Blcmx5IHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgY2dyb3VwX3N1YnN5cyBpb19jZ3JwX3N1YnN5c2AuICBJJiMzOTt2ZSBnb3QgYSBuYWdnaW5nIGZlZWxpbmcgYWJvdXQgdGhpcyBzcGVjaWZpYyBpbnRlcmFjdGlvbiwgYW5kIEkgd2FudCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIGluZnJhc3RydWN0dXJlIGlzIGJlaGF2aW5nIGFzIEkgZXhwZWN0LiBNeSBpbW1lZGlhdGUgcGxhbiBpcyB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYmxvY2svYmxrLWNncm91cC5jYCBmaWxlLiBJJiMzOTttIHRoaW5raW5nLCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UsIHRoZSByZWxldmFudCBsb2dpYyB3aWxsIGxpa2VseSByZXNpZGUgc29tZXdoZXJlIGluIHRoZSB2aWNpbml0eSBvZiBsaW5lIDEyMDAuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAwOlx0XG4xMjAxOlx0XHRyZXR1cm4gMDtcbjEyMDI6XHR9XG4xMjAzOlx0XG4xMjA0Olx0c3RhdGljIHN0cnVjdCBjZnR5cGUgYmxrY2dfZmlsZXNbXSA9IHtcbjEyMDU6XHRcdHtcbjEyMDY6XHRcdFx0Lm5hbWUgPSBcJiMzNDtzdGF0XCYjMzQ7LFxuMTIwNzpcdFx0XHQuc2VxX3Nob3cgPSBibGtjZ19wcmludF9zdGF0LFxuMTIwODpcdFx0fSxcbjEyMDk6XHRcdHsgfVx0LyogdGVybWluYXRlICovXG4xMjEwOlx0fTtcbjEyMTE6XHRcbjEyMTI6XHRzdGF0aWMgc3RydWN0IGNmdHlwZSBibGtjZ19sZWdhY3lfZmlsZXNbXSA9IHtcbjEyMTM6XHRcdHtcbjEyMTQ6XHRcdFx0Lm5hbWUgPSBcJiMzNDtyZXNldF9zdGF0c1wmIzM0OyxcbjEyMTU6XHRcdFx0LndyaXRlX3U2NCA9IGJsa2NnX3Jlc2V0X3N0YXRzLFxuMTIxNjpcdFx0fSxcbjEyMTc6XHRcdHsgfVx0LyogdGVybWluYXRlICovXG4xMjE4Olx0fTtcbjEyMTk6XHRcbjEyMjA6XHQjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbjEyMjE6XHRzdHJ1Y3QgbGlzdF9oZWFkICpibGtjZ19nZXRfY2d3Yl9saXN0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4xMjIyOlx0e1xuMTIyMzpcdFx0cmV0dXJuIFx1MDAyNmNzc190b19ibGtjZyhjc3MpLVx1MDAzZWNnd2JfbGlzdDtcbjEyMjQ6XHR9XG4xMjI1Olx0I2VuZGlmXG4xMjI2Olx0XG4xMjI3Olx0LypcbjEyMjg6XHQgKiBibGtjZyBkZXN0cnVjdGlvbiBpcyBhIHRocmVlLXN0YWdlIHByb2Nlc3MuXG4xMjI5Olx0ICpcbjEyMzA6XHQgKiAxLiBEZXN0cnVjdGlvbiBzdGFydHMuICBUaGUgYmxrY2dfY3NzX29mZmxpbmUoKSBjYWxsYmFjayBpcyBpbnZva2VkXG4xMjMxOlx0ICogICAgd2hpY2ggb2ZmbGluZXMgd3JpdGViYWNrLiAgSGVyZSB3ZSB0aWUgdGhlIG5leHQgc3RhZ2Ugb2YgYmxrZyBkZXN0cnVjdGlvblxuMTIzMjpcdCAqICAgIHRvIHRoZSBjb21wbGV0aW9uIG9mIHdyaXRlYmFjayBhc3NvY2lhdGVkIHdpdGggdGhlIGJsa2NnLiAgVGhpcyBsZXRzIHVzXG4xMjMzOlx0ICogICAgYXZvaWQgcHVudGluZyBwb3RlbnRpYWxseSBsYXJnZSBhbW91bnRzIG9mIG91dHN0YW5kaW5nIHdyaXRlYmFjayB0byByb290XG4xMjM0Olx0ICogICAgd2hpbGUgbWFpbnRhaW5pbmcgYW55IG9uZ29pbmcgcG9saWNpZXMuICBUaGUgbmV4dCBzdGFnZSBpcyB0cmlnZ2VyZWQgd2hlblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5MAoJCQkJCQkJb3V0cHV0OiAxMjYKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgQmxvY2sgSU8gQ2dyb3VwIFN0YXRpc3RpY3MqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoZSBgYmxrY2dfZmlsZXNgIGFuZCBob3cgaXQgZGVmaW5lcyB0aGUgJiMzNDtzdGF0JiMzNDsgZmlsZSDigJMgd2hpY2gsIGFzIEkgdW5kZXJzdGFuZCBpdCwgYmVjb21lcyBgaW8uc3RhdGAgd2hlbiB0aGUgY2dyb3VwIGNvbnRyb2xsZXIgYWRkcyB0aGUgcHJlZml4LiBUaGUgYGJsa2NnX3ByaW50X3N0YXRgIGZ1bmN0aW9uIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGNhbGxzIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0cygpYCB3aGVuIGl04oCZcyBkZWFsaW5nIHdpdGggdGhlIHJvb3QgY2dyb3VwLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoaXMgd2FycmFudHMgZnV6emluZy4gSSYjMzk7dmUgZ290IGEgZ29vZCBmZWVsaW5nIGFib3V0IHRoaXMsIGJhc2VkIG9uIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuCgpNeSBhc3Nlc3NtZW50IGlzOgoKKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlLioqIFRoaXMgZGVmaW5pdGVseSBoaXRzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGFuZCBsaWtlbHkgdG91Y2hlcyBjb3JlIHN1YnN5c3RlbXMgcmVsYXRpbmcgdG8gSU8gbWFuYWdlbWVudC4gVGhlIGNvZGUgY2hhbmdlcyBhcmUgbGlrZWx5IHJlbGV2YW50IHRvIHJlZmFjdG9yaW5nIG9yIGNvZGUgY2xlYW51cCB0b28uCiogICAqKkZvY3VzU3ltYm9sczogXFvigJxibGtjZ19maWxsX3Jvb3RfaW9zdGF0c+KAnSwg4oCcYmxrY2dfcHJpbnRfc3RhdOKAnV0uKiogVGhlc2UgZnVuY3Rpb25zIGFyZSBoaWdobHkgc3BlY2lmaWMuIFRoZXkgYXJlIG5vdCB1YmlxdWl0b3VzIGFjcm9zcyB0aGUga2VybmVsLCB3aGljaCBoZWxwcyBuYXJyb3cgZG93biB0aGUgdGFyZ2V0LiBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHNgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgZGF0YSBwcm9jZXNzaW5nIGVycm9ycyB3aGVuIGZpbGxpbmcgdGhvc2UgSU8gc3RhdHMuCiogICAqKkVuYWJsZUNvbmZpZ3M6IFxb4oCcQkxLX0NHUk9VUOKAnV0uKiogUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgdGhlIGNncm91cCBjb25maWcgaXMgbmVlZGVkLgoKSSYjMzk7dmUgY2FyZWZ1bGx5IGNoZWNrZWQgdGhpcyBhZ2FpbnN0IHRoZSBndWlkZWxpbmVzLiBJdCBzZWVtcyB0byB0aWNrIGFsbCB0aGUgYm94ZXM6IGV4ZWN1dGFibGUgY29kZSwgc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBmb2N1cywgYW5kIHRoZSByaWdodCBjb25maWcgcmVxdWlyZW1lbnQuCgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIOKAkyB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtjZ19maWxsX3Jvb3RfaW9zdGF0cyYjMzQ7LAogICAgJiMzNDtibGtjZ19wcmludF9zdGF0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJvb3QgY2dyb3VwIEkvTyBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uIGluIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBjYXN0IHBlci1jcHUgc2VjdG9yIGNvdW50cyB0byB1NjQgYW5kIHVzZSBTRUNUT1JfU0hJRlQgYmVmb3JlIGFjY3VtdWxhdGluZyBpbnRvIGJ5dGUgY291bnRlcnMuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBibG9jayBjZ3JvdXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKGUuZy4gcmVhZGluZyBpby5zdGF0IG9uIHRoZSByb290IGNncm91cCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtjZ19maWxsX3Jvb3RfaW9zdGF0cyYjMzQ7LAogICAgJiMzNDtibGtjZ19wcmludF9zdGF0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJvb3QgY2dyb3VwIEkvTyBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uIGluIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBjYXN0IHBlci1jcHUgc2VjdG9yIGNvdW50cyB0byB1NjQgYW5kIHVzZSBTRUNUT1JfU0hJRlQgYmVmb3JlIGFjY3VtdWxhdGluZyBpbnRvIGJ5dGUgY291bnRlcnMuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBibG9jayBjZ3JvdXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKGUuZy4gcmVhZGluZyBpby5zdGF0IG9uIHRoZSByb290IGNncm91cCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIGR1cmluZyBzZWN0b3ItdG8tYnl0ZSBjb252ZXJzaW9uIGluIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0cygpYCBieSBjYXN0aW5nIGBjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzWy4uLl1gIHRvIGAodTY0KWAgYW5kIHVzaW5nIGBTRUNUT1JfU0hJRlRgIGluc3RlYWQgb2YgYDlgLiBcblxuVGhlIGxvY2FsIHN0cnVjdHVyZSBgc3RydWN0IGJsa2dfaW9zdGF0IHRtcGAgaXMgYWxyZWFkeSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBhY2N1bXVsYXRpbmcgc3RhdHMsIGFuZCB0aGUgcGVyLWNwdSBzdGF0cyByZWFkIGFyZSBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgY291bnRlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciB1bmluaXRpYWxpemVkIGRhdGEgcGF0aHMgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHByZXNlbnQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRjODhlYWY1NzQxM2RiMTE1YjA1MDFjYWMyNWQ5NWJiN2ZiYjBiOGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDE3OjA3OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jCmluZGV4IDJiNWMyOTQzNGU0MjYuLjQ3MWNmZDIzNDdjOWUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTExMTgsMTEgJiM0MzsxMTE4LDExIEBAIHN0YXRpYyB2b2lkIGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKHZvaWQpCiAJCQkJY3B1X2Rrc3RhdHMtJmd0O2lvc1tTVEFUX0RJU0NBUkRdOwogCQkJLy8gY29udmVydCBzZWN0b3JzIHRvIGJ5dGVzCiAJCQl0bXAuYnl0ZXNbQkxLR19JT1NUQVRfUkVBRF0gJiM0Mzs9Ci0JCQkJY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNbU1RBVF9SRUFEXSAmbHQ7Jmx0OyA5OwomIzQzOwkJCQkodTY0KWNwdV9ka3N0YXRzLSZndDtzZWN0b3JzW1NUQVRfUkVBRF0gJmx0OyZsdDsgU0VDVE9SX1NISUZUOwogCQkJdG1wLmJ5dGVzW0JMS0dfSU9TVEFUX1dSSVRFXSAmIzQzOz0KLQkJCQljcHVfZGtzdGF0cy0mZ3Q7c2VjdG9yc1tTVEFUX1dSSVRFXSAmbHQ7Jmx0OyA5OwomIzQzOwkJCQkodTY0KWNwdV9ka3N0YXRzLSZndDtzZWN0b3JzW1NUQVRfV1JJVEVdICZsdDsmbHQ7IFNFQ1RPUl9TSElGVDsKIAkJCXRtcC5ieXRlc1tCTEtHX0lPU1RBVF9ESVNDQVJEXSAmIzQzOz0KLQkJCQljcHVfZGtzdGF0cy0mZ3Q7c2VjdG9yc1tTVEFUX0RJU0NBUkRdICZsdDsmbHQ7IDk7CiYjNDM7CQkJCSh1NjQpY3B1X2Rrc3RhdHMtJmd0O3NlY3RvcnNbU1RBVF9ESVNDQVJEXSAmbHQ7Jmx0OyBTRUNUT1JfU0hJRlQ7CiAJCX0KIAogCQlmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgmYW1wO2Jsa2ctJmd0O2lvc3RhdC5zeW5jKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgQmxvY2sgQ0dyb3VwcyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyB0aGUgZml4IGlzIGFwcGFyZW50bHkgbmVzdGxlZCB3aXRoaW4gYGJsb2NrL2Jsay1jZ3JvdXAuY2AuIExldCYjMzk7cyBnZXQgcmlnaHQgdG8gaXQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdXNlIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb24uIExpbmUgMTExOCBzb3VuZHMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4gVGhpcyBzaG91bGQgcXVpY2tseSBoaWdobGlnaHQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIGFuZCBhbGxvdyBtZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIFRoaXMgYXBwcm9hY2ggaGVscHMgbWUgcXVpY2tseSBncmFzcCB0aGUgc2NvcGUgb2YgdGhlIGZpeCBhbmQgYXNzZXNzIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIGNncm91cCBibG9jayBJL08gaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20ga2VlbiB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB0aGlzIGNvZGUsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzaWducyBvZiB0aGUgcHJvYmxlbSBvciB0aGUgZml4LCBzdWNoIGFzIGNvbW1lbnRzIG9yIHZhcmlhYmxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcdGNsYXNzX2Rldl9pdGVyX2luaXQoXHUwMDI2aXRlciwgXHUwMDI2YmxvY2tfY2xhc3MsIE5VTEwsIFx1MDAyNmRpc2tfdHlwZSk7XG4xMTAxOlx0XHR3aGlsZSAoKGRldiA9IGNsYXNzX2Rldl9pdGVyX25leHQoXHUwMDI2aXRlcikpKSB7XG4xMTAyOlx0XHRcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBkZXZfdG9fYmRldihkZXYpO1xuMTEwMzpcdFx0XHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cgPSBiZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlcXVldWUtXHUwMDNlcm9vdF9ibGtnO1xuMTEwNDpcdFx0XHRzdHJ1Y3QgYmxrZ19pb3N0YXQgdG1wO1xuMTEwNTpcdFx0XHRpbnQgY3B1O1xuMTEwNjpcdFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuMTEwNzpcdFxuMTEwODpcdFx0XHRtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSk7XG4xMTA5Olx0XHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbjExMTA6XHRcdFx0XHRzdHJ1Y3QgZGlza19zdGF0cyAqY3B1X2Rrc3RhdHM7XG4xMTExOlx0XG4xMTEyOlx0XHRcdFx0Y3B1X2Rrc3RhdHMgPSBwZXJfY3B1X3B0cihiZGV2LVx1MDAzZWJkX3N0YXRzLCBjcHUpO1xuMTExMzpcdFx0XHRcdHRtcC5pb3NbQkxLR19JT1NUQVRfUkVBRF0gJiM0Mzs9XG4xMTE0Olx0XHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2Vpb3NbU1RBVF9SRUFEXTtcbjExMTU6XHRcdFx0XHR0bXAuaW9zW0JMS0dfSU9TVEFUX1dSSVRFXSAmIzQzOz1cbjExMTY6XHRcdFx0XHRcdGNwdV9ka3N0YXRzLVx1MDAzZWlvc1tTVEFUX1dSSVRFXTtcbjExMTc6XHRcdFx0XHR0bXAuaW9zW0JMS0dfSU9TVEFUX0RJU0NBUkRdICYjNDM7PVxuMTExODpcdFx0XHRcdFx0Y3B1X2Rrc3RhdHMtXHUwMDNlaW9zW1NUQVRfRElTQ0FSRF07XG4xMTE5Olx0XHRcdFx0Ly8gY29udmVydCBzZWN0b3JzIHRvIGJ5dGVzXG4xMTIwOlx0XHRcdFx0dG1wLmJ5dGVzW0JMS0dfSU9TVEFUX1JFQURdICYjNDM7PVxuMTEyMTpcdFx0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfUkVBRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbjExMjI6XHRcdFx0XHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICYjNDM7PVxuMTEyMzpcdFx0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfV1JJVEVdIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQ7XG4xMTI0Olx0XHRcdFx0dG1wLmJ5dGVzW0JMS0dfSU9TVEFUX0RJU0NBUkRdICYjNDM7PVxuMTEyNTpcdFx0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbjExMjY6XHRcdFx0fVxuMTEyNzpcdFxuMTEyODpcdFx0XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZibGtnLVx1MDAzZWlvc3RhdC5zeW5jKTtcbjExMjk6XHRcdFx0YmxrZ19pb3N0YXRfc2V0KFx1MDAyNmJsa2ctXHUwMDNlaW9zdGF0LmN1ciwgXHUwMDI2dG1wKTtcbjExMzA6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZibGtnLVx1MDAzZWlvc3RhdC5zeW5jLCBmbGFncyk7XG4xMTMxOlx0XHR9XG4xMTMyOlx0XHRjbGFzc19kZXZfaXRlcl9leGl0KFx1MDAyNml0ZXIpO1xuMTEzMzpcdH1cbjExMzQ6XHRcbjExMzU6XHRzdGF0aWMgdm9pZCBibGtjZ19wcmludF9vbmVfc3RhdChzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIHN0cnVjdCBzZXFfZmlsZSAqcylcbjExMzY6XHR7XG4xMTM3Olx0XHRzdHJ1Y3QgYmxrZ19pb3N0YXRfc2V0ICpiaXMgPSBcdTAwMjZibGtnLVx1MDAzZWlvc3RhdDtcbjExMzg6XHRcdHU2NCByYnl0ZXMsIHdieXRlcywgcmlvcywgd2lvcywgZGJ5dGVzLCBkaW9zO1xuMTEzOTpcdFx0Y29uc3QgY2hhciAqZG5hbWU7XG4xMTQwOlx0XHR1bnNpZ25lZCBzZXE7XG4xMTQxOlx0XHRpbnQgaTtcbjExNDI6XHRcbjExNDM6XHRcdGlmICghYmxrZy1cdTAwM2VvbmxpbmUpXG4xMTQ0Olx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5MwoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA1OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTZWN0b3ItdG8tQnl0ZSBDb252ZXJzaW9uIENoYW5nZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgZGlmZiwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbnZlcnRpbmcgc2VjdG9yIGNvdW50cyBmcm9tIGBjcHVfZGtzdGF0cy0mZ3Q7c2VjdG9yc2AgdG8gYnl0ZSBjb3VudHMgZm9yIEkvTyBzdGF0aXN0aWNzLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgZG9pbmcgYSBsZWZ0IHNoaWZ0IGJ5IDkgYml0cyAoYCZsdDsmbHQ7IDlgKSwgd2hpY2gsIGFzIEkgc3VzcGVjdGVkLCBjb3VsZCBwb3RlbnRpYWxseSBjYXVzZSBpbnRlZ2VyIG92ZXJmbG93LCBlc3BlY2lhbGx5IG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzIHdoZW4gd29ya2luZyB3aXRoIGB1bnNpZ25lZCBsb25nYCBzZWN0b3IgY291bnRzLiBUaGUgZml4IGludm9sdmVzIGNhc3RpbmcgdG8gYCh1NjQpYCBhbmQgdXNpbmcgYFNFQ1RPUl9TSElGVGAsIHdoaWNoIGlzIGFsbW9zdCBjZXJ0YWlubHkgZGVmaW5lZCBhcyA5IChvciBzb21lIGVxdWl2YWxlbnQgcG93ZXItb2YtdHdvLCB3aGljaCBpcyB0aGUgcHJvcGVyIHdheSB0byBkbyBpdCkuIFRoaXMgcHJldmVudHMgdHJ1bmNhdGlvbiBhbmQgZW5zdXJlcyB0aGUgYnl0ZSBjb3VudCBjYWxjdWxhdGlvbiBpcyBhY2N1cmF0ZSwgZXZlbiB3aXRoIGxhcmdlIHNlY3RvciBjb3VudHMuCgpNeSBuZXh0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSBzZWUgdGhhdCBgc3RydWN0IGJsa2dfaW9zdGF0IHRtcDtgIGlzIGV4cGxpY2l0bHkgY2xlYXJlZCB3aXRoIGBtZW1zZXRgIGJlZm9yZSB0aGUgYWNjdW11bGF0aW9uIGxvb3AuIEZ1cnRoZXJtb3JlLCBgY3B1X2Rrc3RhdHNgIGxvb2tzIHRvIGJlIGRlcml2ZWQgZnJvbSBwcm9wZXJseSBpbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyBhbmQgdGhlIHZhbHVlIGlzIGFjY3VtdWxhdGVkIGludG8gdGhlIHRlbXBvcmFyeSBidWZmZXIuIFRoZXJlIGFyZSBubyBleHBvc2VkIHBvaW50ZXJzIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gbmV3IGFsbG9jYXRpb24gaXNzdWVzLiBUaGUgZGF0YSBpcyBvbmx5IGFjY3VtdWxhdGVkIGluIGB0bXBgIGFuZCBjb3BpZWQgdG8gYGJsa2ctJmd0O2lvc3RhdC5jdXJgIHVzaW5nIGEgZnVuY3Rpb24sIGFuZCBpcyBzYWZlLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGlkZWEgdGhhdCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFyaXRobWV0aWMvdHlwZSBjYXN0aW5nIGNvcnJlY3Rpb24uCgpUaGVyZWZvcmUsIHRoZSBLTVNBTiBxdWVzdGlvbiBpcyBlYXNpbHkgYW5zd2VyZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQsIGFjY2Vzc2VkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBJJiMzOTt2ZSByZXZpZXdlZCB0aGUgY29tbW9uIHNjZW5hcmlvcyB3aGVyZSBLTVNBTiBiZWNvbWVzIHJlbGV2YW50IGFuZCBub25lIG9mIHRob3NlIGFyZSBhcHBsaWNhYmxlIGhlcmUuIFRoZSBgTmVlZHNLTVNBTmAgZmxhZyBpcyBkZWZpbml0aXZlbHkgZmFsc2UuCgpGaW5hbGx5LCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGlzIGNoYW5nZSBpcyBwdXJlbHkgYWJvdXQgdHlwZSBzYWZldHkgYW5kIGF2b2lkcyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBkdXJpbmcgdGhlIHNlY3Rvci10by1ieXRlIGNvbnZlcnNpb24uIEkgYW0gcHJlcGFyZWQgdG8gJiMzOTtzZXQtcmVzdWx0cyYjMzk7LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIGR1cmluZyBzZWN0b3ItdG8tYnl0ZSBjb252ZXJzaW9uIGluIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0cygpYCBieSBjYXN0aW5nIGBjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzWy4uLl1gIHRvIGAodTY0KWAgYW5kIHVzaW5nIGBTRUNUT1JfU0hJRlRgIGluc3RlYWQgb2YgYDlgLiBcblxuVGhlIGxvY2FsIHN0cnVjdHVyZSBgc3RydWN0IGJsa2dfaW9zdGF0IHRtcGAgaXMgYWxyZWFkeSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBhY2N1bXVsYXRpbmcgc3RhdHMsIGFuZCB0aGUgcGVyLWNwdSBzdGF0cyByZWFkIGFyZSBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgY291bnRlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciB1bmluaXRpYWxpemVkIGRhdGEgcGF0aHMgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHByZXNlbnQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgZHVyaW5nIHNlY3Rvci10by1ieXRlIGNvbnZlcnNpb24gaW4gYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKClgIGJ5IGNhc3RpbmcgYGNwdV9ka3N0YXRzLVx1MDAzZXNlY3RvcnNbLi4uXWAgdG8gYCh1NjQpYCBhbmQgdXNpbmcgYFNFQ1RPUl9TSElGVGAgaW5zdGVhZCBvZiBgOWAuIFxuXG5UaGUgbG9jYWwgc3RydWN0dXJlIGBzdHJ1Y3QgYmxrZ19pb3N0YXQgdG1wYCBpcyBhbHJlYWR5IGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldChcdTAwMjZ0bXAsIDAsIHNpemVvZih0bXApKWAgYmVmb3JlIGFjY3VtdWxhdGluZyBzdGF0cywgYW5kIHRoZSBwZXItY3B1IHN0YXRzIHJlYWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGtlcm5lbCBjb3VudGVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBwYXRocyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgcHJlc2VudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowNzo0Ni45NzYwMjgxMDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzk3NDc2Nzk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrY2dfZmlsbF9yb290X2lvc3RhdHNcIixcbiAgICBcImJsa2NnX3ByaW50X3N0YXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgZHVyaW5nIHNlY3Rvci10by1ieXRlIGNvbnZlcnNpb24gaW4gYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKClgIGJ5IGNhc3RpbmcgYGNwdV9ka3N0YXRzLVxcdTAwM2VzZWN0b3JzWy4uLl1gIHRvIGAodTY0KWAgYW5kIHVzaW5nIGBTRUNUT1JfU0hJRlRgIGluc3RlYWQgb2YgYDlgLiBcXG5cXG5UaGUgbG9jYWwgc3RydWN0dXJlIGBzdHJ1Y3QgYmxrZ19pb3N0YXQgdG1wYCBpcyBhbHJlYWR5IGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldChcXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBhY2N1bXVsYXRpbmcgc3RhdHMsIGFuZCB0aGUgcGVyLWNwdSBzdGF0cyByZWFkIGFyZSBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgY291bnRlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciB1bmluaXRpYWxpemVkIGRhdGEgcGF0aHMgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHByZXNlbnQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByb290IGNncm91cCBJL08gc3RhdGlzdGljcyBjYWxjdWxhdGlvbiBpbiBibG9jay9ibGstY2dyb3VwLmMgdG8gY2FzdCBwZXItY3B1IHNlY3RvciBjb3VudHMgdG8gdTY0IGFuZCB1c2UgU0VDVE9SX1NISUZUIGJlZm9yZSBhY2N1bXVsYXRpbmcgaW50byBieXRlIGNvdW50ZXJzLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgYmxvY2sgY2dyb3VwIHN0YXRpc3RpY3MgcmVwb3J0aW5nIChlLmcuIHJlYWRpbmcgaW8uc3RhdCBvbiB0aGUgcm9vdCBjZ3JvdXApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowNzo0Ni45NzYwMzYzOTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTI3Mjk3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYzg4ZWFmNTc0MTNkYjExNWIwNTAxY2FjMjVkOTViYjdmYmIwYjhlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTc6MDc6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jXFxuaW5kZXggMmI1YzI5NDM0ZTQyNi4uNDcxY2ZkMjM0N2M5ZSAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcXG4rKysgYi9ibG9jay9ibGstY2dyb3VwLmNcXG5AQCAtMTExOCwxMSArMTExOCwxMSBAQCBzdGF0aWMgdm9pZCBibGtjZ19maWxsX3Jvb3RfaW9zdGF0cyh2b2lkKVxcbiBcXHRcXHRcXHRcXHRjcHVfZGtzdGF0cy1cXHUwMDNlaW9zW1NUQVRfRElTQ0FSRF07XFxuIFxcdFxcdFxcdC8vIGNvbnZlcnQgc2VjdG9ycyB0byBieXRlc1xcbiBcXHRcXHRcXHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfUkVBRF0gKz1cXG4tXFx0XFx0XFx0XFx0Y3B1X2Rrc3RhdHMtXFx1MDAzZXNlY3RvcnNbU1RBVF9SRUFEXSBcXHUwMDNjXFx1MDAzYyA5O1xcbitcXHRcXHRcXHRcXHQodTY0KWNwdV9ka3N0YXRzLVxcdTAwM2VzZWN0b3JzW1NUQVRfUkVBRF0gXFx1MDAzY1xcdTAwM2MgU0VDVE9SX1NISUZUO1xcbiBcXHRcXHRcXHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICs9XFxuLVxcdFxcdFxcdFxcdGNwdV9ka3N0YXRzLVxcdTAwM2VzZWN0b3JzW1NUQVRfV1JJVEVdIFxcdTAwM2NcXHUwMDNjIDk7XFxuK1xcdFxcdFxcdFxcdCh1NjQpY3B1X2Rrc3RhdHMtXFx1MDAzZXNlY3RvcnNbU1RBVF9XUklURV0gXFx1MDAzY1xcdTAwM2MgU0VDVE9SX1NISUZUO1xcbiBcXHRcXHRcXHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfRElTQ0FSRF0gKz1cXG4tXFx0XFx0XFx0XFx0Y3B1X2Rrc3RhdHMtXFx1MDAzZXNlY3RvcnNbU1RBVF9ESVNDQVJEXSBcXHUwMDNjXFx1MDAzYyA5O1xcbitcXHRcXHRcXHRcXHQodTY0KWNwdV9ka3N0YXRzLVxcdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXFx1MDAzY1xcdTAwM2MgU0VDVE9SX1NISUZUO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2YmxrZy1cXHUwMDNlaW9zdGF0LnN5bmMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowNzo0OC40ODk0NDY0MzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQxNTA2MDUyMDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtjZ19maWxsX3Jvb3RfaW9zdGF0c1wiLFxuICAgIFwiYmxrY2dfcHJpbnRfc3RhdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJvb3QgY2dyb3VwIEkvTyBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uIGluIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBjYXN0IHBlci1jcHUgc2VjdG9yIGNvdW50cyB0byB1NjQgYW5kIHVzZSBTRUNUT1JfU0hJRlQgYmVmb3JlIGFjY3VtdWxhdGluZyBpbnRvIGJ5dGUgY291bnRlcnMuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBibG9jayBjZ3JvdXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKGUuZy4gcmVhZGluZyBpby5zdGF0IG9uIHRoZSByb290IGNncm91cCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGM4OGVhZjU3NDEzZGIxMTViMDUwMWNhYzI1ZDk1YmI3ZmJiMGI4ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTc6MDc6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcbmluZGV4IDJiNWMyOTQzNGU0MjYuLjQ3MWNmZDIzNDdjOWUgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcbisrKyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuQEAgLTExMTgsMTEgKzExMTgsMTEgQEAgc3RhdGljIHZvaWQgYmxrY2dfZmlsbF9yb290X2lvc3RhdHModm9pZClcbiBcdFx0XHRcdGNwdV9ka3N0YXRzLVx1MDAzZWlvc1tTVEFUX0RJU0NBUkRdO1xuIFx0XHRcdC8vIGNvbnZlcnQgc2VjdG9ycyB0byBieXRlc1xuIFx0XHRcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9SRUFEXSArPVxuLVx0XHRcdFx0Y3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX1JFQURdIFx1MDAzY1x1MDAzYyA5O1xuK1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfUkVBRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbiBcdFx0XHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICs9XG4tXHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfV1JJVEVdIFx1MDAzY1x1MDAzYyA5O1xuK1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfV1JJVEVdIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQ7XG4gXHRcdFx0dG1wLmJ5dGVzW0JMS0dfSU9TVEFUX0RJU0NBUkRdICs9XG4tXHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXHUwMDNjXHUwMDNjIDk7XG4rXHRcdFx0XHQodTY0KWNwdV9ka3N0YXRzLVx1MDAzZXNlY3RvcnNbU1RBVF9ESVNDQVJEXSBcdTAwM2NcdTAwM2MgU0VDVE9SX1NISUZUO1xuIFx0XHR9XG4gXG4gXHRcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNmJsa2ctXHUwMDNlaW9zdGF0LnN5bmMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDc6NDguNDg5NDQ4MTQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMxMDA1ODA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCbG9jayBJL08gQ2dyb3VwIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoZSBjb2RlIG1vZGlmaWNhdGlvbiB3aXRoaW4gYGJsb2NrL2Jsay1jZ3JvdXAuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiB0aGUgYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIGFuIGlzc3VlIHJlbGF0ZWQgdG8gSS9PIHN0YXRpc3RpY3MsIHNwZWNpZmljYWxseSB0aGUgY29udmVyc2lvbiBvZiBzZWN0b3JzIHRvIGJ5dGVzLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYSBsZWZ0IGJpdCBzaGlmdCBieSA5IChgXHUwMDNjXHUwMDNjIDlgKSB0byBjb252ZXJ0IHNlY3RvcnMgdG8gYnl0ZXMsIGFuZCBub3cgd2UgYXJlIHVzaW5nIGEgYml0IHNoaWZ0IHdpdGggYFNFQ1RPUl9TSElGVGAuXG5cblRoZSByZWxldmFudCBjb2RlIHNuaXBwZXQgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdFx0XHQvLyBjb252ZXJ0IHNlY3RvcnMgdG8gYnl0ZXNcblx0XHRcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9SRUFEXSArPVxuLVx0XHRcdFx0Y3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX1JFQURdIFx1MDAzY1x1MDAzYyA5O1xuK1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfUkVBRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcblx0XHRcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9XUklURV0gKz1cbi1cdFx0XHRcdGNwdV9ka3N0YXRzLVx1MDAzZXNlY3RvcnNbU1RBVF9XUklURV0gXHUwMDNjXHUwMDNjIDk7XG4rXHRcdFx0XHQodTY0KWNwdV9ka3N0YXRzLVx1MDAzZXNlY3RvcnNbU1RBVF9XUklURV0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcblx0XHRcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9ESVNDQVJEXSArPVxuLVx0XHRcdFx0Y3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX0RJU0NBUkRdIFx1MDAzY1x1MDAzYyA5O1xuK1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbmBgYFxuXG5UaGlzIGlzIGRlZmluaXRlbHkgdGhlIHBhcnQgb2YgdGhlIGNvZGUgdGhhdCdzIGJlaW5nIGNoYW5nZWQuIFRoZSBjYXN0IHRvIGAodTY0KWAgaW5kaWNhdGVzIGEgcG90ZW50aWFsIG92ZXJmbG93IG9yIGRhdGEtd2lkdGggY29uY2VybiB0aGF0J3MgYmVpbmcgYWRkcmVzc2VkIGFzIHdlbGwuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0OlxuXG4qICAgSG93IGlzIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AgYWN0dWFsbHkgY2FsbGVkPyBXaGF0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24/XG4qICAgQXJlIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgY29uZGl0aW9ucyB0aGF0IGd1YXJkIGl0cyBleGVjdXRpb24/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzP1xuXG5JJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiBgYmxvY2svYmxrLWNncm91cC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExMTgsIHRvIGdldCB0aGF0IHN1cnJvdW5kaW5nIGNvbnRleHQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2UgYW5kIGFueSBpbXBsaWNhdGlvbnMgaXQgbWlnaHQgaGF2ZSB3aXRoaW4gdGhlIGJsb2NrIEkvTyBjZ3JvdXAgc3lzdGVtLiBGcm9tIHRoZXJlLCBJIGNhbiBmb3JtIGEgbW9yZSBjb21wbGV0ZSBhc3Nlc3NtZW50IG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjA3OjUyLjc5OTUwODM0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwMDpcXHRcXHRjbGFzc19kZXZfaXRlcl9pbml0KFxcdTAwMjZpdGVyLCBcXHUwMDI2YmxvY2tfY2xhc3MsIE5VTEwsIFxcdTAwMjZkaXNrX3R5cGUpO1xcbjExMDE6XFx0XFx0d2hpbGUgKChkZXYgPSBjbGFzc19kZXZfaXRlcl9uZXh0KFxcdTAwMjZpdGVyKSkpIHtcXG4xMTAyOlxcdFxcdFxcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBkZXZfdG9fYmRldihkZXYpO1xcbjExMDM6XFx0XFx0XFx0c3RydWN0IGJsa2NnX2dxICpibGtnID0gYmRldi1cXHUwMDNlYmRfZGlzay1cXHUwMDNlcXVldWUtXFx1MDAzZXJvb3RfYmxrZztcXG4xMTA0OlxcdFxcdFxcdHN0cnVjdCBibGtnX2lvc3RhdCB0bXA7XFxuMTEwNTpcXHRcXHRcXHRpbnQgY3B1O1xcbjExMDY6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4xMTA3OlxcdFxcbjExMDg6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZ0bXAsIDAsIHNpemVvZih0bXApKTtcXG4xMTA5OlxcdFxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4xMTEwOlxcdFxcdFxcdFxcdHN0cnVjdCBkaXNrX3N0YXRzICpjcHVfZGtzdGF0cztcXG4xMTExOlxcdFxcbjExMTI6XFx0XFx0XFx0XFx0Y3B1X2Rrc3RhdHMgPSBwZXJfY3B1X3B0cihiZGV2LVxcdTAwM2ViZF9zdGF0cywgY3B1KTtcXG4xMTEzOlxcdFxcdFxcdFxcdHRtcC5pb3NbQkxLR19JT1NUQVRfUkVBRF0gKz1cXG4xMTE0OlxcdFxcdFxcdFxcdFxcdGNwdV9ka3N0YXRzLVxcdTAwM2Vpb3NbU1RBVF9SRUFEXTtcXG4xMTE1OlxcdFxcdFxcdFxcdHRtcC5pb3NbQkxLR19JT1NUQVRfV1JJVEVdICs9XFxuMTExNjpcXHRcXHRcXHRcXHRcXHRjcHVfZGtzdGF0cy1cXHUwMDNlaW9zW1NUQVRfV1JJVEVdO1xcbjExMTc6XFx0XFx0XFx0XFx0dG1wLmlvc1tCTEtHX0lPU1RBVF9ESVNDQVJEXSArPVxcbjExMTg6XFx0XFx0XFx0XFx0XFx0Y3B1X2Rrc3RhdHMtXFx1MDAzZWlvc1tTVEFUX0RJU0NBUkRdO1xcbjExMTk6XFx0XFx0XFx0XFx0Ly8gY29udmVydCBzZWN0b3JzIHRvIGJ5dGVzXFxuMTEyMDpcXHRcXHRcXHRcXHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfUkVBRF0gKz1cXG4xMTIxOlxcdFxcdFxcdFxcdFxcdCh1NjQpY3B1X2Rrc3RhdHMtXFx1MDAzZXNlY3RvcnNbU1RBVF9SRUFEXSBcXHUwMDNjXFx1MDAzYyBTRUNUT1JfU0hJRlQ7XFxuMTEyMjpcXHRcXHRcXHRcXHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICs9XFxuMTEyMzpcXHRcXHRcXHRcXHRcXHQodTY0KWNwdV9ka3N0YXRzLVxcdTAwM2VzZWN0b3JzW1NUQVRfV1JJVEVdIFxcdTAwM2NcXHUwMDNjIFNFQ1RPUl9TSElGVDtcXG4xMTI0OlxcdFxcdFxcdFxcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9ESVNDQVJEXSArPVxcbjExMjU6XFx0XFx0XFx0XFx0XFx0KHU2NCljcHVfZGtzdGF0cy1cXHUwMDNlc2VjdG9yc1tTVEFUX0RJU0NBUkRdIFxcdTAwM2NcXHUwMDNjIFNFQ1RPUl9TSElGVDtcXG4xMTI2OlxcdFxcdFxcdH1cXG4xMTI3OlxcdFxcbjExMjg6XFx0XFx0XFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXFx1MDAyNmJsa2ctXFx1MDAzZWlvc3RhdC5zeW5jKTtcXG4xMTI5OlxcdFxcdFxcdGJsa2dfaW9zdGF0X3NldChcXHUwMDI2YmxrZy1cXHUwMDNlaW9zdGF0LmN1ciwgXFx1MDAyNnRtcCk7XFxuMTEzMDpcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFxcdTAwMjZibGtnLVxcdTAwM2Vpb3N0YXQuc3luYywgZmxhZ3MpO1xcbjExMzE6XFx0XFx0fVxcbjExMzI6XFx0XFx0Y2xhc3NfZGV2X2l0ZXJfZXhpdChcXHUwMDI2aXRlcik7XFxuMTEzMzpcXHR9XFxuMTEzNDpcXHRcXG4xMTM1OlxcdHN0YXRpYyB2b2lkIGJsa2NnX3ByaW50X29uZV9zdGF0KHN0cnVjdCBibGtjZ19ncSAqYmxrZywgc3RydWN0IHNlcV9maWxlICpzKVxcbjExMzY6XFx0e1xcbjExMzc6XFx0XFx0c3RydWN0IGJsa2dfaW9zdGF0X3NldCAqYmlzID0gXFx1MDAyNmJsa2ctXFx1MDAzZWlvc3RhdDtcXG4xMTM4OlxcdFxcdHU2NCByYnl0ZXMsIHdieXRlcywgcmlvcywgd2lvcywgZGJ5dGVzLCBkaW9zO1xcbjExMzk6XFx0XFx0Y29uc3QgY2hhciAqZG5hbWU7XFxuMTE0MDpcXHRcXHR1bnNpZ25lZCBzZXE7XFxuMTE0MTpcXHRcXHRpbnQgaTtcXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0aWYgKCFibGtnLVxcdTAwM2VvbmxpbmUpXFxuMTE0NDpcXHRcXHRcXHRyZXR1cm47XFxuMTE0NTpcXHRcXG4xMTQ2OlxcdFxcdGRuYW1lID0gYmxrZ19kZXZfbmFtZShibGtnKTtcXG4xMTQ3OlxcdFxcdGlmICghZG5hbWUpXFxuMTE0ODpcXHRcXHRcXHRyZXR1cm47XFxuMTE0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDc6NTIuNzk5NjIwNDI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4NzAwODAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AgQ2FsbCBTaXRlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IHJlbGF0ZWQgdG8gYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzYC4gVGltZSB0byB0cmFjZSBpdHMgY2FsbCBncmFwaC4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgd2l0aCBhIGJhc2ljIGdyZXAsIG9yIG1heWJlIHVzZSBjc2NvcGUgb3IgY3RhZ3MgaWYgSSdtIGZlZWxpbmcgZmFuY3kuIEkgd2FudCB0byBxdWlja2x5IGlkZW50aWZ5IGV2ZXJ5IGZ1bmN0aW9uIHRoYXQgKmRpcmVjdGx5KiBjYWxscyBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHNgLiBVbmRlcnN0YW5kaW5nIHRoZSBpbW1lZGlhdGUgY2FsbGVycyBpcyB0aGUgZmlyc3Qgc3RlcC4gVGhlbiwgZGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCBJIG1pZ2h0IG5lZWQgdG8gbW92ZSB1cCB0aGUgY2FsbCBzdGFjaywgZXhwbG9yaW5nIHRoZSBsb2dpYyBzdXJyb3VuZGluZyB0aG9zZSBjYWxsZXJzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCDigJMgdGhlIGFyZ3VtZW50cyBwYXNzZWQsIHRoZSBjb25kaXRpb25hbCBleGVjdXRpb24gcGF0aHMsIGFuZCBhbnkgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW52b2x2ZWQuIEknbSBhbnRpY2lwYXRpbmcgc29tZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgZ2l2ZW4gdGhhdCB0aGlzIGRlYWxzIHdpdGggSS9PIHN0YXRpc3RpY3MgYXQgdGhlIHJvb3QgbGV2ZWwgb2YgYmxvY2sgSS9PIGNvbnRyb2wgZ3JvdXBzLiBUaGlzIHdpbGwgcHJvYmFibHkgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHdoYXQgY29kZSBwYXRocyBhcmUgcmVsZXZhbnQgdG8gcGVyZm9ybWFuY2UgYW5hbHlzaXMsIG9yIGlmIHRoZXJlJ3MgYW55IGFyZWEgdGhhdCdzIHdvcnRoIHR1bmluZy4gSSdtIGtlZW4gdG8gYXZvaWQgZ2V0dGluZyBsb3N0IGluIGEgbWF6ZSBvZiBpbmRpcmVjdCBjYWxscyBhbmQgbWFjcm9zLCBzbyBJJ2xsIHRyeSB0byBrZWVwIHRoZSBmb2N1cyBuYXJyb3csIGF0IGxlYXN0IGluaXRpYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDc6NTUuMTg2NjMwMTU4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODU2MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstY2dyb3VwLmM9MTA3Nj1zdGF0aWMgdm9pZCBibGtjZ19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTEwOTQtICovXFxuYmxvY2svYmxrLWNncm91cC5jOjEwOTU6c3RhdGljIHZvaWQgYmxrY2dfZmlsbF9yb290X2lvc3RhdHModm9pZClcXG5ibG9jay9ibGstY2dyb3VwLmMtMTA5Ni17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MTE4Nz1zdGF0aWMgaW50IGJsa2NnX3ByaW50X3N0YXQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMTkyLVxcdGlmICghc2VxX2NzcyhzZiktXFx1MDAzZXBhcmVudClcXG5ibG9jay9ibGstY2dyb3VwLmM6MTE5MzpcXHRcXHRibGtjZ19maWxsX3Jvb3RfaW9zdGF0cygpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMTk0LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDc6NTUuMjMxNDkxNzg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExNzgzMDg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgQmxrLUNncm91cCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGJsay1jZ3JvdXAuY2AgYnVzaW5lc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGNvbmZpZ3VyZWQsIGFuZCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgTWFrZWZpbGVgIHdpdGhpbiB0aGUgYGJsb2NrL2AgZGlyZWN0b3J5LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgYnVpbGQgc3lzdGVtIHRpZXMgdGhpbmdzIHRvZ2V0aGVyLiBNeSBnb2FsIGlzIHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgd2hldGhlciB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUgZ2V0cyBjb21waWxlZCBhbmQgaW5jbHVkZWQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaXMga2V5IHRvIGdyYXNwaW5nIGhvdyB0aGlzIGJsay1jZ3JvdXAgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIG9yIGRpc2FibGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgcmVmZXJlbmNlcyB0byBjb25maWd1cmF0aW9uIHN5bWJvbHMgcmVsYXRlZCB0byBibG9jayBJL08gY29udHJvbCBncm91cHMsIGFuZCB0aGVuIEkgY2FuIGRlbHZlIGludG8gdGhlIGRlZmluaXRpb25zIG9mIHRob3NlIHN5bWJvbHMgdG8gZGV0ZXJtaW5lIHRoZWlyIG1lYW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowNzo1Ny4zNDkzMjQ5NDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyOTkzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrLWNncm91cFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9MTg9b2JqLSQoQ09ORklHX0JMS19ERVZfQlNHTElCKVxcdCs9IGJzZy1saWIub1xcbmJsb2NrL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19CTEtfQ0dST1VQKVxcdCs9IGJsay1jZ3JvdXAub1xcbmJsb2NrL01ha2VmaWxlLTIwLW9iai0kKENPTkZJR19CTEtfQ0dST1VQX1JXU1RBVClcXHQrPSBibGstY2dyb3VwLXJ3c3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjA3OjU3LjM5NTYyOTU3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyODk0OTE2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipLY29uZmlnIERpdmUgZm9yIEJMS19DR1JPVVAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgQkxLX0NHUk9VUGAgaXMgZGVmaW5lZC4gS25vd2luZyB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtLCBteSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBzbyBhIEtjb25maWcgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIEdpdmVuIGl0J3MgcmVsYXRlZCB0byBibG9jayBkZXZpY2VzLCBgYmxvY2svS2NvbmZpZ2Agc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIGxvY2F0aW9uLiBMZXQncyBoZWFkIG92ZXIgdGhlcmUgYW5kIHNlZSB3aGF0J3Mgd2hhdC4gSG9wZWZ1bGx5IGl0J3Mgc3RyYWlnaHRmb3J3YXJkLCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBwdXJwb3NlIGZyb20gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjIzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MDAuNjg1MTIzNzQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTczMDE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcXG4tLVxcbmJsb2NrL0tjb25maWctNDEtXFxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcXG5ibG9jay9LY29uZmlnLTQzLVxcdGJvb2xcXG5ibG9jay9LY29uZmlnLTQ0LVxcbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG5ibG9jay9LY29uZmlnLTQ2LVxcdGJvb2xcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTQ0LVxcbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuYmxvY2svS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTYzLVxcbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbmJsb2NrL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIkNncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MDAuNzM0ODU4ODUzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NjE3NzM4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgY29uZmlnIEJMS19DR1JPVVBgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYGNvbmZpZyBCTEtfQ0dST1VQYCB3aXRoaW4gdGhpcyB3aG9sZSBjb2RlYmFzZSwgcmlnaHQ/IFRoaXMgbWVhbnMgSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIEtjb25maWcgZmlsZXMsIG9yIHBvdGVudGlhbGx5IGdlbmVyYXRlZCBoZWFkZXIgZmlsZXMgaWYgaXQncyBiZWluZyB1c2VkIGNvbmRpdGlvbmFsbHkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHJ1biBhIHNlYXJjaCBhY3Jvc3MgdGhlIGVudGlyZSBwcm9qZWN0IHN0cnVjdHVyZS4gSSdsbCBuZWVkIHRvIHVzZSB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYi4gYGdyZXBgIHdpdGggdGhlIGAtUmAgZmxhZyAob3IgYGZpbmRgIGFuZCBgZ3JlcGAgdG9nZXRoZXIgZm9yIG1vcmUgY29udHJvbCkgaXMgcHJvYmFibHkgbXkgYmVzdCBiZXQgaGVyZS4gSSBzaG91bGQga2VlcCBpbiBtaW5kIHRoYXQgSSBtaWdodCBiZSBkZWFsaW5nIHdpdGggdmFyaWF0aW9ucyBvZiB0aGUgbmFtZSAoZS5nLiwgYCNkZWZpbmUgQkxLX0NHUk9VUGAsIG9yIGluIEtjb25maWcgc29tZXRoaW5nIGxpa2UgYGNvbmZpZyBCTEtfQ0dST1VQYCkuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNvbnNpZGVyIGFueSBwb3RlbnRpYWwgY29udGV4dC4gSSdsbCBuZWVkIHRvIHNlZSB3aGVyZSBpdCdzIGRlZmluZWQgYW5kIGhvdyBpdCdzIHVzZWQuIEJhc2VkIG9uIHdoZXJlIEkgZmluZCB0aGUgZGVmaW5pdGlvbiBJIGNhbiB0aGVuIGxvb2sgYXQgd2hpY2ggY29kZSBzZWN0aW9ucyBhcmUgYWZmZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowODowMy4zOTY2MzU2NDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjY5NjA4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19DR1JPVVAkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMTA4PWNvbmZpZyBNRU1DR19WMVxcbi0tXFxuaW5pdC9LY29uZmlnLTExMjQtXFxuaW5pdC9LY29uZmlnOjExMjU6Y29uZmlnIEJMS19DR1JPVVBcXG5pbml0L0tjb25maWctMTEyNi1cXHRib29sIFxcXCJJTyBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowODowNS43NjM2MDEwMzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyMjYyMjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBEaXZlKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIHRoaXMuIFRoZSBwcm9ibGVtIHNtZWxscyBsaWtlIGl0IGNvdWxkIGJlIGNvbmZpZ3VyYXRpb24tcmVsYXRlZCwgc28gbGV0J3MganVtcCByaWdodCBpbnRvIGBpbml0L0tjb25maWdgLiBMaW5lIDExMjUuLi5yaWdodCBhcm91bmQgdGhlcmUgc2hvdWxkIHByb3ZpZGUgc29tZSBjbHVlcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgZGVmaW5pdGlvbiwgcG9zc2libHkgYSBib29sZWFuIG9yIHRyaXN0YXRlLCB0aGF0IGdvdmVybnMgc29tZSBhc3BlY3Qgb2YgaW5pdGlhbGl6YXRpb24gb3IgZWFybHkgYm9vdCBiZWhhdmlvci4gSSdsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgcG90ZW50aWFsbHkgYW55IHN5bWJvbHMgaXQgZGVwZW5kcyBvbiB0aGF0IG1pZ2h0IGJlIHRoZSBzb3VyY2Ugb2Ygb3VyIGlzc3VlLiBJJ2xsIG5lZWQgdG8gcmFwaWRseSBwYXJzZSB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGF0IGxpbmUgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgcHVycG9zZSBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGF0IHBsYXkuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIHRob3NlIGRlcGVuZGVuY2llcyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjUzOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjA4OjA3LjY4NjIyNjk1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMjA6XFx0XFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXFxuMTEyMTpcXHRcXHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cXG4xMTIyOlxcdFxcbjExMjM6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTEyNDpcXHRcXG4xMTI1OlxcdGNvbmZpZyBCTEtfQ0dST1VQXFxuMTEyNjpcXHRcXHRib29sIFxcXCJJTyBjb250cm9sbGVyXFxcIlxcbjExMjc6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbjExMjg6XFx0XFx0ZGVmYXVsdCBuXFxuMTEyOTpcXHRcXHRoZWxwXFxuMTEzMDpcXHRcXHRHZW5lcmljIGJsb2NrIElPIGNvbnRyb2xsZXIgY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyB0aGUgY29tbW9uXFxuMTEzMTpcXHRcXHRjZ3JvdXAgaW50ZXJmYWNlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHZhcmlvdXMgSU8gY29udHJvbGxpbmdcXG4xMTMyOlxcdFxcdHBvbGljaWVzLlxcbjExMzM6XFx0XFxuMTEzNDpcXHRcXHRDdXJyZW50bHksIENGUSBJTyBzY2hlZHVsZXIgdXNlcyBpdCB0byByZWNvZ25pemUgdGFzayBncm91cHMgYW5kXFxuMTEzNTpcXHRcXHRjb250cm9sIGRpc2sgYmFuZHdpZHRoIGFsbG9jYXRpb24gKHByb3BvcnRpb25hbCB0aW1lIHNsaWNlIGFsbG9jYXRpb24pXFxuMTEzNjpcXHRcXHR0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCBpcyBhbHNvIHVzZWQgYnkgYmlvIHRocm90dGxpbmcgbG9naWMgaW5cXG4xMTM3OlxcdFxcdGJsb2NrIGxheWVyIHRvIGltcGxlbWVudCB1cHBlciBsaW1pdCBpbiBJTyByYXRlcyBvbiBhIGRldmljZS5cXG4xMTM4OlxcdFxcbjExMzk6XFx0XFx0VGhpcyBvcHRpb24gb25seSBlbmFibGVzIGdlbmVyaWMgQmxvY2sgSU8gY29udHJvbGxlciBpbmZyYXN0cnVjdHVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MDcuNjg2MzUwMzc2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTgzMTY3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEaXNrIFN0YXRzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGJsb2NrL2Jsay1jZ3JvdXAuY2AgYW5kIHNwZWNpZmljYWxseSB0aGUgYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzYCBmdW5jdGlvbi4gVGhlIGtleSBpc3N1ZSBhcHBlYXJzIHRvIGJlIHJlbGF0ZWQgdG8gaG93IHdlJ3JlIGhhbmRsaW5nIHRoZSBgY3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc2AgZmllbGQuIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBsaWtlIHRoaXMgYmVmb3JlLiBUaGUgbGluZSBpbiBxdWVzdGlvbiBzZWVtcyB0byBiZSB1c2luZyBhIGxlZnQgYml0d2lzZSBzaGlmdCBvZiBgXHUwMDNjXHUwMDNjIDlgIGJ1dCB3aXRob3V0IGEgY2FzdCB0byBhIDY0LWJpdCBpbnRlZ2VyLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBzZXRzIG9mZiBhbGFybSBiZWxscy4gVGhpcyBsb29rcyBsaWtlIGEgY2xhc3NpYyBwb3RlbnRpYWwgb3ZlcmZsb3cgYnVnLCBkZXBlbmRpbmcgb24gdGhlIGRhdGEgdHlwZSBvZiBgY3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc2AuIEl0J3MgbGlrZWx5IGB1bnNpZ25lZCBsb25nYCBvciBgdW5zaWduZWQgaW50YCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBkZWZpbml0aW9uIHdpdGhpbiB0aGUgYHN0cnVjdCBkaXNrX3N0YXRzYC4gTGV0J3MgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgc3RydWN0IHRvIGJlIHN1cmUuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIGtlcm5lbCBjb2RlIHNob3VsZCBjbGVhciB1cCB0aGUgc3BlY2lmaWMgZGF0YSB0eXBlIGFuZCBjb25maXJtIG15IGluaXRpYWwgaHlwb3RoZXNpcy4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGV4YWN0IHByb2JsZW0gYW5kIHNvbHV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDMyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowODoxMC4wMDQ2Njk3OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyODI1NTA2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZGlza19zdGF0cyBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhcnRfc3RhdC5oLTctXFxuaW5jbHVkZS9saW51eC9wYXJ0X3N0YXQuaDo4OnN0cnVjdCBkaXNrX3N0YXRzIHtcXG5pbmNsdWRlL2xpbnV4L3BhcnRfc3RhdC5oLTktXFx0dTY0IG5zZWNzW05SX1NUQVRfR1JPVVBTXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MTIuNDMyOTI5MjQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTM5MTczMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHBhcnRfc3RhdC5oYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgaW5jbHVkZS9saW51eC9wYXJ0X3N0YXQuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4LiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGJlIHNlZWluZyBkZWZpbml0aW9ucyBmb3IgdGhlIHN0YXRpc3RpY3MgbWFpbnRhaW5lZCBieSB0aGUgcGFydGl0aW9uIGxheWVyLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJlcyBjb250YWluaW5nIGNvdW50ZXJzIGZvciBJL08gb3BlcmF0aW9ucywgdGltaW5ncywgYW5kIHBlcmhhcHMgZXJyb3IgdHJhY2tpbmcuIEknbSByZWFsbHkga2VlbiBvbiBob3cgdGhlc2UgYXJlIGxhaWQgb3V0IGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgbm90ZXdvcnRoeSBvcHRpbWl6YXRpb25zIChvciBwb3RlbnRpYWwgYm90dGxlbmVja3MpIGluIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhlbXNlbHZlcy4gVGhpcyBmaWxlIGlzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIHRyYWNrcyBhbmQgZXhwb3NlcyBwYXJ0aXRpb24tbGV2ZWwgcGVyZm9ybWFuY2UgbWV0cmljcywgc28gbGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDIzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MTQuNDQ2ODQ5ODgxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGFydF9zdGF0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbiAgIDI6XFx0I2lmbmRlZiBfTElOVVhfUEFSVF9TVEFUX0hcXG4gICAzOlxcdCNkZWZpbmUgX0xJTlVYX1BBUlRfU1RBVF9IXFxuICAgNDpcXHRcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGtkZXYuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2Nhc20vbG9jYWwuaFxcdTAwM2VcXG4gICA3OlxcdFxcbiAgIDg6XFx0c3RydWN0IGRpc2tfc3RhdHMge1xcbiAgIDk6XFx0XFx0dTY0IG5zZWNzW05SX1NUQVRfR1JPVVBTXTtcXG4gIDEwOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2VjdG9yc1tOUl9TVEFUX0dST1VQU107XFxuICAxMTpcXHRcXHR1bnNpZ25lZCBsb25nIGlvc1tOUl9TVEFUX0dST1VQU107XFxuICAxMjpcXHRcXHR1bnNpZ25lZCBsb25nIG1lcmdlc1tOUl9TVEFUX0dST1VQU107XFxuICAxMzpcXHRcXHR1bnNpZ25lZCBsb25nIGlvX3RpY2tzO1xcbiAgMTQ6XFx0XFx0bG9jYWxfdCBpbl9mbGlnaHRbMl07XFxuICAxNTpcXHR9O1xcbiAgMTY6XFx0XFxuICAxNzpcXHQvKlxcbiAgMTg6XFx0ICogTWFjcm9zIHRvIG9wZXJhdGUgb24gcGVyY3B1IGRpc2sgc3RhdGlzdGljczpcXG4gIDE5OlxcdCAqXFxuICAyMDpcXHQgKiBwYXJ0X3N0YXRfe2FkZHxzdWJ8aW5jfGRlY30oKSBtb2RpZnkgdGhlIHN0YXQgY291bnRlcnMgYW5kIHNob3VsZFxcbiAgMjE6XFx0ICogYmUgY2FsbGVkIGJldHdlZW4gcGFydF9zdGF0X2xvY2soKSBhbmQgcGFydF9zdGF0X3VubG9jaygpLlxcbiAgMjI6XFx0ICpcXG4gIDIzOlxcdCAqIHBhcnRfc3RhdF9yZWFkKCkgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZS5cXG4gIDI0OlxcdCAqL1xcbiAgMjU6XFx0I2RlZmluZSBwYXJ0X3N0YXRfbG9jaygpXFx0cHJlZW1wdF9kaXNhYmxlKClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MTQuNDQ2OTEzODkxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5Nzk1MzgxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgYWJvdXQgaXRzIGltcGxpY2F0aW9ucyBmb3IgZnV6emluZy4gVGhlIGNydXggb2YgaXQgc2VlbXMgdG8gYmUgcHJldmVudGluZyBhbiBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gY2FsY3VsYXRpbmcgZGlzayBJL08gc3RhdGlzdGljcyBvbiAzMi1iaXQgc3lzdGVtcywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgY3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1suLi5dIFx1MDAzY1x1MDAzYyA5YC4gVGhlIHNoaWZ0IGNvdWxkIGNhdXNlIGFuIG92ZXJmbG93IGF0IGEgZmFpcmx5IGNvbW1vbiBkaXNrIHNpemUsIGFuZCBjYXN0aW5nIHRvIGAodTY0KWAgaXMgdGhlIGZpeC4gVGhleSd2ZSBhbHNvIGNsZWFuZWQgaXQgdXAgYnkgcmVwbGFjaW5nIHRoZSBtYWdpYyBudW1iZXIgOSB3aXRoIGBTRUNUT1JfU0hJRlRgLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzICpyZWFjaGFibGUqIGNvZGU/IEFuZCB0aGUgYW5zd2VyLCB0aGFua2Z1bGx5LCBpcyB5ZXMhIEl0IGxvb2tzIGxpa2UgYGJsa2NnX3ByaW50X3N0YXRgIGlzIGNhbGxlZCB3aGVuIHJlYWRpbmcgYGlvLnN0YXRgIG9yIGBibGtjZ2AgZmlsZXMgd2l0aGluIGNncm91cHMuIFRoaXMgaGFwcGVucyBpbiBib3RoIGNncm91cCB2MSBhbmQgdjIsIHBhcnRpY3VsYXJseSB3aGVuIHJlYWRpbmcgdGhlIHJvb3QgY2dyb3VwJ3MgYGlvLnN0YXRgLiBUaGF0IHBhdGggdGFrZXMgdXMgdGhyb3VnaCB0aGUgYmxvY2sgY2dyb3VwIHN1YnN5c3RlbSwgd2hpY2ggbWVhbnMgd2UncmUgaW4gY29yZSBrZXJuZWwgdGVycml0b3J54oCUYmxvY2sgbGF5ZXIgYW5kIGNncm91cHMuIFRoYXTigJlzIGEgcG9zaXRpdmUgaW5kaWNhdG9yIGZvciBmdXp6aW5nLlxuXG5Ob3csIGRvZXMgaXQgbWVldCB0aGUgZnV6emluZyBjcml0ZXJpYT8gIFdlJ3JlIGRlYWxpbmcgd2l0aCBcImNvcmUgc3Vic3lzdGVtc1wiIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBibG9jayBsYXllciBhbmQgY2dyb3Vwcywgd2hpY2ggYXJlIGtleSBwYXJ0cyBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIHJlc291cmNlcy4gV2UncmUgYWxzbyByZXN0cnVjdHVyaW5nIGRhdGEgc3RydWN0dXJlcyB0byBwcmV2ZW50IG92ZXJmbG93LCB3aGljaCBmaXRzIHRoZWlyIGRlZmluaXRpb24gb2YgcmVmYWN0b3JpbmcgYW5kIGNvZGUgY2xlYW51cC4gU28geWVzLCB0aGlzIHBhc3NlcyB0aGF0IHRlc3QuXG5cbkNhbiB3ZSByZWFjaCB0aGlzIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQsIGxpa2UgdGhlIG9uZXMgdXNlZCBieSBTeXprYWxsZXI/IFllcyEgQ2dyb3VwcyBhbmQgYmxvY2sgZGV2aWNlcyAobG9vcGJhY2ssIG51bGxfYmxrLCB2aXJ0aW9fYmxrLCByYW1kaXNrLCBldGMuKSBhcmUgYWxsIGNvbW1vbi4gIFJlYWRpbmcgYC9zeXMvZnMvY2dyb3VwL2lvLnN0YXRgIGRpcmVjdGx5IGludm9rZXMgdGhlIGZ1bmN0aW9ucyB3ZSdyZSBpbnRlcmVzdGVkIGluLCBgYmxrY2dfcHJpbnRfc3RhdGAgYW5kIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AsIHdoaWNoIGlzIGdyZWF0LlxuXG5UaGUgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXI6IGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AgYW5kIGBibGtjZ19wcmludF9zdGF0YC5cblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIHdlJ2xsIG5lZWQgYEJMS19DR1JPVVBgLCB3aGljaCwgdGhhbmtmdWxseSwgZGVwZW5kcyBvbiBgQkxPQ0tgLiBgQkxPQ0tgIGlzIHByZXR0eSBzdGFuZGFyZC4gSSdsbCBkb3VibGUgY2hlY2sgYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzYCBpbiBgYmxvY2svYmxrLWNncm91cC5jYCBqdXN0IHRvIGJlIHN1cmUsIGJ1dCBpdCBzZWVtcyB0aGF0IGBCTEtfQ0dST1VQYCBzaG91bGQgYmUgc3VmZmljaWVudC4gSSB0aGluayB0aGlzIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDA1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MTkuNDI2NDU0NTg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAzMDU3NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuYz0xMDc2PXN0YXRpYyB2b2lkIGJsa2NnX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTA5NC0gKi9cXG5ibG9jay9ibGstY2dyb3VwLmM6MTA5NTpzdGF0aWMgdm9pZCBibGtjZ19maWxsX3Jvb3RfaW9zdGF0cyh2b2lkKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMDk2LXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xMTg3PXN0YXRpYyBpbnQgYmxrY2dfcHJpbnRfc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTExOTItXFx0aWYgKCFzZXFfY3NzKHNmKS1cXHUwMDNlcGFyZW50KVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMTkzOlxcdFxcdGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKCk7XFxuYmxvY2svYmxrLWNncm91cC5jLTExOTQtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowODoyMC45Mjk1MjEwNjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5MTc3ODIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQ6XG5cbioqSW5zcGVjdGluZyB0aGUgQmxvY2sgSS9PIENncm91cCBTdGF0aXN0aWNzIEhvb2sqKlxuXG5BbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgYmV0d2VlbiBgYmxrY2dfcHJpbnRfc3RhdGAgYW5kIHRoZSBjZnR5cGUgZmlsZXMgd2l0aGluIHRoZSBgYmxvY2svYmxrLWNncm91cC5jYCBzb3VyY2UgZmlsZS4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBmaWd1cmUgb3V0ICpob3cqIHRoZSBibG9jayBJL08gY2dyb3VwIHN0YXRpc3RpY3MgYXJlIGJlaW5nIGV4cG9zZWQgYW5kIGNvbnRyb2xsZWQuIFVuZGVyc3RhbmRpbmcgdGhpcyBpbnRlcmFjdGlvbiBpcyBrZXkgdG8gZGlhZ25vc2luZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaXNzdWVzIG9yIGV4cGxvcmluZyBjdXN0b20gdHVuaW5nIHN0cmF0ZWdpZXMuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQsIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGZ1bmN0aW9ucywgYW5kIHVsdGltYXRlbHksIGhvdyB0aG9zZSBzdGF0cyBhcmUgbWFkZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlLiBHb3R0YSBsb3ZlIHRoZXNlIGRlZXAgZGl2ZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNzcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowODoyMy4wMjEzMDIwODlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTA3MTAxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrY2dfcHJpbnRfc3RhdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstY2dyb3VwLmM9MTA3Nj1zdGF0aWMgdm9pZCBibGtjZ19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTEwODYtICogY2dyb3VwcyBhcmUgZGVmaW5lZC4gRm9yIHRoYXQgcmVhc29uLCBjc3NfcnN0YXRfZmx1c2ggaW5cXG5ibG9jay9ibGstY2dyb3VwLmM6MTA4NzogKiBibGtjZ19wcmludF9zdGF0IGRvZXMgbm90IGFjdHVhbGx5IGZpbGwgb3V0IHRoZSBpb3N0YXQgaW4gdGhlIHJvb3RcXG5ibG9jay9ibGstY2dyb3VwLmMtMTA4OC0gKiBjZ3JvdXAncyBibGtjZ19ncS5cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xMTM1PXN0YXRpYyB2b2lkIGJsa2NnX3ByaW50X29uZV9zdGF0KHN0cnVjdCBibGtjZ19ncSAqYmxrZywgc3RydWN0IHNlcV9maWxlICpzKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTExODYtXFxuYmxvY2svYmxrLWNncm91cC5jOjExODc6c3RhdGljIGludCBibGtjZ19wcmludF9zdGF0KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuYmxvY2svYmxrLWNncm91cC5jLTExODgte1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTEyMDQ9c3RhdGljIHN0cnVjdCBjZnR5cGUgYmxrY2dfZmlsZXNbXSA9IHtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMjA2LVxcdFxcdC5uYW1lID0gXFxcInN0YXRcXFwiLFxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMjA3OlxcdFxcdC5zZXFfc2hvdyA9IGJsa2NnX3ByaW50X3N0YXQsXFxuYmxvY2svYmxrLWNncm91cC5jLTEyMDgtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MjQuNTMyMDE2Mjg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODEzODA0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczogKipWZXJpZnlpbmcgaW9fY2dycF9zdWJzeXMgUmVnaXN0cmF0aW9uKiouIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gd2hldGhlciB0aGUgYGJsa2NnX2ZpbGVzYCBhcmUgcHJvcGVybHkgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGBjZ3JvdXBfc3Vic3lzIGlvX2NncnBfc3Vic3lzYC4gIEkndmUgZ290IGEgbmFnZ2luZyBmZWVsaW5nIGFib3V0IHRoaXMgc3BlY2lmaWMgaW50ZXJhY3Rpb24sIGFuZCBJIHdhbnQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZSBpbmZyYXN0cnVjdHVyZSBpcyBiZWhhdmluZyBhcyBJIGV4cGVjdC4gTXkgaW1tZWRpYXRlIHBsYW4gaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGJsb2NrL2Jsay1jZ3JvdXAuY2AgZmlsZS4gSSdtIHRoaW5raW5nLCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UsIHRoZSByZWxldmFudCBsb2dpYyB3aWxsIGxpa2VseSByZXNpZGUgc29tZXdoZXJlIGluIHRoZSB2aWNpbml0eSBvZiBsaW5lIDEyMDAuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg0OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjA4OjI2LjQxMzM5ODQ5N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDI3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLWNncm91cC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDA6XFx0XFxuMTIwMTpcXHRcXHRyZXR1cm4gMDtcXG4xMjAyOlxcdH1cXG4xMjAzOlxcdFxcbjEyMDQ6XFx0c3RhdGljIHN0cnVjdCBjZnR5cGUgYmxrY2dfZmlsZXNbXSA9IHtcXG4xMjA1OlxcdFxcdHtcXG4xMjA2OlxcdFxcdFxcdC5uYW1lID0gXFxcInN0YXRcXFwiLFxcbjEyMDc6XFx0XFx0XFx0LnNlcV9zaG93ID0gYmxrY2dfcHJpbnRfc3RhdCxcXG4xMjA4OlxcdFxcdH0sXFxuMTIwOTpcXHRcXHR7IH1cXHQvKiB0ZXJtaW5hdGUgKi9cXG4xMjEwOlxcdH07XFxuMTIxMTpcXHRcXG4xMjEyOlxcdHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGJsa2NnX2xlZ2FjeV9maWxlc1tdID0ge1xcbjEyMTM6XFx0XFx0e1xcbjEyMTQ6XFx0XFx0XFx0Lm5hbWUgPSBcXFwicmVzZXRfc3RhdHNcXFwiLFxcbjEyMTU6XFx0XFx0XFx0LndyaXRlX3U2NCA9IGJsa2NnX3Jlc2V0X3N0YXRzLFxcbjEyMTY6XFx0XFx0fSxcXG4xMjE3OlxcdFxcdHsgfVxcdC8qIHRlcm1pbmF0ZSAqL1xcbjEyMTg6XFx0fTtcXG4xMjE5OlxcdFxcbjEyMjA6XFx0I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxuMTIyMTpcXHRzdHJ1Y3QgbGlzdF9oZWFkICpibGtjZ19nZXRfY2d3Yl9saXN0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuMTIyMjpcXHR7XFxuMTIyMzpcXHRcXHRyZXR1cm4gXFx1MDAyNmNzc190b19ibGtjZyhjc3MpLVxcdTAwM2VjZ3diX2xpc3Q7XFxuMTIyNDpcXHR9XFxuMTIyNTpcXHQjZW5kaWZcXG4xMjI2OlxcdFxcbjEyMjc6XFx0LypcXG4xMjI4OlxcdCAqIGJsa2NnIGRlc3RydWN0aW9uIGlzIGEgdGhyZWUtc3RhZ2UgcHJvY2Vzcy5cXG4xMjI5OlxcdCAqXFxuMTIzMDpcXHQgKiAxLiBEZXN0cnVjdGlvbiBzdGFydHMuICBUaGUgYmxrY2dfY3NzX29mZmxpbmUoKSBjYWxsYmFjayBpcyBpbnZva2VkXFxuMTIzMTpcXHQgKiAgICB3aGljaCBvZmZsaW5lcyB3cml0ZWJhY2suICBIZXJlIHdlIHRpZSB0aGUgbmV4dCBzdGFnZSBvZiBibGtnIGRlc3RydWN0aW9uXFxuMTIzMjpcXHQgKiAgICB0byB0aGUgY29tcGxldGlvbiBvZiB3cml0ZWJhY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBibGtjZy4gIFRoaXMgbGV0cyB1c1xcbjEyMzM6XFx0ICogICAgYXZvaWQgcHVudGluZyBwb3RlbnRpYWxseSBsYXJnZSBhbW91bnRzIG9mIG91dHN0YW5kaW5nIHdyaXRlYmFjayB0byByb290XFxuMTIzNDpcXHQgKiAgICB3aGlsZSBtYWludGFpbmluZyBhbnkgb25nb2luZyBwb2xpY2llcy4gIFRoZSBuZXh0IHN0YWdlIGlzIHRyaWdnZXJlZCB3aGVuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjA4OjI2LjQxMzc0MzM2N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTA5ODk2MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIEJsb2NrIElPIENncm91cCBTdGF0aXN0aWNzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGBibGtjZ19maWxlc2AgYW5kIGhvdyBpdCBkZWZpbmVzIHRoZSBcInN0YXRcIiBmaWxlIOKAkyB3aGljaCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBiZWNvbWVzIGBpby5zdGF0YCB3aGVuIHRoZSBjZ3JvdXAgY29udHJvbGxlciBhZGRzIHRoZSBwcmVmaXguIFRoZSBgYmxrY2dfcHJpbnRfc3RhdGAgZnVuY3Rpb24gaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQgY2FsbHMgYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKClgIHdoZW4gaXTigJlzIGRlYWxpbmcgd2l0aCB0aGUgcm9vdCBjZ3JvdXAuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIHRoaXMgd2FycmFudHMgZnV6emluZy4gSSd2ZSBnb3QgYSBnb29kIGZlZWxpbmcgYWJvdXQgdGhpcywgYmFzZWQgb24gdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS5cblxuTXkgYXNzZXNzbWVudCBpczpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlLioqIFRoaXMgZGVmaW5pdGVseSBoaXRzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGFuZCBsaWtlbHkgdG91Y2hlcyBjb3JlIHN1YnN5c3RlbXMgcmVsYXRpbmcgdG8gSU8gbWFuYWdlbWVudC4gVGhlIGNvZGUgY2hhbmdlcyBhcmUgbGlrZWx5IHJlbGV2YW50IHRvIHJlZmFjdG9yaW5nIG9yIGNvZGUgY2xlYW51cCB0b28uXG4qICAgKipGb2N1c1N5bWJvbHM6IFxcW+KAnGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRz4oCdLCDigJxibGtjZ19wcmludF9zdGF04oCdXS4qKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGhpZ2hseSBzcGVjaWZpYy4gVGhleSBhcmUgbm90IHViaXF1aXRvdXMgYWNyb3NzIHRoZSBrZXJuZWwsIHdoaWNoIGhlbHBzIG5hcnJvdyBkb3duIHRoZSB0YXJnZXQuIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0c2AgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkYXRhIHByb2Nlc3NpbmcgZXJyb3JzIHdoZW4gZmlsbGluZyB0aG9zZSBJTyBzdGF0cy5cbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcW+KAnEJMS19DR1JPVVDigJ1dLioqIFByZXR0eSBzdHJhaWdodGZvcndhcmQsIHRoZSBjZ3JvdXAgY29uZmlnIGlzIG5lZWRlZC5cblxuSSd2ZSBjYXJlZnVsbHkgY2hlY2tlZCB0aGlzIGFnYWluc3QgdGhlIGd1aWRlbGluZXMuIEl0IHNlZW1zIHRvIHRpY2sgYWxsIHRoZSBib3hlczogZXhlY3V0YWJsZSBjb2RlLCBzcGVjaWZpYyBmdW5jdGlvbnMgZm9yIGZvY3VzLCBhbmQgdGhlIHJpZ2h0IGNvbmZpZyByZXF1aXJlbWVudC5cblxuTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIOKAkyB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTAsIk91dHB1dFRva2VucyI6MTI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MjkuOTIzNjQxODUzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE4NTM0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtjZ19maWxsX3Jvb3RfaW9zdGF0c1wiLFxuICAgIFwiYmxrY2dfcHJpbnRfc3RhdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJvb3QgY2dyb3VwIEkvTyBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uIGluIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBjYXN0IHBlci1jcHUgc2VjdG9yIGNvdW50cyB0byB1NjQgYW5kIHVzZSBTRUNUT1JfU0hJRlQgYmVmb3JlIGFjY3VtdWxhdGluZyBpbnRvIGJ5dGUgY291bnRlcnMuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBibG9jayBjZ3JvdXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKGUuZy4gcmVhZGluZyBpby5zdGF0IG9uIHRoZSByb290IGNncm91cCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0NHUk9VUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzXCIsXG4gICAgXCJibGtjZ19wcmludF9zdGF0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcm9vdCBjZ3JvdXAgSS9PIHN0YXRpc3RpY3MgY2FsY3VsYXRpb24gaW4gYmxvY2svYmxrLWNncm91cC5jIHRvIGNhc3QgcGVyLWNwdSBzZWN0b3IgY291bnRzIHRvIHU2NCBhbmQgdXNlIFNFQ1RPUl9TSElGVCBiZWZvcmUgYWNjdW11bGF0aW5nIGludG8gYnl0ZSBjb3VudGVycy4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIGJsb2NrIGNncm91cCBzdGF0aXN0aWNzIHJlcG9ydGluZyAoZS5nLiByZWFkaW5nIGlvLnN0YXQgb24gdGhlIHJvb3QgY2dyb3VwKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MjkuOTk1NTAxMjkyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1NTI4NDcyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjA4OjI5Ljk5NTkxMDI3MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwOTU0ODcxOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIGR1cmluZyBzZWN0b3ItdG8tYnl0ZSBjb252ZXJzaW9uIGluIGBibGtjZ19maWxsX3Jvb3RfaW9zdGF0cygpYCBieSBjYXN0aW5nIGBjcHVfZGtzdGF0cy1cXHUwMDNlc2VjdG9yc1suLi5dYCB0byBgKHU2NClgIGFuZCB1c2luZyBgU0VDVE9SX1NISUZUYCBpbnN0ZWFkIG9mIGA5YC4gXFxuXFxuVGhlIGxvY2FsIHN0cnVjdHVyZSBgc3RydWN0IGJsa2dfaW9zdGF0IHRtcGAgaXMgYWxyZWFkeSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXQoXFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpYCBiZWZvcmUgYWNjdW11bGF0aW5nIHN0YXRzLCBhbmQgdGhlIHBlci1jcHUgc3RhdHMgcmVhZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIGNvdW50ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgdW5pbml0aWFsaXplZCBkYXRhIHBhdGhzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBwcmVzZW50IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGM4OGVhZjU3NDEzZGIxMTViMDUwMWNhYzI1ZDk1YmI3ZmJiMGI4ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTc6MDc6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcbmluZGV4IDJiNWMyOTQzNGU0MjYuLjQ3MWNmZDIzNDdjOWUgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcbisrKyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuQEAgLTExMTgsMTEgKzExMTgsMTEgQEAgc3RhdGljIHZvaWQgYmxrY2dfZmlsbF9yb290X2lvc3RhdHModm9pZClcbiBcdFx0XHRcdGNwdV9ka3N0YXRzLVx1MDAzZWlvc1tTVEFUX0RJU0NBUkRdO1xuIFx0XHRcdC8vIGNvbnZlcnQgc2VjdG9ycyB0byBieXRlc1xuIFx0XHRcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9SRUFEXSArPVxuLVx0XHRcdFx0Y3B1X2Rrc3RhdHMtXHUwMDNlc2VjdG9yc1tTVEFUX1JFQURdIFx1MDAzY1x1MDAzYyA5O1xuK1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfUkVBRF0gXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbiBcdFx0XHR0bXAuYnl0ZXNbQkxLR19JT1NUQVRfV1JJVEVdICs9XG4tXHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfV1JJVEVdIFx1MDAzY1x1MDAzYyA5O1xuK1x0XHRcdFx0KHU2NCljcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfV1JJVEVdIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQ7XG4gXHRcdFx0dG1wLmJ5dGVzW0JMS0dfSU9TVEFUX0RJU0NBUkRdICs9XG4tXHRcdFx0XHRjcHVfZGtzdGF0cy1cdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXHUwMDNjXHUwMDNjIDk7XG4rXHRcdFx0XHQodTY0KWNwdV9ka3N0YXRzLVx1MDAzZXNlY3RvcnNbU1RBVF9ESVNDQVJEXSBcdTAwM2NcdTAwM2MgU0VDVE9SX1NISUZUO1xuIFx0XHR9XG4gXG4gXHRcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNmJsa2ctXHUwMDNlaW9zdGF0LnN5bmMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MjkuOTk1OTEyNzAxWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1ODQ5MTkzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIEJsb2NrIENHcm91cHMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgZml4IGlzIGFwcGFyZW50bHkgbmVzdGxlZCB3aXRoaW4gYGJsb2NrL2Jsay1jZ3JvdXAuY2AuIExldCdzIGdldCByaWdodCB0byBpdC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbi4gTGluZSAxMTE4IHNvdW5kcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgc28gbGV0J3Mgc3RhcnQgdGhlcmUuIFRoaXMgc2hvdWxkIHF1aWNrbHkgaGlnaGxpZ2h0IHRoZSBzdXJyb3VuZGluZyBsb2dpYyBhbmQgYWxsb3cgbWUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlLiBUaGlzIGFwcHJvYWNoIGhlbHBzIG1lIHF1aWNrbHkgZ3Jhc3AgdGhlIHNjb3BlIG9mIHRoZSBmaXggYW5kIGFzc2VzcyBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBjZ3JvdXAgYmxvY2sgSS9PIGluZnJhc3RydWN0dXJlLiBJJ20ga2VlbiB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB0aGlzIGNvZGUsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHRoZSBwcm9ibGVtIG9yIHRoZSBmaXgsIHN1Y2ggYXMgY29tbWVudHMgb3IgdmFyaWFibGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzowODozNS41ODA4MzQ2NTVaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTAwOlxcdFxcdGNsYXNzX2Rldl9pdGVyX2luaXQoXFx1MDAyNml0ZXIsIFxcdTAwMjZibG9ja19jbGFzcywgTlVMTCwgXFx1MDAyNmRpc2tfdHlwZSk7XFxuMTEwMTpcXHRcXHR3aGlsZSAoKGRldiA9IGNsYXNzX2Rldl9pdGVyX25leHQoXFx1MDAyNml0ZXIpKSkge1xcbjExMDI6XFx0XFx0XFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGRldl90b19iZGV2KGRldik7XFxuMTEwMzpcXHRcXHRcXHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cgPSBiZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2VxdWV1ZS1cXHUwMDNlcm9vdF9ibGtnO1xcbjExMDQ6XFx0XFx0XFx0c3RydWN0IGJsa2dfaW9zdGF0IHRtcDtcXG4xMTA1OlxcdFxcdFxcdGludCBjcHU7XFxuMTEwNjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjExMDc6XFx0XFxuMTEwODpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpO1xcbjExMDk6XFx0XFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbjExMTA6XFx0XFx0XFx0XFx0c3RydWN0IGRpc2tfc3RhdHMgKmNwdV9ka3N0YXRzO1xcbjExMTE6XFx0XFxuMTExMjpcXHRcXHRcXHRcXHRjcHVfZGtzdGF0cyA9IHBlcl9jcHVfcHRyKGJkZXYtXFx1MDAzZWJkX3N0YXRzLCBjcHUpO1xcbjExMTM6XFx0XFx0XFx0XFx0dG1wLmlvc1tCTEtHX0lPU1RBVF9SRUFEXSArPVxcbjExMTQ6XFx0XFx0XFx0XFx0XFx0Y3B1X2Rrc3RhdHMtXFx1MDAzZWlvc1tTVEFUX1JFQURdO1xcbjExMTU6XFx0XFx0XFx0XFx0dG1wLmlvc1tCTEtHX0lPU1RBVF9XUklURV0gKz1cXG4xMTE2OlxcdFxcdFxcdFxcdFxcdGNwdV9ka3N0YXRzLVxcdTAwM2Vpb3NbU1RBVF9XUklURV07XFxuMTExNzpcXHRcXHRcXHRcXHR0bXAuaW9zW0JMS0dfSU9TVEFUX0RJU0NBUkRdICs9XFxuMTExODpcXHRcXHRcXHRcXHRcXHRjcHVfZGtzdGF0cy1cXHUwMDNlaW9zW1NUQVRfRElTQ0FSRF07XFxuMTExOTpcXHRcXHRcXHRcXHQvLyBjb252ZXJ0IHNlY3RvcnMgdG8gYnl0ZXNcXG4xMTIwOlxcdFxcdFxcdFxcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9SRUFEXSArPVxcbjExMjE6XFx0XFx0XFx0XFx0XFx0KHU2NCljcHVfZGtzdGF0cy1cXHUwMDNlc2VjdG9yc1tTVEFUX1JFQURdIFxcdTAwM2NcXHUwMDNjIFNFQ1RPUl9TSElGVDtcXG4xMTIyOlxcdFxcdFxcdFxcdHRtcC5ieXRlc1tCTEtHX0lPU1RBVF9XUklURV0gKz1cXG4xMTIzOlxcdFxcdFxcdFxcdFxcdCh1NjQpY3B1X2Rrc3RhdHMtXFx1MDAzZXNlY3RvcnNbU1RBVF9XUklURV0gXFx1MDAzY1xcdTAwM2MgU0VDVE9SX1NISUZUO1xcbjExMjQ6XFx0XFx0XFx0XFx0dG1wLmJ5dGVzW0JMS0dfSU9TVEFUX0RJU0NBUkRdICs9XFxuMTEyNTpcXHRcXHRcXHRcXHRcXHQodTY0KWNwdV9ka3N0YXRzLVxcdTAwM2VzZWN0b3JzW1NUQVRfRElTQ0FSRF0gXFx1MDAzY1xcdTAwM2MgU0VDVE9SX1NISUZUO1xcbjExMjY6XFx0XFx0XFx0fVxcbjExMjc6XFx0XFxuMTEyODpcXHRcXHRcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2YmxrZy1cXHUwMDNlaW9zdGF0LnN5bmMpO1xcbjExMjk6XFx0XFx0XFx0YmxrZ19pb3N0YXRfc2V0KFxcdTAwMjZibGtnLVxcdTAwM2Vpb3N0YXQuY3VyLCBcXHUwMDI2dG1wKTtcXG4xMTMwOlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNmJsa2ctXFx1MDAzZWlvc3RhdC5zeW5jLCBmbGFncyk7XFxuMTEzMTpcXHRcXHR9XFxuMTEzMjpcXHRcXHRjbGFzc19kZXZfaXRlcl9leGl0KFxcdTAwMjZpdGVyKTtcXG4xMTMzOlxcdH1cXG4xMTM0OlxcdFxcbjExMzU6XFx0c3RhdGljIHZvaWQgYmxrY2dfcHJpbnRfb25lX3N0YXQoc3RydWN0IGJsa2NnX2dxICpibGtnLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXFxuMTEzNjpcXHR7XFxuMTEzNzpcXHRcXHRzdHJ1Y3QgYmxrZ19pb3N0YXRfc2V0ICpiaXMgPSBcXHUwMDI2YmxrZy1cXHUwMDNlaW9zdGF0O1xcbjExMzg6XFx0XFx0dTY0IHJieXRlcywgd2J5dGVzLCByaW9zLCB3aW9zLCBkYnl0ZXMsIGRpb3M7XFxuMTEzOTpcXHRcXHRjb25zdCBjaGFyICpkbmFtZTtcXG4xMTQwOlxcdFxcdHVuc2lnbmVkIHNlcTtcXG4xMTQxOlxcdFxcdGludCBpO1xcbjExNDI6XFx0XFxuMTE0MzpcXHRcXHRpZiAoIWJsa2ctXFx1MDAzZW9ubGluZSlcXG4xMTQ0OlxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6MDg6MzUuNTgwOTc5NjU1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNjk3ODQxOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTZWN0b3ItdG8tQnl0ZSBDb252ZXJzaW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBkaWZmLCBpdCdzIHByZXR0eSBjbGVhciB3aGF0J3MgaGFwcGVuaW5nLiBXZSdyZSBkZWFsaW5nIHdpdGggY29udmVydGluZyBzZWN0b3IgY291bnRzIGZyb20gYGNwdV9ka3N0YXRzLVx1MDAzZXNlY3RvcnNgIHRvIGJ5dGUgY291bnRzIGZvciBJL08gc3RhdGlzdGljcy4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGRvaW5nIGEgbGVmdCBzaGlmdCBieSA5IGJpdHMgKGBcdTAwM2NcdTAwM2MgOWApLCB3aGljaCwgYXMgSSBzdXNwZWN0ZWQsIGNvdWxkIHBvdGVudGlhbGx5IGNhdXNlIGludGVnZXIgb3ZlcmZsb3csIGVzcGVjaWFsbHkgb24gMzItYml0IGFyY2hpdGVjdHVyZXMgd2hlbiB3b3JraW5nIHdpdGggYHVuc2lnbmVkIGxvbmdgIHNlY3RvciBjb3VudHMuIFRoZSBmaXggaW52b2x2ZXMgY2FzdGluZyB0byBgKHU2NClgIGFuZCB1c2luZyBgU0VDVE9SX1NISUZUYCwgd2hpY2ggaXMgYWxtb3N0IGNlcnRhaW5seSBkZWZpbmVkIGFzIDkgKG9yIHNvbWUgZXF1aXZhbGVudCBwb3dlci1vZi10d28sIHdoaWNoIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGRvIGl0KS4gVGhpcyBwcmV2ZW50cyB0cnVuY2F0aW9uIGFuZCBlbnN1cmVzIHRoZSBieXRlIGNvdW50IGNhbGN1bGF0aW9uIGlzIGFjY3VyYXRlLCBldmVuIHdpdGggbGFyZ2Ugc2VjdG9yIGNvdW50cy5cblxuTXkgbmV4dCB0aG91Z2h0IGlzIGFsd2F5cyB0byBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEkgc2VlIHRoYXQgYHN0cnVjdCBibGtnX2lvc3RhdCB0bXA7YCBpcyBleHBsaWNpdGx5IGNsZWFyZWQgd2l0aCBgbWVtc2V0YCBiZWZvcmUgdGhlIGFjY3VtdWxhdGlvbiBsb29wLiBGdXJ0aGVybW9yZSwgYGNwdV9ka3N0YXRzYCBsb29rcyB0byBiZSBkZXJpdmVkIGZyb20gcHJvcGVybHkgaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgYW5kIHRoZSB2YWx1ZSBpcyBhY2N1bXVsYXRlZCBpbnRvIHRoZSB0ZW1wb3JhcnkgYnVmZmVyLiBUaGVyZSBhcmUgbm8gZXhwb3NlZCBwb2ludGVycyB0byB1bmluaXRpYWxpemVkIGRhdGEsIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIG5ldyBhbGxvY2F0aW9uIGlzc3Vlcy4gVGhlIGRhdGEgaXMgb25seSBhY2N1bXVsYXRlZCBpbiBgdG1wYCBhbmQgY29waWVkIHRvIGBibGtnLVx1MDAzZWlvc3RhdC5jdXJgIHVzaW5nIGEgZnVuY3Rpb24sIGFuZCBpcyBzYWZlLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGlkZWEgdGhhdCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFyaXRobWV0aWMvdHlwZSBjYXN0aW5nIGNvcnJlY3Rpb24uXG5cblRoZXJlZm9yZSwgdGhlIEtNU0FOIHF1ZXN0aW9uIGlzIGVhc2lseSBhbnN3ZXJlZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgcmVhZCwgYWNjZXNzZWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEkndmUgcmV2aWV3ZWQgdGhlIGNvbW1vbiBzY2VuYXJpb3Mgd2hlcmUgS01TQU4gYmVjb21lcyByZWxldmFudCBhbmQgbm9uZSBvZiB0aG9zZSBhcmUgYXBwbGljYWJsZSBoZXJlLiBUaGUgYE5lZWRzS01TQU5gIGZsYWcgaXMgZGVmaW5pdGl2ZWx5IGZhbHNlLlxuXG5GaW5hbGx5LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoaXMgY2hhbmdlIGlzIHB1cmVseSBhYm91dCB0eXBlIHNhZmV0eSBhbmQgYXZvaWRzIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IGR1cmluZyB0aGUgc2VjdG9yLXRvLWJ5dGUgY29udmVyc2lvbi4gSSBhbSBwcmVwYXJlZCB0byAnc2V0LXJlc3VsdHMnLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjkzLCJPdXRwdXRUb2tlbnMiOjE4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjA4OjQwLjk1MDc2NTk1MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSBkdXJpbmcgc2VjdG9yLXRvLWJ5dGUgY29udmVyc2lvbiBpbiBgYmxrY2dfZmlsbF9yb290X2lvc3RhdHMoKWAgYnkgY2FzdGluZyBgY3B1X2Rrc3RhdHMtXFx1MDAzZXNlY3RvcnNbLi4uXWAgdG8gYCh1NjQpYCBhbmQgdXNpbmcgYFNFQ1RPUl9TSElGVGAgaW5zdGVhZCBvZiBgOWAuIFxcblxcblRoZSBsb2NhbCBzdHJ1Y3R1cmUgYHN0cnVjdCBibGtnX2lvc3RhdCB0bXBgIGlzIGFscmVhZHkgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0KFxcdTAwMjZ0bXAsIDAsIHNpemVvZih0bXApKWAgYmVmb3JlIGFjY3VtdWxhdGluZyBzdGF0cywgYW5kIHRoZSBwZXItY3B1IHN0YXRzIHJlYWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGtlcm5lbCBjb3VudGVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBwYXRocyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgcHJlc2VudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgZHVyaW5nIHNlY3Rvci10by1ieXRlIGNvbnZlcnNpb24gaW4gYGJsa2NnX2ZpbGxfcm9vdF9pb3N0YXRzKClgIGJ5IGNhc3RpbmcgYGNwdV9ka3N0YXRzLVxcdTAwM2VzZWN0b3JzWy4uLl1gIHRvIGAodTY0KWAgYW5kIHVzaW5nIGBTRUNUT1JfU0hJRlRgIGluc3RlYWQgb2YgYDlgLiBcXG5cXG5UaGUgbG9jYWwgc3RydWN0dXJlIGBzdHJ1Y3QgYmxrZ19pb3N0YXQgdG1wYCBpcyBhbHJlYWR5IGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldChcXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBhY2N1bXVsYXRpbmcgc3RhdHMsIGFuZCB0aGUgcGVyLWNwdSBzdGF0cyByZWFkIGFyZSBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgY291bnRlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciB1bmluaXRpYWxpemVkIGRhdGEgcGF0aHMgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHByZXNlbnQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh7dc[1] Phase: Succeeded StartedAt: 2026-09-05 17:08:51 +0000 UTC FinishedAt: 2026-09-05 17:08:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 17:08:51 +0000 UTC FinishedAt: 2026-09-05 17:08:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2] Phase: Succeeded StartedAt: 2026-09-05 17:08:51 +0000 UTC FinishedAt: 2026-09-05 17:48:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 17:08:51 +0000 UTC FinishedAt: 2026-09-05 17:48:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 17:08:51 +0000 UTC FinishedAt: 2026-09-05 17:09:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 17:08:51 +0000 UTC FinishedAt: 2026-09-05 17:08:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhh7dc/series-workflowhh7dc-convert-artifact-2414357306/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 17:09:01 +0000 UTC FinishedAt: 2026-09-05 17:24:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 17:09:01 +0000 UTC FinishedAt: 2026-09-05 17:24:55 +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:*6e60c2d5-f36d-4ddd-b50a-d6045a9b8ff6,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-workflowhh7dc/series-workflowhh7dc-convert-artifact-2414357306/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": "e2d003c3-b0ea-473f-b19a-fc9469d86c25", "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-workflowhh7dc/series-workflowhh7dc-build-action-3391447272/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 17:09:01 +0000 UTC FinishedAt: 2026-09-05 17:24:45 +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:*6e60c2d5-f36d-4ddd-b50a-d6045a9b8ff6,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-workflowhh7dc/series-workflowhh7dc-convert-artifact-2414357306/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": "e2d003c3-b0ea-473f-b19a-fc9469d86c25", "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-workflowhh7dc/series-workflowhh7dc-build-action-3391447272/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 17:24:55 +0000 UTC FinishedAt: 2026-09-05 17:24:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 17:24:55 +0000 UTC FinishedAt: 2026-09-05 17:24:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 17:24:55 +0000 UTC FinishedAt: 2026-09-05 17:25:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 17:24:55 +0000 UTC FinishedAt: 2026-09-05 17:25:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhh7dc/series-workflowhh7dc-convert-artifact-375344021/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 17:25:05 +0000 UTC FinishedAt: 2026-09-05 17:26:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 17:25:05 +0000 UTC FinishedAt: 2026-09-05 17:26:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e2d003c3-b0ea-473f-b19a-fc9469d86c25,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-workflowhh7dc/series-workflowhh7dc-build-action-3391447272/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-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 17:26:35 +0000 UTC FinishedAt: 2026-09-05 17:26:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 17:26:35 +0000 UTC FinishedAt: 2026-09-05 17:26:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 17:26:35 +0000 UTC FinishedAt: 2026-09-05 17:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 17:26:35 +0000 UTC FinishedAt: 2026-09-05 17:43:11 +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:*6e60c2d5-f36d-4ddd-b50a-d6045a9b8ff6,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-workflowhh7dc/series-workflowhh7dc-convert-artifact-375344021/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": "f2c957ad-30c0-4c9f-8640-e92769ae4d9a", "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-workflowhh7dc/series-workflowhh7dc-build-action-489550369/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 17:26:35 +0000 UTC FinishedAt: 2026-09-05 17:43:00 +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:*6e60c2d5-f36d-4ddd-b50a-d6045a9b8ff6,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-workflowhh7dc/series-workflowhh7dc-convert-artifact-375344021/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": "f2c957ad-30c0-4c9f-8640-e92769ae4d9a", "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-workflowhh7dc/series-workflowhh7dc-build-action-489550369/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 17:43:11 +0000 UTC FinishedAt: 2026-09-05 17:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 17:43:11 +0000 UTC FinishedAt: 2026-09-05 17:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 17:43:11 +0000 UTC FinishedAt: 2026-09-05 17:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 17:43:11 +0000 UTC FinishedAt: 2026-09-05 17:44:59 +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:*f2c957ad-30c0-4c9f-8640-e92769ae4d9a,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-workflowhh7dc/series-workflowhh7dc-build-action-489550369/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-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 17:45:09 +0000 UTC FinishedAt: 2026-09-05 17:48:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 17:45:09 +0000 UTC FinishedAt: 2026-09-05 17:48:10 +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":["blkcg_fill_root_iostats","blkcg_print_stat"],"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:*e2d003c3-b0ea-473f-b19a-fc9469d86c25,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f2c957ad-30c0-4c9f-8640-e92769ae4d9a,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-workflowhh7dc/series-workflowhh7dc-build-action-3391447272/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-workflowhh7dc/series-workflowhh7dc-build-action-489550369/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 17:45:09 +0000 UTC FinishedAt: 2026-09-05 17:45:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 17:45:09 +0000 UTC FinishedAt: 2026-09-05 17:45:16 +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":["blkcg_fill_root_iostats","blkcg_print_stat"],"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-workflowhh7dc/series-workflowhh7dc-convert-artifact-2658735226/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 17:45:09 +0000 UTC FinishedAt: 2026-09-05 17:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 17:45:09 +0000 UTC FinishedAt: 2026-09-05 17:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 17:45:10 +0000 UTC FinishedAt: 2026-09-05 17:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 17:45:21 +0000 UTC FinishedAt: 2026-09-05 17:48:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh7dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkcg_fill_root_iostats","blkcg_print_stat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP"],"series_id":"c0eb2ffe-1bcd-40ae-928a-548d4b9577c5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 17:45:21 +0000 UTC FinishedAt: 2026-09-05 17:47:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e2d003c3-b0ea-473f-b19a-fc9469d86c25,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f2c957ad-30c0-4c9f-8640-e92769ae4d9a,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-workflowhh7dc/series-workflowhh7dc-build-action-3391447272/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-workflowhh7dc/series-workflowhh7dc-build-action-489550369/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-workflowhh7dc/series-workflowhh7dc-convert-artifact-2658735226/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,}