Name: series-workflownrgll Phase: Succeeded StartedAt: 2026-08-26 05:15:04 +0000 UTC FinishedAt: 2026-08-26 08:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[0] Phase: Succeeded StartedAt: 2026-08-26 05:15:04 +0000 UTC FinishedAt: 2026-08-26 05:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 05:15:04 +0000 UTC FinishedAt: 2026-08-26 05:18:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "5870ce43c013ad564b3b83bae330b160e056df67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "5870ce43c013ad564b3b83bae330b160e056df67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "749d444c-d3d0-48c5-8926-ba3eba4321f4" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_fill_super", "ntfs_init_fs_context" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7bnRmc19pbml0X2ZzX2NvbnRleHQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdGhlIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCBmaWVsZCBpbiB0aGUgTlRGUyBib290IHNlY3RvciAoYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGluIGBmcy9udGZzL3N1cGVyLmNgKS4gVGhlIGJvb3Qgc2VjdG9yIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBibG9jayBkZXZpY2UsIG1lYW5pbmcgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGV2ZW4gaWYgcG90ZW50aWFsbHkgbWFsaWNpb3VzIG9yIG1hbGZvcm1lZCkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBpc3N1ZXMgYXJpc2luZyBmcm9tIG1hbGZvcm1lZCBkaXNrIHN0cnVjdHVyZXMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnRlZ2VyIG92ZXJmbG93cykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRGUyBib290IHNlY3RvciB2YWxpZGF0aW9uIGxvZ2ljIGluIGBpc19ib290X3NlY3Rvcl9udGZzYCBieSBjaGFuZ2luZyB0aGUgY29uZGl0aW9uIGZvciBgc2VjdG9yc19wZXJfY2x1c3RlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIG1vdW50IHBhdGgsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUxNTZiZTBhNGYzZjVmNWNlYjAwN2M3MjU4MDZlZTMyYjhkN2UxYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwNToxNjo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmNcbmluZGV4IDhhYmU3YmVlNGMwZDkuLjcyZjE5MzMxMzZkYzEgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvc3VwZXIuY1xuQEAgLTU1Nyw4ICYjNDM7NTU3LDggQEAgc3RhdGljIGJvb2wgaXNfYm9vdF9zZWN0b3JfbnRmcyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0ICogQ2hlY2sgc2VjdG9ycyBwZXIgY2x1c3RlciB2YWx1ZSBpcyB2YWxpZCBhbmQgdGhlIGNsdXN0ZXIgc2l6ZVxuIFx0ICogaXMgbm90IGFib3ZlIHRoZSBtYXhpbXVtICgyTUIpLlxuIFx0ICovXG4tXHRpZiAoYi1cdTAwM2VicGIuc2VjdG9yc19wZXJfY2x1c3RlciBcdTAwM2UgMHg4MCBcdTAwMjZcdTAwMjZcbi1cdCAgICBiLVx1MDAzZWJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyIFx1MDAzYyAweGY0KVxuJiM0MztcdGlmIChiLVx1MDAzZWJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyIFx1MDAzYyAweGY0IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhaXNfcG93ZXJfb2ZfMihiLVx1MDAzZWJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyKSlcbiBcdFx0Z290byBub3RfbnRmcztcbiBcbiBcdC8qIENoZWNrIHJlc2VydmVkL3VudXNlZCBmaWVsZHMgYXJlIHJlYWxseSB6ZXJvLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O250ZnNfaW5pdF9mc19jb250ZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVEZTIGJvb3Qgc2VjdG9yIHZhbGlkYXRpb24gbG9naWMgaW4gYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGJ5IGNoYW5naW5nIHRoZSBjb25kaXRpb24gZm9yIGBzZWN0b3JzX3Blcl9jbHVzdGVyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gbW91bnQgcGF0aCwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgd2hlbiBtb3VudGluZyBhIGNyYWZ0ZWQgTlRGUyBpbWFnZS4gVGhlcmVmb3JlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTE1NmJlMGE0ZjNmNWY1Y2ViMDA3YzcyNTgwNmVlMzJiOGQ3ZTFhOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDA1OjE2OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9zdXBlci5jIGIvZnMvbnRmcy9zdXBlci5jCmluZGV4IDhhYmU3YmVlNGMwZDkuLjcyZjE5MzMxMzZkYzEgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL3N1cGVyLmMKQEAgLTU1Nyw4ICYjNDM7NTU3LDggQEAgc3RhdGljIGJvb2wgaXNfYm9vdF9zZWN0b3JfbnRmcyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCSAqIENoZWNrIHNlY3RvcnMgcGVyIGNsdXN0ZXIgdmFsdWUgaXMgdmFsaWQgYW5kIHRoZSBjbHVzdGVyIHNpemUKIAkgKiBpcyBub3QgYWJvdmUgdGhlIG1heGltdW0gKDJNQikuCiAJICovCi0JaWYgKGItJmd0O2JwYi5zZWN0b3JzX3Blcl9jbHVzdGVyICZndDsgMHg4MCAmYW1wOyZhbXA7Ci0JICAgIGItJmd0O2JwYi5zZWN0b3JzX3Blcl9jbHVzdGVyICZsdDsgMHhmNCkKJiM0MzsJaWYgKGItJmd0O2JwYi5zZWN0b3JzX3Blcl9jbHVzdGVyICZsdDsgMHhmNCAmYW1wOyZhbXA7CiYjNDM7CSAgICAhaXNfcG93ZXJfb2ZfMihiLSZndDticGIuc2VjdG9yc19wZXJfY2x1c3RlcikpCiAJCWdvdG8gbm90X250ZnM7CiAKIAkvKiBDaGVjayByZXNlcnZlZC91bnVzZWQgZmllbGRzIGFyZSByZWFsbHkgemVyby4gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOVEZTIEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyB0aGUgYm9vdCBzZWN0b3IgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiBgZnMvbnRmcy9zdXBlci5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBob3cgd2UmIzM5O3JlIGNoZWNraW5nIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCBkdXJpbmcgdGhlIGBpc19ib290X3NlY3Rvcl9udGZzYCBmdW5jdGlvbiwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyBjYWxsZWQgZHVyaW5nIHRoZSBtb3VudCBwcm9jZXNzLgoKUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIHJlamVjdGluZyB2YWx1ZXMgb3V0c2lkZSBhIGZhaXJseSBuYXJyb3cgcmFuZ2U6IGFueXRoaW5nIGdyZWF0ZXIgdGhhbiBgMHg4MGAgKmFuZCogbGVzcyB0aGFuIGAweGY0YC4gTm93LCBpdCYjMzk7cyBhIGJpdCBtb3JlIG51YW5jZWQuIFdlJiMzOTtyZSBvbmx5IHJlamVjdGluZyB2YWx1ZXMgKmxlc3MqIHRoYW4gYDB4ZjRgICppZiogdGhleSBhcmVuJiMzOTt0IGEgcG93ZXIgb2YgdHdvLiBUaGlzIGlzIGFuIGltcG9ydGFudCBkaXN0aW5jdGlvbiwgYXMgdGhlIHByZXZpb3VzIGxvZ2ljIGNvdWxkIHBvdGVudGlhbGx5IHJlamVjdCB2YWxpZCBjb25maWd1cmF0aW9ucy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IGFmZmVjdHMgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgTlRGUyBpbWFnZXMg4oCTIHdoaWNoLCBmcm9tIG15IHBlcnNwZWN0aXZlLCBtZWFucyB0aGlzIGlzIHNvbWV0aGluZyB0aGF0JiMzOTtzIHJpcGUgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIE5URlMgaXMgYSBmaWxlc3lzdGVtLCBzbyB3ZSBjYW4gbW91bnQgbG9vcGJhY2sgaW1hZ2VzLCBhbmQgdGVzdCB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZWQgYW55IG5ldyBidWdzLiBUaW1lIHRvIGNoZWNrIGBmcy9udGZzL3N1cGVyLmNgIGZvciBjb250ZXh0IGFuZCB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19ib290X3NlY3Rvcl9udGZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYz00NDI9aW50IG50ZnNfd3JpdGVfdm9sdW1lX2xhYmVsKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjaGFyICpsYWJlbClcbi0tXG5mcy9udGZzL3N1cGVyLmMtNTE4LS8qXG5mcy9udGZzL3N1cGVyLmM6NTE5OiAqIGlzX2Jvb3Rfc2VjdG9yX250ZnMgLSBjaGVjayB3aGV0aGVyIGEgYm9vdCBzZWN0b3IgaXMgYSB2YWxpZCBOVEZTIGJvb3Qgc2VjdG9yXG5mcy9udGZzL3N1cGVyLmMtNTIwLSAqIEBzYjpcdFx0U3VwZXIgYmxvY2sgb2YgdGhlIGRldmljZSB0byB3aGljaCBAYiBiZWxvbmdzLlxuLS1cbmZzL250ZnMvc3VwZXIuYy01MjMtICpcbmZzL250ZnMvc3VwZXIuYzo1MjQ6ICogaXNfYm9vdF9zZWN0b3JfbnRmcygpIGNoZWNrcyB3aGV0aGVyIHRoZSBib290IHNlY3RvciBAYiBpcyBhIHZhbGlkIE5URlMgYm9vdFxuZnMvbnRmcy9zdXBlci5jLTUyNS0gKiBzZWN0b3IuIFJldHVybnMgJiMzOTt0cnVlJiMzOTsgaWYgaXQgaXMgdmFsaWQgYW5kICYjMzk7ZmFsc2UmIzM5OyBpZiBub3QuXG4tLVxuZnMvbnRmcy9zdXBlci5jLTUyOS0gKi9cbmZzL250ZnMvc3VwZXIuYzo1MzA6c3RhdGljIGJvb2wgaXNfYm9vdF9zZWN0b3JfbnRmcyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvbnRmcy9zdXBlci5jLTUzMS1cdFx0Y29uc3Qgc3RydWN0IG50ZnNfYm9vdF9zZWN0b3IgKmIsIGNvbnN0IGJvb2wgc2lsZW50KVxuLS1cbmZzL250ZnMvc3VwZXIuYz02MDg9c3RhdGljIGNoYXIgKnJlYWRfbnRmc19ib290X3NlY3RvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL250ZnMvc3VwZXIuYy02MjMtXG5mcy9udGZzL3N1cGVyLmM6NjI0Olx0aWYgKCFpc19ib290X3NlY3Rvcl9udGZzKHNiLCAoc3RydWN0IG50ZnNfYm9vdF9zZWN0b3IgKilib290X3NlY3RvcixcbmZzL250ZnMvc3VwZXIuYy02MjUtXHRcdFx0XHQgc2lsZW50KSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBOVEZTIE1vdW50IFByb2Nlc3MgRGVlcCBEaXZlKioKCk9rYXksIHNvIGBpc19ib290X3NlY3Rvcl9udGZzYCBpcyAqZGVmaW5pdGVseSogcGFydCBvZiB0aGUgY3JpdGljYWwgcGF0aCBoZXJlLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgcmVhZF9udGZzX2Jvb3Rfc2VjdG9yYCwgd2hpY2ggaW4gdHVybiBmZWVkcyBpbnRvIGBudGZzX2ZpbGxfc3VwZXJgLiBUaGF0IHB1dHMgaXQgc3F1YXJlbHkgaW4gdGhlIG1vdW50IHByb2Nlc3MsIGFuZCBhIHByZXR0eSBlYXJseSBzdGFnZSwgaXQgc2VlbXMuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJvb3Qgc2VjdG9yIGlzIHZhbGlkYXRlZCBhbmQgaGFuZGxlZCBhcyB0aGlzIGRldGVybWluZXMgaG93IHRoZSByZXN0IG9mIHRoZSBmaWxlIHN5c3RlbSBnZXRzIGludGVycHJldGVkLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmRpdGlvbnMgbWlnaHQgbWFrZSB0aGlzIGZ1bmN0aW9uIGZhaWwuIE5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgTlRGUyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlLiBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBlbnN1cmUgaXQmIzM5O3MgcHJvcGVybHkgZW5hYmxlZCBhbmQgYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcbmZzL250ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXG4tLVxuZnMvbnRmcy9LY29uZmlnLTM0LVxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OgoKKipBbmFseXppbmcgdGhlIE5URlMgQm9vdCBTZWN0b3IgTG9naWMqKgoKQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5pdGVseSB0YXJnZXRpbmcgYW4gTlRGUyBmaWxlc3lzdGVtLCBgTlRGU19GU2AuIE15IGJyYWluIGltbWVkaWF0ZWx5IHN0YXJ0cyB0cmFjaW5nIHRoZSBmbG93Li4uIFdlIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGBpc19ib290X3NlY3Rvcl9udGZzYC4gR29vZCwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsOyBpdCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgaW50ZXJuYWwgYW5kIGRvZXNuJiMzOTt0IGdldCBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoaXMgbW9kdWxlLCBtYWtpbmcgZGVidWdnaW5nIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYSBsaXR0bGUgZWFzaWVyLiBOb3csIHdobyBjYWxscyAqdGhhdCogZnVuY3Rpb24/IExvb2tzIGxpa2UgYHJlYWRfbnRmc19ib290X3NlY3RvcmAuLi4gYWxzbyBzdGF0aWMuIEV4Y2VsbGVudC4gU28sIGBpc19ib290X3NlY3Rvcl9udGZzYCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZyb20gd2l0aGluIGByZWFkX250ZnNfYm9vdF9zZWN0b3JgLiBBbmQgbGFzdGx5LCBgcmVhZF9udGZzX2Jvb3Rfc2VjdG9yYCBpcyBjYWxsZWQgYnkgYG50ZnNfZmlsbF9zdXBlcmAuIFRoaXMgZ2l2ZXMgbWUgdGhlIGJpZyBwaWN0dXJlLiBJIGNhbiBub3cgc2FmZWx5IGFzc3VtZSB0aGF0IGBudGZzX2ZpbGxfc3VwZXJgIGlzIGxpa2VseSB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBwYXJzZSB0aGUgZmlsZXN5c3RlbSwgd2l0aCBgcmVhZF9udGZzX2Jvb3Rfc2VjdG9yYCByZXNwb25zaWJsZSBmb3IgcHVsbGluZyB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgYm9vdCBzZWN0b3IsIGFuZCB0aGUgc3RhdGljIGZ1bmN0aW9ucyBiZWluZyB1c2VkIHRvIGNoZWNrIGlmIHRoZSB2b2x1bWUgdGhhdCBpcyBwYXNzZWQgdG8gaXQgY29udGFpbnMgTlRGUy4gVGhlIGBzdGF0aWNgIGtleXdvcmRzIHRlbGwgbWUgdGhhdCYjMzk7cyB0aGUgc2NvcGUgb2YgdGhlIGNoZWNrLCBhcyB0aGlzIGlzIGFsbCBsb2NhbC4gVGhpcyBpcyBhIHNvbGlkLCBjbGVhbiBmbG93OyB0aGUgYm9vdCBzZWN0b3IgY2hlY2sgYW5kIHJlYWQgYXJlIGVuY2Fwc3VsYXRlZCB3aXRoaW4gdGhpcyBtb2R1bGUsIGNvbmZpcm1pbmcgYSBuaWNlLCBtb2R1bGFyIGRlc2lnbi4gTm93LCBJIGhhdmUgYSBnb29kIGZyYW1ld29yayBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYm9vdCBzZWN0b3IgcGFyc2luZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWRfbnRmc19ib290X3NlY3RvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmM9NTMwPXN0YXRpYyBib29sIGlzX2Jvb3Rfc2VjdG9yX250ZnMoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9udGZzL3N1cGVyLmMtNjAxLS8qXG5mcy9udGZzL3N1cGVyLmM6NjAyOiAqIHJlYWRfbnRmc19ib290X3NlY3RvciAtIHJlYWQgdGhlIE5URlMgYm9vdCBzZWN0b3Igb2YgYSBkZXZpY2VcbmZzL250ZnMvc3VwZXIuYy02MDMtICogQHNiOlx0XHRzdXBlciBibG9jayBvZiBkZXZpY2UgdG8gcmVhZCB0aGUgYm9vdCBzZWN0b3IgZnJvbVxuLS1cbmZzL250ZnMvc3VwZXIuYy02MDctICovXG5mcy9udGZzL3N1cGVyLmM6NjA4OnN0YXRpYyBjaGFyICpyZWFkX250ZnNfYm9vdF9zZWN0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL250ZnMvc3VwZXIuYy02MDktXHRcdGNvbnN0IGludCBzaWxlbnQpXG4tLVxuZnMvbnRmcy9zdXBlci5jPTIyMDE9c3RhdGljIGludCBudGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL250ZnMvc3VwZXIuYy0yMjY4LVx0LyogUmVhZCB0aGUgYm9vdCBzZWN0b3IgYW5kIHJldHVybiB1bmxvY2tlZCBidWZmZXIgaGVhZCB0byBpdC4gKi9cbmZzL250ZnMvc3VwZXIuYzoyMjY5Olx0Ym9vdCA9IHJlYWRfbnRmc19ib290X3NlY3RvcihzYiwgc2lsZW50KTtcbmZzL250ZnMvc3VwZXIuYy0yMjcwLVx0aWYgKCFib290KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkh1bnRpbmcgZm9yIHRoZSBSZWFsIEVudHJ5IFBvaW50KioKCk9rYXksIHNvIGBudGZzX2ZpbGxfc3VwZXJgIGlzIG1hcmtlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBtZWFucyBpdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoZSBOVEZTIGZpbGVzeXN0ZW0sIGF0IGxlYXN0IG5vdCBpbiB0aGUgc3RhbmRhcmQgd2F5IEkmIzM5O20gdXNlZCB0byBzZWVpbmcuIFRoaXMgaXMgcHJldHR5IGNvbW1vbiBpbiBrZXJuZWwgY29kZTsgc3RhdGljIGZ1bmN0aW9ucyBvZnRlbiBzZXJ2ZSBhcyBpbnRlcm5hbCBoZWxwZXJzLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYG50ZnNfZmlsbF9zdXBlcmAgdG8gbG9jYXRlIHRoZSAqYWN0dWFsKiBub24tc3RhdGljIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZSB0aGF0IGluaXRpYWxseSB0cmlnZ2VycyB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIGJlIG1vdW50ZWQgYW5kIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gZmluZCB0aGUgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGlzIHN0YXRpYyBmdW5jdGlvbi4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gYmVnaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2ZpbGxfc3VwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9zdXBlci5jPTIxODQ9c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBudGZzX21mdF9pbnZhbF9sb2NrX2tleTtcbi0tXG5mcy9udGZzL3N1cGVyLmMtMjE4Ni0vKlxuZnMvbnRmcy9zdXBlci5jOjIxODc6ICogbnRmc19maWxsX3N1cGVyIC0gbW91bnQgYW4gbnRmcyBmaWxlc3lzdGVtXG5mcy9udGZzL3N1cGVyLmMtMjE4OC0gKiBAc2I6IHN1cGVyIGJsb2NrIG9mIHRoZSBkZXZpY2UgdG8gbW91bnRcbi0tXG5mcy9udGZzL3N1cGVyLmMtMjE5MC0gKlxuZnMvbnRmcy9zdXBlci5jOjIxOTE6ICogbnRmc19maWxsX3N1cGVyKCkgaXMgY2FsbGVkIGJ5IHRoZSBWRlMgdG8gbW91bnQgdGhlIGRldmljZSBkZXNjcmliZWQgYnkgQHNiXG5mcy9udGZzL3N1cGVyLmMtMjE5Mi0gKiB3aXRoIHRoZSBtb3VudCBvdGlvbnMgaW4gQGRhdGEgd2l0aCB0aGUgTlRGUyBmaWxlc3lzdGVtLlxuLS1cbmZzL250ZnMvc3VwZXIuYy0yMjAwLSAqL1xuZnMvbnRmcy9zdXBlci5jOjIyMDE6c3RhdGljIGludCBudGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvbnRmcy9zdXBlci5jLTIyMDIte1xuLS1cbmZzL250ZnMvc3VwZXIuYz0yNTE2PXN0YXRpYyBpbnQgbnRmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9udGZzL3N1cGVyLmMtMjUxNy17XG5mcy9udGZzL3N1cGVyLmM6MjUxODpcdHJldHVybiBnZXRfdHJlZV9iZGV2KGZjLCBudGZzX2ZpbGxfc3VwZXIpO1xuZnMvbnRmcy9zdXBlci5jLTI1MTktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzE1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipGaW5kaW5nIHRoZSBSaWdodCBFbnRyeSBQb2ludCBpbiB0aGUgTlRGUyBDb2RlKioKCk9rYXksIHNvIGBudGZzX2dldF90cmVlYCBpcyBhbHNvIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0JiMzOTtzIG5vdCB0aGUgcHJpbWFyeSwgZXh0ZXJuYWxseS12aXNpYmxlIGVudHJ5IHBvaW50IEkmIzM5O20gbG9va2luZyBmb3IuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlcmUuIE15IG1lbnRhbCBtb2RlbCBpcywgaWYgSSBjYW4mIzM5O3QgZGlyZWN0bHkgY2FsbCB0aGF0IGZ1bmN0aW9uLCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogZG9lcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhlIHJlbGF0ZWQgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gb3IgZ2xvYmFsIHZhcmlhYmxlIHRoYXQgKmxlYWRzKiB0byBgbnRmc19nZXRfdHJlZWAuIE9uY2UgSSYjMzk7dmUgZm91bmQgdGhhdCBoaWdoZXItbGV2ZWwgaW50ZXJmYWNlLCBJIGNhbiBzdGFydCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjYWxsIHN0YWNrIGFuZCBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgYWN0dWFsbHkgYWNjZXNzZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNhbm9uaWNhbCB3YXkgb2Ygd29ya2luZyB3aXRoIHRoaXMgTlRGUyBkYXRhIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2dldF90cmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYz0yNTE0PURFRklORV9NVVRFWChudGZzX2xvY2spO1xuZnMvbnRmcy9zdXBlci5jLTI1MTUtXG5mcy9udGZzL3N1cGVyLmM6MjUxNjpzdGF0aWMgaW50IG50ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvbnRmcy9zdXBlci5jLTI1MTcte1xuLS1cbmZzL250ZnMvc3VwZXIuYz0yNTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIG50ZnNfY29udGV4dF9vcHMgPSB7XG5mcy9udGZzL3N1cGVyLmMtMjUzMC1cdC5wYXJzZV9wYXJhbVx0PSBudGZzX3BhcnNlX3BhcmFtLFxuZnMvbnRmcy9zdXBlci5jOjI1MzE6XHQuZ2V0X3RyZWVcdD0gbnRmc19nZXRfdHJlZSxcbmZzL250ZnMvc3VwZXIuYy0yNTMyLVx0LmZyZWVcdFx0PSBudGZzX2ZyZWVfZnNfY29udGV4dCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE3OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbml0aWFsIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIE5URlMgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIE5URlMgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gTXkgZmlyc3QgaW5zdGluY3QsIGJhc2VkIG9uIHRoZSBmdW5jdGlvbiBuYW1lLCBpcyB0aGF0IGBudGZzX2luaXRfZnNfY29udGV4dGAgaXMgZ29pbmcgdG8gYmUgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgcHJvY2Vzcy4gSXQganVzdCAqZmVlbHMqIHJpZ2h0LiBJdCBtYWtlcyBzZW5zZSB0aGF0IHRoZSBmaWxlIHN5c3RlbSBjb250ZXh0IHdvdWxkIGJlIHNldCB1cCBoZXJlLCBhbmQgZnJvbSB0aGVyZSwgdGhlIG90aGVyIG5lY2Vzc2FyeSBjb21wb25lbnRzIHdvdWxkIGJlIGluaXRpYWxpemVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCwgb2YgY291cnNlLCBidXQgdGhhdCYjMzk7cyBteSB3b3JraW5nIGh5cG90aGVzaXMgYXMgSSBzdGFydCBkaWdnaW5nLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRoZSByb290IGluaXRpYWxpemF0aW9uIHRvIGJlZ2luLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2luaXRfZnNfY29udGV4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmM9MjUyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBudGZzX2NvbnRleHRfb3BzID0ge1xuLS1cbmZzL250ZnMvc3VwZXIuYy0yNTM1LVxuZnMvbnRmcy9zdXBlci5jOjI1MzY6c3RhdGljIGludCBudGZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9udGZzL3N1cGVyLmMtMjUzNy17XG4tLVxuZnMvbnRmcy9zdXBlci5jPTI1Njg9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG50ZnNfZnNfdHlwZSA9IHtcbi0tXG5mcy9udGZzL3N1cGVyLmMtMjU3MC1cdC5uYW1lICAgICAgICAgICAgICAgICAgID0gXCYjMzQ7bnRmc1wmIzM0OyxcbmZzL250ZnMvc3VwZXIuYzoyNTcxOlx0LmluaXRfZnNfY29udGV4dCAgICAgICAgPSBudGZzX2luaXRfZnNfY29udGV4dCxcbmZzL250ZnMvc3VwZXIuYy0yNTcyLVx0LnBhcmFtZXRlcnMgICAgICAgICAgICAgPSBudGZzX3BhcmFtZXRlcnMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MDAKCQkJCQkJCW91dHB1dDogNjUKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBOVEZTIE1vZHVsZSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGRlYWwuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgTlRGUyBtb2R1bGUgd29ya3MsIGFuZCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBsb29rIGF0IGVpdGhlciBgbnRmc19pbml0X2ZzX2NvbnRleHRgIG9yIGBudGZzX2dldF90cmVlYC4gQnV0IHRoZW4gSSBwYXVzZWQuIFdhaXQgYSBtaW51dGUsIGBudGZzX2ZpbGxfc3VwZXJgIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYy4gTGV0IG1lIHNlZSwgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpZWQgSSBzaG91bGQgZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMsIGJlY2F1c2UgdGhlIHN0YXRpYyBvbmVzIGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgYW5kIHRoYXQmIzM5O3Mgbm90IGlkZWFsIGZvciBtZS4gSSBuZWVkIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQuCgpTbywgYG50ZnNfZmlsbF9zdXBlcmAgaXMgYSBnb29kIGZvY3VzIHN5bWJvbC4gTm93IHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBudGZzX2ZpbGxfc3VwZXJgIGlzIGlubGluZWQsIGJlY2F1c2UgaWYgc28sIGl0JiMzOTtzIG5vdCBhIHN1aXRhYmxlIGVudHJ5IHBvaW50LiBJJiMzOTtsbCBoYXZlIHRvIGNoZWNrIHRoZSBjb2RlLCBidXQgaXQgbG9va3MgcHJldHR5IHN1YnN0YW50aWFsLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgaW5saW5lZC4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBtYXliZSBJIHNob3VsZCByZXZlcnQgdG8gYG50ZnNfaW5pdF9mc19jb250ZXh0YCBvciBgbnRmc19nZXRfdHJlZWAuIEhtbSwgYG50ZnNfZ2V0X3RyZWVgIGxvb2tzIGxpa2UgYSB3cmFwcGVyIGFyb3VuZCBgZ2V0X3RyZWVfYmRldmAuIEkgZG9uJiMzOTt0IHJlYWxseSB3YW50IHRvIGdvIGRvd24gdGhhdCByYWJiaXQgaG9sZSByaWdodCBub3cuCgpBbHJpZ2h0LCB3aGF0IEkmIzM5O2xsIGRvIGlzIEkmIzM5O2xsIGdvIGJhY2sgdG8gdGhlIHNvdXJjZSBhbmQgc2NhbiBgZnMvbnRmcy9zdXBlci5jYCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHByb2JhYmx5IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gcXVpY2tseSBpZGVudGlmeSBhIGNsZWFyLCB1c2FibGUgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9zdXBlci5jPTMyNj1jb25zdCBzdHJ1Y3Qgb3B0aW9uX3Qgb25fZXJyb3JzX2FycltdID0ge1xuLS1cbmZzL250ZnMvc3VwZXIuYy0zMzItXG5mcy9udGZzL3N1cGVyLmM6MzMzOnZvaWQgbnRmc19oYW5kbGVfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL250ZnMvc3VwZXIuYy0zMzQte1xuLS1cbmZzL250ZnMvc3VwZXIuYz0zNzA9c3RhdGljIGludCBudGZzX3dyaXRlX3ZvbHVtZV9mbGFncyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgX19sZTE2IGZsYWdzKVxuLS1cbmZzL250ZnMvc3VwZXIuYy00MTktICovXG5mcy9udGZzL3N1cGVyLmM6NDIwOmludCBudGZzX3NldF92b2x1bWVfZmxhZ3Moc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIF9fbGUxNiBmbGFncylcbmZzL250ZnMvc3VwZXIuYy00MjEte1xuLS1cbmZzL250ZnMvc3VwZXIuYy00MzQtICovXG5mcy9udGZzL3N1cGVyLmM6NDM1OmludCBudGZzX2NsZWFyX3ZvbHVtZV9mbGFncyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgX19sZTE2IGZsYWdzKVxuZnMvbnRmcy9zdXBlci5jLTQzNi17XG4tLVxuZnMvbnRmcy9zdXBlci5jLTQ0MS1cbmZzL250ZnMvc3VwZXIuYzo0NDI6aW50IG50ZnNfd3JpdGVfdm9sdW1lX2xhYmVsKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjaGFyICpsYWJlbClcbmZzL250ZnMvc3VwZXIuYy00NDMte1xuLS1cbmZzL250ZnMvc3VwZXIuYz0xNzExPXN0YXRpYyB2b2lkIG50ZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvbnRmcy9zdXBlci5jLTE4MTktXG5mcy9udGZzL3N1cGVyLmM6MTgyMDppbnQgbnRmc19mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXG5mcy9udGZzL3N1cGVyLmMtMTgyMS17XG4tLVxuZnMvbnRmcy9zdXBlci5jPTE4NTM9c3RhdGljIGludCBudGZzX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpXG4tLVxuZnMvbnRmcy9zdXBlci5jLTE4OTMtICovXG5mcy9udGZzL3N1cGVyLmM6MTg5NDpzNjQgZ2V0X25yX2ZyZWVfY2x1c3RlcnMoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG5mcy9udGZzL3N1cGVyLmMtMTg5NS17XG4tLVxuZnMvbnRmcy9zdXBlci5jLTE5NzktICovXG5mcy9udGZzL3N1cGVyLmM6MTk4MDpzNjQgbnRmc19hdmFpbGFibGVfY2x1c3RlcnNfY291bnQoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHM2NCBucl9jbHVzdGVycylcbmZzL250ZnMvc3VwZXIuYy0xOTgxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg0MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiBgbnRmc19maWxsX3N1cGVyYC4gU2luY2UgaXQmIzM5O3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgZ2V0X3RyZWVfYmRldmAsIGl0JiMzOTtzICpkZWZpbml0ZWx5KiBub3QgZ2V0dGluZyBpbmxpbmVkLiBUaGF0IG1lYW5zIGl0IGhhcyBpdHMgb3duIGRpc3RpbmN0IGFkZHJlc3MgaW4gbWVtb3J5LCBtYWtpbmcgaXQgYSBzb2xpZCB0YXJnZXQgc3ltYm9sIGZvciBmdXp6aW5nIOKAkyBhIGNsZWFyIGVudHJ5IHBvaW50IGludG8gdGhlIGZpbGVzeXN0ZW0gaGFuZGxpbmcuIEdvb2QuIEFsc28sIGBudGZzX2luaXRfZnNfY29udGV4dGAgaXMgYWxzbyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB0aGF0IG1ha2VzIGl0IGFsc28gYSBnb29kIGNhbmRpZGF0ZS4KCk5vdywgbGV0JiMzOTtzIHNlZSBhYm91dCB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGNvbnRleHQuIFRoZSBwcmltYXJ5IGNvbmZpZywgYXMgZXhwZWN0ZWQsIGlzIGBOVEZTX0ZTYC4gTm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLgoKVGhlIHBhdGNoIGl0c2VsZiBkZWFscyB3aXRoIGEgYnVnIGluIHRoZSBOVEZTIGJvb3Qgc2VjdG9yIHBhcnNpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgdGhlIGNoZWNrIGZvciBgc2VjdG9yc19wZXJfY2x1c3RlcmAgd2FzIGluY29ycmVjdDsgaXQgd2FzIGNoZWNraW5nIGZvciBhIHJhbmdlLCBidXQgaXQgc2hvdWxkIGhhdmUgYmVlbiB2ZXJpZnlpbmcgaXQmIzM5O3MgYSBwb3dlciBvZiAyICphbmQqIGxlc3MgdGhhbiBhIHNwZWNpZmljIHVwcGVyIGJvdW5kLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSDigJMgYSBmdW5kYW1lbnRhbCBjb3JyZWN0aW9uIGluIGhvdyB0aGUga2VybmVsIGludGVycHJldHMgTlRGUyBmaWxlc3lzdGVtIG1ldGFkYXRhLiBUaGF0JiMzOTtzIGEganVpY3kgdGFyZ2V0LiBUaGUgYWZmZWN0ZWQgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBhIHN0YW5kYXJkIGBtb3VudGAgb3BlcmF0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwcmV0dHkgZWFzaWx5IHRyaWdnZXJlZCBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQuCgpHaXZlbiB0aGF0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpTbywgdG8gc3VtbWFyaXplOiBteSBmb2N1cyBzeW1ib2xzIGFyZSBkZWZpbml0ZWx5IGBudGZzX2ZpbGxfc3VwZXJgIGFuZCBgbnRmc19pbml0X2ZzX2NvbnRleHRgLCB0aGUgZW5hYmxlIGNvbmZpZyBpcyBgTlRGU19GU2AsIGFuZCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZnV6ei13b3J0aHkuIEkmIzM5O2xsIGRvdWJsZSBjaGVjayBmb3Igb3RoZXIgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWc9MTM9Y29uZmlnIE5URlNfREVCVUdcbmZzL250ZnMvS2NvbmZpZy0xNC1cdGJvb2wgXCYjMzQ7TlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuZnMvbnRmcy9LY29uZmlnOjE1Olx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG5mcy9udGZzL0tjb25maWctMTYtXHRoZWxwXG4tLVxuZnMvbnRmcy9LY29uZmlnPTM1PWNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG5mcy9udGZzL0tjb25maWc6Mzc6XHRkZXBlbmRzIG9uIE5URlNfRlNcbmZzL250ZnMvS2NvbmZpZy0zOC1cdHNlbGVjdCBGU19QT1NJWF9BQ0xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY2NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBOVEZTX0ZTIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gYE5URlNfRlNgIGludHJpbnNpY2FsbHkgcmVsaWVzIG9uIGBCTE9DS2AuIFRoYXQmIzM5O3MgZXhwZWN0ZWQg4oCTIGl0JiMzOTtzIHByYWN0aWNhbGx5IGEgZ2l2ZW4uIGBCTE9DS2AgcmVwcmVzZW50cyB0aGUgZnVuZGFtZW50YWwgc3RvcmFnZSBidWlsZGluZyBibG9jaywgYSBzdGFuZGFyZCwgdWJpcXVpdG91cyBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4gQnV0LCB5b3Uga25vdyBtZSwgSSBkb24mIzM5O3QganVzdCB0YWtlIHRoaW5ncyBhdCBmYWNlIHZhbHVlLiBCZWZvcmUgSSBwcm9jZWVkLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBleHBsaWNpdCBkZXBlbmRlbmNpZXMgb2YgYE5URlNfRlNgLiBHb3R0YSBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGNvbXBsZXhpdGllcyBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgbmVlZCB0byBhY2NvdW50IGZvciwgcGFydGljdWxhcmx5IGluIGEgY29tcGxleCBzdG9yYWdlIGNvbmZpZ3VyYXRpb24uIE5vIGFzc3VtcHRpb25zIGFsbG93ZWQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3VjaCBmdW5kYW1lbnRhbCBjb21wb25lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXG5mcy9udGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xuLS1cbmZzL250ZnMvS2NvbmZpZy0zNC1cbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcbmZzL250ZnMvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDM4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqQ2hlY2tpbmcgTlRGUyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZSBgTlRGU19GU2Aga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGNvbnRpbmdlbnQgb24gYW55IG90aGVyIHNldHRpbmdzLiBUaGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoYXQgb3V0IGlzIHRoZSBgZnMvbnRmcy9LY29uZmlnYCBmaWxlLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgcGxhY2UgZm9yIHRoaXMgdHlwZSBvZiBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBhbmQgc2VlIHdoYXQgdGhlIHJlbGF0aW9uc2hpcHMgYXJlLiBUaGlzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5URlNfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O05URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0c2VsZWN0IE5MU1xuICAgNTpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIE5URlMgaXMgdGhlIGZpbGUgc3lzdGVtIG9mIE1pY3Jvc29mdCBXaW5kb3dzIE5ULCAyMDAwLCBYUCBhbmQgMjAwMy5cbiAgIDg6XHRcdCAgVGhpcyBhbGxvd3MgeW91IHRvIG1vdW50IGRldmljZXMgZm9ybWF0dGVkIHdpdGggdGhlIG50ZnMgZmlsZSBzeXN0ZW0uXG4gICA5Olx0XG4gIDEwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuICAxMTpcdFx0ICBudGZzLlxuICAxMjpcdFxuICAxMzpcdGNvbmZpZyBOVEZTX0RFQlVHXG4gIDE0Olx0XHRib29sIFwmIzM0O05URlMgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbiAgMTU6XHRcdGRlcGVuZHMgb24gTlRGU19GU1xuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBhbnkgcHJvYmxlbXMgd2l0aCB0aGUgTlRGUyBmaWxlIHN5c3RlbSwgc2F5XG4gIDE4Olx0XHQgIFkgaGVyZS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gYWRkaXRpb25hbCBjb25zaXN0ZW5jeSBjaGVja3MgdG8gYmVcbiAgMTk6XHRcdCAgcGVyZm9ybWVkIGJ5IHRoZSBkcml2ZXIgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGRlYnVnZ2luZyBtZXNzYWdlcyB0b1xuICAyMDpcdFx0ICBiZSB3cml0dGVuIHRvIHRoZSBzeXN0ZW0gbG9nLiAgTm90ZSB0aGF0IGRlYnVnZ2luZyBtZXNzYWdlcyBhcmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUwOAoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiAzNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTlRGUyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZnV6emluZyBpbXBsaWNhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBgTkxTYCBhbmQgYEZTX0lPTUFQYCBjb25maWdzLCBidXQgaXQmIzM5O3MgY2xlYXJseSBhIGZpbGVzeXN0ZW0sIHNvIGl0JiMzOTtzIHByb2JhYmx5IHVuZGVyIGBCTE9DS2AsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZC4gIGBOVEZTX0ZTYCBzaG91bGQgY292ZXIgaXQuCgpJJiMzOTttIGRvdWJsZS1jaGVja2luZywganVzdCB0byBiZSBzdXJlLCBhbmQgdGhlcmUgKmlzKiBhbiBgTlRGUzNfRlNgIGNvbmZpZywgcmVmZXJlbmNpbmcgYGZzL250ZnMzL2AsIGJ1dCB0aGlzIHBhdGNoIHRvdWNoZXMgYGZzL250ZnMvc3VwZXIuY2AsIHNvIHdlJiMzOTtyZSBkZWZpbml0ZWx5IGRlYWxpbmcgd2l0aCB0aGUgKm9sZCogYE5URlNfRlNgLiBHb29kLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHBhdGNoIGFjdHVhbGx5IGRvZXMuLi4gQWhhLCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGBpc19ib290X3NlY3Rvcl9udGZzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSB2YWxpZGF0aW9uIG9mIGBzZWN0b3JzX3Blcl9jbHVzdGVyYC4gIFRoaXMgY2hhbmdlcyBob3cgdGhlIGZpbGVzeXN0ZW0gaGFuZGxlcyB0aGUgYm9vdCBzZWN0b3IgY2hlY2sgZHVyaW5nIG1vdW50aW5nLiBBIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtb3VudCBwYXRoLCBhbmQgc3BlY2lmaWNhbGx5LCByZWxhdGVkIHRvIGNyYWZ0ZWQgaW1hZ2VzIGlzIGRlZmluaXRlbHkgd29ydGggbG9va2luZyBpbnRvIGZvciBmdXp6aW5nLgoKTXkgZm9jdXMgc3ltYm9scyBhcmUgYG50ZnNfZmlsbF9zdXBlcmAgYW5kIGBudGZzX2luaXRfZnNfY29udGV4dGAuIFRoZXNlIGFyZSB3aGVyZSB0aGUgbG9naWMgb2YgdGhlIHBhdGNoIGxpdmVzLgoKSSYjMzk7bSBjb25maWRlbnQgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlnLCBgTlRGU19GU2AuIE9rYXksIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtudGZzX2luaXRfZnNfY29udGV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRGUyBib290IHNlY3RvciB2YWxpZGF0aW9uIGxvZ2ljIGluIGBpc19ib290X3NlY3Rvcl9udGZzYCBieSBjaGFuZ2luZyB0aGUgY29uZGl0aW9uIGZvciBgc2VjdG9yc19wZXJfY2x1c3RlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIG1vdW50IHBhdGgsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtudGZzX2luaXRfZnNfY29udGV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRGUyBib290IHNlY3RvciB2YWxpZGF0aW9uIGxvZ2ljIGluIGBpc19ib290X3NlY3Rvcl9udGZzYCBieSBjaGFuZ2luZyB0aGUgY29uZGl0aW9uIGZvciBgc2VjdG9yc19wZXJfY2x1c3RlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIG1vdW50IHBhdGgsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdGhlIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCBmaWVsZCBpbiB0aGUgTlRGUyBib290IHNlY3RvciAoYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGluIGBmcy9udGZzL3N1cGVyLmNgKS4gVGhlIGJvb3Qgc2VjdG9yIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBibG9jayBkZXZpY2UsIG1lYW5pbmcgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGV2ZW4gaWYgcG90ZW50aWFsbHkgbWFsaWNpb3VzIG9yIG1hbGZvcm1lZCkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBpc3N1ZXMgYXJpc2luZyBmcm9tIG1hbGZvcm1lZCBkaXNrIHN0cnVjdHVyZXMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnRlZ2VyIG92ZXJmbG93cykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMTU2YmUwYTRmM2Y1ZjVjZWIwMDdjNzI1ODA2ZWUzMmI4ZDdlMWE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMDU6MTY6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmMKaW5kZXggOGFiZTdiZWU0YzBkOS4uNzJmMTkzMzEzNmRjMSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvc3VwZXIuYwpAQCAtNTU3LDggJiM0Mzs1NTcsOCBAQCBzdGF0aWMgYm9vbCBpc19ib290X3NlY3Rvcl9udGZzKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJICogQ2hlY2sgc2VjdG9ycyBwZXIgY2x1c3RlciB2YWx1ZSBpcyB2YWxpZCBhbmQgdGhlIGNsdXN0ZXIgc2l6ZQogCSAqIGlzIG5vdCBhYm92ZSB0aGUgbWF4aW11bSAoMk1CKS4KIAkgKi8KLQlpZiAoYi0mZ3Q7YnBiLnNlY3RvcnNfcGVyX2NsdXN0ZXIgJmd0OyAweDgwICZhbXA7JmFtcDsKLQkgICAgYi0mZ3Q7YnBiLnNlY3RvcnNfcGVyX2NsdXN0ZXIgJmx0OyAweGY0KQomIzQzOwlpZiAoYi0mZ3Q7YnBiLnNlY3RvcnNfcGVyX2NsdXN0ZXIgJmx0OyAweGY0ICZhbXA7JmFtcDsKJiM0MzsJICAgICFpc19wb3dlcl9vZl8yKGItJmd0O2JwYi5zZWN0b3JzX3Blcl9jbHVzdGVyKSkKIAkJZ290byBub3RfbnRmczsKIAogCS8qIENoZWNrIHJlc2VydmVkL3VudXNlZCBmaWVsZHMgYXJlIHJlYWxseSB6ZXJvLiAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNQoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAzNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOVEZTIEJvb3QgU2VjdG9yIFZhbGlkYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbiBgZnMvbnRmcy9zdXBlci5jYCBpcyB0d2Vha2luZyB0aGUgYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyBob3cgdGhlIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCBmaWVsZCB3aXRoaW4gdGhlIEJJT1MgUGFyYW1ldGVyIEJsb2NrIChCUEIpIG9mIGFuIE5URlMgYm9vdCBzZWN0b3IgaXMgdmFsaWRhdGVkLgoKVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgcmF0aGVyIG9kZCBjaGVjazogYHNlY3RvcnNfcGVyX2NsdXN0ZXJgIGhhZCB0byBiZSAqYmV0d2VlbiogMHg4MCBhbmQgMHhmMyAoZXhjbHVzaXZlKS4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBtYWtlIGl0ICpsZXNzKiB0aGFuIDB4ZjQgKmFuZCogbm90IGEgcG93ZXIgb2YgMi4gSSB1bmRlcnN0YW5kIHRoYXQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzICpub3QqIGEgS01TQU4gaXNzdWUuIFRoZSBjb3JlIG9mIG15IHJlYXNvbmluZyBpcyB0aGF0IHRoZSBkYXRhIGJlaW5nIHZhbGlkYXRlZCBoZXJlIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlIGRpc2sgaXRzZWxmIOKAkyBmcm9tIHRoZSBibG9jayBkZXZpY2UuIEl0JiMzOTtzIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBvbiB0aGUgc3RhY2sgb3IgaGVhcC4gRXZlbiBpZiB0aGUgZGF0YSBpcyBtYWxpY2lvdXMsIGl0JiMzOTtzICppbml0aWFsaXplZCogd2l0aCBzb21lIHZhbHVlIHJlYWQgZnJvbSB0aGUgcGh5c2ljYWwgbWVkaXVtLiBLTVNBTiBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIHVzZXMgb2YgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSwgd2hpY2ggc2ltcGx5IGlzbiYjMzk7dCB0aGUgY2FzZSBoZXJlLiBUaGlzIHBhdGNoLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpcyBqdXN0IGZpeGluZyBhIGJ1ZyBpbiB0aGUgdmFsaWRpdHkgY2hlY2sgb2YgZGF0YSAqYWxyZWFkeSogb24gZGlzay4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLiBXZSBhcmUgZGVhbGluZyB3aXRoIGBiYCwgYSBwb2ludGVyIHRvIGEgYGNvbnN0IE5URlNfQk9PVF9TRUNUT1JgLCByZWFkIGRpcmVjdGx5IGZyb20gdGhlIGJsb2NrIGRldmljZS4gSXQmIzM5O3MgYmVpbmcgcmVhZCBmcm9tIHRoZSBkaXNrLiBOb3RoaW5nJiMzOTtzIHVuaW5pdGlhbGl6ZWQgaGVyZS4KClRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJJiMzOTttIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgYHNlY3RvcnNfcGVyX2NsdXN0ZXJgIGZpZWxkIGluIHRoZSBOVEZTIGJvb3Qgc2VjdG9yIChgaXNfYm9vdF9zZWN0b3JfbnRmc2AgaW4gYGZzL250ZnMvc3VwZXIuY2ApLiBUaGUgYm9vdCBzZWN0b3IgZGF0YSBpcyByZWFkIGZyb20gdGhlIGJsb2NrIGRldmljZSwgbWVhbmluZyBpdCBpcyBmdWxseSBpbml0aWFsaXplZCAoZXZlbiBpZiBwb3RlbnRpYWxseSBtYWxpY2lvdXMgb3IgbWFsZm9ybWVkKS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGlzc3VlcyBhcmlzaW5nIGZyb20gbWFsZm9ybWVkIGRpc2sgc3RydWN0dXJlcyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludGVnZXIgb3ZlcmZsb3dzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgVUJTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdGhlIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCBmaWVsZCBpbiB0aGUgTlRGUyBib290IHNlY3RvciAoYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGluIGBmcy9udGZzL3N1cGVyLmNgKS4gVGhlIGJvb3Qgc2VjdG9yIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBibG9jayBkZXZpY2UsIG1lYW5pbmcgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGV2ZW4gaWYgcG90ZW50aWFsbHkgbWFsaWNpb3VzIG9yIG1hbGZvcm1lZCkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBpc3N1ZXMgYXJpc2luZyBmcm9tIG1hbGZvcm1lZCBkaXNrIHN0cnVjdHVyZXMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnRlZ2VyIG92ZXJmbG93cykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNjo1MS4wODkzMTcxNTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTYzNjQ0MDcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19maWxsX3N1cGVyXCIsXG4gICAgXCJudGZzX2luaXRfZnNfY29udGV4dFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBgc2VjdG9yc19wZXJfY2x1c3RlcmAgZmllbGQgaW4gdGhlIE5URlMgYm9vdCBzZWN0b3IgKGBpc19ib290X3NlY3Rvcl9udGZzYCBpbiBgZnMvbnRmcy9zdXBlci5jYCkuIFRoZSBib290IHNlY3RvciBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgYmxvY2sgZGV2aWNlLCBtZWFuaW5nIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIChldmVuIGlmIHBvdGVudGlhbGx5IG1hbGljaW91cyBvciBtYWxmb3JtZWQpLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgaXNzdWVzIGFyaXNpbmcgZnJvbSBtYWxmb3JtZWQgZGlzayBzdHJ1Y3R1cmVzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW50ZWdlciBvdmVyZmxvd3MpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBVQlNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRGUyBib290IHNlY3RvciB2YWxpZGF0aW9uIGxvZ2ljIGluIGBpc19ib290X3NlY3Rvcl9udGZzYCBieSBjaGFuZ2luZyB0aGUgY29uZGl0aW9uIGZvciBgc2VjdG9yc19wZXJfY2x1c3RlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIG1vdW50IHBhdGgsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTY6NTEuMDg5MzIzNTc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTE0OTc5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlMTU2YmUwYTRmM2Y1ZjVjZWIwMDdjNzI1ODA2ZWUzMmI4ZDdlMWE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDA1OjE2OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvc3VwZXIuYyBiL2ZzL250ZnMvc3VwZXIuY1xcbmluZGV4IDhhYmU3YmVlNGMwZDkuLjcyZjE5MzMxMzZkYzEgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmcy9zdXBlci5jXFxuKysrIGIvZnMvbnRmcy9zdXBlci5jXFxuQEAgLTU1Nyw4ICs1NTcsOCBAQCBzdGF0aWMgYm9vbCBpc19ib290X3NlY3Rvcl9udGZzKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdCAqIENoZWNrIHNlY3RvcnMgcGVyIGNsdXN0ZXIgdmFsdWUgaXMgdmFsaWQgYW5kIHRoZSBjbHVzdGVyIHNpemVcXG4gXFx0ICogaXMgbm90IGFib3ZlIHRoZSBtYXhpbXVtICgyTUIpLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGItXFx1MDAzZWJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyIFxcdTAwM2UgMHg4MCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgYi1cXHUwMDNlYnBiLnNlY3RvcnNfcGVyX2NsdXN0ZXIgXFx1MDAzYyAweGY0KVxcbitcXHRpZiAoYi1cXHUwMDNlYnBiLnNlY3RvcnNfcGVyX2NsdXN0ZXIgXFx1MDAzYyAweGY0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhaXNfcG93ZXJfb2ZfMihiLVxcdTAwM2VicGIuc2VjdG9yc19wZXJfY2x1c3RlcikpXFxuIFxcdFxcdGdvdG8gbm90X250ZnM7XFxuIFxcbiBcXHQvKiBDaGVjayByZXNlcnZlZC91bnVzZWQgZmllbGRzIGFyZSByZWFsbHkgemVyby4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTY6NTEuNDQxNTQ3Njg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTE1ODQxMDI1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfZmlsbF9zdXBlclwiLFxuICAgIFwibnRmc19pbml0X2ZzX2NvbnRleHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRGUyBib290IHNlY3RvciB2YWxpZGF0aW9uIGxvZ2ljIGluIGBpc19ib290X3NlY3Rvcl9udGZzYCBieSBjaGFuZ2luZyB0aGUgY29uZGl0aW9uIGZvciBgc2VjdG9yc19wZXJfY2x1c3RlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIG1vdW50IHBhdGgsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTE1NmJlMGE0ZjNmNWY1Y2ViMDA3YzcyNTgwNmVlMzJiOGQ3ZTFhOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA1OjE2OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9zdXBlci5jIGIvZnMvbnRmcy9zdXBlci5jXG5pbmRleCA4YWJlN2JlZTRjMGQ5Li43MmYxOTMzMTM2ZGMxIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9zdXBlci5jXG4rKysgYi9mcy9udGZzL3N1cGVyLmNcbkBAIC01NTcsOCArNTU3LDggQEAgc3RhdGljIGJvb2wgaXNfYm9vdF9zZWN0b3JfbnRmcyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0ICogQ2hlY2sgc2VjdG9ycyBwZXIgY2x1c3RlciB2YWx1ZSBpcyB2YWxpZCBhbmQgdGhlIGNsdXN0ZXIgc2l6ZVxuIFx0ICogaXMgbm90IGFib3ZlIHRoZSBtYXhpbXVtICgyTUIpLlxuIFx0ICovXG4tXHRpZiAoYi1cdTAwM2VicGIuc2VjdG9yc19wZXJfY2x1c3RlciBcdTAwM2UgMHg4MCBcdTAwMjZcdTAwMjZcbi1cdCAgICBiLVx1MDAzZWJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyIFx1MDAzYyAweGY0KVxuK1x0aWYgKGItXHUwMDNlYnBiLnNlY3RvcnNfcGVyX2NsdXN0ZXIgXHUwMDNjIDB4ZjQgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWlzX3Bvd2VyX29mXzIoYi1cdTAwM2VicGIuc2VjdG9yc19wZXJfY2x1c3RlcikpXG4gXHRcdGdvdG8gbm90X250ZnM7XG4gXG4gXHQvKiBDaGVjayByZXNlcnZlZC91bnVzZWQgZmllbGRzIGFyZSByZWFsbHkgemVyby4gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE2OjUxLjQ0MTU0OTA0OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDg3NTM1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyB0aGUgYm9vdCBzZWN0b3IgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiBgZnMvbnRmcy9zdXBlci5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBob3cgd2UncmUgY2hlY2tpbmcgYHNlY3RvcnNfcGVyX2NsdXN0ZXJgIGR1cmluZyB0aGUgYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGZ1bmN0aW9uLCB3aGljaCwgYXMgSSByZWNhbGwsIGlzIGNhbGxlZCBkdXJpbmcgdGhlIG1vdW50IHByb2Nlc3MuXG5cblByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyByZWplY3RpbmcgdmFsdWVzIG91dHNpZGUgYSBmYWlybHkgbmFycm93IHJhbmdlOiBhbnl0aGluZyBncmVhdGVyIHRoYW4gYDB4ODBgICphbmQqIGxlc3MgdGhhbiBgMHhmNGAuIE5vdywgaXQncyBhIGJpdCBtb3JlIG51YW5jZWQuIFdlJ3JlIG9ubHkgcmVqZWN0aW5nIHZhbHVlcyAqbGVzcyogdGhhbiBgMHhmNGAgKmlmKiB0aGV5IGFyZW4ndCBhIHBvd2VyIG9mIHR3by4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgZGlzdGluY3Rpb24sIGFzIHRoZSBwcmV2aW91cyBsb2dpYyBjb3VsZCBwb3RlbnRpYWxseSByZWplY3QgdmFsaWQgY29uZmlndXJhdGlvbnMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IGFmZmVjdHMgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgTlRGUyBpbWFnZXMg4oCTIHdoaWNoLCBmcm9tIG15IHBlcnNwZWN0aXZlLCBtZWFucyB0aGlzIGlzIHNvbWV0aGluZyB0aGF0J3MgcmlwZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gTlRGUyBpcyBhIGZpbGVzeXN0ZW0sIHNvIHdlIGNhbiBtb3VudCBsb29wYmFjayBpbWFnZXMsIGFuZCB0ZXN0IHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlZCBhbnkgbmV3IGJ1Z3MuIFRpbWUgdG8gY2hlY2sgYGZzL250ZnMvc3VwZXIuY2AgZm9yIGNvbnRleHQgYW5kIHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTY6NTYuODUwMzA1MTY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTM3MTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX2Jvb3Rfc2VjdG9yX250ZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvc3VwZXIuYz00NDI9aW50IG50ZnNfd3JpdGVfdm9sdW1lX2xhYmVsKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjaGFyICpsYWJlbClcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy01MTgtLypcXG5mcy9udGZzL3N1cGVyLmM6NTE5OiAqIGlzX2Jvb3Rfc2VjdG9yX250ZnMgLSBjaGVjayB3aGV0aGVyIGEgYm9vdCBzZWN0b3IgaXMgYSB2YWxpZCBOVEZTIGJvb3Qgc2VjdG9yXFxuZnMvbnRmcy9zdXBlci5jLTUyMC0gKiBAc2I6XFx0XFx0U3VwZXIgYmxvY2sgb2YgdGhlIGRldmljZSB0byB3aGljaCBAYiBiZWxvbmdzLlxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTUyMy0gKlxcbmZzL250ZnMvc3VwZXIuYzo1MjQ6ICogaXNfYm9vdF9zZWN0b3JfbnRmcygpIGNoZWNrcyB3aGV0aGVyIHRoZSBib290IHNlY3RvciBAYiBpcyBhIHZhbGlkIE5URlMgYm9vdFxcbmZzL250ZnMvc3VwZXIuYy01MjUtICogc2VjdG9yLiBSZXR1cm5zICd0cnVlJyBpZiBpdCBpcyB2YWxpZCBhbmQgJ2ZhbHNlJyBpZiBub3QuXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtNTI5LSAqL1xcbmZzL250ZnMvc3VwZXIuYzo1MzA6c3RhdGljIGJvb2wgaXNfYm9vdF9zZWN0b3JfbnRmcyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL250ZnMvc3VwZXIuYy01MzEtXFx0XFx0Y29uc3Qgc3RydWN0IG50ZnNfYm9vdF9zZWN0b3IgKmIsIGNvbnN0IGJvb2wgc2lsZW50KVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTYwOD1zdGF0aWMgY2hhciAqcmVhZF9udGZzX2Jvb3Rfc2VjdG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtNjIzLVxcbmZzL250ZnMvc3VwZXIuYzo2MjQ6XFx0aWYgKCFpc19ib290X3NlY3Rvcl9udGZzKHNiLCAoc3RydWN0IG50ZnNfYm9vdF9zZWN0b3IgKilib290X3NlY3RvcixcXG5mcy9udGZzL3N1cGVyLmMtNjI1LVxcdFxcdFxcdFxcdCBzaWxlbnQpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE2OjU2LjkwMjg0ODMyNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzAxODQ4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTlRGUyBNb3VudCBQcm9jZXNzIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIGBpc19ib290X3NlY3Rvcl9udGZzYCBpcyAqZGVmaW5pdGVseSogcGFydCBvZiB0aGUgY3JpdGljYWwgcGF0aCBoZXJlLiBJdCdzIGNhbGxlZCBmcm9tIGByZWFkX250ZnNfYm9vdF9zZWN0b3JgLCB3aGljaCBpbiB0dXJuIGZlZWRzIGludG8gYG50ZnNfZmlsbF9zdXBlcmAuIFRoYXQgcHV0cyBpdCBzcXVhcmVseSBpbiB0aGUgbW91bnQgcHJvY2VzcywgYW5kIGEgcHJldHR5IGVhcmx5IHN0YWdlLCBpdCBzZWVtcy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYm9vdCBzZWN0b3IgaXMgdmFsaWRhdGVkIGFuZCBoYW5kbGVkIGFzIHRoaXMgZGV0ZXJtaW5lcyBob3cgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgc3lzdGVtIGdldHMgaW50ZXJwcmV0ZWQuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBjb25kaXRpb25zIG1pZ2h0IG1ha2UgdGhpcyBmdW5jdGlvbiBmYWlsLiBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgTlRGUyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlLiBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBlbnN1cmUgaXQncyBwcm9wZXJseSBlbmFibGVkIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5ODEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNjo1OS44NzMwMzYwMjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5Njg2MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXFxuZnMvbnRmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTM0LVxcbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTY6NTkuOTI4MDEwNTg2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE3MzUxMzc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKkFuYWx5emluZyB0aGUgTlRGUyBCb290IFNlY3RvciBMb2dpYyoqXG5cbkFscmlnaHQsIHRoZSBjb25maWd1cmF0aW9uIGlzIGRlZmluaXRlbHkgdGFyZ2V0aW5nIGFuIE5URlMgZmlsZXN5c3RlbSwgYE5URlNfRlNgLiBNeSBicmFpbiBpbW1lZGlhdGVseSBzdGFydHMgdHJhY2luZyB0aGUgZmxvdy4uLiBXZSBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBgaXNfYm9vdF9zZWN0b3JfbnRmc2AuIEdvb2QsIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBhIGtleSBkZXRhaWw7IGl0IG1lYW5zIGl0J3MgbGlrZWx5IGludGVybmFsIGFuZCBkb2Vzbid0IGdldCBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoaXMgbW9kdWxlLCBtYWtpbmcgZGVidWdnaW5nIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYSBsaXR0bGUgZWFzaWVyLiBOb3csIHdobyBjYWxscyAqdGhhdCogZnVuY3Rpb24/IExvb2tzIGxpa2UgYHJlYWRfbnRmc19ib290X3NlY3RvcmAuLi4gYWxzbyBzdGF0aWMuIEV4Y2VsbGVudC4gU28sIGBpc19ib290X3NlY3Rvcl9udGZzYCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZyb20gd2l0aGluIGByZWFkX250ZnNfYm9vdF9zZWN0b3JgLiBBbmQgbGFzdGx5LCBgcmVhZF9udGZzX2Jvb3Rfc2VjdG9yYCBpcyBjYWxsZWQgYnkgYG50ZnNfZmlsbF9zdXBlcmAuIFRoaXMgZ2l2ZXMgbWUgdGhlIGJpZyBwaWN0dXJlLiBJIGNhbiBub3cgc2FmZWx5IGFzc3VtZSB0aGF0IGBudGZzX2ZpbGxfc3VwZXJgIGlzIGxpa2VseSB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBwYXJzZSB0aGUgZmlsZXN5c3RlbSwgd2l0aCBgcmVhZF9udGZzX2Jvb3Rfc2VjdG9yYCByZXNwb25zaWJsZSBmb3IgcHVsbGluZyB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgYm9vdCBzZWN0b3IsIGFuZCB0aGUgc3RhdGljIGZ1bmN0aW9ucyBiZWluZyB1c2VkIHRvIGNoZWNrIGlmIHRoZSB2b2x1bWUgdGhhdCBpcyBwYXNzZWQgdG8gaXQgY29udGFpbnMgTlRGUy4gVGhlIGBzdGF0aWNgIGtleXdvcmRzIHRlbGwgbWUgdGhhdCdzIHRoZSBzY29wZSBvZiB0aGUgY2hlY2ssIGFzIHRoaXMgaXMgYWxsIGxvY2FsLiBUaGlzIGlzIGEgc29saWQsIGNsZWFuIGZsb3c7IHRoZSBib290IHNlY3RvciBjaGVjayBhbmQgcmVhZCBhcmUgZW5jYXBzdWxhdGVkIHdpdGhpbiB0aGlzIG1vZHVsZSwgY29uZmlybWluZyBhIG5pY2UsIG1vZHVsYXIgZGVzaWduLiBOb3csIEkgaGF2ZSBhIGdvb2QgZnJhbWV3b3JrIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBib290IHNlY3RvciBwYXJzaW5nIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzowNi4xMDE1Mjg1OTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcxNjkxNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9udGZzX2Jvb3Rfc2VjdG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9NTMwPXN0YXRpYyBib29sIGlzX2Jvb3Rfc2VjdG9yX250ZnMoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy02MDEtLypcXG5mcy9udGZzL3N1cGVyLmM6NjAyOiAqIHJlYWRfbnRmc19ib290X3NlY3RvciAtIHJlYWQgdGhlIE5URlMgYm9vdCBzZWN0b3Igb2YgYSBkZXZpY2VcXG5mcy9udGZzL3N1cGVyLmMtNjAzLSAqIEBzYjpcXHRcXHRzdXBlciBibG9jayBvZiBkZXZpY2UgdG8gcmVhZCB0aGUgYm9vdCBzZWN0b3IgZnJvbVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTYwNy0gKi9cXG5mcy9udGZzL3N1cGVyLmM6NjA4OnN0YXRpYyBjaGFyICpyZWFkX250ZnNfYm9vdF9zZWN0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9udGZzL3N1cGVyLmMtNjA5LVxcdFxcdGNvbnN0IGludCBzaWxlbnQpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MjIwMT1zdGF0aWMgaW50IG50ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMjI2OC1cXHQvKiBSZWFkIHRoZSBib290IHNlY3RvciBhbmQgcmV0dXJuIHVubG9ja2VkIGJ1ZmZlciBoZWFkIHRvIGl0LiAqL1xcbmZzL250ZnMvc3VwZXIuYzoyMjY5OlxcdGJvb3QgPSByZWFkX250ZnNfYm9vdF9zZWN0b3Ioc2IsIHNpbGVudCk7XFxuZnMvbnRmcy9zdXBlci5jLTIyNzAtXFx0aWYgKCFib290KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE3OjA2LjE1ODcwNjY3N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDQxMTk3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkh1bnRpbmcgZm9yIHRoZSBSZWFsIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gYG50ZnNfZmlsbF9zdXBlcmAgaXMgbWFya2VkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IG1lYW5zIGl0J3Mgbm90IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgTlRGUyBmaWxlc3lzdGVtLCBhdCBsZWFzdCBub3QgaW4gdGhlIHN0YW5kYXJkIHdheSBJJ20gdXNlZCB0byBzZWVpbmcuIFRoaXMgaXMgcHJldHR5IGNvbW1vbiBpbiBrZXJuZWwgY29kZTsgc3RhdGljIGZ1bmN0aW9ucyBvZnRlbiBzZXJ2ZSBhcyBpbnRlcm5hbCBoZWxwZXJzLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYG50ZnNfZmlsbF9zdXBlcmAgdG8gbG9jYXRlIHRoZSAqYWN0dWFsKiBub24tc3RhdGljIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZSB0aGF0IGluaXRpYWxseSB0cmlnZ2VycyB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIGJlIG1vdW50ZWQgYW5kIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gZmluZCB0aGUgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGlzIHN0YXRpYyBmdW5jdGlvbi4gTGV0J3MgZGlnIGRlZXBlciBhbmQgc2VlIHdoZXJlIHRoZSByZWFsIGFjdGlvbiBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzowOS45MDI4MjkxODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzIzNDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfZmlsbF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9zdXBlci5jPTIxODQ9c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBudGZzX21mdF9pbnZhbF9sb2NrX2tleTtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yMTg2LS8qXFxuZnMvbnRmcy9zdXBlci5jOjIxODc6ICogbnRmc19maWxsX3N1cGVyIC0gbW91bnQgYW4gbnRmcyBmaWxlc3lzdGVtXFxuZnMvbnRmcy9zdXBlci5jLTIxODgtICogQHNiOiBzdXBlciBibG9jayBvZiB0aGUgZGV2aWNlIHRvIG1vdW50XFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMjE5MC0gKlxcbmZzL250ZnMvc3VwZXIuYzoyMTkxOiAqIG50ZnNfZmlsbF9zdXBlcigpIGlzIGNhbGxlZCBieSB0aGUgVkZTIHRvIG1vdW50IHRoZSBkZXZpY2UgZGVzY3JpYmVkIGJ5IEBzYlxcbmZzL250ZnMvc3VwZXIuYy0yMTkyLSAqIHdpdGggdGhlIG1vdW50IG90aW9ucyBpbiBAZGF0YSB3aXRoIHRoZSBOVEZTIGZpbGVzeXN0ZW0uXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMjIwMC0gKi9cXG5mcy9udGZzL3N1cGVyLmM6MjIwMTpzdGF0aWMgaW50IG50ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvbnRmcy9zdXBlci5jLTIyMDIte1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTI1MTY9c3RhdGljIGludCBudGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9udGZzL3N1cGVyLmMtMjUxNy17XFxuZnMvbnRmcy9zdXBlci5jOjI1MTg6XFx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIG50ZnNfZmlsbF9zdXBlcik7XFxuZnMvbnRmcy9zdXBlci5jLTI1MTktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzowOS45NDcxNjE1NTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3NTk3ODAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipGaW5kaW5nIHRoZSBSaWdodCBFbnRyeSBQb2ludCBpbiB0aGUgTlRGUyBDb2RlKipcblxuT2theSwgc28gYG50ZnNfZ2V0X3RyZWVgIGlzIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQncyBub3QgdGhlIHByaW1hcnksIGV4dGVybmFsbHktdmlzaWJsZSBlbnRyeSBwb2ludCBJJ20gbG9va2luZyBmb3IuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlcmUuIE15IG1lbnRhbCBtb2RlbCBpcywgaWYgSSBjYW4ndCBkaXJlY3RseSBjYWxsIHRoYXQgZnVuY3Rpb24sIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGF0KiBkb2VzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSByZWxhdGVkIGNvZGUuIEknbGwgbmVlZCB0byBsb2NhdGUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gb3IgZ2xvYmFsIHZhcmlhYmxlIHRoYXQgKmxlYWRzKiB0byBgbnRmc19nZXRfdHJlZWAuIE9uY2UgSSd2ZSBmb3VuZCB0aGF0IGhpZ2hlci1sZXZlbCBpbnRlcmZhY2UsIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGNhbGwgc3RhY2sgYW5kIGhvdyB0aGlzIHN0cnVjdHVyZSBpcyBhY3R1YWxseSBhY2Nlc3NlZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjYW5vbmljYWwgd2F5IG9mIHdvcmtpbmcgd2l0aCB0aGlzIE5URlMgZGF0YSBzdHJ1Y3R1cmUuIFRoYXQncyB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTc6MTMuNDIzMTQxNjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNTIwMTY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2dldF90cmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MjUxND1ERUZJTkVfTVVURVgobnRmc19sb2NrKTtcXG5mcy9udGZzL3N1cGVyLmMtMjUxNS1cXG5mcy9udGZzL3N1cGVyLmM6MjUxNjpzdGF0aWMgaW50IG50ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL250ZnMvc3VwZXIuYy0yNTE3LXtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYz0yNTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIG50ZnNfY29udGV4dF9vcHMgPSB7XFxuZnMvbnRmcy9zdXBlci5jLTI1MzAtXFx0LnBhcnNlX3BhcmFtXFx0PSBudGZzX3BhcnNlX3BhcmFtLFxcbmZzL250ZnMvc3VwZXIuYzoyNTMxOlxcdC5nZXRfdHJlZVxcdD0gbnRmc19nZXRfdHJlZSxcXG5mcy9udGZzL3N1cGVyLmMtMjUzMi1cXHQuZnJlZVxcdFxcdD0gbnRmc19mcmVlX2ZzX2NvbnRleHQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE3OjEzLjczODM0Nzc2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYxMjk0NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGluaXRpYWwgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBOVEZTIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTlRGUyBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBNeSBmaXJzdCBpbnN0aW5jdCwgYmFzZWQgb24gdGhlIGZ1bmN0aW9uIG5hbWUsIGlzIHRoYXQgYG50ZnNfaW5pdF9mc19jb250ZXh0YCBpcyBnb2luZyB0byBiZSB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBwcm9jZXNzLiBJdCBqdXN0ICpmZWVscyogcmlnaHQuIEl0IG1ha2VzIHNlbnNlIHRoYXQgdGhlIGZpbGUgc3lzdGVtIGNvbnRleHQgd291bGQgYmUgc2V0IHVwIGhlcmUsIGFuZCBmcm9tIHRoZXJlLCB0aGUgb3RoZXIgbmVjZXNzYXJ5IGNvbXBvbmVudHMgd291bGQgYmUgaW5pdGlhbGl6ZWQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQsIG9mIGNvdXJzZSwgYnV0IHRoYXQncyBteSB3b3JraW5nIGh5cG90aGVzaXMgYXMgSSBzdGFydCBkaWdnaW5nLiBUaGlzIGlzIHdoZXJlIEknZCBleHBlY3QgdGhlIHJvb3QgaW5pdGlhbGl6YXRpb24gdG8gYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNzksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzoxNy4yOTk2NDQ4ODhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Njc3NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfaW5pdF9mc19jb250ZXh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MjUyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBudGZzX2NvbnRleHRfb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTI1MzUtXFxuZnMvbnRmcy9zdXBlci5jOjI1MzY6c3RhdGljIGludCBudGZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvbnRmcy9zdXBlci5jLTI1Mzcte1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTI1Njg9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG50ZnNfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yNTcwLVxcdC5uYW1lICAgICAgICAgICAgICAgICAgID0gXFxcIm50ZnNcXFwiLFxcbmZzL250ZnMvc3VwZXIuYzoyNTcxOlxcdC5pbml0X2ZzX2NvbnRleHQgICAgICAgID0gbnRmc19pbml0X2ZzX2NvbnRleHQsXFxuZnMvbnRmcy9zdXBlci5jLTI1NzItXFx0LnBhcmFtZXRlcnMgICAgICAgICAgICAgPSBudGZzX3BhcmFtZXRlcnMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE3OjE3LjM0NzMzMDIzNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTM5MzIyNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgTlRGUyBNb2R1bGUgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIGhlcmUncyB0aGUgZGVhbC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBOVEZTIG1vZHVsZSB3b3JrcywgYW5kIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgdG8gbG9vayBhdCBlaXRoZXIgYG50ZnNfaW5pdF9mc19jb250ZXh0YCBvciBgbnRmc19nZXRfdHJlZWAuIEJ1dCB0aGVuIEkgcGF1c2VkLiBXYWl0IGEgbWludXRlLCBgbnRmc19maWxsX3N1cGVyYCBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gTGV0IG1lIHNlZSwgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpZWQgSSBzaG91bGQgZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMsIGJlY2F1c2UgdGhlIHN0YXRpYyBvbmVzIGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG9uJ3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBhbmQgdGhhdCdzIG5vdCBpZGVhbCBmb3IgbWUuIEkgbmVlZCBhIGNsZWFyIHN0YXJ0aW5nIHBvaW50LlxuXG5TbywgYG50ZnNfZmlsbF9zdXBlcmAgaXMgYSBnb29kIGZvY3VzIHN5bWJvbC4gTm93IHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBudGZzX2ZpbGxfc3VwZXJgIGlzIGlubGluZWQsIGJlY2F1c2UgaWYgc28sIGl0J3Mgbm90IGEgc3VpdGFibGUgZW50cnkgcG9pbnQuIEknbGwgaGF2ZSB0byBjaGVjayB0aGUgY29kZSwgYnV0IGl0IGxvb2tzIHByZXR0eSBzdWJzdGFudGlhbCwgc28gaXQncyBwcm9iYWJseSBub3QgaW5saW5lZC4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBtYXliZSBJIHNob3VsZCByZXZlcnQgdG8gYG50ZnNfaW5pdF9mc19jb250ZXh0YCBvciBgbnRmc19nZXRfdHJlZWAuIEhtbSwgYG50ZnNfZ2V0X3RyZWVgIGxvb2tzIGxpa2UgYSB3cmFwcGVyIGFyb3VuZCBgZ2V0X3RyZWVfYmRldmAuIEkgZG9uJ3QgcmVhbGx5IHdhbnQgdG8gZ28gZG93biB0aGF0IHJhYmJpdCBob2xlIHJpZ2h0IG5vdy5cblxuQWxyaWdodCwgd2hhdCBJJ2xsIGRvIGlzIEknbGwgZ28gYmFjayB0byB0aGUgc291cmNlIGFuZCBzY2FuIGBmcy9udGZzL3N1cGVyLmNgIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQncyBwcm9iYWJseSB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHF1aWNrbHkgaWRlbnRpZnkgYSBjbGVhciwgdXNhYmxlIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjAwLCJPdXRwdXRUb2tlbnMiOjY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE3OjIzLjI4NjY1NDgwNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyMDIwMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MzI2PWNvbnN0IHN0cnVjdCBvcHRpb25fdCBvbl9lcnJvcnNfYXJyW10gPSB7XFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMzMyLVxcbmZzL250ZnMvc3VwZXIuYzozMzM6dm9pZCBudGZzX2hhbmRsZV9lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL250ZnMvc3VwZXIuYy0zMzQte1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTM3MD1zdGF0aWMgaW50IG50ZnNfd3JpdGVfdm9sdW1lX2ZsYWdzKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBfX2xlMTYgZmxhZ3MpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtNDE5LSAqL1xcbmZzL250ZnMvc3VwZXIuYzo0MjA6aW50IG50ZnNfc2V0X3ZvbHVtZV9mbGFncyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgX19sZTE2IGZsYWdzKVxcbmZzL250ZnMvc3VwZXIuYy00MjEte1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTQzNC0gKi9cXG5mcy9udGZzL3N1cGVyLmM6NDM1OmludCBudGZzX2NsZWFyX3ZvbHVtZV9mbGFncyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgX19sZTE2IGZsYWdzKVxcbmZzL250ZnMvc3VwZXIuYy00MzYte1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTQ0MS1cXG5mcy9udGZzL3N1cGVyLmM6NDQyOmludCBudGZzX3dyaXRlX3ZvbHVtZV9sYWJlbChzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY2hhciAqbGFiZWwpXFxuZnMvbnRmcy9zdXBlci5jLTQ0My17XFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MTcxMT1zdGF0aWMgdm9pZCBudGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTE4MTktXFxuZnMvbnRmcy9zdXBlci5jOjE4MjA6aW50IG50ZnNfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKVxcbmZzL250ZnMvc3VwZXIuYy0xODIxLXtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYz0xODUzPXN0YXRpYyBpbnQgbnRmc19zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTE4OTMtICovXFxuZnMvbnRmcy9zdXBlci5jOjE4OTQ6czY0IGdldF9ucl9mcmVlX2NsdXN0ZXJzKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbmZzL250ZnMvc3VwZXIuYy0xODk1LXtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xOTc5LSAqL1xcbmZzL250ZnMvc3VwZXIuYzoxOTgwOnM2NCBudGZzX2F2YWlsYWJsZV9jbHVzdGVyc19jb3VudChzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgczY0IG5yX2NsdXN0ZXJzKVxcbmZzL250ZnMvc3VwZXIuYy0xOTgxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTc6MjMuMzM2ODYwMThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM0NTQwMTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBrZXlpbmcgaW4gb24gYG50ZnNfZmlsbF9zdXBlcmAuIFNpbmNlIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgZ2V0X3RyZWVfYmRldmAsIGl0J3MgKmRlZmluaXRlbHkqIG5vdCBnZXR0aW5nIGlubGluZWQuIFRoYXQgbWVhbnMgaXQgaGFzIGl0cyBvd24gZGlzdGluY3QgYWRkcmVzcyBpbiBtZW1vcnksIG1ha2luZyBpdCBhIHNvbGlkIHRhcmdldCBzeW1ib2wgZm9yIGZ1enppbmcg4oCTIGEgY2xlYXIgZW50cnkgcG9pbnQgaW50byB0aGUgZmlsZXN5c3RlbSBoYW5kbGluZy4gR29vZC4gQWxzbywgYG50ZnNfaW5pdF9mc19jb250ZXh0YCBpcyBhbHNvIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHRoYXQgbWFrZXMgaXQgYWxzbyBhIGdvb2QgY2FuZGlkYXRlLlxuXG5Ob3csIGxldCdzIHNlZSBhYm91dCB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGNvbnRleHQuIFRoZSBwcmltYXJ5IGNvbmZpZywgYXMgZXhwZWN0ZWQsIGlzIGBOVEZTX0ZTYC4gTm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGRlYWxzIHdpdGggYSBidWcgaW4gdGhlIE5URlMgYm9vdCBzZWN0b3IgcGFyc2luZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCB0aGUgY2hlY2sgZm9yIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCB3YXMgaW5jb3JyZWN0OyBpdCB3YXMgY2hlY2tpbmcgZm9yIGEgcmFuZ2UsIGJ1dCBpdCBzaG91bGQgaGF2ZSBiZWVuIHZlcmlmeWluZyBpdCdzIGEgcG93ZXIgb2YgMiAqYW5kKiBsZXNzIHRoYW4gYSBzcGVjaWZpYyB1cHBlciBib3VuZC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2Ug4oCTIGEgZnVuZGFtZW50YWwgY29ycmVjdGlvbiBpbiBob3cgdGhlIGtlcm5lbCBpbnRlcnByZXRzIE5URlMgZmlsZXN5c3RlbSBtZXRhZGF0YS4gVGhhdCdzIGEganVpY3kgdGFyZ2V0LiBUaGUgYWZmZWN0ZWQgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBhIHN0YW5kYXJkIGBtb3VudGAgb3BlcmF0aW9uLCB3aGljaCBtZWFucyBpdCdzIHByZXR0eSBlYXNpbHkgdHJpZ2dlcmVkIGluIGEgZnV6emluZyBlbnZpcm9ubWVudC5cblxuR2l2ZW4gdGhhdCwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblNvLCB0byBzdW1tYXJpemU6IG15IGZvY3VzIHN5bWJvbHMgYXJlIGRlZmluaXRlbHkgYG50ZnNfZmlsbF9zdXBlcmAgYW5kIGBudGZzX2luaXRfZnNfY29udGV4dGAsIHRoZSBlbmFibGUgY29uZmlnIGlzIGBOVEZTX0ZTYCwgYW5kIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gSSdsbCBkb3VibGUgY2hlY2sgZm9yIG90aGVyIGNvbmZpZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTc6MjkuNjgyMjY0ODFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Nzk2NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xcbmZzL250ZnMvS2NvbmZpZy0xNC1cXHRib29sIFxcXCJOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbmZzL250ZnMvS2NvbmZpZzoxNTpcXHRkZXBlbmRzIG9uIE5URlNfRlNcXG5mcy9udGZzL0tjb25maWctMTYtXFx0aGVscFxcbi0tXFxuZnMvbnRmcy9LY29uZmlnPTM1PWNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxcbmZzL250ZnMvS2NvbmZpZy0zNi1cXHRib29sIFxcXCJOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbmZzL250ZnMvS2NvbmZpZzozNzpcXHRkZXBlbmRzIG9uIE5URlNfRlNcXG5mcy9udGZzL0tjb25maWctMzgtXFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzoyOS43MjgwNzAwODdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyOTY2MDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE5URlNfRlMgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIGBOVEZTX0ZTYCBpbnRyaW5zaWNhbGx5IHJlbGllcyBvbiBgQkxPQ0tgLiBUaGF0J3MgZXhwZWN0ZWQg4oCTIGl0J3MgcHJhY3RpY2FsbHkgYSBnaXZlbi4gYEJMT0NLYCByZXByZXNlbnRzIHRoZSBmdW5kYW1lbnRhbCBzdG9yYWdlIGJ1aWxkaW5nIGJsb2NrLCBhIHN0YW5kYXJkLCB1YmlxdWl0b3VzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLiBCdXQsIHlvdSBrbm93IG1lLCBJIGRvbid0IGp1c3QgdGFrZSB0aGluZ3MgYXQgZmFjZSB2YWx1ZS4gQmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGV4cGxpY2l0IGRlcGVuZGVuY2llcyBvZiBgTlRGU19GU2AuIEdvdHRhIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBjb21wbGV4aXRpZXMgb3Igc3VidGxlIGludGVyYWN0aW9ucyBJIG5lZWQgdG8gYWNjb3VudCBmb3IsIHBhcnRpY3VsYXJseSBpbiBhIGNvbXBsZXggc3RvcmFnZSBjb25maWd1cmF0aW9uLiBObyBhc3N1bXB0aW9ucyBhbGxvd2VkLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1Y2ggZnVuZGFtZW50YWwgY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE3OjMzLjE1NzczMzA0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNjI3MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXFxuZnMvbnRmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTM0LVxcbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTc6MzMuMjAzMTAzNzc0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTY2NjQ5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6XG5cbioqQ2hlY2tpbmcgTlRGUyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGBOVEZTX0ZTYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgY29udGluZ2VudCBvbiBhbnkgb3RoZXIgc2V0dGluZ3MuIFRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhhdCBvdXQgaXMgdGhlIGBmcy9udGZzL0tjb25maWdgIGZpbGUuIEl0J3MgdGhlIHN0YW5kYXJkIHBsYWNlIGZvciB0aGlzIHR5cGUgb2YgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBhbmQgc2VlIHdoYXQgdGhlIHJlbGF0aW9uc2hpcHMgYXJlLiBUaGlzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzozNi4zOTk3NzA5MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBOVEZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDU6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIE5URlMgaXMgdGhlIGZpbGUgc3lzdGVtIG9mIE1pY3Jvc29mdCBXaW5kb3dzIE5ULCAyMDAwLCBYUCBhbmQgMjAwMy5cXG4gICA4OlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIG1vdW50IGRldmljZXMgZm9ybWF0dGVkIHdpdGggdGhlIG50ZnMgZmlsZSBzeXN0ZW0uXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuICAxMTpcXHRcXHQgIG50ZnMuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBOVEZTX0RFQlVHXFxuICAxNDpcXHRcXHRib29sIFxcXCJOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbiAgMTU6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIElmIHlvdSBhcmUgZXhwZXJpZW5jaW5nIGFueSBwcm9ibGVtcyB3aXRoIHRoZSBOVEZTIGZpbGUgc3lzdGVtLCBzYXlcXG4gIDE4OlxcdFxcdCAgWSBoZXJlLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhZGRpdGlvbmFsIGNvbnNpc3RlbmN5IGNoZWNrcyB0byBiZVxcbiAgMTk6XFx0XFx0ICBwZXJmb3JtZWQgYnkgdGhlIGRyaXZlciBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgZGVidWdnaW5nIG1lc3NhZ2VzIHRvXFxuICAyMDpcXHRcXHQgIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbSBsb2cuICBOb3RlIHRoYXQgZGVidWdnaW5nIG1lc3NhZ2VzIGFyZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzozNi4zOTk4MzA2MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTUwNjU4OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5URlMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBmdXp6aW5nIGltcGxpY2F0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgcmVsYXRlZCB0byB0aGUgYE5MU2AgYW5kIGBGU19JT01BUGAgY29uZmlncywgYnV0IGl0J3MgY2xlYXJseSBhIGZpbGVzeXN0ZW0sIHNvIGl0J3MgcHJvYmFibHkgdW5kZXIgYEJMT0NLYCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiAgYE5URlNfRlNgIHNob3VsZCBjb3ZlciBpdC5cblxuSSdtIGRvdWJsZS1jaGVja2luZywganVzdCB0byBiZSBzdXJlLCBhbmQgdGhlcmUgKmlzKiBhbiBgTlRGUzNfRlNgIGNvbmZpZywgcmVmZXJlbmNpbmcgYGZzL250ZnMzL2AsIGJ1dCB0aGlzIHBhdGNoIHRvdWNoZXMgYGZzL250ZnMvc3VwZXIuY2AsIHNvIHdlJ3JlIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIHRoZSAqb2xkKiBgTlRGU19GU2AuIEdvb2QuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgdGhlIHBhdGNoIGFjdHVhbGx5IGRvZXMuLi4gQWhhLCBpdCdzIG1vZGlmeWluZyB0aGUgYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIHZhbGlkYXRpb24gb2YgYHNlY3RvcnNfcGVyX2NsdXN0ZXJgLiAgVGhpcyBjaGFuZ2VzIGhvdyB0aGUgZmlsZXN5c3RlbSBoYW5kbGVzIHRoZSBib290IHNlY3RvciBjaGVjayBkdXJpbmcgbW91bnRpbmcuIEEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1vdW50IHBhdGgsIGFuZCBzcGVjaWZpY2FsbHksIHJlbGF0ZWQgdG8gY3JhZnRlZCBpbWFnZXMgaXMgZGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGludG8gZm9yIGZ1enppbmcuXG5cbk15IGZvY3VzIHN5bWJvbHMgYXJlIGBudGZzX2ZpbGxfc3VwZXJgIGFuZCBgbnRmc19pbml0X2ZzX2NvbnRleHRgLiBUaGVzZSBhcmUgd2hlcmUgdGhlIGxvZ2ljIG9mIHRoZSBwYXRjaCBsaXZlcy5cblxuSSdtIGNvbmZpZGVudCB3ZSBoYXZlIHRoZSByaWdodCBjb25maWcsIGBOVEZTX0ZTYC4gT2theSwgSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwOCwiT3V0cHV0VG9rZW5zIjoxMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzo0Mi45NTA0OTEzODJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTE1NjM4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfZmlsbF9zdXBlclwiLFxuICAgIFwibnRmc19pbml0X2ZzX2NvbnRleHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRGUyBib290IHNlY3RvciB2YWxpZGF0aW9uIGxvZ2ljIGluIGBpc19ib290X3NlY3Rvcl9udGZzYCBieSBjaGFuZ2luZyB0aGUgY29uZGl0aW9uIGZvciBgc2VjdG9yc19wZXJfY2x1c3RlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIG1vdW50IHBhdGgsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19maWxsX3N1cGVyXCIsXG4gICAgXCJudGZzX2luaXRfZnNfY29udGV4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVEZTIGJvb3Qgc2VjdG9yIHZhbGlkYXRpb24gbG9naWMgaW4gYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGJ5IGNoYW5naW5nIHRoZSBjb25kaXRpb24gZm9yIGBzZWN0b3JzX3Blcl9jbHVzdGVyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gbW91bnQgcGF0aCwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgd2hlbiBtb3VudGluZyBhIGNyYWZ0ZWQgTlRGUyBpbWFnZS4gVGhlcmVmb3JlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzo0My4wMjU2NTMzNjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDAwOTYwOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzo0My4wMjYwOTA4MDZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzY5OTY1NDczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBgc2VjdG9yc19wZXJfY2x1c3RlcmAgZmllbGQgaW4gdGhlIE5URlMgYm9vdCBzZWN0b3IgKGBpc19ib290X3NlY3Rvcl9udGZzYCBpbiBgZnMvbnRmcy9zdXBlci5jYCkuIFRoZSBib290IHNlY3RvciBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgYmxvY2sgZGV2aWNlLCBtZWFuaW5nIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIChldmVuIGlmIHBvdGVudGlhbGx5IG1hbGljaW91cyBvciBtYWxmb3JtZWQpLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgaXNzdWVzIGFyaXNpbmcgZnJvbSBtYWxmb3JtZWQgZGlzayBzdHJ1Y3R1cmVzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW50ZWdlciBvdmVyZmxvd3MpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBVQlNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMTU2YmUwYTRmM2Y1ZjVjZWIwMDdjNzI1ODA2ZWUzMmI4ZDdlMWE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDU6MTY6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmNcbmluZGV4IDhhYmU3YmVlNGMwZDkuLjcyZjE5MzMxMzZkYzEgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL3N1cGVyLmNcbisrKyBiL2ZzL250ZnMvc3VwZXIuY1xuQEAgLTU1Nyw4ICs1NTcsOCBAQCBzdGF0aWMgYm9vbCBpc19ib290X3NlY3Rvcl9udGZzKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHQgKiBDaGVjayBzZWN0b3JzIHBlciBjbHVzdGVyIHZhbHVlIGlzIHZhbGlkIGFuZCB0aGUgY2x1c3RlciBzaXplXG4gXHQgKiBpcyBub3QgYWJvdmUgdGhlIG1heGltdW0gKDJNQikuXG4gXHQgKi9cbi1cdGlmIChiLVx1MDAzZWJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyIFx1MDAzZSAweDgwIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGItXHUwMDNlYnBiLnNlY3RvcnNfcGVyX2NsdXN0ZXIgXHUwMDNjIDB4ZjQpXG4rXHRpZiAoYi1cdTAwM2VicGIuc2VjdG9yc19wZXJfY2x1c3RlciBcdTAwM2MgMHhmNCBcdTAwMjZcdTAwMjZcbitcdCAgICAhaXNfcG93ZXJfb2ZfMihiLVx1MDAzZWJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyKSlcbiBcdFx0Z290byBub3RfbnRmcztcbiBcbiBcdC8qIENoZWNrIHJlc2VydmVkL3VudXNlZCBmaWVsZHMgYXJlIHJlYWxseSB6ZXJvLiAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTc6NDMuMDI2MDkxNTY2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2OTk2MjQzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVEZTIEJvb3QgU2VjdG9yIFZhbGlkYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW4gYGZzL250ZnMvc3VwZXIuY2AgaXMgdHdlYWtpbmcgdGhlIGBpc19ib290X3NlY3Rvcl9udGZzYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyBob3cgdGhlIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCBmaWVsZCB3aXRoaW4gdGhlIEJJT1MgUGFyYW1ldGVyIEJsb2NrIChCUEIpIG9mIGFuIE5URlMgYm9vdCBzZWN0b3IgaXMgdmFsaWRhdGVkLlxuXG5UaGUgb3JpZ2luYWwgY29kZSBoYWQgYSByYXRoZXIgb2RkIGNoZWNrOiBgc2VjdG9yc19wZXJfY2x1c3RlcmAgaGFkIHRvIGJlICpiZXR3ZWVuKiAweDgwIGFuZCAweGYzIChleGNsdXNpdmUpLiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGlzIHRvIG1ha2UgaXQgKmxlc3MqIHRoYW4gMHhmNCAqYW5kKiBub3QgYSBwb3dlciBvZiAyLiBJIHVuZGVyc3RhbmQgdGhhdC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyAqbm90KiBhIEtNU0FOIGlzc3VlLiBUaGUgY29yZSBvZiBteSByZWFzb25pbmcgaXMgdGhhdCB0aGUgZGF0YSBiZWluZyB2YWxpZGF0ZWQgaGVyZSBjb21lcyBkaXJlY3RseSBmcm9tIHRoZSBkaXNrIGl0c2VsZiDigJMgZnJvbSB0aGUgYmxvY2sgZGV2aWNlLiBJdCdzIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBvbiB0aGUgc3RhY2sgb3IgaGVhcC4gRXZlbiBpZiB0aGUgZGF0YSBpcyBtYWxpY2lvdXMsIGl0J3MgKmluaXRpYWxpemVkKiB3aXRoIHNvbWUgdmFsdWUgcmVhZCBmcm9tIHRoZSBwaHlzaWNhbCBtZWRpdW0uIEtNU0FOIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgdXNlcyBvZiAqdW5pbml0aWFsaXplZCogbWVtb3J5LCB3aGljaCBzaW1wbHkgaXNuJ3QgdGhlIGNhc2UgaGVyZS4gVGhpcyBwYXRjaCwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgaXMganVzdCBmaXhpbmcgYSBidWcgaW4gdGhlIHZhbGlkaXR5IGNoZWNrIG9mIGRhdGEgKmFscmVhZHkqIG9uIGRpc2suXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBnbGFuY2UgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFdlIGFyZSBkZWFsaW5nIHdpdGggYGJgLCBhIHBvaW50ZXIgdG8gYSBgY29uc3QgTlRGU19CT09UX1NFQ1RPUmAsIHJlYWQgZGlyZWN0bHkgZnJvbSB0aGUgYmxvY2sgZGV2aWNlLiBJdCdzIGJlaW5nIHJlYWQgZnJvbSB0aGUgZGlzay4gTm90aGluZydzIHVuaW5pdGlhbGl6ZWQgaGVyZS5cblxuVGhlcmVmb3JlLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzUsIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTc6NTAuNzI1NzE4MTEyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdGhlIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCBmaWVsZCBpbiB0aGUgTlRGUyBib290IHNlY3RvciAoYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGluIGBmcy9udGZzL3N1cGVyLmNgKS4gVGhlIGJvb3Qgc2VjdG9yIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBibG9jayBkZXZpY2UsIG1lYW5pbmcgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGV2ZW4gaWYgcG90ZW50aWFsbHkgbWFsaWNpb3VzIG9yIG1hbGZvcm1lZCkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBpc3N1ZXMgYXJpc2luZyBmcm9tIG1hbGZvcm1lZCBkaXNrIHN0cnVjdHVyZXMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnRlZ2VyIG92ZXJmbG93cykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgYHNlY3RvcnNfcGVyX2NsdXN0ZXJgIGZpZWxkIGluIHRoZSBOVEZTIGJvb3Qgc2VjdG9yIChgaXNfYm9vdF9zZWN0b3JfbnRmc2AgaW4gYGZzL250ZnMvc3VwZXIuY2ApLiBUaGUgYm9vdCBzZWN0b3IgZGF0YSBpcyByZWFkIGZyb20gdGhlIGJsb2NrIGRldmljZSwgbWVhbmluZyBpdCBpcyBmdWxseSBpbml0aWFsaXplZCAoZXZlbiBpZiBwb3RlbnRpYWxseSBtYWxpY2lvdXMgb3IgbWFsZm9ybWVkKS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGlzc3VlcyBhcmlzaW5nIGZyb20gbWFsZm9ybWVkIGRpc2sgc3RydWN0dXJlcyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludGVnZXIgb3ZlcmZsb3dzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgVUJTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownrgll[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 05:15:04 +0000 UTC FinishedAt: 2026-08-26 05:17:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "5870ce43c013ad564b3b83bae330b160e056df67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "5870ce43c013ad564b3b83bae330b160e056df67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "749d444c-d3d0-48c5-8926-ba3eba4321f4" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_fill_super", "ntfs_init_fs_context" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7bnRmc19pbml0X2ZzX2NvbnRleHQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdGhlIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCBmaWVsZCBpbiB0aGUgTlRGUyBib290IHNlY3RvciAoYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGluIGBmcy9udGZzL3N1cGVyLmNgKS4gVGhlIGJvb3Qgc2VjdG9yIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBibG9jayBkZXZpY2UsIG1lYW5pbmcgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGV2ZW4gaWYgcG90ZW50aWFsbHkgbWFsaWNpb3VzIG9yIG1hbGZvcm1lZCkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBpc3N1ZXMgYXJpc2luZyBmcm9tIG1hbGZvcm1lZCBkaXNrIHN0cnVjdHVyZXMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnRlZ2VyIG92ZXJmbG93cykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRGUyBib290IHNlY3RvciB2YWxpZGF0aW9uIGxvZ2ljIGluIGBpc19ib290X3NlY3Rvcl9udGZzYCBieSBjaGFuZ2luZyB0aGUgY29uZGl0aW9uIGZvciBgc2VjdG9yc19wZXJfY2x1c3RlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIG1vdW50IHBhdGgsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUxNTZiZTBhNGYzZjVmNWNlYjAwN2M3MjU4MDZlZTMyYjhkN2UxYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwNToxNjo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmNcbmluZGV4IDhhYmU3YmVlNGMwZDkuLjcyZjE5MzMxMzZkYzEgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvc3VwZXIuY1xuQEAgLTU1Nyw4ICYjNDM7NTU3LDggQEAgc3RhdGljIGJvb2wgaXNfYm9vdF9zZWN0b3JfbnRmcyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0ICogQ2hlY2sgc2VjdG9ycyBwZXIgY2x1c3RlciB2YWx1ZSBpcyB2YWxpZCBhbmQgdGhlIGNsdXN0ZXIgc2l6ZVxuIFx0ICogaXMgbm90IGFib3ZlIHRoZSBtYXhpbXVtICgyTUIpLlxuIFx0ICovXG4tXHRpZiAoYi1cdTAwM2VicGIuc2VjdG9yc19wZXJfY2x1c3RlciBcdTAwM2UgMHg4MCBcdTAwMjZcdTAwMjZcbi1cdCAgICBiLVx1MDAzZWJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyIFx1MDAzYyAweGY0KVxuJiM0MztcdGlmIChiLVx1MDAzZWJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyIFx1MDAzYyAweGY0IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhaXNfcG93ZXJfb2ZfMihiLVx1MDAzZWJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyKSlcbiBcdFx0Z290byBub3RfbnRmcztcbiBcbiBcdC8qIENoZWNrIHJlc2VydmVkL3VudXNlZCBmaWVsZHMgYXJlIHJlYWxseSB6ZXJvLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O250ZnNfaW5pdF9mc19jb250ZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVEZTIGJvb3Qgc2VjdG9yIHZhbGlkYXRpb24gbG9naWMgaW4gYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGJ5IGNoYW5naW5nIHRoZSBjb25kaXRpb24gZm9yIGBzZWN0b3JzX3Blcl9jbHVzdGVyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gbW91bnQgcGF0aCwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgd2hlbiBtb3VudGluZyBhIGNyYWZ0ZWQgTlRGUyBpbWFnZS4gVGhlcmVmb3JlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTE1NmJlMGE0ZjNmNWY1Y2ViMDA3YzcyNTgwNmVlMzJiOGQ3ZTFhOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDA1OjE2OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9zdXBlci5jIGIvZnMvbnRmcy9zdXBlci5jCmluZGV4IDhhYmU3YmVlNGMwZDkuLjcyZjE5MzMxMzZkYzEgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL3N1cGVyLmMKQEAgLTU1Nyw4ICYjNDM7NTU3LDggQEAgc3RhdGljIGJvb2wgaXNfYm9vdF9zZWN0b3JfbnRmcyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCSAqIENoZWNrIHNlY3RvcnMgcGVyIGNsdXN0ZXIgdmFsdWUgaXMgdmFsaWQgYW5kIHRoZSBjbHVzdGVyIHNpemUKIAkgKiBpcyBub3QgYWJvdmUgdGhlIG1heGltdW0gKDJNQikuCiAJICovCi0JaWYgKGItJmd0O2JwYi5zZWN0b3JzX3Blcl9jbHVzdGVyICZndDsgMHg4MCAmYW1wOyZhbXA7Ci0JICAgIGItJmd0O2JwYi5zZWN0b3JzX3Blcl9jbHVzdGVyICZsdDsgMHhmNCkKJiM0MzsJaWYgKGItJmd0O2JwYi5zZWN0b3JzX3Blcl9jbHVzdGVyICZsdDsgMHhmNCAmYW1wOyZhbXA7CiYjNDM7CSAgICAhaXNfcG93ZXJfb2ZfMihiLSZndDticGIuc2VjdG9yc19wZXJfY2x1c3RlcikpCiAJCWdvdG8gbm90X250ZnM7CiAKIAkvKiBDaGVjayByZXNlcnZlZC91bnVzZWQgZmllbGRzIGFyZSByZWFsbHkgemVyby4gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOVEZTIEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyB0aGUgYm9vdCBzZWN0b3IgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiBgZnMvbnRmcy9zdXBlci5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBob3cgd2UmIzM5O3JlIGNoZWNraW5nIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCBkdXJpbmcgdGhlIGBpc19ib290X3NlY3Rvcl9udGZzYCBmdW5jdGlvbiwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyBjYWxsZWQgZHVyaW5nIHRoZSBtb3VudCBwcm9jZXNzLgoKUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIHJlamVjdGluZyB2YWx1ZXMgb3V0c2lkZSBhIGZhaXJseSBuYXJyb3cgcmFuZ2U6IGFueXRoaW5nIGdyZWF0ZXIgdGhhbiBgMHg4MGAgKmFuZCogbGVzcyB0aGFuIGAweGY0YC4gTm93LCBpdCYjMzk7cyBhIGJpdCBtb3JlIG51YW5jZWQuIFdlJiMzOTtyZSBvbmx5IHJlamVjdGluZyB2YWx1ZXMgKmxlc3MqIHRoYW4gYDB4ZjRgICppZiogdGhleSBhcmVuJiMzOTt0IGEgcG93ZXIgb2YgdHdvLiBUaGlzIGlzIGFuIGltcG9ydGFudCBkaXN0aW5jdGlvbiwgYXMgdGhlIHByZXZpb3VzIGxvZ2ljIGNvdWxkIHBvdGVudGlhbGx5IHJlamVjdCB2YWxpZCBjb25maWd1cmF0aW9ucy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IGFmZmVjdHMgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgTlRGUyBpbWFnZXMg4oCTIHdoaWNoLCBmcm9tIG15IHBlcnNwZWN0aXZlLCBtZWFucyB0aGlzIGlzIHNvbWV0aGluZyB0aGF0JiMzOTtzIHJpcGUgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIE5URlMgaXMgYSBmaWxlc3lzdGVtLCBzbyB3ZSBjYW4gbW91bnQgbG9vcGJhY2sgaW1hZ2VzLCBhbmQgdGVzdCB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZWQgYW55IG5ldyBidWdzLiBUaW1lIHRvIGNoZWNrIGBmcy9udGZzL3N1cGVyLmNgIGZvciBjb250ZXh0IGFuZCB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19ib290X3NlY3Rvcl9udGZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYz00NDI9aW50IG50ZnNfd3JpdGVfdm9sdW1lX2xhYmVsKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjaGFyICpsYWJlbClcbi0tXG5mcy9udGZzL3N1cGVyLmMtNTE4LS8qXG5mcy9udGZzL3N1cGVyLmM6NTE5OiAqIGlzX2Jvb3Rfc2VjdG9yX250ZnMgLSBjaGVjayB3aGV0aGVyIGEgYm9vdCBzZWN0b3IgaXMgYSB2YWxpZCBOVEZTIGJvb3Qgc2VjdG9yXG5mcy9udGZzL3N1cGVyLmMtNTIwLSAqIEBzYjpcdFx0U3VwZXIgYmxvY2sgb2YgdGhlIGRldmljZSB0byB3aGljaCBAYiBiZWxvbmdzLlxuLS1cbmZzL250ZnMvc3VwZXIuYy01MjMtICpcbmZzL250ZnMvc3VwZXIuYzo1MjQ6ICogaXNfYm9vdF9zZWN0b3JfbnRmcygpIGNoZWNrcyB3aGV0aGVyIHRoZSBib290IHNlY3RvciBAYiBpcyBhIHZhbGlkIE5URlMgYm9vdFxuZnMvbnRmcy9zdXBlci5jLTUyNS0gKiBzZWN0b3IuIFJldHVybnMgJiMzOTt0cnVlJiMzOTsgaWYgaXQgaXMgdmFsaWQgYW5kICYjMzk7ZmFsc2UmIzM5OyBpZiBub3QuXG4tLVxuZnMvbnRmcy9zdXBlci5jLTUyOS0gKi9cbmZzL250ZnMvc3VwZXIuYzo1MzA6c3RhdGljIGJvb2wgaXNfYm9vdF9zZWN0b3JfbnRmcyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvbnRmcy9zdXBlci5jLTUzMS1cdFx0Y29uc3Qgc3RydWN0IG50ZnNfYm9vdF9zZWN0b3IgKmIsIGNvbnN0IGJvb2wgc2lsZW50KVxuLS1cbmZzL250ZnMvc3VwZXIuYz02MDg9c3RhdGljIGNoYXIgKnJlYWRfbnRmc19ib290X3NlY3RvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL250ZnMvc3VwZXIuYy02MjMtXG5mcy9udGZzL3N1cGVyLmM6NjI0Olx0aWYgKCFpc19ib290X3NlY3Rvcl9udGZzKHNiLCAoc3RydWN0IG50ZnNfYm9vdF9zZWN0b3IgKilib290X3NlY3RvcixcbmZzL250ZnMvc3VwZXIuYy02MjUtXHRcdFx0XHQgc2lsZW50KSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBOVEZTIE1vdW50IFByb2Nlc3MgRGVlcCBEaXZlKioKCk9rYXksIHNvIGBpc19ib290X3NlY3Rvcl9udGZzYCBpcyAqZGVmaW5pdGVseSogcGFydCBvZiB0aGUgY3JpdGljYWwgcGF0aCBoZXJlLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgcmVhZF9udGZzX2Jvb3Rfc2VjdG9yYCwgd2hpY2ggaW4gdHVybiBmZWVkcyBpbnRvIGBudGZzX2ZpbGxfc3VwZXJgLiBUaGF0IHB1dHMgaXQgc3F1YXJlbHkgaW4gdGhlIG1vdW50IHByb2Nlc3MsIGFuZCBhIHByZXR0eSBlYXJseSBzdGFnZSwgaXQgc2VlbXMuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJvb3Qgc2VjdG9yIGlzIHZhbGlkYXRlZCBhbmQgaGFuZGxlZCBhcyB0aGlzIGRldGVybWluZXMgaG93IHRoZSByZXN0IG9mIHRoZSBmaWxlIHN5c3RlbSBnZXRzIGludGVycHJldGVkLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmRpdGlvbnMgbWlnaHQgbWFrZSB0aGlzIGZ1bmN0aW9uIGZhaWwuIE5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgTlRGUyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlLiBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBlbnN1cmUgaXQmIzM5O3MgcHJvcGVybHkgZW5hYmxlZCBhbmQgYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcbmZzL250ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXG4tLVxuZnMvbnRmcy9LY29uZmlnLTM0LVxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OgoKKipBbmFseXppbmcgdGhlIE5URlMgQm9vdCBTZWN0b3IgTG9naWMqKgoKQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5pdGVseSB0YXJnZXRpbmcgYW4gTlRGUyBmaWxlc3lzdGVtLCBgTlRGU19GU2AuIE15IGJyYWluIGltbWVkaWF0ZWx5IHN0YXJ0cyB0cmFjaW5nIHRoZSBmbG93Li4uIFdlIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGBpc19ib290X3NlY3Rvcl9udGZzYC4gR29vZCwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsOyBpdCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgaW50ZXJuYWwgYW5kIGRvZXNuJiMzOTt0IGdldCBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoaXMgbW9kdWxlLCBtYWtpbmcgZGVidWdnaW5nIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYSBsaXR0bGUgZWFzaWVyLiBOb3csIHdobyBjYWxscyAqdGhhdCogZnVuY3Rpb24/IExvb2tzIGxpa2UgYHJlYWRfbnRmc19ib290X3NlY3RvcmAuLi4gYWxzbyBzdGF0aWMuIEV4Y2VsbGVudC4gU28sIGBpc19ib290X3NlY3Rvcl9udGZzYCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZyb20gd2l0aGluIGByZWFkX250ZnNfYm9vdF9zZWN0b3JgLiBBbmQgbGFzdGx5LCBgcmVhZF9udGZzX2Jvb3Rfc2VjdG9yYCBpcyBjYWxsZWQgYnkgYG50ZnNfZmlsbF9zdXBlcmAuIFRoaXMgZ2l2ZXMgbWUgdGhlIGJpZyBwaWN0dXJlLiBJIGNhbiBub3cgc2FmZWx5IGFzc3VtZSB0aGF0IGBudGZzX2ZpbGxfc3VwZXJgIGlzIGxpa2VseSB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBwYXJzZSB0aGUgZmlsZXN5c3RlbSwgd2l0aCBgcmVhZF9udGZzX2Jvb3Rfc2VjdG9yYCByZXNwb25zaWJsZSBmb3IgcHVsbGluZyB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgYm9vdCBzZWN0b3IsIGFuZCB0aGUgc3RhdGljIGZ1bmN0aW9ucyBiZWluZyB1c2VkIHRvIGNoZWNrIGlmIHRoZSB2b2x1bWUgdGhhdCBpcyBwYXNzZWQgdG8gaXQgY29udGFpbnMgTlRGUy4gVGhlIGBzdGF0aWNgIGtleXdvcmRzIHRlbGwgbWUgdGhhdCYjMzk7cyB0aGUgc2NvcGUgb2YgdGhlIGNoZWNrLCBhcyB0aGlzIGlzIGFsbCBsb2NhbC4gVGhpcyBpcyBhIHNvbGlkLCBjbGVhbiBmbG93OyB0aGUgYm9vdCBzZWN0b3IgY2hlY2sgYW5kIHJlYWQgYXJlIGVuY2Fwc3VsYXRlZCB3aXRoaW4gdGhpcyBtb2R1bGUsIGNvbmZpcm1pbmcgYSBuaWNlLCBtb2R1bGFyIGRlc2lnbi4gTm93LCBJIGhhdmUgYSBnb29kIGZyYW1ld29yayBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYm9vdCBzZWN0b3IgcGFyc2luZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWRfbnRmc19ib290X3NlY3RvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmM9NTMwPXN0YXRpYyBib29sIGlzX2Jvb3Rfc2VjdG9yX250ZnMoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9udGZzL3N1cGVyLmMtNjAxLS8qXG5mcy9udGZzL3N1cGVyLmM6NjAyOiAqIHJlYWRfbnRmc19ib290X3NlY3RvciAtIHJlYWQgdGhlIE5URlMgYm9vdCBzZWN0b3Igb2YgYSBkZXZpY2VcbmZzL250ZnMvc3VwZXIuYy02MDMtICogQHNiOlx0XHRzdXBlciBibG9jayBvZiBkZXZpY2UgdG8gcmVhZCB0aGUgYm9vdCBzZWN0b3IgZnJvbVxuLS1cbmZzL250ZnMvc3VwZXIuYy02MDctICovXG5mcy9udGZzL3N1cGVyLmM6NjA4OnN0YXRpYyBjaGFyICpyZWFkX250ZnNfYm9vdF9zZWN0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL250ZnMvc3VwZXIuYy02MDktXHRcdGNvbnN0IGludCBzaWxlbnQpXG4tLVxuZnMvbnRmcy9zdXBlci5jPTIyMDE9c3RhdGljIGludCBudGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL250ZnMvc3VwZXIuYy0yMjY4LVx0LyogUmVhZCB0aGUgYm9vdCBzZWN0b3IgYW5kIHJldHVybiB1bmxvY2tlZCBidWZmZXIgaGVhZCB0byBpdC4gKi9cbmZzL250ZnMvc3VwZXIuYzoyMjY5Olx0Ym9vdCA9IHJlYWRfbnRmc19ib290X3NlY3RvcihzYiwgc2lsZW50KTtcbmZzL250ZnMvc3VwZXIuYy0yMjcwLVx0aWYgKCFib290KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkh1bnRpbmcgZm9yIHRoZSBSZWFsIEVudHJ5IFBvaW50KioKCk9rYXksIHNvIGBudGZzX2ZpbGxfc3VwZXJgIGlzIG1hcmtlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBtZWFucyBpdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoZSBOVEZTIGZpbGVzeXN0ZW0sIGF0IGxlYXN0IG5vdCBpbiB0aGUgc3RhbmRhcmQgd2F5IEkmIzM5O20gdXNlZCB0byBzZWVpbmcuIFRoaXMgaXMgcHJldHR5IGNvbW1vbiBpbiBrZXJuZWwgY29kZTsgc3RhdGljIGZ1bmN0aW9ucyBvZnRlbiBzZXJ2ZSBhcyBpbnRlcm5hbCBoZWxwZXJzLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYG50ZnNfZmlsbF9zdXBlcmAgdG8gbG9jYXRlIHRoZSAqYWN0dWFsKiBub24tc3RhdGljIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZSB0aGF0IGluaXRpYWxseSB0cmlnZ2VycyB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIGJlIG1vdW50ZWQgYW5kIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gZmluZCB0aGUgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGlzIHN0YXRpYyBmdW5jdGlvbi4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gYmVnaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2ZpbGxfc3VwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9zdXBlci5jPTIxODQ9c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBudGZzX21mdF9pbnZhbF9sb2NrX2tleTtcbi0tXG5mcy9udGZzL3N1cGVyLmMtMjE4Ni0vKlxuZnMvbnRmcy9zdXBlci5jOjIxODc6ICogbnRmc19maWxsX3N1cGVyIC0gbW91bnQgYW4gbnRmcyBmaWxlc3lzdGVtXG5mcy9udGZzL3N1cGVyLmMtMjE4OC0gKiBAc2I6IHN1cGVyIGJsb2NrIG9mIHRoZSBkZXZpY2UgdG8gbW91bnRcbi0tXG5mcy9udGZzL3N1cGVyLmMtMjE5MC0gKlxuZnMvbnRmcy9zdXBlci5jOjIxOTE6ICogbnRmc19maWxsX3N1cGVyKCkgaXMgY2FsbGVkIGJ5IHRoZSBWRlMgdG8gbW91bnQgdGhlIGRldmljZSBkZXNjcmliZWQgYnkgQHNiXG5mcy9udGZzL3N1cGVyLmMtMjE5Mi0gKiB3aXRoIHRoZSBtb3VudCBvdGlvbnMgaW4gQGRhdGEgd2l0aCB0aGUgTlRGUyBmaWxlc3lzdGVtLlxuLS1cbmZzL250ZnMvc3VwZXIuYy0yMjAwLSAqL1xuZnMvbnRmcy9zdXBlci5jOjIyMDE6c3RhdGljIGludCBudGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvbnRmcy9zdXBlci5jLTIyMDIte1xuLS1cbmZzL250ZnMvc3VwZXIuYz0yNTE2PXN0YXRpYyBpbnQgbnRmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9udGZzL3N1cGVyLmMtMjUxNy17XG5mcy9udGZzL3N1cGVyLmM6MjUxODpcdHJldHVybiBnZXRfdHJlZV9iZGV2KGZjLCBudGZzX2ZpbGxfc3VwZXIpO1xuZnMvbnRmcy9zdXBlci5jLTI1MTktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzE1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipGaW5kaW5nIHRoZSBSaWdodCBFbnRyeSBQb2ludCBpbiB0aGUgTlRGUyBDb2RlKioKCk9rYXksIHNvIGBudGZzX2dldF90cmVlYCBpcyBhbHNvIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0JiMzOTtzIG5vdCB0aGUgcHJpbWFyeSwgZXh0ZXJuYWxseS12aXNpYmxlIGVudHJ5IHBvaW50IEkmIzM5O20gbG9va2luZyBmb3IuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlcmUuIE15IG1lbnRhbCBtb2RlbCBpcywgaWYgSSBjYW4mIzM5O3QgZGlyZWN0bHkgY2FsbCB0aGF0IGZ1bmN0aW9uLCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogZG9lcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhlIHJlbGF0ZWQgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gb3IgZ2xvYmFsIHZhcmlhYmxlIHRoYXQgKmxlYWRzKiB0byBgbnRmc19nZXRfdHJlZWAuIE9uY2UgSSYjMzk7dmUgZm91bmQgdGhhdCBoaWdoZXItbGV2ZWwgaW50ZXJmYWNlLCBJIGNhbiBzdGFydCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjYWxsIHN0YWNrIGFuZCBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgYWN0dWFsbHkgYWNjZXNzZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNhbm9uaWNhbCB3YXkgb2Ygd29ya2luZyB3aXRoIHRoaXMgTlRGUyBkYXRhIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2dldF90cmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYz0yNTE0PURFRklORV9NVVRFWChudGZzX2xvY2spO1xuZnMvbnRmcy9zdXBlci5jLTI1MTUtXG5mcy9udGZzL3N1cGVyLmM6MjUxNjpzdGF0aWMgaW50IG50ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvbnRmcy9zdXBlci5jLTI1MTcte1xuLS1cbmZzL250ZnMvc3VwZXIuYz0yNTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIG50ZnNfY29udGV4dF9vcHMgPSB7XG5mcy9udGZzL3N1cGVyLmMtMjUzMC1cdC5wYXJzZV9wYXJhbVx0PSBudGZzX3BhcnNlX3BhcmFtLFxuZnMvbnRmcy9zdXBlci5jOjI1MzE6XHQuZ2V0X3RyZWVcdD0gbnRmc19nZXRfdHJlZSxcbmZzL250ZnMvc3VwZXIuYy0yNTMyLVx0LmZyZWVcdFx0PSBudGZzX2ZyZWVfZnNfY29udGV4dCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE3OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbml0aWFsIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIE5URlMgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIE5URlMgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gTXkgZmlyc3QgaW5zdGluY3QsIGJhc2VkIG9uIHRoZSBmdW5jdGlvbiBuYW1lLCBpcyB0aGF0IGBudGZzX2luaXRfZnNfY29udGV4dGAgaXMgZ29pbmcgdG8gYmUgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgcHJvY2Vzcy4gSXQganVzdCAqZmVlbHMqIHJpZ2h0LiBJdCBtYWtlcyBzZW5zZSB0aGF0IHRoZSBmaWxlIHN5c3RlbSBjb250ZXh0IHdvdWxkIGJlIHNldCB1cCBoZXJlLCBhbmQgZnJvbSB0aGVyZSwgdGhlIG90aGVyIG5lY2Vzc2FyeSBjb21wb25lbnRzIHdvdWxkIGJlIGluaXRpYWxpemVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCwgb2YgY291cnNlLCBidXQgdGhhdCYjMzk7cyBteSB3b3JraW5nIGh5cG90aGVzaXMgYXMgSSBzdGFydCBkaWdnaW5nLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRoZSByb290IGluaXRpYWxpemF0aW9uIHRvIGJlZ2luLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2luaXRfZnNfY29udGV4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmM9MjUyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBudGZzX2NvbnRleHRfb3BzID0ge1xuLS1cbmZzL250ZnMvc3VwZXIuYy0yNTM1LVxuZnMvbnRmcy9zdXBlci5jOjI1MzY6c3RhdGljIGludCBudGZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9udGZzL3N1cGVyLmMtMjUzNy17XG4tLVxuZnMvbnRmcy9zdXBlci5jPTI1Njg9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG50ZnNfZnNfdHlwZSA9IHtcbi0tXG5mcy9udGZzL3N1cGVyLmMtMjU3MC1cdC5uYW1lICAgICAgICAgICAgICAgICAgID0gXCYjMzQ7bnRmc1wmIzM0OyxcbmZzL250ZnMvc3VwZXIuYzoyNTcxOlx0LmluaXRfZnNfY29udGV4dCAgICAgICAgPSBudGZzX2luaXRfZnNfY29udGV4dCxcbmZzL250ZnMvc3VwZXIuYy0yNTcyLVx0LnBhcmFtZXRlcnMgICAgICAgICAgICAgPSBudGZzX3BhcmFtZXRlcnMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MDAKCQkJCQkJCW91dHB1dDogNjUKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBOVEZTIE1vZHVsZSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGRlYWwuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgTlRGUyBtb2R1bGUgd29ya3MsIGFuZCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBsb29rIGF0IGVpdGhlciBgbnRmc19pbml0X2ZzX2NvbnRleHRgIG9yIGBudGZzX2dldF90cmVlYC4gQnV0IHRoZW4gSSBwYXVzZWQuIFdhaXQgYSBtaW51dGUsIGBudGZzX2ZpbGxfc3VwZXJgIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYy4gTGV0IG1lIHNlZSwgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpZWQgSSBzaG91bGQgZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMsIGJlY2F1c2UgdGhlIHN0YXRpYyBvbmVzIGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgYW5kIHRoYXQmIzM5O3Mgbm90IGlkZWFsIGZvciBtZS4gSSBuZWVkIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQuCgpTbywgYG50ZnNfZmlsbF9zdXBlcmAgaXMgYSBnb29kIGZvY3VzIHN5bWJvbC4gTm93IHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBudGZzX2ZpbGxfc3VwZXJgIGlzIGlubGluZWQsIGJlY2F1c2UgaWYgc28sIGl0JiMzOTtzIG5vdCBhIHN1aXRhYmxlIGVudHJ5IHBvaW50LiBJJiMzOTtsbCBoYXZlIHRvIGNoZWNrIHRoZSBjb2RlLCBidXQgaXQgbG9va3MgcHJldHR5IHN1YnN0YW50aWFsLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgaW5saW5lZC4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBtYXliZSBJIHNob3VsZCByZXZlcnQgdG8gYG50ZnNfaW5pdF9mc19jb250ZXh0YCBvciBgbnRmc19nZXRfdHJlZWAuIEhtbSwgYG50ZnNfZ2V0X3RyZWVgIGxvb2tzIGxpa2UgYSB3cmFwcGVyIGFyb3VuZCBgZ2V0X3RyZWVfYmRldmAuIEkgZG9uJiMzOTt0IHJlYWxseSB3YW50IHRvIGdvIGRvd24gdGhhdCByYWJiaXQgaG9sZSByaWdodCBub3cuCgpBbHJpZ2h0LCB3aGF0IEkmIzM5O2xsIGRvIGlzIEkmIzM5O2xsIGdvIGJhY2sgdG8gdGhlIHNvdXJjZSBhbmQgc2NhbiBgZnMvbnRmcy9zdXBlci5jYCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHByb2JhYmx5IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gcXVpY2tseSBpZGVudGlmeSBhIGNsZWFyLCB1c2FibGUgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9zdXBlci5jPTMyNj1jb25zdCBzdHJ1Y3Qgb3B0aW9uX3Qgb25fZXJyb3JzX2FycltdID0ge1xuLS1cbmZzL250ZnMvc3VwZXIuYy0zMzItXG5mcy9udGZzL3N1cGVyLmM6MzMzOnZvaWQgbnRmc19oYW5kbGVfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL250ZnMvc3VwZXIuYy0zMzQte1xuLS1cbmZzL250ZnMvc3VwZXIuYz0zNzA9c3RhdGljIGludCBudGZzX3dyaXRlX3ZvbHVtZV9mbGFncyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgX19sZTE2IGZsYWdzKVxuLS1cbmZzL250ZnMvc3VwZXIuYy00MTktICovXG5mcy9udGZzL3N1cGVyLmM6NDIwOmludCBudGZzX3NldF92b2x1bWVfZmxhZ3Moc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIF9fbGUxNiBmbGFncylcbmZzL250ZnMvc3VwZXIuYy00MjEte1xuLS1cbmZzL250ZnMvc3VwZXIuYy00MzQtICovXG5mcy9udGZzL3N1cGVyLmM6NDM1OmludCBudGZzX2NsZWFyX3ZvbHVtZV9mbGFncyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgX19sZTE2IGZsYWdzKVxuZnMvbnRmcy9zdXBlci5jLTQzNi17XG4tLVxuZnMvbnRmcy9zdXBlci5jLTQ0MS1cbmZzL250ZnMvc3VwZXIuYzo0NDI6aW50IG50ZnNfd3JpdGVfdm9sdW1lX2xhYmVsKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjaGFyICpsYWJlbClcbmZzL250ZnMvc3VwZXIuYy00NDMte1xuLS1cbmZzL250ZnMvc3VwZXIuYz0xNzExPXN0YXRpYyB2b2lkIG50ZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvbnRmcy9zdXBlci5jLTE4MTktXG5mcy9udGZzL3N1cGVyLmM6MTgyMDppbnQgbnRmc19mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXG5mcy9udGZzL3N1cGVyLmMtMTgyMS17XG4tLVxuZnMvbnRmcy9zdXBlci5jPTE4NTM9c3RhdGljIGludCBudGZzX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpXG4tLVxuZnMvbnRmcy9zdXBlci5jLTE4OTMtICovXG5mcy9udGZzL3N1cGVyLmM6MTg5NDpzNjQgZ2V0X25yX2ZyZWVfY2x1c3RlcnMoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG5mcy9udGZzL3N1cGVyLmMtMTg5NS17XG4tLVxuZnMvbnRmcy9zdXBlci5jLTE5NzktICovXG5mcy9udGZzL3N1cGVyLmM6MTk4MDpzNjQgbnRmc19hdmFpbGFibGVfY2x1c3RlcnNfY291bnQoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHM2NCBucl9jbHVzdGVycylcbmZzL250ZnMvc3VwZXIuYy0xOTgxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg0MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiBgbnRmc19maWxsX3N1cGVyYC4gU2luY2UgaXQmIzM5O3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgZ2V0X3RyZWVfYmRldmAsIGl0JiMzOTtzICpkZWZpbml0ZWx5KiBub3QgZ2V0dGluZyBpbmxpbmVkLiBUaGF0IG1lYW5zIGl0IGhhcyBpdHMgb3duIGRpc3RpbmN0IGFkZHJlc3MgaW4gbWVtb3J5LCBtYWtpbmcgaXQgYSBzb2xpZCB0YXJnZXQgc3ltYm9sIGZvciBmdXp6aW5nIOKAkyBhIGNsZWFyIGVudHJ5IHBvaW50IGludG8gdGhlIGZpbGVzeXN0ZW0gaGFuZGxpbmcuIEdvb2QuIEFsc28sIGBudGZzX2luaXRfZnNfY29udGV4dGAgaXMgYWxzbyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB0aGF0IG1ha2VzIGl0IGFsc28gYSBnb29kIGNhbmRpZGF0ZS4KCk5vdywgbGV0JiMzOTtzIHNlZSBhYm91dCB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGNvbnRleHQuIFRoZSBwcmltYXJ5IGNvbmZpZywgYXMgZXhwZWN0ZWQsIGlzIGBOVEZTX0ZTYC4gTm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLgoKVGhlIHBhdGNoIGl0c2VsZiBkZWFscyB3aXRoIGEgYnVnIGluIHRoZSBOVEZTIGJvb3Qgc2VjdG9yIHBhcnNpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgdGhlIGNoZWNrIGZvciBgc2VjdG9yc19wZXJfY2x1c3RlcmAgd2FzIGluY29ycmVjdDsgaXQgd2FzIGNoZWNraW5nIGZvciBhIHJhbmdlLCBidXQgaXQgc2hvdWxkIGhhdmUgYmVlbiB2ZXJpZnlpbmcgaXQmIzM5O3MgYSBwb3dlciBvZiAyICphbmQqIGxlc3MgdGhhbiBhIHNwZWNpZmljIHVwcGVyIGJvdW5kLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSDigJMgYSBmdW5kYW1lbnRhbCBjb3JyZWN0aW9uIGluIGhvdyB0aGUga2VybmVsIGludGVycHJldHMgTlRGUyBmaWxlc3lzdGVtIG1ldGFkYXRhLiBUaGF0JiMzOTtzIGEganVpY3kgdGFyZ2V0LiBUaGUgYWZmZWN0ZWQgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBhIHN0YW5kYXJkIGBtb3VudGAgb3BlcmF0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwcmV0dHkgZWFzaWx5IHRyaWdnZXJlZCBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQuCgpHaXZlbiB0aGF0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpTbywgdG8gc3VtbWFyaXplOiBteSBmb2N1cyBzeW1ib2xzIGFyZSBkZWZpbml0ZWx5IGBudGZzX2ZpbGxfc3VwZXJgIGFuZCBgbnRmc19pbml0X2ZzX2NvbnRleHRgLCB0aGUgZW5hYmxlIGNvbmZpZyBpcyBgTlRGU19GU2AsIGFuZCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZnV6ei13b3J0aHkuIEkmIzM5O2xsIGRvdWJsZSBjaGVjayBmb3Igb3RoZXIgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWc9MTM9Y29uZmlnIE5URlNfREVCVUdcbmZzL250ZnMvS2NvbmZpZy0xNC1cdGJvb2wgXCYjMzQ7TlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuZnMvbnRmcy9LY29uZmlnOjE1Olx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG5mcy9udGZzL0tjb25maWctMTYtXHRoZWxwXG4tLVxuZnMvbnRmcy9LY29uZmlnPTM1PWNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG5mcy9udGZzL0tjb25maWc6Mzc6XHRkZXBlbmRzIG9uIE5URlNfRlNcbmZzL250ZnMvS2NvbmZpZy0zOC1cdHNlbGVjdCBGU19QT1NJWF9BQ0xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY2NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBOVEZTX0ZTIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gYE5URlNfRlNgIGludHJpbnNpY2FsbHkgcmVsaWVzIG9uIGBCTE9DS2AuIFRoYXQmIzM5O3MgZXhwZWN0ZWQg4oCTIGl0JiMzOTtzIHByYWN0aWNhbGx5IGEgZ2l2ZW4uIGBCTE9DS2AgcmVwcmVzZW50cyB0aGUgZnVuZGFtZW50YWwgc3RvcmFnZSBidWlsZGluZyBibG9jaywgYSBzdGFuZGFyZCwgdWJpcXVpdG91cyBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4gQnV0LCB5b3Uga25vdyBtZSwgSSBkb24mIzM5O3QganVzdCB0YWtlIHRoaW5ncyBhdCBmYWNlIHZhbHVlLiBCZWZvcmUgSSBwcm9jZWVkLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBleHBsaWNpdCBkZXBlbmRlbmNpZXMgb2YgYE5URlNfRlNgLiBHb3R0YSBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGNvbXBsZXhpdGllcyBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgbmVlZCB0byBhY2NvdW50IGZvciwgcGFydGljdWxhcmx5IGluIGEgY29tcGxleCBzdG9yYWdlIGNvbmZpZ3VyYXRpb24uIE5vIGFzc3VtcHRpb25zIGFsbG93ZWQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3VjaCBmdW5kYW1lbnRhbCBjb21wb25lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXG5mcy9udGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xuLS1cbmZzL250ZnMvS2NvbmZpZy0zNC1cbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcbmZzL250ZnMvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDM4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqQ2hlY2tpbmcgTlRGUyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZSBgTlRGU19GU2Aga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGNvbnRpbmdlbnQgb24gYW55IG90aGVyIHNldHRpbmdzLiBUaGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoYXQgb3V0IGlzIHRoZSBgZnMvbnRmcy9LY29uZmlnYCBmaWxlLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgcGxhY2UgZm9yIHRoaXMgdHlwZSBvZiBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBhbmQgc2VlIHdoYXQgdGhlIHJlbGF0aW9uc2hpcHMgYXJlLiBUaGlzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5URlNfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O05URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0c2VsZWN0IE5MU1xuICAgNTpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIE5URlMgaXMgdGhlIGZpbGUgc3lzdGVtIG9mIE1pY3Jvc29mdCBXaW5kb3dzIE5ULCAyMDAwLCBYUCBhbmQgMjAwMy5cbiAgIDg6XHRcdCAgVGhpcyBhbGxvd3MgeW91IHRvIG1vdW50IGRldmljZXMgZm9ybWF0dGVkIHdpdGggdGhlIG50ZnMgZmlsZSBzeXN0ZW0uXG4gICA5Olx0XG4gIDEwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuICAxMTpcdFx0ICBudGZzLlxuICAxMjpcdFxuICAxMzpcdGNvbmZpZyBOVEZTX0RFQlVHXG4gIDE0Olx0XHRib29sIFwmIzM0O05URlMgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbiAgMTU6XHRcdGRlcGVuZHMgb24gTlRGU19GU1xuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBhbnkgcHJvYmxlbXMgd2l0aCB0aGUgTlRGUyBmaWxlIHN5c3RlbSwgc2F5XG4gIDE4Olx0XHQgIFkgaGVyZS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gYWRkaXRpb25hbCBjb25zaXN0ZW5jeSBjaGVja3MgdG8gYmVcbiAgMTk6XHRcdCAgcGVyZm9ybWVkIGJ5IHRoZSBkcml2ZXIgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGRlYnVnZ2luZyBtZXNzYWdlcyB0b1xuICAyMDpcdFx0ICBiZSB3cml0dGVuIHRvIHRoZSBzeXN0ZW0gbG9nLiAgTm90ZSB0aGF0IGRlYnVnZ2luZyBtZXNzYWdlcyBhcmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUwOAoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiAzNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTlRGUyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZnV6emluZyBpbXBsaWNhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBgTkxTYCBhbmQgYEZTX0lPTUFQYCBjb25maWdzLCBidXQgaXQmIzM5O3MgY2xlYXJseSBhIGZpbGVzeXN0ZW0sIHNvIGl0JiMzOTtzIHByb2JhYmx5IHVuZGVyIGBCTE9DS2AsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZC4gIGBOVEZTX0ZTYCBzaG91bGQgY292ZXIgaXQuCgpJJiMzOTttIGRvdWJsZS1jaGVja2luZywganVzdCB0byBiZSBzdXJlLCBhbmQgdGhlcmUgKmlzKiBhbiBgTlRGUzNfRlNgIGNvbmZpZywgcmVmZXJlbmNpbmcgYGZzL250ZnMzL2AsIGJ1dCB0aGlzIHBhdGNoIHRvdWNoZXMgYGZzL250ZnMvc3VwZXIuY2AsIHNvIHdlJiMzOTtyZSBkZWZpbml0ZWx5IGRlYWxpbmcgd2l0aCB0aGUgKm9sZCogYE5URlNfRlNgLiBHb29kLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHBhdGNoIGFjdHVhbGx5IGRvZXMuLi4gQWhhLCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGBpc19ib290X3NlY3Rvcl9udGZzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSB2YWxpZGF0aW9uIG9mIGBzZWN0b3JzX3Blcl9jbHVzdGVyYC4gIFRoaXMgY2hhbmdlcyBob3cgdGhlIGZpbGVzeXN0ZW0gaGFuZGxlcyB0aGUgYm9vdCBzZWN0b3IgY2hlY2sgZHVyaW5nIG1vdW50aW5nLiBBIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtb3VudCBwYXRoLCBhbmQgc3BlY2lmaWNhbGx5LCByZWxhdGVkIHRvIGNyYWZ0ZWQgaW1hZ2VzIGlzIGRlZmluaXRlbHkgd29ydGggbG9va2luZyBpbnRvIGZvciBmdXp6aW5nLgoKTXkgZm9jdXMgc3ltYm9scyBhcmUgYG50ZnNfZmlsbF9zdXBlcmAgYW5kIGBudGZzX2luaXRfZnNfY29udGV4dGAuIFRoZXNlIGFyZSB3aGVyZSB0aGUgbG9naWMgb2YgdGhlIHBhdGNoIGxpdmVzLgoKSSYjMzk7bSBjb25maWRlbnQgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlnLCBgTlRGU19GU2AuIE9rYXksIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtudGZzX2luaXRfZnNfY29udGV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRGUyBib290IHNlY3RvciB2YWxpZGF0aW9uIGxvZ2ljIGluIGBpc19ib290X3NlY3Rvcl9udGZzYCBieSBjaGFuZ2luZyB0aGUgY29uZGl0aW9uIGZvciBgc2VjdG9yc19wZXJfY2x1c3RlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIG1vdW50IHBhdGgsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtudGZzX2luaXRfZnNfY29udGV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRGUyBib290IHNlY3RvciB2YWxpZGF0aW9uIGxvZ2ljIGluIGBpc19ib290X3NlY3Rvcl9udGZzYCBieSBjaGFuZ2luZyB0aGUgY29uZGl0aW9uIGZvciBgc2VjdG9yc19wZXJfY2x1c3RlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIG1vdW50IHBhdGgsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdGhlIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCBmaWVsZCBpbiB0aGUgTlRGUyBib290IHNlY3RvciAoYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGluIGBmcy9udGZzL3N1cGVyLmNgKS4gVGhlIGJvb3Qgc2VjdG9yIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBibG9jayBkZXZpY2UsIG1lYW5pbmcgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGV2ZW4gaWYgcG90ZW50aWFsbHkgbWFsaWNpb3VzIG9yIG1hbGZvcm1lZCkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBpc3N1ZXMgYXJpc2luZyBmcm9tIG1hbGZvcm1lZCBkaXNrIHN0cnVjdHVyZXMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnRlZ2VyIG92ZXJmbG93cykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMTU2YmUwYTRmM2Y1ZjVjZWIwMDdjNzI1ODA2ZWUzMmI4ZDdlMWE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMDU6MTY6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmMKaW5kZXggOGFiZTdiZWU0YzBkOS4uNzJmMTkzMzEzNmRjMSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvc3VwZXIuYwpAQCAtNTU3LDggJiM0Mzs1NTcsOCBAQCBzdGF0aWMgYm9vbCBpc19ib290X3NlY3Rvcl9udGZzKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJICogQ2hlY2sgc2VjdG9ycyBwZXIgY2x1c3RlciB2YWx1ZSBpcyB2YWxpZCBhbmQgdGhlIGNsdXN0ZXIgc2l6ZQogCSAqIGlzIG5vdCBhYm92ZSB0aGUgbWF4aW11bSAoMk1CKS4KIAkgKi8KLQlpZiAoYi0mZ3Q7YnBiLnNlY3RvcnNfcGVyX2NsdXN0ZXIgJmd0OyAweDgwICZhbXA7JmFtcDsKLQkgICAgYi0mZ3Q7YnBiLnNlY3RvcnNfcGVyX2NsdXN0ZXIgJmx0OyAweGY0KQomIzQzOwlpZiAoYi0mZ3Q7YnBiLnNlY3RvcnNfcGVyX2NsdXN0ZXIgJmx0OyAweGY0ICZhbXA7JmFtcDsKJiM0MzsJICAgICFpc19wb3dlcl9vZl8yKGItJmd0O2JwYi5zZWN0b3JzX3Blcl9jbHVzdGVyKSkKIAkJZ290byBub3RfbnRmczsKIAogCS8qIENoZWNrIHJlc2VydmVkL3VudXNlZCBmaWVsZHMgYXJlIHJlYWxseSB6ZXJvLiAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNQoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAzNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOVEZTIEJvb3QgU2VjdG9yIFZhbGlkYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbiBgZnMvbnRmcy9zdXBlci5jYCBpcyB0d2Vha2luZyB0aGUgYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyBob3cgdGhlIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCBmaWVsZCB3aXRoaW4gdGhlIEJJT1MgUGFyYW1ldGVyIEJsb2NrIChCUEIpIG9mIGFuIE5URlMgYm9vdCBzZWN0b3IgaXMgdmFsaWRhdGVkLgoKVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgcmF0aGVyIG9kZCBjaGVjazogYHNlY3RvcnNfcGVyX2NsdXN0ZXJgIGhhZCB0byBiZSAqYmV0d2VlbiogMHg4MCBhbmQgMHhmMyAoZXhjbHVzaXZlKS4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBtYWtlIGl0ICpsZXNzKiB0aGFuIDB4ZjQgKmFuZCogbm90IGEgcG93ZXIgb2YgMi4gSSB1bmRlcnN0YW5kIHRoYXQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzICpub3QqIGEgS01TQU4gaXNzdWUuIFRoZSBjb3JlIG9mIG15IHJlYXNvbmluZyBpcyB0aGF0IHRoZSBkYXRhIGJlaW5nIHZhbGlkYXRlZCBoZXJlIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlIGRpc2sgaXRzZWxmIOKAkyBmcm9tIHRoZSBibG9jayBkZXZpY2UuIEl0JiMzOTtzIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBvbiB0aGUgc3RhY2sgb3IgaGVhcC4gRXZlbiBpZiB0aGUgZGF0YSBpcyBtYWxpY2lvdXMsIGl0JiMzOTtzICppbml0aWFsaXplZCogd2l0aCBzb21lIHZhbHVlIHJlYWQgZnJvbSB0aGUgcGh5c2ljYWwgbWVkaXVtLiBLTVNBTiBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIHVzZXMgb2YgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSwgd2hpY2ggc2ltcGx5IGlzbiYjMzk7dCB0aGUgY2FzZSBoZXJlLiBUaGlzIHBhdGNoLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpcyBqdXN0IGZpeGluZyBhIGJ1ZyBpbiB0aGUgdmFsaWRpdHkgY2hlY2sgb2YgZGF0YSAqYWxyZWFkeSogb24gZGlzay4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLiBXZSBhcmUgZGVhbGluZyB3aXRoIGBiYCwgYSBwb2ludGVyIHRvIGEgYGNvbnN0IE5URlNfQk9PVF9TRUNUT1JgLCByZWFkIGRpcmVjdGx5IGZyb20gdGhlIGJsb2NrIGRldmljZS4gSXQmIzM5O3MgYmVpbmcgcmVhZCBmcm9tIHRoZSBkaXNrLiBOb3RoaW5nJiMzOTtzIHVuaW5pdGlhbGl6ZWQgaGVyZS4KClRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJJiMzOTttIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgYHNlY3RvcnNfcGVyX2NsdXN0ZXJgIGZpZWxkIGluIHRoZSBOVEZTIGJvb3Qgc2VjdG9yIChgaXNfYm9vdF9zZWN0b3JfbnRmc2AgaW4gYGZzL250ZnMvc3VwZXIuY2ApLiBUaGUgYm9vdCBzZWN0b3IgZGF0YSBpcyByZWFkIGZyb20gdGhlIGJsb2NrIGRldmljZSwgbWVhbmluZyBpdCBpcyBmdWxseSBpbml0aWFsaXplZCAoZXZlbiBpZiBwb3RlbnRpYWxseSBtYWxpY2lvdXMgb3IgbWFsZm9ybWVkKS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGlzc3VlcyBhcmlzaW5nIGZyb20gbWFsZm9ybWVkIGRpc2sgc3RydWN0dXJlcyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludGVnZXIgb3ZlcmZsb3dzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgVUJTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdGhlIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCBmaWVsZCBpbiB0aGUgTlRGUyBib290IHNlY3RvciAoYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGluIGBmcy9udGZzL3N1cGVyLmNgKS4gVGhlIGJvb3Qgc2VjdG9yIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBibG9jayBkZXZpY2UsIG1lYW5pbmcgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGV2ZW4gaWYgcG90ZW50aWFsbHkgbWFsaWNpb3VzIG9yIG1hbGZvcm1lZCkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBpc3N1ZXMgYXJpc2luZyBmcm9tIG1hbGZvcm1lZCBkaXNrIHN0cnVjdHVyZXMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnRlZ2VyIG92ZXJmbG93cykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNjo1MS4wODkzMTcxNTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTYzNjQ0MDcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19maWxsX3N1cGVyXCIsXG4gICAgXCJudGZzX2luaXRfZnNfY29udGV4dFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBgc2VjdG9yc19wZXJfY2x1c3RlcmAgZmllbGQgaW4gdGhlIE5URlMgYm9vdCBzZWN0b3IgKGBpc19ib290X3NlY3Rvcl9udGZzYCBpbiBgZnMvbnRmcy9zdXBlci5jYCkuIFRoZSBib290IHNlY3RvciBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgYmxvY2sgZGV2aWNlLCBtZWFuaW5nIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIChldmVuIGlmIHBvdGVudGlhbGx5IG1hbGljaW91cyBvciBtYWxmb3JtZWQpLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgaXNzdWVzIGFyaXNpbmcgZnJvbSBtYWxmb3JtZWQgZGlzayBzdHJ1Y3R1cmVzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW50ZWdlciBvdmVyZmxvd3MpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBVQlNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRGUyBib290IHNlY3RvciB2YWxpZGF0aW9uIGxvZ2ljIGluIGBpc19ib290X3NlY3Rvcl9udGZzYCBieSBjaGFuZ2luZyB0aGUgY29uZGl0aW9uIGZvciBgc2VjdG9yc19wZXJfY2x1c3RlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIG1vdW50IHBhdGgsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTY6NTEuMDg5MzIzNTc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTE0OTc5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlMTU2YmUwYTRmM2Y1ZjVjZWIwMDdjNzI1ODA2ZWUzMmI4ZDdlMWE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDA1OjE2OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvc3VwZXIuYyBiL2ZzL250ZnMvc3VwZXIuY1xcbmluZGV4IDhhYmU3YmVlNGMwZDkuLjcyZjE5MzMxMzZkYzEgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmcy9zdXBlci5jXFxuKysrIGIvZnMvbnRmcy9zdXBlci5jXFxuQEAgLTU1Nyw4ICs1NTcsOCBAQCBzdGF0aWMgYm9vbCBpc19ib290X3NlY3Rvcl9udGZzKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdCAqIENoZWNrIHNlY3RvcnMgcGVyIGNsdXN0ZXIgdmFsdWUgaXMgdmFsaWQgYW5kIHRoZSBjbHVzdGVyIHNpemVcXG4gXFx0ICogaXMgbm90IGFib3ZlIHRoZSBtYXhpbXVtICgyTUIpLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGItXFx1MDAzZWJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyIFxcdTAwM2UgMHg4MCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgYi1cXHUwMDNlYnBiLnNlY3RvcnNfcGVyX2NsdXN0ZXIgXFx1MDAzYyAweGY0KVxcbitcXHRpZiAoYi1cXHUwMDNlYnBiLnNlY3RvcnNfcGVyX2NsdXN0ZXIgXFx1MDAzYyAweGY0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhaXNfcG93ZXJfb2ZfMihiLVxcdTAwM2VicGIuc2VjdG9yc19wZXJfY2x1c3RlcikpXFxuIFxcdFxcdGdvdG8gbm90X250ZnM7XFxuIFxcbiBcXHQvKiBDaGVjayByZXNlcnZlZC91bnVzZWQgZmllbGRzIGFyZSByZWFsbHkgemVyby4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTY6NTEuNDQxNTQ3Njg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTE1ODQxMDI1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfZmlsbF9zdXBlclwiLFxuICAgIFwibnRmc19pbml0X2ZzX2NvbnRleHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRGUyBib290IHNlY3RvciB2YWxpZGF0aW9uIGxvZ2ljIGluIGBpc19ib290X3NlY3Rvcl9udGZzYCBieSBjaGFuZ2luZyB0aGUgY29uZGl0aW9uIGZvciBgc2VjdG9yc19wZXJfY2x1c3RlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIG1vdW50IHBhdGgsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTE1NmJlMGE0ZjNmNWY1Y2ViMDA3YzcyNTgwNmVlMzJiOGQ3ZTFhOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA1OjE2OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9zdXBlci5jIGIvZnMvbnRmcy9zdXBlci5jXG5pbmRleCA4YWJlN2JlZTRjMGQ5Li43MmYxOTMzMTM2ZGMxIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9zdXBlci5jXG4rKysgYi9mcy9udGZzL3N1cGVyLmNcbkBAIC01NTcsOCArNTU3LDggQEAgc3RhdGljIGJvb2wgaXNfYm9vdF9zZWN0b3JfbnRmcyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0ICogQ2hlY2sgc2VjdG9ycyBwZXIgY2x1c3RlciB2YWx1ZSBpcyB2YWxpZCBhbmQgdGhlIGNsdXN0ZXIgc2l6ZVxuIFx0ICogaXMgbm90IGFib3ZlIHRoZSBtYXhpbXVtICgyTUIpLlxuIFx0ICovXG4tXHRpZiAoYi1cdTAwM2VicGIuc2VjdG9yc19wZXJfY2x1c3RlciBcdTAwM2UgMHg4MCBcdTAwMjZcdTAwMjZcbi1cdCAgICBiLVx1MDAzZWJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyIFx1MDAzYyAweGY0KVxuK1x0aWYgKGItXHUwMDNlYnBiLnNlY3RvcnNfcGVyX2NsdXN0ZXIgXHUwMDNjIDB4ZjQgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWlzX3Bvd2VyX29mXzIoYi1cdTAwM2VicGIuc2VjdG9yc19wZXJfY2x1c3RlcikpXG4gXHRcdGdvdG8gbm90X250ZnM7XG4gXG4gXHQvKiBDaGVjayByZXNlcnZlZC91bnVzZWQgZmllbGRzIGFyZSByZWFsbHkgemVyby4gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE2OjUxLjQ0MTU0OTA0OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDg3NTM1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyB0aGUgYm9vdCBzZWN0b3IgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiBgZnMvbnRmcy9zdXBlci5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBob3cgd2UncmUgY2hlY2tpbmcgYHNlY3RvcnNfcGVyX2NsdXN0ZXJgIGR1cmluZyB0aGUgYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGZ1bmN0aW9uLCB3aGljaCwgYXMgSSByZWNhbGwsIGlzIGNhbGxlZCBkdXJpbmcgdGhlIG1vdW50IHByb2Nlc3MuXG5cblByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyByZWplY3RpbmcgdmFsdWVzIG91dHNpZGUgYSBmYWlybHkgbmFycm93IHJhbmdlOiBhbnl0aGluZyBncmVhdGVyIHRoYW4gYDB4ODBgICphbmQqIGxlc3MgdGhhbiBgMHhmNGAuIE5vdywgaXQncyBhIGJpdCBtb3JlIG51YW5jZWQuIFdlJ3JlIG9ubHkgcmVqZWN0aW5nIHZhbHVlcyAqbGVzcyogdGhhbiBgMHhmNGAgKmlmKiB0aGV5IGFyZW4ndCBhIHBvd2VyIG9mIHR3by4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgZGlzdGluY3Rpb24sIGFzIHRoZSBwcmV2aW91cyBsb2dpYyBjb3VsZCBwb3RlbnRpYWxseSByZWplY3QgdmFsaWQgY29uZmlndXJhdGlvbnMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IGFmZmVjdHMgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgTlRGUyBpbWFnZXMg4oCTIHdoaWNoLCBmcm9tIG15IHBlcnNwZWN0aXZlLCBtZWFucyB0aGlzIGlzIHNvbWV0aGluZyB0aGF0J3MgcmlwZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gTlRGUyBpcyBhIGZpbGVzeXN0ZW0sIHNvIHdlIGNhbiBtb3VudCBsb29wYmFjayBpbWFnZXMsIGFuZCB0ZXN0IHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlZCBhbnkgbmV3IGJ1Z3MuIFRpbWUgdG8gY2hlY2sgYGZzL250ZnMvc3VwZXIuY2AgZm9yIGNvbnRleHQgYW5kIHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTY6NTYuODUwMzA1MTY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTM3MTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX2Jvb3Rfc2VjdG9yX250ZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvc3VwZXIuYz00NDI9aW50IG50ZnNfd3JpdGVfdm9sdW1lX2xhYmVsKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjaGFyICpsYWJlbClcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy01MTgtLypcXG5mcy9udGZzL3N1cGVyLmM6NTE5OiAqIGlzX2Jvb3Rfc2VjdG9yX250ZnMgLSBjaGVjayB3aGV0aGVyIGEgYm9vdCBzZWN0b3IgaXMgYSB2YWxpZCBOVEZTIGJvb3Qgc2VjdG9yXFxuZnMvbnRmcy9zdXBlci5jLTUyMC0gKiBAc2I6XFx0XFx0U3VwZXIgYmxvY2sgb2YgdGhlIGRldmljZSB0byB3aGljaCBAYiBiZWxvbmdzLlxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTUyMy0gKlxcbmZzL250ZnMvc3VwZXIuYzo1MjQ6ICogaXNfYm9vdF9zZWN0b3JfbnRmcygpIGNoZWNrcyB3aGV0aGVyIHRoZSBib290IHNlY3RvciBAYiBpcyBhIHZhbGlkIE5URlMgYm9vdFxcbmZzL250ZnMvc3VwZXIuYy01MjUtICogc2VjdG9yLiBSZXR1cm5zICd0cnVlJyBpZiBpdCBpcyB2YWxpZCBhbmQgJ2ZhbHNlJyBpZiBub3QuXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtNTI5LSAqL1xcbmZzL250ZnMvc3VwZXIuYzo1MzA6c3RhdGljIGJvb2wgaXNfYm9vdF9zZWN0b3JfbnRmcyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL250ZnMvc3VwZXIuYy01MzEtXFx0XFx0Y29uc3Qgc3RydWN0IG50ZnNfYm9vdF9zZWN0b3IgKmIsIGNvbnN0IGJvb2wgc2lsZW50KVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTYwOD1zdGF0aWMgY2hhciAqcmVhZF9udGZzX2Jvb3Rfc2VjdG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtNjIzLVxcbmZzL250ZnMvc3VwZXIuYzo2MjQ6XFx0aWYgKCFpc19ib290X3NlY3Rvcl9udGZzKHNiLCAoc3RydWN0IG50ZnNfYm9vdF9zZWN0b3IgKilib290X3NlY3RvcixcXG5mcy9udGZzL3N1cGVyLmMtNjI1LVxcdFxcdFxcdFxcdCBzaWxlbnQpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE2OjU2LjkwMjg0ODMyNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzAxODQ4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTlRGUyBNb3VudCBQcm9jZXNzIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIGBpc19ib290X3NlY3Rvcl9udGZzYCBpcyAqZGVmaW5pdGVseSogcGFydCBvZiB0aGUgY3JpdGljYWwgcGF0aCBoZXJlLiBJdCdzIGNhbGxlZCBmcm9tIGByZWFkX250ZnNfYm9vdF9zZWN0b3JgLCB3aGljaCBpbiB0dXJuIGZlZWRzIGludG8gYG50ZnNfZmlsbF9zdXBlcmAuIFRoYXQgcHV0cyBpdCBzcXVhcmVseSBpbiB0aGUgbW91bnQgcHJvY2VzcywgYW5kIGEgcHJldHR5IGVhcmx5IHN0YWdlLCBpdCBzZWVtcy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYm9vdCBzZWN0b3IgaXMgdmFsaWRhdGVkIGFuZCBoYW5kbGVkIGFzIHRoaXMgZGV0ZXJtaW5lcyBob3cgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgc3lzdGVtIGdldHMgaW50ZXJwcmV0ZWQuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBjb25kaXRpb25zIG1pZ2h0IG1ha2UgdGhpcyBmdW5jdGlvbiBmYWlsLiBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgTlRGUyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlLiBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBlbnN1cmUgaXQncyBwcm9wZXJseSBlbmFibGVkIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5ODEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNjo1OS44NzMwMzYwMjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5Njg2MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXFxuZnMvbnRmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTM0LVxcbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTY6NTkuOTI4MDEwNTg2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE3MzUxMzc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKkFuYWx5emluZyB0aGUgTlRGUyBCb290IFNlY3RvciBMb2dpYyoqXG5cbkFscmlnaHQsIHRoZSBjb25maWd1cmF0aW9uIGlzIGRlZmluaXRlbHkgdGFyZ2V0aW5nIGFuIE5URlMgZmlsZXN5c3RlbSwgYE5URlNfRlNgLiBNeSBicmFpbiBpbW1lZGlhdGVseSBzdGFydHMgdHJhY2luZyB0aGUgZmxvdy4uLiBXZSBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBgaXNfYm9vdF9zZWN0b3JfbnRmc2AuIEdvb2QsIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBhIGtleSBkZXRhaWw7IGl0IG1lYW5zIGl0J3MgbGlrZWx5IGludGVybmFsIGFuZCBkb2Vzbid0IGdldCBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoaXMgbW9kdWxlLCBtYWtpbmcgZGVidWdnaW5nIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYSBsaXR0bGUgZWFzaWVyLiBOb3csIHdobyBjYWxscyAqdGhhdCogZnVuY3Rpb24/IExvb2tzIGxpa2UgYHJlYWRfbnRmc19ib290X3NlY3RvcmAuLi4gYWxzbyBzdGF0aWMuIEV4Y2VsbGVudC4gU28sIGBpc19ib290X3NlY3Rvcl9udGZzYCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZyb20gd2l0aGluIGByZWFkX250ZnNfYm9vdF9zZWN0b3JgLiBBbmQgbGFzdGx5LCBgcmVhZF9udGZzX2Jvb3Rfc2VjdG9yYCBpcyBjYWxsZWQgYnkgYG50ZnNfZmlsbF9zdXBlcmAuIFRoaXMgZ2l2ZXMgbWUgdGhlIGJpZyBwaWN0dXJlLiBJIGNhbiBub3cgc2FmZWx5IGFzc3VtZSB0aGF0IGBudGZzX2ZpbGxfc3VwZXJgIGlzIGxpa2VseSB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBwYXJzZSB0aGUgZmlsZXN5c3RlbSwgd2l0aCBgcmVhZF9udGZzX2Jvb3Rfc2VjdG9yYCByZXNwb25zaWJsZSBmb3IgcHVsbGluZyB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgYm9vdCBzZWN0b3IsIGFuZCB0aGUgc3RhdGljIGZ1bmN0aW9ucyBiZWluZyB1c2VkIHRvIGNoZWNrIGlmIHRoZSB2b2x1bWUgdGhhdCBpcyBwYXNzZWQgdG8gaXQgY29udGFpbnMgTlRGUy4gVGhlIGBzdGF0aWNgIGtleXdvcmRzIHRlbGwgbWUgdGhhdCdzIHRoZSBzY29wZSBvZiB0aGUgY2hlY2ssIGFzIHRoaXMgaXMgYWxsIGxvY2FsLiBUaGlzIGlzIGEgc29saWQsIGNsZWFuIGZsb3c7IHRoZSBib290IHNlY3RvciBjaGVjayBhbmQgcmVhZCBhcmUgZW5jYXBzdWxhdGVkIHdpdGhpbiB0aGlzIG1vZHVsZSwgY29uZmlybWluZyBhIG5pY2UsIG1vZHVsYXIgZGVzaWduLiBOb3csIEkgaGF2ZSBhIGdvb2QgZnJhbWV3b3JrIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBib290IHNlY3RvciBwYXJzaW5nIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzowNi4xMDE1Mjg1OTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcxNjkxNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9udGZzX2Jvb3Rfc2VjdG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9NTMwPXN0YXRpYyBib29sIGlzX2Jvb3Rfc2VjdG9yX250ZnMoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy02MDEtLypcXG5mcy9udGZzL3N1cGVyLmM6NjAyOiAqIHJlYWRfbnRmc19ib290X3NlY3RvciAtIHJlYWQgdGhlIE5URlMgYm9vdCBzZWN0b3Igb2YgYSBkZXZpY2VcXG5mcy9udGZzL3N1cGVyLmMtNjAzLSAqIEBzYjpcXHRcXHRzdXBlciBibG9jayBvZiBkZXZpY2UgdG8gcmVhZCB0aGUgYm9vdCBzZWN0b3IgZnJvbVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTYwNy0gKi9cXG5mcy9udGZzL3N1cGVyLmM6NjA4OnN0YXRpYyBjaGFyICpyZWFkX250ZnNfYm9vdF9zZWN0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9udGZzL3N1cGVyLmMtNjA5LVxcdFxcdGNvbnN0IGludCBzaWxlbnQpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MjIwMT1zdGF0aWMgaW50IG50ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMjI2OC1cXHQvKiBSZWFkIHRoZSBib290IHNlY3RvciBhbmQgcmV0dXJuIHVubG9ja2VkIGJ1ZmZlciBoZWFkIHRvIGl0LiAqL1xcbmZzL250ZnMvc3VwZXIuYzoyMjY5OlxcdGJvb3QgPSByZWFkX250ZnNfYm9vdF9zZWN0b3Ioc2IsIHNpbGVudCk7XFxuZnMvbnRmcy9zdXBlci5jLTIyNzAtXFx0aWYgKCFib290KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE3OjA2LjE1ODcwNjY3N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDQxMTk3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkh1bnRpbmcgZm9yIHRoZSBSZWFsIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gYG50ZnNfZmlsbF9zdXBlcmAgaXMgbWFya2VkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IG1lYW5zIGl0J3Mgbm90IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgTlRGUyBmaWxlc3lzdGVtLCBhdCBsZWFzdCBub3QgaW4gdGhlIHN0YW5kYXJkIHdheSBJJ20gdXNlZCB0byBzZWVpbmcuIFRoaXMgaXMgcHJldHR5IGNvbW1vbiBpbiBrZXJuZWwgY29kZTsgc3RhdGljIGZ1bmN0aW9ucyBvZnRlbiBzZXJ2ZSBhcyBpbnRlcm5hbCBoZWxwZXJzLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYG50ZnNfZmlsbF9zdXBlcmAgdG8gbG9jYXRlIHRoZSAqYWN0dWFsKiBub24tc3RhdGljIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZSB0aGF0IGluaXRpYWxseSB0cmlnZ2VycyB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIGJlIG1vdW50ZWQgYW5kIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gZmluZCB0aGUgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGlzIHN0YXRpYyBmdW5jdGlvbi4gTGV0J3MgZGlnIGRlZXBlciBhbmQgc2VlIHdoZXJlIHRoZSByZWFsIGFjdGlvbiBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzowOS45MDI4MjkxODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzIzNDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfZmlsbF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9zdXBlci5jPTIxODQ9c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBudGZzX21mdF9pbnZhbF9sb2NrX2tleTtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yMTg2LS8qXFxuZnMvbnRmcy9zdXBlci5jOjIxODc6ICogbnRmc19maWxsX3N1cGVyIC0gbW91bnQgYW4gbnRmcyBmaWxlc3lzdGVtXFxuZnMvbnRmcy9zdXBlci5jLTIxODgtICogQHNiOiBzdXBlciBibG9jayBvZiB0aGUgZGV2aWNlIHRvIG1vdW50XFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMjE5MC0gKlxcbmZzL250ZnMvc3VwZXIuYzoyMTkxOiAqIG50ZnNfZmlsbF9zdXBlcigpIGlzIGNhbGxlZCBieSB0aGUgVkZTIHRvIG1vdW50IHRoZSBkZXZpY2UgZGVzY3JpYmVkIGJ5IEBzYlxcbmZzL250ZnMvc3VwZXIuYy0yMTkyLSAqIHdpdGggdGhlIG1vdW50IG90aW9ucyBpbiBAZGF0YSB3aXRoIHRoZSBOVEZTIGZpbGVzeXN0ZW0uXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMjIwMC0gKi9cXG5mcy9udGZzL3N1cGVyLmM6MjIwMTpzdGF0aWMgaW50IG50ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvbnRmcy9zdXBlci5jLTIyMDIte1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTI1MTY9c3RhdGljIGludCBudGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9udGZzL3N1cGVyLmMtMjUxNy17XFxuZnMvbnRmcy9zdXBlci5jOjI1MTg6XFx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIG50ZnNfZmlsbF9zdXBlcik7XFxuZnMvbnRmcy9zdXBlci5jLTI1MTktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzowOS45NDcxNjE1NTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3NTk3ODAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipGaW5kaW5nIHRoZSBSaWdodCBFbnRyeSBQb2ludCBpbiB0aGUgTlRGUyBDb2RlKipcblxuT2theSwgc28gYG50ZnNfZ2V0X3RyZWVgIGlzIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQncyBub3QgdGhlIHByaW1hcnksIGV4dGVybmFsbHktdmlzaWJsZSBlbnRyeSBwb2ludCBJJ20gbG9va2luZyBmb3IuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlcmUuIE15IG1lbnRhbCBtb2RlbCBpcywgaWYgSSBjYW4ndCBkaXJlY3RseSBjYWxsIHRoYXQgZnVuY3Rpb24sIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGF0KiBkb2VzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSByZWxhdGVkIGNvZGUuIEknbGwgbmVlZCB0byBsb2NhdGUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gb3IgZ2xvYmFsIHZhcmlhYmxlIHRoYXQgKmxlYWRzKiB0byBgbnRmc19nZXRfdHJlZWAuIE9uY2UgSSd2ZSBmb3VuZCB0aGF0IGhpZ2hlci1sZXZlbCBpbnRlcmZhY2UsIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGNhbGwgc3RhY2sgYW5kIGhvdyB0aGlzIHN0cnVjdHVyZSBpcyBhY3R1YWxseSBhY2Nlc3NlZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjYW5vbmljYWwgd2F5IG9mIHdvcmtpbmcgd2l0aCB0aGlzIE5URlMgZGF0YSBzdHJ1Y3R1cmUuIFRoYXQncyB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTc6MTMuNDIzMTQxNjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNTIwMTY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2dldF90cmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MjUxND1ERUZJTkVfTVVURVgobnRmc19sb2NrKTtcXG5mcy9udGZzL3N1cGVyLmMtMjUxNS1cXG5mcy9udGZzL3N1cGVyLmM6MjUxNjpzdGF0aWMgaW50IG50ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL250ZnMvc3VwZXIuYy0yNTE3LXtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYz0yNTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIG50ZnNfY29udGV4dF9vcHMgPSB7XFxuZnMvbnRmcy9zdXBlci5jLTI1MzAtXFx0LnBhcnNlX3BhcmFtXFx0PSBudGZzX3BhcnNlX3BhcmFtLFxcbmZzL250ZnMvc3VwZXIuYzoyNTMxOlxcdC5nZXRfdHJlZVxcdD0gbnRmc19nZXRfdHJlZSxcXG5mcy9udGZzL3N1cGVyLmMtMjUzMi1cXHQuZnJlZVxcdFxcdD0gbnRmc19mcmVlX2ZzX2NvbnRleHQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE3OjEzLjczODM0Nzc2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYxMjk0NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGluaXRpYWwgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBOVEZTIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTlRGUyBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBNeSBmaXJzdCBpbnN0aW5jdCwgYmFzZWQgb24gdGhlIGZ1bmN0aW9uIG5hbWUsIGlzIHRoYXQgYG50ZnNfaW5pdF9mc19jb250ZXh0YCBpcyBnb2luZyB0byBiZSB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBwcm9jZXNzLiBJdCBqdXN0ICpmZWVscyogcmlnaHQuIEl0IG1ha2VzIHNlbnNlIHRoYXQgdGhlIGZpbGUgc3lzdGVtIGNvbnRleHQgd291bGQgYmUgc2V0IHVwIGhlcmUsIGFuZCBmcm9tIHRoZXJlLCB0aGUgb3RoZXIgbmVjZXNzYXJ5IGNvbXBvbmVudHMgd291bGQgYmUgaW5pdGlhbGl6ZWQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQsIG9mIGNvdXJzZSwgYnV0IHRoYXQncyBteSB3b3JraW5nIGh5cG90aGVzaXMgYXMgSSBzdGFydCBkaWdnaW5nLiBUaGlzIGlzIHdoZXJlIEknZCBleHBlY3QgdGhlIHJvb3QgaW5pdGlhbGl6YXRpb24gdG8gYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNzksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzoxNy4yOTk2NDQ4ODhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Njc3NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfaW5pdF9mc19jb250ZXh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MjUyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBudGZzX2NvbnRleHRfb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTI1MzUtXFxuZnMvbnRmcy9zdXBlci5jOjI1MzY6c3RhdGljIGludCBudGZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvbnRmcy9zdXBlci5jLTI1Mzcte1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTI1Njg9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG50ZnNfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yNTcwLVxcdC5uYW1lICAgICAgICAgICAgICAgICAgID0gXFxcIm50ZnNcXFwiLFxcbmZzL250ZnMvc3VwZXIuYzoyNTcxOlxcdC5pbml0X2ZzX2NvbnRleHQgICAgICAgID0gbnRmc19pbml0X2ZzX2NvbnRleHQsXFxuZnMvbnRmcy9zdXBlci5jLTI1NzItXFx0LnBhcmFtZXRlcnMgICAgICAgICAgICAgPSBudGZzX3BhcmFtZXRlcnMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE3OjE3LjM0NzMzMDIzNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTM5MzIyNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgTlRGUyBNb2R1bGUgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIGhlcmUncyB0aGUgZGVhbC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBOVEZTIG1vZHVsZSB3b3JrcywgYW5kIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgdG8gbG9vayBhdCBlaXRoZXIgYG50ZnNfaW5pdF9mc19jb250ZXh0YCBvciBgbnRmc19nZXRfdHJlZWAuIEJ1dCB0aGVuIEkgcGF1c2VkLiBXYWl0IGEgbWludXRlLCBgbnRmc19maWxsX3N1cGVyYCBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gTGV0IG1lIHNlZSwgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpZWQgSSBzaG91bGQgZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMsIGJlY2F1c2UgdGhlIHN0YXRpYyBvbmVzIGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG9uJ3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBhbmQgdGhhdCdzIG5vdCBpZGVhbCBmb3IgbWUuIEkgbmVlZCBhIGNsZWFyIHN0YXJ0aW5nIHBvaW50LlxuXG5TbywgYG50ZnNfZmlsbF9zdXBlcmAgaXMgYSBnb29kIGZvY3VzIHN5bWJvbC4gTm93IHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBudGZzX2ZpbGxfc3VwZXJgIGlzIGlubGluZWQsIGJlY2F1c2UgaWYgc28sIGl0J3Mgbm90IGEgc3VpdGFibGUgZW50cnkgcG9pbnQuIEknbGwgaGF2ZSB0byBjaGVjayB0aGUgY29kZSwgYnV0IGl0IGxvb2tzIHByZXR0eSBzdWJzdGFudGlhbCwgc28gaXQncyBwcm9iYWJseSBub3QgaW5saW5lZC4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBtYXliZSBJIHNob3VsZCByZXZlcnQgdG8gYG50ZnNfaW5pdF9mc19jb250ZXh0YCBvciBgbnRmc19nZXRfdHJlZWAuIEhtbSwgYG50ZnNfZ2V0X3RyZWVgIGxvb2tzIGxpa2UgYSB3cmFwcGVyIGFyb3VuZCBgZ2V0X3RyZWVfYmRldmAuIEkgZG9uJ3QgcmVhbGx5IHdhbnQgdG8gZ28gZG93biB0aGF0IHJhYmJpdCBob2xlIHJpZ2h0IG5vdy5cblxuQWxyaWdodCwgd2hhdCBJJ2xsIGRvIGlzIEknbGwgZ28gYmFjayB0byB0aGUgc291cmNlIGFuZCBzY2FuIGBmcy9udGZzL3N1cGVyLmNgIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQncyBwcm9iYWJseSB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHF1aWNrbHkgaWRlbnRpZnkgYSBjbGVhciwgdXNhYmxlIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjAwLCJPdXRwdXRUb2tlbnMiOjY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE3OjIzLjI4NjY1NDgwNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyMDIwMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MzI2PWNvbnN0IHN0cnVjdCBvcHRpb25fdCBvbl9lcnJvcnNfYXJyW10gPSB7XFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMzMyLVxcbmZzL250ZnMvc3VwZXIuYzozMzM6dm9pZCBudGZzX2hhbmRsZV9lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL250ZnMvc3VwZXIuYy0zMzQte1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTM3MD1zdGF0aWMgaW50IG50ZnNfd3JpdGVfdm9sdW1lX2ZsYWdzKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBfX2xlMTYgZmxhZ3MpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtNDE5LSAqL1xcbmZzL250ZnMvc3VwZXIuYzo0MjA6aW50IG50ZnNfc2V0X3ZvbHVtZV9mbGFncyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgX19sZTE2IGZsYWdzKVxcbmZzL250ZnMvc3VwZXIuYy00MjEte1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTQzNC0gKi9cXG5mcy9udGZzL3N1cGVyLmM6NDM1OmludCBudGZzX2NsZWFyX3ZvbHVtZV9mbGFncyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgX19sZTE2IGZsYWdzKVxcbmZzL250ZnMvc3VwZXIuYy00MzYte1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTQ0MS1cXG5mcy9udGZzL3N1cGVyLmM6NDQyOmludCBudGZzX3dyaXRlX3ZvbHVtZV9sYWJlbChzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY2hhciAqbGFiZWwpXFxuZnMvbnRmcy9zdXBlci5jLTQ0My17XFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MTcxMT1zdGF0aWMgdm9pZCBudGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTE4MTktXFxuZnMvbnRmcy9zdXBlci5jOjE4MjA6aW50IG50ZnNfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKVxcbmZzL250ZnMvc3VwZXIuYy0xODIxLXtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYz0xODUzPXN0YXRpYyBpbnQgbnRmc19zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTE4OTMtICovXFxuZnMvbnRmcy9zdXBlci5jOjE4OTQ6czY0IGdldF9ucl9mcmVlX2NsdXN0ZXJzKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbmZzL250ZnMvc3VwZXIuYy0xODk1LXtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xOTc5LSAqL1xcbmZzL250ZnMvc3VwZXIuYzoxOTgwOnM2NCBudGZzX2F2YWlsYWJsZV9jbHVzdGVyc19jb3VudChzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgczY0IG5yX2NsdXN0ZXJzKVxcbmZzL250ZnMvc3VwZXIuYy0xOTgxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTc6MjMuMzM2ODYwMThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM0NTQwMTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBrZXlpbmcgaW4gb24gYG50ZnNfZmlsbF9zdXBlcmAuIFNpbmNlIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgZ2V0X3RyZWVfYmRldmAsIGl0J3MgKmRlZmluaXRlbHkqIG5vdCBnZXR0aW5nIGlubGluZWQuIFRoYXQgbWVhbnMgaXQgaGFzIGl0cyBvd24gZGlzdGluY3QgYWRkcmVzcyBpbiBtZW1vcnksIG1ha2luZyBpdCBhIHNvbGlkIHRhcmdldCBzeW1ib2wgZm9yIGZ1enppbmcg4oCTIGEgY2xlYXIgZW50cnkgcG9pbnQgaW50byB0aGUgZmlsZXN5c3RlbSBoYW5kbGluZy4gR29vZC4gQWxzbywgYG50ZnNfaW5pdF9mc19jb250ZXh0YCBpcyBhbHNvIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHRoYXQgbWFrZXMgaXQgYWxzbyBhIGdvb2QgY2FuZGlkYXRlLlxuXG5Ob3csIGxldCdzIHNlZSBhYm91dCB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGNvbnRleHQuIFRoZSBwcmltYXJ5IGNvbmZpZywgYXMgZXhwZWN0ZWQsIGlzIGBOVEZTX0ZTYC4gTm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGRlYWxzIHdpdGggYSBidWcgaW4gdGhlIE5URlMgYm9vdCBzZWN0b3IgcGFyc2luZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCB0aGUgY2hlY2sgZm9yIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCB3YXMgaW5jb3JyZWN0OyBpdCB3YXMgY2hlY2tpbmcgZm9yIGEgcmFuZ2UsIGJ1dCBpdCBzaG91bGQgaGF2ZSBiZWVuIHZlcmlmeWluZyBpdCdzIGEgcG93ZXIgb2YgMiAqYW5kKiBsZXNzIHRoYW4gYSBzcGVjaWZpYyB1cHBlciBib3VuZC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2Ug4oCTIGEgZnVuZGFtZW50YWwgY29ycmVjdGlvbiBpbiBob3cgdGhlIGtlcm5lbCBpbnRlcnByZXRzIE5URlMgZmlsZXN5c3RlbSBtZXRhZGF0YS4gVGhhdCdzIGEganVpY3kgdGFyZ2V0LiBUaGUgYWZmZWN0ZWQgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBhIHN0YW5kYXJkIGBtb3VudGAgb3BlcmF0aW9uLCB3aGljaCBtZWFucyBpdCdzIHByZXR0eSBlYXNpbHkgdHJpZ2dlcmVkIGluIGEgZnV6emluZyBlbnZpcm9ubWVudC5cblxuR2l2ZW4gdGhhdCwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblNvLCB0byBzdW1tYXJpemU6IG15IGZvY3VzIHN5bWJvbHMgYXJlIGRlZmluaXRlbHkgYG50ZnNfZmlsbF9zdXBlcmAgYW5kIGBudGZzX2luaXRfZnNfY29udGV4dGAsIHRoZSBlbmFibGUgY29uZmlnIGlzIGBOVEZTX0ZTYCwgYW5kIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gSSdsbCBkb3VibGUgY2hlY2sgZm9yIG90aGVyIGNvbmZpZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTc6MjkuNjgyMjY0ODFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Nzk2NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xcbmZzL250ZnMvS2NvbmZpZy0xNC1cXHRib29sIFxcXCJOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbmZzL250ZnMvS2NvbmZpZzoxNTpcXHRkZXBlbmRzIG9uIE5URlNfRlNcXG5mcy9udGZzL0tjb25maWctMTYtXFx0aGVscFxcbi0tXFxuZnMvbnRmcy9LY29uZmlnPTM1PWNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxcbmZzL250ZnMvS2NvbmZpZy0zNi1cXHRib29sIFxcXCJOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbmZzL250ZnMvS2NvbmZpZzozNzpcXHRkZXBlbmRzIG9uIE5URlNfRlNcXG5mcy9udGZzL0tjb25maWctMzgtXFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzoyOS43MjgwNzAwODdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyOTY2MDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE5URlNfRlMgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIGBOVEZTX0ZTYCBpbnRyaW5zaWNhbGx5IHJlbGllcyBvbiBgQkxPQ0tgLiBUaGF0J3MgZXhwZWN0ZWQg4oCTIGl0J3MgcHJhY3RpY2FsbHkgYSBnaXZlbi4gYEJMT0NLYCByZXByZXNlbnRzIHRoZSBmdW5kYW1lbnRhbCBzdG9yYWdlIGJ1aWxkaW5nIGJsb2NrLCBhIHN0YW5kYXJkLCB1YmlxdWl0b3VzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLiBCdXQsIHlvdSBrbm93IG1lLCBJIGRvbid0IGp1c3QgdGFrZSB0aGluZ3MgYXQgZmFjZSB2YWx1ZS4gQmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGV4cGxpY2l0IGRlcGVuZGVuY2llcyBvZiBgTlRGU19GU2AuIEdvdHRhIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBjb21wbGV4aXRpZXMgb3Igc3VidGxlIGludGVyYWN0aW9ucyBJIG5lZWQgdG8gYWNjb3VudCBmb3IsIHBhcnRpY3VsYXJseSBpbiBhIGNvbXBsZXggc3RvcmFnZSBjb25maWd1cmF0aW9uLiBObyBhc3N1bXB0aW9ucyBhbGxvd2VkLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1Y2ggZnVuZGFtZW50YWwgY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE3OjMzLjE1NzczMzA0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNjI3MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXFxuZnMvbnRmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTM0LVxcbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTc6MzMuMjAzMTAzNzc0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTY2NjQ5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6XG5cbioqQ2hlY2tpbmcgTlRGUyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGBOVEZTX0ZTYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgY29udGluZ2VudCBvbiBhbnkgb3RoZXIgc2V0dGluZ3MuIFRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhhdCBvdXQgaXMgdGhlIGBmcy9udGZzL0tjb25maWdgIGZpbGUuIEl0J3MgdGhlIHN0YW5kYXJkIHBsYWNlIGZvciB0aGlzIHR5cGUgb2YgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBhbmQgc2VlIHdoYXQgdGhlIHJlbGF0aW9uc2hpcHMgYXJlLiBUaGlzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzozNi4zOTk3NzA5MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBOVEZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDU6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIE5URlMgaXMgdGhlIGZpbGUgc3lzdGVtIG9mIE1pY3Jvc29mdCBXaW5kb3dzIE5ULCAyMDAwLCBYUCBhbmQgMjAwMy5cXG4gICA4OlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIG1vdW50IGRldmljZXMgZm9ybWF0dGVkIHdpdGggdGhlIG50ZnMgZmlsZSBzeXN0ZW0uXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuICAxMTpcXHRcXHQgIG50ZnMuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBOVEZTX0RFQlVHXFxuICAxNDpcXHRcXHRib29sIFxcXCJOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbiAgMTU6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIElmIHlvdSBhcmUgZXhwZXJpZW5jaW5nIGFueSBwcm9ibGVtcyB3aXRoIHRoZSBOVEZTIGZpbGUgc3lzdGVtLCBzYXlcXG4gIDE4OlxcdFxcdCAgWSBoZXJlLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhZGRpdGlvbmFsIGNvbnNpc3RlbmN5IGNoZWNrcyB0byBiZVxcbiAgMTk6XFx0XFx0ICBwZXJmb3JtZWQgYnkgdGhlIGRyaXZlciBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgZGVidWdnaW5nIG1lc3NhZ2VzIHRvXFxuICAyMDpcXHRcXHQgIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbSBsb2cuICBOb3RlIHRoYXQgZGVidWdnaW5nIG1lc3NhZ2VzIGFyZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzozNi4zOTk4MzA2MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTUwNjU4OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5URlMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBmdXp6aW5nIGltcGxpY2F0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgcmVsYXRlZCB0byB0aGUgYE5MU2AgYW5kIGBGU19JT01BUGAgY29uZmlncywgYnV0IGl0J3MgY2xlYXJseSBhIGZpbGVzeXN0ZW0sIHNvIGl0J3MgcHJvYmFibHkgdW5kZXIgYEJMT0NLYCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiAgYE5URlNfRlNgIHNob3VsZCBjb3ZlciBpdC5cblxuSSdtIGRvdWJsZS1jaGVja2luZywganVzdCB0byBiZSBzdXJlLCBhbmQgdGhlcmUgKmlzKiBhbiBgTlRGUzNfRlNgIGNvbmZpZywgcmVmZXJlbmNpbmcgYGZzL250ZnMzL2AsIGJ1dCB0aGlzIHBhdGNoIHRvdWNoZXMgYGZzL250ZnMvc3VwZXIuY2AsIHNvIHdlJ3JlIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIHRoZSAqb2xkKiBgTlRGU19GU2AuIEdvb2QuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgdGhlIHBhdGNoIGFjdHVhbGx5IGRvZXMuLi4gQWhhLCBpdCdzIG1vZGlmeWluZyB0aGUgYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIHZhbGlkYXRpb24gb2YgYHNlY3RvcnNfcGVyX2NsdXN0ZXJgLiAgVGhpcyBjaGFuZ2VzIGhvdyB0aGUgZmlsZXN5c3RlbSBoYW5kbGVzIHRoZSBib290IHNlY3RvciBjaGVjayBkdXJpbmcgbW91bnRpbmcuIEEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1vdW50IHBhdGgsIGFuZCBzcGVjaWZpY2FsbHksIHJlbGF0ZWQgdG8gY3JhZnRlZCBpbWFnZXMgaXMgZGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGludG8gZm9yIGZ1enppbmcuXG5cbk15IGZvY3VzIHN5bWJvbHMgYXJlIGBudGZzX2ZpbGxfc3VwZXJgIGFuZCBgbnRmc19pbml0X2ZzX2NvbnRleHRgLiBUaGVzZSBhcmUgd2hlcmUgdGhlIGxvZ2ljIG9mIHRoZSBwYXRjaCBsaXZlcy5cblxuSSdtIGNvbmZpZGVudCB3ZSBoYXZlIHRoZSByaWdodCBjb25maWcsIGBOVEZTX0ZTYC4gT2theSwgSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwOCwiT3V0cHV0VG9rZW5zIjoxMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzo0Mi45NTA0OTEzODJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTE1NjM4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfZmlsbF9zdXBlclwiLFxuICAgIFwibnRmc19pbml0X2ZzX2NvbnRleHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRGUyBib290IHNlY3RvciB2YWxpZGF0aW9uIGxvZ2ljIGluIGBpc19ib290X3NlY3Rvcl9udGZzYCBieSBjaGFuZ2luZyB0aGUgY29uZGl0aW9uIGZvciBgc2VjdG9yc19wZXJfY2x1c3RlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIG1vdW50IHBhdGgsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19maWxsX3N1cGVyXCIsXG4gICAgXCJudGZzX2luaXRfZnNfY29udGV4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVEZTIGJvb3Qgc2VjdG9yIHZhbGlkYXRpb24gbG9naWMgaW4gYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGJ5IGNoYW5naW5nIHRoZSBjb25kaXRpb24gZm9yIGBzZWN0b3JzX3Blcl9jbHVzdGVyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gbW91bnQgcGF0aCwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgd2hlbiBtb3VudGluZyBhIGNyYWZ0ZWQgTlRGUyBpbWFnZS4gVGhlcmVmb3JlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzo0My4wMjU2NTMzNjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDAwOTYwOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNzo0My4wMjYwOTA4MDZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzY5OTY1NDczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBgc2VjdG9yc19wZXJfY2x1c3RlcmAgZmllbGQgaW4gdGhlIE5URlMgYm9vdCBzZWN0b3IgKGBpc19ib290X3NlY3Rvcl9udGZzYCBpbiBgZnMvbnRmcy9zdXBlci5jYCkuIFRoZSBib290IHNlY3RvciBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgYmxvY2sgZGV2aWNlLCBtZWFuaW5nIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIChldmVuIGlmIHBvdGVudGlhbGx5IG1hbGljaW91cyBvciBtYWxmb3JtZWQpLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgaXNzdWVzIGFyaXNpbmcgZnJvbSBtYWxmb3JtZWQgZGlzayBzdHJ1Y3R1cmVzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW50ZWdlciBvdmVyZmxvd3MpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBVQlNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMTU2YmUwYTRmM2Y1ZjVjZWIwMDdjNzI1ODA2ZWUzMmI4ZDdlMWE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDU6MTY6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmNcbmluZGV4IDhhYmU3YmVlNGMwZDkuLjcyZjE5MzMxMzZkYzEgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL3N1cGVyLmNcbisrKyBiL2ZzL250ZnMvc3VwZXIuY1xuQEAgLTU1Nyw4ICs1NTcsOCBAQCBzdGF0aWMgYm9vbCBpc19ib290X3NlY3Rvcl9udGZzKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHQgKiBDaGVjayBzZWN0b3JzIHBlciBjbHVzdGVyIHZhbHVlIGlzIHZhbGlkIGFuZCB0aGUgY2x1c3RlciBzaXplXG4gXHQgKiBpcyBub3QgYWJvdmUgdGhlIG1heGltdW0gKDJNQikuXG4gXHQgKi9cbi1cdGlmIChiLVx1MDAzZWJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyIFx1MDAzZSAweDgwIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGItXHUwMDNlYnBiLnNlY3RvcnNfcGVyX2NsdXN0ZXIgXHUwMDNjIDB4ZjQpXG4rXHRpZiAoYi1cdTAwM2VicGIuc2VjdG9yc19wZXJfY2x1c3RlciBcdTAwM2MgMHhmNCBcdTAwMjZcdTAwMjZcbitcdCAgICAhaXNfcG93ZXJfb2ZfMihiLVx1MDAzZWJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyKSlcbiBcdFx0Z290byBub3RfbnRmcztcbiBcbiBcdC8qIENoZWNrIHJlc2VydmVkL3VudXNlZCBmaWVsZHMgYXJlIHJlYWxseSB6ZXJvLiAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTc6NDMuMDI2MDkxNTY2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2OTk2MjQzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVEZTIEJvb3QgU2VjdG9yIFZhbGlkYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW4gYGZzL250ZnMvc3VwZXIuY2AgaXMgdHdlYWtpbmcgdGhlIGBpc19ib290X3NlY3Rvcl9udGZzYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyBob3cgdGhlIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCBmaWVsZCB3aXRoaW4gdGhlIEJJT1MgUGFyYW1ldGVyIEJsb2NrIChCUEIpIG9mIGFuIE5URlMgYm9vdCBzZWN0b3IgaXMgdmFsaWRhdGVkLlxuXG5UaGUgb3JpZ2luYWwgY29kZSBoYWQgYSByYXRoZXIgb2RkIGNoZWNrOiBgc2VjdG9yc19wZXJfY2x1c3RlcmAgaGFkIHRvIGJlICpiZXR3ZWVuKiAweDgwIGFuZCAweGYzIChleGNsdXNpdmUpLiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGlzIHRvIG1ha2UgaXQgKmxlc3MqIHRoYW4gMHhmNCAqYW5kKiBub3QgYSBwb3dlciBvZiAyLiBJIHVuZGVyc3RhbmQgdGhhdC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyAqbm90KiBhIEtNU0FOIGlzc3VlLiBUaGUgY29yZSBvZiBteSByZWFzb25pbmcgaXMgdGhhdCB0aGUgZGF0YSBiZWluZyB2YWxpZGF0ZWQgaGVyZSBjb21lcyBkaXJlY3RseSBmcm9tIHRoZSBkaXNrIGl0c2VsZiDigJMgZnJvbSB0aGUgYmxvY2sgZGV2aWNlLiBJdCdzIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBvbiB0aGUgc3RhY2sgb3IgaGVhcC4gRXZlbiBpZiB0aGUgZGF0YSBpcyBtYWxpY2lvdXMsIGl0J3MgKmluaXRpYWxpemVkKiB3aXRoIHNvbWUgdmFsdWUgcmVhZCBmcm9tIHRoZSBwaHlzaWNhbCBtZWRpdW0uIEtNU0FOIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgdXNlcyBvZiAqdW5pbml0aWFsaXplZCogbWVtb3J5LCB3aGljaCBzaW1wbHkgaXNuJ3QgdGhlIGNhc2UgaGVyZS4gVGhpcyBwYXRjaCwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgaXMganVzdCBmaXhpbmcgYSBidWcgaW4gdGhlIHZhbGlkaXR5IGNoZWNrIG9mIGRhdGEgKmFscmVhZHkqIG9uIGRpc2suXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBnbGFuY2UgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFdlIGFyZSBkZWFsaW5nIHdpdGggYGJgLCBhIHBvaW50ZXIgdG8gYSBgY29uc3QgTlRGU19CT09UX1NFQ1RPUmAsIHJlYWQgZGlyZWN0bHkgZnJvbSB0aGUgYmxvY2sgZGV2aWNlLiBJdCdzIGJlaW5nIHJlYWQgZnJvbSB0aGUgZGlzay4gTm90aGluZydzIHVuaW5pdGlhbGl6ZWQgaGVyZS5cblxuVGhlcmVmb3JlLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzUsIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTc6NTAuNzI1NzE4MTEyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdGhlIGBzZWN0b3JzX3Blcl9jbHVzdGVyYCBmaWVsZCBpbiB0aGUgTlRGUyBib290IHNlY3RvciAoYGlzX2Jvb3Rfc2VjdG9yX250ZnNgIGluIGBmcy9udGZzL3N1cGVyLmNgKS4gVGhlIGJvb3Qgc2VjdG9yIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBibG9jayBkZXZpY2UsIG1lYW5pbmcgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGV2ZW4gaWYgcG90ZW50aWFsbHkgbWFsaWNpb3VzIG9yIG1hbGZvcm1lZCkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBpc3N1ZXMgYXJpc2luZyBmcm9tIG1hbGZvcm1lZCBkaXNrIHN0cnVjdHVyZXMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnRlZ2VyIG92ZXJmbG93cykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgYHNlY3RvcnNfcGVyX2NsdXN0ZXJgIGZpZWxkIGluIHRoZSBOVEZTIGJvb3Qgc2VjdG9yIChgaXNfYm9vdF9zZWN0b3JfbnRmc2AgaW4gYGZzL250ZnMvc3VwZXIuY2ApLiBUaGUgYm9vdCBzZWN0b3IgZGF0YSBpcyByZWFkIGZyb20gdGhlIGJsb2NrIGRldmljZSwgbWVhbmluZyBpdCBpcyBmdWxseSBpbml0aWFsaXplZCAoZXZlbiBpZiBwb3RlbnRpYWxseSBtYWxpY2lvdXMgb3IgbWFsZm9ybWVkKS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGlzc3VlcyBhcmlzaW5nIGZyb20gbWFsZm9ybWVkIGRpc2sgc3RydWN0dXJlcyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludGVnZXIgb3ZlcmZsb3dzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgVUJTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownrgll[1] Phase: Succeeded StartedAt: 2026-08-26 05:18:02 +0000 UTC FinishedAt: 2026-08-26 05:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 05:18:02 +0000 UTC FinishedAt: 2026-08-26 05:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2] Phase: Succeeded StartedAt: 2026-08-26 05:18:02 +0000 UTC FinishedAt: 2026-08-26 08:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 05:18:02 +0000 UTC FinishedAt: 2026-08-26 08:58:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 05:18:02 +0000 UTC FinishedAt: 2026-08-26 05:18:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 05:18:02 +0000 UTC FinishedAt: 2026-08-26 05:18:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflownrgll/series-workflownrgll-convert-artifact-2470715591/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 05:18:12 +0000 UTC FinishedAt: 2026-08-26 05:34:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 05:18:12 +0000 UTC FinishedAt: 2026-08-26 05:34:22 +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:*7ebb26ef-e38d-405a-9783-3302810cf04d,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-workflownrgll/series-workflownrgll-convert-artifact-2470715591/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": "77c70007-3ecc-4885-a570-c22192f2631e", "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-workflownrgll/series-workflownrgll-build-action-1659840861/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 05:18:12 +0000 UTC FinishedAt: 2026-08-26 05:34:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7ebb26ef-e38d-405a-9783-3302810cf04d,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-workflownrgll/series-workflownrgll-convert-artifact-2470715591/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": "77c70007-3ecc-4885-a570-c22192f2631e", "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-workflownrgll/series-workflownrgll-build-action-1659840861/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 05:34:22 +0000 UTC FinishedAt: 2026-08-26 05:34:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 05:34:22 +0000 UTC FinishedAt: 2026-08-26 05:34:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 05:34:22 +0000 UTC FinishedAt: 2026-08-26 05:34:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 05:34:22 +0000 UTC FinishedAt: 2026-08-26 05:34:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflownrgll/series-workflownrgll-convert-artifact-2812942326/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 05:34:32 +0000 UTC FinishedAt: 2026-08-26 05:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 05:34:32 +0000 UTC FinishedAt: 2026-08-26 05:36:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*77c70007-3ecc-4885-a570-c22192f2631e,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-workflownrgll/series-workflownrgll-build-action-1659840861/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-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 05:36:45 +0000 UTC FinishedAt: 2026-08-26 05:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 05:36:45 +0000 UTC FinishedAt: 2026-08-26 05:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 05:36:45 +0000 UTC FinishedAt: 2026-08-26 05:52:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 05:36:45 +0000 UTC FinishedAt: 2026-08-26 05:52:53 +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:*7ebb26ef-e38d-405a-9783-3302810cf04d,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-workflownrgll/series-workflownrgll-convert-artifact-2812942326/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": "af08fb20-4803-4908-b74a-9eb9696db60f", "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-workflownrgll/series-workflownrgll-build-action-3882746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 05:36:45 +0000 UTC FinishedAt: 2026-08-26 05:52:43 +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:*7ebb26ef-e38d-405a-9783-3302810cf04d,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-workflownrgll/series-workflownrgll-convert-artifact-2812942326/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": "af08fb20-4803-4908-b74a-9eb9696db60f", "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-workflownrgll/series-workflownrgll-build-action-3882746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 05:52:53 +0000 UTC FinishedAt: 2026-08-26 05:52:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 05:52:53 +0000 UTC FinishedAt: 2026-08-26 05:52:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 05:52:53 +0000 UTC FinishedAt: 2026-08-26 05:55:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 05:52:53 +0000 UTC FinishedAt: 2026-08-26 05:54:55 +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:*af08fb20-4803-4908-b74a-9eb9696db60f,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-workflownrgll/series-workflownrgll-build-action-3882746/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-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 05:55:04 +0000 UTC FinishedAt: 2026-08-26 08:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 05:55:04 +0000 UTC FinishedAt: 2026-08-26 08:58:29 +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":["ntfs_fill_super","ntfs_init_fs_context"],"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:*77c70007-3ecc-4885-a570-c22192f2631e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*af08fb20-4803-4908-b74a-9eb9696db60f,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-workflownrgll/series-workflownrgll-build-action-1659840861/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-workflownrgll/series-workflownrgll-build-action-3882746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 05:55:04 +0000 UTC FinishedAt: 2026-08-26 05:55:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 05:55:04 +0000 UTC FinishedAt: 2026-08-26 05:55:08 +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":["ntfs_fill_super","ntfs_init_fs_context"],"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-workflownrgll/series-workflownrgll-convert-artifact-2734847771/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 05:55:04 +0000 UTC FinishedAt: 2026-08-26 05:55:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 05:55:04 +0000 UTC FinishedAt: 2026-08-26 05:55:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 05:55:04 +0000 UTC FinishedAt: 2026-08-26 05:55:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 05:55:14 +0000 UTC FinishedAt: 2026-08-26 08:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrgll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_fill_super","ntfs_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"749d444c-d3d0-48c5-8926-ba3eba4321f4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 05:55:14 +0000 UTC FinishedAt: 2026-08-26 08:58:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*77c70007-3ecc-4885-a570-c22192f2631e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*af08fb20-4803-4908-b74a-9eb9696db60f,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-workflownrgll/series-workflownrgll-build-action-1659840861/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-workflownrgll/series-workflownrgll-build-action-3882746/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-workflownrgll/series-workflownrgll-convert-artifact-2734847771/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,}