Name: series-workflowbwkfz Phase: Succeeded StartedAt: 2026-08-06 08:55:10 +0000 UTC FinishedAt: 2026-08-06 10:38:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[0] Phase: Succeeded StartedAt: 2026-08-06 08:55:10 +0000 UTC FinishedAt: 2026-08-06 08:58:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 08:55:10 +0000 UTC FinishedAt: 2026-08-06 08:58:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_GOOGLE", "GVE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_GOOGLE", "GVE" ], "series_id": "b893eee9-99ca-4659-a1fb-c24306f08cbe" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "gve_add_flow_rule", "gve_del_flow_rule", "gve_flow_rules_reset", "gve_set_rxnfc", "gve_set_features" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfR09PR0xFJiMzNDssCiAgICAmIzM0O0dWRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d2ZV9hZGRfZmxvd19ydWxlJiMzNDssCiAgICAmIzM0O2d2ZV9kZWxfZmxvd19ydWxlJiMzNDssCiAgICAmIzM0O2d2ZV9mbG93X3J1bGVzX3Jlc2V0JiMzNDssCiAgICAmIzM0O2d2ZV9zZXRfcnhuZmMmIzM0OywKICAgICYjMzQ7Z3ZlX3NldF9mZWF0dXJlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlYCB0byBzY2hlZHVsZSBhIHJlc2V0IGluc3RlYWQgb2YgcGVyZm9ybWluZyBhIGRpcmVjdCByZXNldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoR1ZFKSBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugd2hlcmUgc3l6a2FsbGVyIHJ1bnMuIEZ1enppbmcgZXRodG9vbCBjb21tYW5kcyAobGlrZSBgRVRIVE9PTF9TUlhDTFNSTElOU2AgYW5kIGBFVEhUT09MX1NSWENMU1JMREVMYCkgYW5kIG5ldGRldiBmZWF0dXJlIGNoYW5nZXMgY2FuIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NWVjOTYwYzBiY2E0OTgxYmU2NDZhYTBmMmJmYmIwZGMzNDQ5YTY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAwODo1NjozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jXG5pbmRleCAwODU4N2JmNDBlZDRhLi4yMDM3YjE3NGU1NjFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jXG5AQCAtMTMyMiw3ICYjNDM7MTMyMiw3IEBAIGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsXG4gXG4gXHRpZiAoZXJyID09IC1FVElNRSkge1xuIFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwmIzM0O1RpbWVvdXQgdG8gY29uZmlndXJlIHRoZSBmbG93IHJ1bGUsIHRyaWdnZXIgcmVzZXRcJiMzNDspO1xuLVx0XHRndmVfcmVzZXQocHJpdiwgdHJ1ZSk7XG4mIzQzO1x0XHRndmVfc2NoZWR1bGVfcmVzZXQocHJpdik7XG4gXHR9IGVsc2UgaWYgKCFlcnIpIHtcbiBcdFx0cHJpdi1cdTAwM2VmbG93X3J1bGVzX2NhY2hlLnJ1bGVzX2NhY2hlX3N5bmNlZCA9IGZhbHNlO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX0dPT0dMRSYjMzQ7LAogICAgJiMzNDtHVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndmVfYWRkX2Zsb3dfcnVsZSYjMzQ7LAogICAgJiMzNDtndmVfZGVsX2Zsb3dfcnVsZSYjMzQ7LAogICAgJiMzNDtndmVfZmxvd19ydWxlc19yZXNldCYjMzQ7LAogICAgJiMzNDtndmVfc2V0X3J4bmZjJiMzNDssCiAgICAmIzM0O2d2ZV9zZXRfZmVhdHVyZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgdG8gc2NoZWR1bGUgYSByZXNldCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBkaXJlY3QgcmVzZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciBydW5zLiBGdXp6aW5nIGV0aHRvb2wgY29tbWFuZHMgKGxpa2UgYEVUSFRPT0xfU1JYQ0xTUkxJTlNgIGFuZCBgRVRIVE9PTF9TUlhDTFNSTERFTGApIGFuZCBuZXRkZXYgZmVhdHVyZSBjaGFuZ2VzIGNhbiB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTVlYzk2MGMwYmNhNDk4MWJlNjQ2YWEwZjJiZmJiMGRjMzQ0OWE2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMDg6NTY6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jCmluZGV4IDA4NTg3YmY0MGVkNGEuLjIwMzdiMTc0ZTU2MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jCkBAIC0xMzIyLDcgJiM0MzsxMzIyLDcgQEAgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwKIAogCWlmIChlcnIgPT0gLUVUSU1FKSB7CiAJCWRldl9lcnIoJmFtcDtwcml2LSZndDtwZGV2LSZndDtkZXYsICYjMzQ7VGltZW91dCB0byBjb25maWd1cmUgdGhlIGZsb3cgcnVsZSwgdHJpZ2dlciByZXNldCYjMzQ7KTsKLQkJZ3ZlX3Jlc2V0KHByaXYsIHRydWUpOwomIzQzOwkJZ3ZlX3NjaGVkdWxlX3Jlc2V0KHByaXYpOwogCX0gZWxzZSBpZiAoIWVycikgewogCQlwcml2LSZndDtmbG93X3J1bGVzX2NhY2hlLnJ1bGVzX2NhY2hlX3N5bmNlZCA9IGZhbHNlOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBHVkUgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hlZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGBndmVfcmVzZXQocHJpdiwgdHJ1ZSk7YCB3aXRoIGBndmVfc2NoZWR1bGVfcmVzZXQocHJpdik7YCB3aXRoaW4gYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCBzbyBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGRyaXZlciBpcyBldmVuIHJlYWNoYWJsZSBpbiB0aGUgZW52aXJvbm1lbnRzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgbmFtZWx5LCB2aXJ0dWFsaXplZCBvbmVzLgoKUmlnaHQsIEdWRS4uLiB0aGF0JiMzOTtzIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0LCB0aGUgbmV0d29yayBkcml2ZXIgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkuIEFoYSEgU3l6a2FsbGVyICpydW5zKiBvbiBHQ0UsIHNvIHRoaXMgZHJpdmVyIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4gVGhhdCYjMzk7cyBnb29kIG5ld3MuIFRoYXQgbWFrZXMgaXQgd29ydGggaW52ZXN0aWdhdGluZy4KCk5vdywgbGV0JiMzOTtzIGxvY2F0ZSBgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlYCBhbmQgc2VlIGlmIGl0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIFdhaXQgYSBtaW51dGUuIEdWRSBpcyBzcGVjaWZpY2FsbHkgZm9yIEdDRS4gQ2FuIEkgZXZlbiBmdXp6IHRoaXM/IFllcywgc3l6a2FsbGVyICpydW5zKiBvbiBHQ0UsIHNvIHRoZSBHVkUgKmlzKiB0aGUgcHJpbWFyeSBuZXR3b3JrIGludGVyZmFjZS4gSSBzaG91bGQgZ28gY2hlY2sgdGhlIGNvbmZpZyBmb3IgR1ZFIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jPTEzMTQ9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTMxNTpndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTMxNjpcdFx0XHQgICAgICAgc3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSAqZmxvd19ydWxlX2NtZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMTcte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMTktXHRcdFx0R1ZFX0FETUlOUV9DT05GSUdVUkVfRkxPV19SVUxFLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTMyMDpcdFx0XHRzaXplb2Yoc3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzIxLVx0XHRcdGZsb3dfcnVsZV9jbWQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jPTEzMzM9aW50IGd2ZV9hZG1pbnFfYWRkX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfYWRtaW5xX2Zsb3dfcnVsZSAqcnVsZSwgdTMyIGxvYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMzQte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTMzNTpcdHN0cnVjdCBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUgZmxvd19ydWxlX2NtZCA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMzYtXHRcdC5vcGNvZGUgPSBjcHVfdG9fYmUxNihHVkVfRkxPV19SVUxFX0NGR19BREQpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYzoxMzQxOlx0cmV0dXJuIGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZShwcml2LCBcdTAwMjZmbG93X3J1bGVfY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNDItfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jPTEzNDQ9aW50IGd2ZV9hZG1pbnFfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiBsb2MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzQ1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNDY6XHRzdHJ1Y3QgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlIGZsb3dfcnVsZV9jbWQgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzQ3LVx0XHQub3Bjb2RlID0gY3B1X3RvX2JlMTYoR1ZFX0ZMT1dfUlVMRV9DRkdfREVMKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzUwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTM1MTpcdHJldHVybiBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUocHJpdiwgXHUwMDI2Zmxvd19ydWxlX2NtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzUyLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYz0xMzU0PWludCBndmVfYWRtaW5xX3Jlc2V0X2Zsb3dfcnVsZXMoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM1NS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYzoxMzU2Olx0c3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSBmbG93X3J1bGVfY21kID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM1Ny1cdFx0Lm9wY29kZSA9IGNwdV90b19iZTE2KEdWRV9GTE9XX1JVTEVfQ0ZHX1JFU0VUKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzU5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTM2MDpcdHJldHVybiBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUocHJpdiwgXHUwMDI2Zmxvd19ydWxlX2NtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzYxLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaD01MTQ9c3RydWN0IGd2ZV9hZG1pbnFfZmxvd19ydWxlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaC01MjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaDo1MjE6c3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaC01MjItXHRfX2JlMTYgb3Bjb2RlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oLTUyNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oOjUyODpzdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlKSA9PSA5Mik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaC01MjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5NQoJCQkJCQkJb3V0cHV0OiA2NwoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIHRoZSBgZ3ZlX2FkbWlucWAgRmxvdyBSdWxlIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBtYW5hZ2luZyBmbG93IHJ1bGVzLCBhbmQgSSYjMzk7bSB0cmFja2luZyBob3cgaXQmIzM5O3MgdXNlZC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gdGhyZWUgZGlzdGluY3QgcGxhY2VzOiBgZ3ZlX2FkbWlucV9hZGRfZmxvd19ydWxlYCwgYGd2ZV9hZG1pbnFfZGVsX2Zsb3dfcnVsZWAsIGFuZCBgZ3ZlX2FkbWlucV9yZXNldF9mbG93X3J1bGVzYC4gVGhhdCBtYWtlcyBzZW5zZTsgYWRkaW5nLCBkZWxldGluZywgYW5kIHJlc2V0dGluZyBhcmUgdGhlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGBjb25maWd1cmVgIGZ1bmN0aW9uIGFuZCBlYWNoIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGludG8gdGhvc2UgY2FsbGVycyB0byBzZWUgdGhlIHNwZWNpZmljIGNvbnRleHQgYW5kIHBhcmFtZXRlcnMgcGFzc2VkIHRvIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgLiBJJiMzOTtsbCB3YW50IHRvIHRyYWNlIGhvdyB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBpcyB0cmlnZ2VyZWQuIEkmIzM5O2xsIG5vdGUgdGhlIGRpZmZlcmVuY2VzIGluIHRoZSBzZXR1cCBmb3IgYWRkLCBkZWxldGUgYW5kIHJlc2V0IG9wZXJhdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gYXMgYSB3aG9sZSBkZWFscyB3aXRoIGZsb3cgcnVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3ZlX2FkbWlucV9hZGRfZmxvd19ydWxlfGd2ZV9hZG1pbnFfZGVsX2Zsb3dfcnVsZXxndmVfYWRtaW5xX3Jlc2V0X2Zsb3dfcnVsZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYz0xMzE1PWd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTMzMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzMzM6aW50IGd2ZV9hZG1pbnFfYWRkX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfYWRtaW5xX2Zsb3dfcnVsZSAqcnVsZSwgdTMyIGxvYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMzQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYzoxMzQ0OmludCBndmVfYWRtaW5xX2RlbF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MzIgbG9jKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM0NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNTQ6aW50IGd2ZV9hZG1pbnFfcmVzZXRfZmxvd19ydWxlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzU1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaD02NDY9aW50IGd2ZV9hZG1pbnFfcmVwb3J0X2xpbmtfc3BlZWQoc3RydWN0IGd2ZV9wcml2ICpwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oOjY0NzppbnQgZ3ZlX2FkbWlucV9hZGRfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9hZG1pbnFfZmxvd19ydWxlICpydWxlLCB1MzIgbG9jKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oOjY0ODppbnQgZ3ZlX2FkbWlucV9kZWxfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTMyIGxvYyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaDo2NDk6aW50IGd2ZV9hZG1pbnFfcmVzZXRfZmxvd19ydWxlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmgtNjUwLWludCBndmVfYWRtaW5xX3F1ZXJ5X2Zsb3dfcnVsZXMoc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MTYgcXVlcnlfb3Bjb2RlLCB1MzIgc3RhcnRpbmdfbG9jKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYz0yNjM9aW50IGd2ZV9hZGRfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYy0yNzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYzoyODA6XHRlcnIgPSBndmVfYWRtaW5xX2FkZF9mbG93X3J1bGUocHJpdiwgcnVsZSwgZnNwLVx1MDAzZWxvY2F0aW9uKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI4MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYz0yOTA9aW50IGd2ZV9kZWxfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYy0yOTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYzoyOTc6XHRyZXR1cm4gZ3ZlX2FkbWlucV9kZWxfZmxvd19ydWxlKHByaXYsIGZzcC1cdTAwM2Vsb2NhdGlvbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYy0yOTgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xODQ1PWludCBndmVfZmxvd19ydWxlc19yZXNldChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE4NDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MTg1MDpcdHJldHVybiBndmVfYWRtaW5xX3Jlc2V0X2Zsb3dfcnVsZXMocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTg1MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2NQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBuZXR3b3JrIGRyaXZlcnMgYW5kIGV0aHRvb2w6CgoqKkludmVzdGlnYXRpbmcgdGhlIGV0aHRvb2wgSW50ZXJmYWNlIGZvciBGbG93IFJ1bGUgTWFuYWdlbWVudCoqCgpSaWdodCwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggZmxvdyBydWxlIG1hbmFnZW1lbnQgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGVudHJ5IHBvaW50cyBmb3IgYWRkaW5nIGFuZCBkZWxldGluZyB0aG9zZSBydWxlcyBhcmUgYGd2ZV9hZGRfZmxvd19ydWxlYCBhbmQgYGd2ZV9kZWxfZmxvd19ydWxlYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBhcHBhcmVudGx5IHRyaWdnZXJlZCB0aHJvdWdoIGV0aHRvb2wsIHdoaWNoIG1ha2VzIHNlbnNlLiBFdGh0b29sIGlzIHRoZSBzdGFuZGFyZCB1dGlsaXR5IGZvciBjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXMsIHNvIHRoYXQmIzM5O3MgYSBsb2dpY2FsIGNvbm5lY3Rpb24uIE5vdywgdGhlIG5leHQgc3RlcCBpcyBjcnlzdGFsIGNsZWFyOiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBib3RoIGBndmVfYWRkX2Zsb3dfcnVsZWAgYW5kIGBndmVfZGVsX2Zsb3dfcnVsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGV5JiMzOTtyZSBkb2luZywgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgaGFyZHdhcmUsIGFuZCBob3cgdGhleSBoYW5kbGUgdGhlIGludHJpY2FjaWVzIG9mIGZsb3cgcnVsZSBpbnN0YWxsYXRpb24gYW5kIHJlbW92YWwuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHRob3NlIGZ1bmN0aW9ucyBhcmUgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3ZlX2FkZF9mbG93X3J1bGV8Z3ZlX2RlbF9mbG93X3J1bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEzMTk9aW50IGd2ZV9nZXRfZmxvd19ydWxlX2lkcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQsIHUzMiAqcnVsZV9sb2NzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTMyMDppbnQgZ3ZlX2FkZF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTMyMTppbnQgZ3ZlX2RlbF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTMyMi1pbnQgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXQoc3RydWN0IGd2ZV9wcml2ICpwcml2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9ODE4PXN0YXRpYyBpbnQgZ3ZlX3NldF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy04MjctXHRjYXNlIEVUSFRPT0xfU1JYQ0xTUkxJTlM6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6ODI4Olx0XHRlcnIgPSBndmVfYWRkX2Zsb3dfcnVsZShwcml2LCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTgyOS1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtODMwLVx0Y2FzZSBFVEhUT09MX1NSWENMU1JMREVMOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjgzMTpcdFx0ZXJyID0gZ3ZlX2RlbF9mbG93X3J1bGUocHJpdiwgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy04MzItXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jPTIzMz1pbnQgZ3ZlX2dldF9mbG93X3J1bGVfaWRzKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCwgdTMyICpydWxlX2xvY3MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmMtMjYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmM6MjYzOmludCBndmVfYWRkX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYy0yNjQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI4OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jOjI5MDppbnQgZ3ZlX2RlbF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmMtMjkxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTY0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHVkUgRmxvdyBSdWxlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBHVkUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGZsb3cgcnVsZSBtYW5hZ2VtZW50LiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGludGVyYWN0aW9uIHBvaW50cyBhcmUgdGhlIGBldGh0b29sYCBjb21tYW5kczogYEVUSFRPT0xfU1JYQ0xTUkxJTlNgIGFuZCBgRVRIVE9PTF9TUlhDTFNSTERFTGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gZm9yIG5vdywgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcnVsZXMgYXJlIGdvaW5nIHRvIGJlIGluc2VydGVkLCBhbmQgZGVsZXRlZCwgZnJvbSB0aGUga2VybmVsLiBOb3csIGxldCYjMzk7cyB0cmFjZSB0aGlzIGBndmVfZmxvd19ydWxlc19yZXNldGAgZnVuY3Rpb247IEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgb25lIGNhbGxlZCwgYW5kIHRoYXQgbG9va3MgbGlrZSBpdCBpcyBnb2luZyB0byBiZSBmcm9tIGBndmVfbWFpbi5jYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCwgYW5kIGZvbGxvdyB3aGVyZSBpdCBpcyBjYWxsZWQgaW4gb3JkZXIgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIHJ1bGUgbWFuYWdlbWVudCB3b3JrZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3ZlX2Zsb3dfcnVsZXNfcmVzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEzMjE9aW50IGd2ZV9kZWxfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjEzMjI6aW50IGd2ZV9mbG93X3J1bGVzX3Jlc2V0KHN0cnVjdCBndmVfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEzMjMtLyogUlNTIGNvbmZpZyAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz03Mjc9c3RhdGljIHZvaWQgZ3ZlX3RlYXJkb3duX2RldmljZV9yZXNvdXJjZXMoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy03MzItXHRpZiAoZ3ZlX2dldF9kZXZpY2VfcmVzb3VyY2VzX29rKHByaXYpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6NzMzOlx0XHRlcnIgPSBndmVfZmxvd19ydWxlc19yZXNldChwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy03MzQtXHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTgyNT1pbnQgZ3ZlX2luaXRfcnNzX2NvbmZpZyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUxNiBudW1fcXVldWVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xODQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjE4NDU6aW50IGd2ZV9mbG93X3J1bGVzX3Jlc2V0KHN0cnVjdCBndmVfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xODQ2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjE2OT1zdGF0aWMgaW50IGd2ZV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjE5NS1cdGlmICgobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX05UVVBMRSkgXHUwMDI2XHUwMDI2ICEoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfTlRVUExFKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjIxOTY6XHRcdGVyciA9IGd2ZV9mbG93X3J1bGVzX3Jlc2V0KHByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIxOTctXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqR1ZFIERyaXZlciBSZXNldCBTdHJhdGVneSoqCgpPa2F5LCBzbyB0aGUgYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgZnVuY3Rpb24gaGFzIGJlZW4gdXBkYXRlZC4gSW50ZXJlc3RpbmcuIExvb2tzIGxpa2UgdGhleSYjMzk7dmUgc3dhcHBlZCBvdXQgYGd2ZV9yZXNldChwcml2LCB0cnVlKTtgIGZvciBgZ3ZlX3NjaGVkdWxlX3Jlc2V0KHByaXYpO2AuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBpcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgZHJpdmVyIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0LCBzbyBpdCYjMzk7cyByZWxldmFudCB0byBHQ0UgZW52aXJvbm1lbnRzLgoKQ2FuIHdlIGZ1enogdGhpcz8gTGV0IG1lIHRoaW5r4oCmIHN5emthbGxlciBydW5zIG9uIEdDRSwgc28gaXQgKmRvZXMqIGludGVyYWN0IHdpdGggdGhlIEdWRSBkcml2ZXIuIEFoYSEgU2luY2Ugc3l6a2FsbGVyIHJ1bnMgb24gR0NFLCBpdCB1c2VzIHRoZSBHVkUgZHJpdmVyLiBJIGJldCBpdCB1c2VzIGV0aHRvb2wgdG8gaW50ZXJhY3Qgd2l0aCBpdCwgdG9vLiBXZSBjb3VsZCBmdXp6IGV0aHRvb2wgY29tbWFuZHMgb24gdGhlIEdWRSBkcml2ZXIuIEJ1dCBob2xkIG9uLCBpZiB3ZSBmdXp6IGV0aHRvb2wgY29tbWFuZHMsIGEgYmFkIGNvbW1hbmQgbWlnaHQgdHJpZ2dlciBhIHJlc2V0LCB0YWtpbmcgZG93biB0aGUgbmV0d29yayBpbnRlcmZhY2UuIElmIHRoZSBuZXR3b3JrIGdvZXMgZG93biwgdGhlIFZNIGJlY29tZXMgdW5yZWFjaGFibGUuIFRoYXQmIzM5O3MgYSBndWFyYW50ZWVkIHRlc3QgZmFpbHVyZSEKCkJ1dCwgZGlkbiYjMzk7dCBJIHNlZSB0aGF0IHN5emthbGxlciAqZG9lcyogZnV6eiBldGh0b29sIGNvbW1hbmRzPyBIbW0uIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlnIGZvciBHVkUsIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgcHJvdGVjdGlvbiBhZ2FpbnN0IHRoYXQgc29ydCBvZiB0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgR1ZFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTQyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBEcml2ZXIgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhhdCBHb29nbGUgZXRoZXJuZXQgZHJpdmVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYEtjb25maWdgIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgdmFsdWVzIHdpbGwgYWxsIGJlIGRlZmluZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgdmFyaW91cyBzZXR0aW5ncyBhbmQgdmFyaWFibGVzIHRoYXQgY29udHJvbCB0aGUgZHJpdmVyJiMzOTtzIGJlaGF2aW9yIGFuZCBpZiBhbnl0aGluZyBuZWVkcyB0byBiZSB1cGRhdGVkLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYWJsZSBhc3BlY3RzIG9mIGFueSBrZXJuZWwgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgR1ZFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZz0xNj1pZiBORVRfVkVORE9SX0dPT0dMRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZzoxODpjb25maWcgR1ZFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O0dvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ09ORklHX0dWRSBEZXBlbmRlbmN5IFRyZWUqKgoKQWxyaWdodCwgc28gYENPTkZJR19HVkVgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O3JlIGxvb2tpbmcgYXQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IGl0cyBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgYENPTkZJR19HVkVgIHRvIGJlIHZhbGlkLiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaXRzIHBvc2l0aW9uIGluIHRoZSBkZXBlbmRlbmN5IHRyZWUuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLCBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgaG93IGRlZXBseSBpbnRlZ3JhdGVkIHRoaXMgb3B0aW9uIGlzIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCNcbiAgIDI6XHQjIEdvb2dsZSBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXG4gICAzOlx0I1xuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBORVRfVkVORE9SX0dPT0dMRVxuICAgNjpcdFx0Ym9vbCBcJiMzNDtHb29nbGUgRGV2aWNlc1wmIzM0O1xuICAgNzpcdFx0ZGVmYXVsdCB5XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGRldmljZSBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXG4gIDEwOlx0XG4gIDExOlx0XHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuICAxMjpcdFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXG4gIDEzOlx0XHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgR29vZ2xlIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWRcbiAgMTQ6XHRcdCAgZm9yIHlvdXIgc3BlY2lmaWMgZGV2aWNlIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxNTpcdFxuICAxNjpcdGlmIE5FVF9WRU5ET1JfR09PR0xFXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIEdWRVxuICAxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7R29vZ2xlIFZpcnR1YWwgTklDIChnVk5JQykgc3VwcG9ydFwmIzM0O1xuICAyMDpcdFx0ZGVwZW5kcyBvbiAoUENJX01TSSBcdTAwMjZcdTAwMjYgKFg4NiB8fCBDUFVfTElUVExFX0VORElBTikpXG4gIDIxOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDIyOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEdvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpXCYjMzQ7XG4gIDI1Olx0XG4gIDI2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gIDI3Olx0XHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3ZlLlxuICAyODpcdFxuICAyOTpcdGVuZGlmICNORVRfVkVORE9SX0dPT0dMRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODIzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogR1ZFIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBDT05GSUdfTkVUX1ZFTkRPUl9HT09HTEVgIGFuZCBgQ09ORklHX0dWRWAgYXJlIGVuYWJsZWQsIHdoaWNoIGdldHMgbXkgYXR0ZW50aW9uLiBUaGUgR1ZFIGRyaXZlciwgdGhhdCYjMzk7cyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgZHJpdmVyLiBOb3csIEkgaGF2ZSB0byB0aGluaywgY2FuIHRoaXMgZXZlbiBiZSByZWFjaGVkIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQ/IE5vLCBJIHF1aWNrbHkgcmVhbGl6ZSB0aGF0IEdWRSBpcyBhIEdvb2dsZS1zcGVjaWZpYyB2aXJ0dWFsIE5JQy4KCkJ1dCB3YWl0IGEgbWludXRlLCB0aGUgcGVubnkgZHJvcHMhIFN5emthbGxlciAqcnVucyogb24gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpLCB3aGVyZSBHVkUgaXMgYWN0dWFsbHkgdGhlICpoYXJkd2FyZSogbmV0d29yayBpbnRlcmZhY2UuIEFoIGhhISBTbywgZXZlbiB0aG91Z2ggaXQmIzM5O3MgdmlydHVhbCwgaXQmIzM5O3MgdGhlIHJlYWwgbmV0d29yayBpbnRlcmZhY2UgdXNlZCBieSB0aGUgZnV6emVyLiBGdXp6aW5nIGl0IG1pZ2h0IHBvdGVudGlhbGx5IGRpc3J1cHQgdGhlIG5ldHdvcmsgY29ubmVjdGl2aXR5LCBidXQgU3l6a2FsbGVyIGNhbiBzdGlsbCBmdXp6IGl0IHdpdGhvdXQgY29tcGxldGVseSBsb3NpbmcgY29ubmVjdGlvbiBiZWNhdXNlIGl0JiMzOTtzIG9uIEdDRS4KCk5vdyBsZXQmIzM5O3MgZ28gYmFjayBhbmQgcmVyZWFkIHRoZSBwcm9tcHQgdG8gbWFrZSBzdXJlLiBPa2F5LCB0aGUgcHJvbXB0IHNheXMgcmV0dXJuICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgb25seSBpZiB0aGUgcGF0Y2ggY29udGFpbnM6Ci0gY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUuCi0gY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KCkdpdmVuIHRoZSBwcm9tcHQsIEdWRSBpcyBhIHZpcnR1YWwgTklDIHVzZWQgaW4gR0NFLiBTaW5jZSBTeXprYWxsZXIgcnVucyBvbiBHQ0UgKGFuZCBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSBpdCwgYWx0aG91Z2ggaXQgZG9lcyBydW4gb24gR0NFKSwgSSBoYXZlIHRvIHRoaW5rIGFnYWluLiBEb2VzIHRoaXMgcXVhbGlmeSBhcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlPyBObywgR1ZFIGlzIGEgdmlydHVhbCBOSUMsIHRoZXJlZm9yZSwgbm90IGNvbnNpZGVyZWQgYSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgY2FuIHN0aWxsIGJlIGZ1enphYmxlLgoKU28sIGluIEdDRSwgaXQgKmlzKiByZWFjaGFibGUuIEkgYnJpZWZseSBjb25zaWRlciB0aGUgUUVNVSBlbXVsYXRpb24gb2YgR1ZFIC0gbm8sIHRoZXJlIGlzbiYjMzk7dCBhbnksIGJ1dCBHQ0UgcHJvdmlkZXMgaXQsIGFuZCBzeXprYWxsZXIgZG9lcyBydW4gb24gR0NFLiBHVkUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHQ0UuCgpUaGUgcHJvbXB0IHNheXMgcmV0dXJuICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgb25seSBpZiB0aGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBHQ0Ugb3IgUUVNVSwgYnV0IHNpbmNlIGl0IGlzIHJlYWNoYWJsZSBpbiBHQ0UsIGl0JiMzOTtzIGZpbmUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBtZW50aW9uZWQsIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgLiBJdCYjMzk7cyBzdGF0aWMsIHNvIGl0IGlzbiYjMzk7dCBhIGRpcmVjdCBlbnRyeSBwb2ludC4gVGhlIG5vbi1zdGF0aWMgZW50cnlwb2ludHMgYXJlOiBgZ3ZlX2FkZF9mbG93X3J1bGVgLCBgZ3ZlX2RlbF9mbG93X3J1bGVgLCBhbmQgYGd2ZV9mbG93X3J1bGVzX3Jlc2V0YC4gSSBzaG91bGQgdmVyaWZ5IHRoZXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndmVfYWRkX2Zsb3dfcnVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg9MTMxOT1pbnQgZ3ZlX2dldF9mbG93X3J1bGVfaWRzKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCwgdTMyICpydWxlX2xvY3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMzIwOmludCBndmVfYWRkX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMzIxLWludCBndmVfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz04MTg9c3RhdGljIGludCBndmVfc2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTgyNy1cdGNhc2UgRVRIVE9PTF9TUlhDTFNSTElOUzpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo4Mjg6XHRcdGVyciA9IGd2ZV9hZGRfZmxvd19ydWxlKHByaXYsIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtODI5LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYz0yMzM9aW50IGd2ZV9nZXRfZmxvd19ydWxlX2lkcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQsIHUzMiAqcnVsZV9sb2NzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI2Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jOjI2MzppbnQgZ3ZlX2FkZF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmMtMjY0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NDMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgRXRodG9vbCBDYWxsYmFjayoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgYGd2ZV9zZXRfcnhuZmNgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhbiBldGh0b29sIGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSBzdXNwZWN0ZWQgZ2l2ZW4gdGhlIGNvbnRleHQuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMsIG9mIGNvdXJzZSwgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGRldmljZSYjMzk7cyBSWCBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzLiBUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gZXhhbWluaW5nIGl0cyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIGZ1bmN0aW9uICphY3R1YWxseSogZG9lcy4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgaXQgc2V0cyB0aGUgUmVjZWl2ZSBGbG93IENsYXNzaWZpY2F0aW9uLCBvciBSWE5GQywgcGFyYW1ldGVycy4gSXQgaXMgaW1wZXJhdGl2ZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2V0IG9mIGZpbHRlcnMsIGRlZmluZWQgaGVyZSwgYXJlIGFwcGxpZWQsIGFuZCB3aGF0IGltcGFjdCB0aGlzIGhhcyBvbiB0aGUgZGF0YSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndmVfc2V0X3J4bmZjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jPTc3Nj1zdGF0aWMgaW50IGd2ZV9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtODE3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjgxODpzdGF0aWMgaW50IGd2ZV9zZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy04MTkte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz05ODI9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGd2ZV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtOTk2LVx0LmdldF9jaGFubmVscyA9IGd2ZV9nZXRfY2hhbm5lbHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6OTk3Olx0LnNldF9yeG5mYyA9IGd2ZV9zZXRfcnhuZmMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtOTk4LVx0LmdldF9yeG5mYyA9IGd2ZV9nZXRfcnhuZmMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDM0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBHVkUgRXRoZXJuZXQgRHJpdmVyIEZsb3cgUnVsZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGd2ZWAgRXRoZXJuZXQgZHJpdmVyIGNvZGUsIGFuZCBmaXJzdCBvZmYsIEkmIzM5O20gbm90aW5nIHRoYXQgYGd2ZV9zZXRfcnhuZmNgIGlzIGRlZmluaXRlbHkgdGhlIGV0aHRvb2wgY2FsbGJhY2sgZnVuY3Rpb24gaGVyZS4gR290IGl0LiBOb3csIHdoZXJlIGVsc2UgaXMgaXQgYmVpbmcgdXNlZD8gSSBzZWUgdGhhdCBgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXRgIGlzIGNhbGxlZCBmcm9tIGJvdGggYGd2ZV9zZXRfZmVhdHVyZXNgIGFuZCBgZ3ZlX3RlYXJkb3duX2RldmljZV9yZXNvdXJjZXNgLiBJbnRlcmVzdGluZywgdGhhdCYjMzk7cyBpbXBvcnRhbnQuIFRoaXMgc3VnZ2VzdHMgZmxvdyBydWxlIG1hbmFnZW1lbnQgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggZmVhdHVyZSBjb25maWd1cmF0aW9uIGFuZCByZXNvdXJjZSBjbGVhbnVwLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgZ3ZlX3NldF9mZWF0dXJlc2AgZmlyc3QgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgdGhlIHJlc2V0IGZ1bmN0aW9uLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBpdCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d2ZV9zZXRfZmVhdHVyZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjE0Mz1pbnQgZ3ZlX3NldF9oc3BsaXRfY29uZmlnKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTggdGNwX2RhdGFfc3BsaXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIxNjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MjE2OTpzdGF0aWMgaW50IGd2ZV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMTcwLVx0XHRcdCAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjI0ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGd2ZV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMjUwLVx0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSAgICAgICBndmVfdHhfdGltZW91dCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyMjUxOlx0Lm5kb19zZXRfZmVhdHVyZXNcdD1cdGd2ZV9zZXRfZmVhdHVyZXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjI1Mi1cdC5uZG9fYnBmXHRcdD1cdGd2ZV94ZHAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjU2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBHVkUgRGV2aWNlIEZ1bmN0aW9uYWxpdHkqKgoKUmlnaHQsIHNvIGBndmVfc2V0X2ZlYXR1cmVzYC4uLiB0aGF0JiMzOTtzIHRoZSBkcml2ZXImIzM5O3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIGBuZG9fc2V0X2ZlYXR1cmVzYCBuZXR3b3JrIGRldmljZSBvcGVyYXRpb24gY2FsbGJhY2ssIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgcmVsYXRpb25zaGlwIGV4cGxpY2l0bHkuIEl0JiMzOTtzIGVhc3kgdG8gbG9zZSB0cmFjayB3aGVuIHlvdSYjMzk7cmUganVtcGluZyBhcm91bmQgdGhlIGNvZGUuCgpBbmQgdGhlbiBgZ3ZlX3RlYXJkb3duX2RldmljZV9yZXNvdXJjZXNgLi4uIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBjYWxsZWQgdG8gY2xlYW4gdGhpbmdzIHVwLCBidXQgd2hlcmUgZXhhY3RseSBpcyBpdCBpbnZva2VkPyBJIHZhZ3VlbHkgcmVjYWxsIGl0IGJlaW5nIHBhcnQgb2YgdGhlIHJlbW92YWwgcHJvY2Vzcy4gTGV0IG1lIGp1c3QgY29uZmlybSBpZiBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgZ3ZlX3JlbW92ZWAgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBhbmQgbmFpbCBkb3duIHRoZSByZXNvdXJjZSBsaWZlY3ljbGUuIEl0JiMzOTtzIGFsbCBhYm91dCBlbnN1cmluZyB0aGUgcmlnaHQgY2xlYW51cCBhdCB0aGUgcmlnaHQgdGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3ZlX3RlYXJkb3duX2RldmljZV9yZXNvdXJjZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9NzI1PXN0YXRpYyB2b2lkIGd2ZV90cmlnZ2VyX3Jlc2V0KHN0cnVjdCBndmVfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtNzI2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjcyNzpzdGF0aWMgdm9pZCBndmVfdGVhcmRvd25fZGV2aWNlX3Jlc291cmNlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtNzI4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjUxMz1zdGF0aWMgdm9pZCBndmVfdGVhcmRvd25fcHJpdl9yZXNvdXJjZXMoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTI1MTQte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjI1MTU6XHRndmVfdGVhcmRvd25fZGV2aWNlX3Jlc291cmNlcyhwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yNTE2LVx0Z3ZlX2FkbWlucV9mcmVlKFx1MDAyNnByaXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIHByaXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERyaXZlciBSZXNldCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgY2hhbmdlIGlzIGluIHRoZSBkcml2ZXImIzM5O3MgdGVhcmRvd24gc2VxdWVuY2UuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgbW92ZWQgZnJvbSBhIGRpcmVjdCBgZ3ZlX3Jlc2V0KHByaXYsIHRydWUpYCB0byBhIHNjaGVkdWxlZCByZXNldCB2aWEgYGd2ZV9zY2hlZHVsZV9yZXNldChwcml2KWAuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIGZ1enogdGFyZ2V0JiMzNDsgdG8gbWUuCgpMZXQmIzM5O3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy4gSW5pdGlhbGx5LCBJIHdhcyBmb2N1c2luZyBvbiBgZ3ZlX3NldF9yeG5mY2AgYW5kIGBndmVfc2V0X2ZlYXR1cmVzYCwgYnV0IGhhbmcgb24gYSBtaW51dGUuLi4gdGhvc2UgYXJlIGV0aHRvb2wgYW5kIG5ldGRldiBjYWxsYmFja3MgcmVzcGVjdGl2ZWx5LiBJbnRlcmVzdGluZywgYnV0IGxldCYjMzk7cyBkaWcgZGVlcGVyLiBBbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBkcml2ZXIgdGhhdCB3ZSBjYW4gZ2V0IGFjY2VzcyB0by4gQWggaGEsIGhlcmUgd2UgZ28hIGBndmVfYWRkX2Zsb3dfcnVsZWAsIGBndmVfZGVsX2Zsb3dfcnVsZWAsIGFuZCBgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXRgLiBUaG9zZSBhcmUgYWxsIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBOb3cgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZW0gYXJlIGV4cG9ydGVkIG9yIGp1c3Qgbm9uLXN0YXRpYyBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgZHJpdmVyLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHZ1bG5lcmFiaWxpdHkgbGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIFN5bWJvbCBWaXNpYmlsaXR5IGFuZCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlc2Ugc3ltYm9scyBhcmVuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIG1lYW5pbmcgdGhleSYjMzk7cmUgbm90IGludGVuZGVkIGZvciBkaXJlY3QgdXNlIGJ5IGV4dGVybmFsIG1vZHVsZXMuIEhvd2V2ZXIsIHRoZXkgKmFyZSogbm9uLXN0YXRpYywgd2hpY2ggaW1wbGllcyB0aGV5IGhhdmUgdGhlaXIgb3duIHVuaXF1ZSBzeW1ib2xzIHdpdGhpbiB0aGUga2VybmVsIGltYWdlIGl0c2VsZi4gVGhhdCYjMzk7cyB0aGUga2V5IGRpZmZlcmVuY2UuIExldCYjMzk7cyBmb2N1cyBvbiB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnM6IGBndmVfYWRkX2Zsb3dfcnVsZWAsIGBndmVfZGVsX2Zsb3dfcnVsZWAsIGBndmVfZmxvd19ydWxlc19yZXNldGAsIGBndmVfc2V0X3J4bmZjYCwgYW5kIGBndmVfc2V0X2ZlYXR1cmVzYC4gVGhlc2UgYXJlIHRoZSBvbmVzIG9mIGludGVyZXN0LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9ucy4gSSBzZWUgYE5FVF9WRU5ET1JfR09PR0xFYCBhbmQgYEdWRWAuIEhtbSwgYEdWRWAgaXMgaW50ZXJlc3Rpbmc7IEkga25vdyBob3cgR29vZ2xl4oCZcyBHVkUgcHJvamVjdHMgYXJlIGJ1aWx0LiBBbHJpZ2h0LCBsZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBHVkVgLiBBaCwgaGVyZSB3ZSBnbzogYFBDSV9NU0lgIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBgUENJX01TSWAgaXMgdHlwaWNhbGx5IGVuYWJsZWQsIHdoaWNoIGlzIHRvIGJlIGV4cGVjdGVkLCBidXQgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBpcyB3b3J0aCBhIGNsb3NlciBsb29rLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoZSBkZXRhaWxzIG9mIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZz04PWNvbmZpZyBQVFBfMTU4OF9DTE9DS1xuLS1cbmRyaXZlcnMvcHRwL0tjb25maWctMjktXG5kcml2ZXJzL3B0cC9LY29uZmlnOjMwOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9wdHAvS2NvbmZpZy0zMS1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzE3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBidWlsZCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgc2V0dGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgYSB0cmlzdGF0ZSBvcHRpb24sIGxpa2VseSBzZWxlY3RlZCBpbXBsaWNpdGx5IGJ5IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIG1heWJlIGp1c3QgYWx3YXlzIGF2YWlsYWJsZS4gVGhlbiBJIG5vdGljZWQgdGhlIGRlcGVuZGVuY3k6IGBkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYC4gVGhhdCYjMzk7cyBpbXBseWluZyB0aGF0IGBHVkVgIGNhbiBvbmx5IGJlIGJ1aWx0IGlmIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgaXMgbWV0LgoKSGFuZyBvbiBhIHNlY29uZCwgbGV0IG1lIGNoZWNrIHRoZSBhY3R1YWwgZGVmaW5pdGlvbiBvZiBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBMZXQgbWUgc2VlLi4uIG9rYXksIGhlcmUgaXQgaXM6CgpgYGAKY29uZmlnIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMCgl0cmlzdGF0ZQoJZGVmYXVsdCB5IGlmIFBUUF8xNTg4X0NMT0NLPW4KCWRlZmF1bHQgUFRQXzE1ODhfQ0xPQ0sKYGBgCgpSaWdodC4gU28sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIHRyaXN0YXRlIGFzIGV4cGVjdGVkLiBCdXQgdGhlIGRlZmF1bHRzIGFyZSB3aGF0IG1hdHRlciBoZXJlLiBJdCYjMzk7cyBgZGVmYXVsdCB5IGlmIFBUUF8xNTg4X0NMT0NLPW5gIGFuZCBgZGVmYXVsdCBQVFBfMTU4OF9DTE9DS2AuIEVzc2VudGlhbGx5LCBpdCAqYWx3YXlzKiByZXNvbHZlcyB0byBiZWluZyBlaXRoZXIgc2VsZWN0ZWQgb3Igb3B0aW9uYWwsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYFBUUF8xNTg4X0NMT0NLYC4gVGhhdCBtZWFucyB0aGUgZGVwZW5kZW5jeSBzaG91bGQgYWx3YXlzIGJlIG1ldC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBgZ3ZlX3NjaGVkdWxlX3Jlc2V0YCwganVzdCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndmVfc2NoZWR1bGVfcmVzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEyOTc9c3RydWN0IHBhZ2VfcG9vbCAqZ3ZlX3J4X2NyZWF0ZV9wYWdlX3Bvb2woc3RydWN0IGd2ZV9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTMwMS0vKiBSZXNldCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMzAyOnZvaWQgZ3ZlX3NjaGVkdWxlX3Jlc2V0KHN0cnVjdCBndmVfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEzMDMtaW50IGd2ZV9yZXNldChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIGJvb2wgYXR0ZW1wdF90ZWFyZG93bik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM9MTMxNT1ndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMjQtXHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7VGltZW91dCB0byBjb25maWd1cmUgdGhlIGZsb3cgcnVsZSwgdHJpZ2dlciByZXNldFwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYzoxMzI1Olx0XHRndmVfc2NoZWR1bGVfcmVzZXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzI2LVx0fSBlbHNlIGlmICghZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTExNjk9dm9pZCBndmVfZnJlZV9xdWV1ZV9wYWdlX2xpc3Qoc3RydWN0IGd2ZV9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xMTk4LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjExOTk6dm9pZCBndmVfc2NoZWR1bGVfcmVzZXQoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTEyMDAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0yMDg1PXN0YXRpYyB2b2lkIGd2ZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMDkzLVx0aWYgKCFndmVfdHhfdGltZW91dF90cnlfcV9raWNrKHByaXYsIHR4cXVldWUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjIwOTQ6XHRcdGd2ZV9zY2hlZHVsZV9yZXNldChwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMDk1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM9NTM0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZ3ZlX3J4X2NvcHlfdG9fcG9vbChzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNTUwLVx0XHRpZiAodW5saWtlbHkocmVjeWNsZSBcdTAwM2MgMCkpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6NTUxOlx0XHRcdGd2ZV9zY2hlZHVsZV9yZXNldChyeC1cdTAwM2VndmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy01NTItXHRcdFx0cmV0dXJuIE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYz02NDg9c3RhdGljIHN0cnVjdCBza19idWZmICpndmVfcnhfc2tiKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTY3MC1cdFx0aWYgKHVubGlrZWx5KHJlY3ljbGUgXHUwMDNjIDApKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjY3MTpcdFx0XHRndmVfc2NoZWR1bGVfcmVzZXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTY3Mi1cdFx0XHRyZXR1cm4gTlVMTDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jPTc5Nj1zdGF0aWMgdm9pZCBndmVfcngoc3RydWN0IGd2ZV9yeF9yaW5nICpyeCwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTgzMi1cdFx0bmFwaV9mcmVlX2ZyYWdzKG5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYzo4MzM6XHRcdGd2ZV9zY2hlZHVsZV9yZXNldChyeC1cdTAwM2VndmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy04MzQtXHRcdGdvdG8gZmluaXNoX2ZyYWc7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYz05NDc9c3RhdGljIGJvb2wgZ3ZlX3J4X3JlZmlsbF9idWZmZXJzKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTk3Ny1cdFx0XHRcdGlmICghcngtXHUwMDNlZGF0YS5yYXdfYWRkcmVzc2luZylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6OTc4Olx0XHRcdFx0XHRndmVfc2NoZWR1bGVfcmVzZXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTk3OS1cdFx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jPTEwMDA9c3RhdGljIGludCBndmVfY2xlYW5fcnhfZG9uZShzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LCBpbnQgYnVkZ2V0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtMTAzNi1cdFx0XHQgICAgR1ZFX1NFUU5PKGRlc2MtXHUwMDNlZmxhZ3Nfc2VxKSwgcngtXHUwMDNlZGVzYy5zZXFubyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjEwMzc6XHRcdGd2ZV9zY2hlZHVsZV9yZXNldChyeC1cdTAwM2VndmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy0xMDM4LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI3NQoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiAzMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEdWRSBSZXNldCBTY2hlZHVsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEdWRSBkcml2ZXIuIFRoZSBjb3JlIG9mIGl0IGludm9sdmVzIHN3YXBwaW5nIG91dCB0aGUgZGlyZWN0IGBndmVfcmVzZXRgIGZ1bmN0aW9uIHdpdGggYGd2ZV9zY2hlZHVsZV9yZXNldGAgd2l0aGluIHRoZSBgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlYCBmdW5jdGlvbi4gVGhlIGtleSB0YWtlYXdheSBpcyB0aGlzOiBpdCYjMzk7cyBubyBsb25nZXIgYW4gaW1tZWRpYXRlIHJlc2V0IGJ1dCBhIHNjaGVkdWxlZCBvbmUuIFRoaXMgaXMgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZ1cnRoZXIgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3Rpbmcgc3BvdHMuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgc2luY2UgdGhhdCBmdW5jdGlvbiBpcyBub3QgZXhwb3J0ZWQuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgaXMgc3RhdGljLCBzbyBJIHNob3VsZCBiZSBsb29raW5nIGF0IHRoZSBjYWxsZXJzLiAgSSYjMzk7dmUgaWRlbnRpZmllZDoKCiogICBgZ3ZlX2FkZF9mbG93X3J1bGVgCiogICBgZ3ZlX2RlbF9mbG93X3J1bGVgCiogICBgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXRgCiogICBgZ3ZlX3NldF9yeG5mY2AKKiAgIGBndmVfc2V0X2ZlYXR1cmVzYAoKTXkgcmVhc29uaW5nIGlzIHRoYXQgZnV6emluZyB0aGVzZSBjYWxscywgZ2l2ZW4gdGhleSB0cmlnZ2VyIHRoaXMgc2NoZWR1bGluZyBjaGFuZ2UsIGFyZSBnb29kIHRhcmdldHMuIEFsc28sIHRoZSBwYXRjaCBkZWFscyB3aXRoIHRoZSBHVkUgZHJpdmVyLCBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgd291bGQgZW5hYmxlIHRoZSBHVkUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYE5FVF9WRU5ET1JfR09PR0xFYCBhbmQgYEdWRWAuCgpUaGUgZmFjdCB0aGF0IHRoaXMgaXMgaW4gR1ZFIG1ha2VzIGl0IGVzcGVjaWFsbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBHVkUgaXMgc3BlY2lmaWNhbGx5IHVzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdDRS4gU3l6a2FsbGVyIGlzIGtub3duIHRvIHJ1biBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuICBJIGJlbGlldmUgZnV6emluZyBldGh0b29sIGNvbW1hbmRzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCBtaWdodCBtYW5pcHVsYXRlIGZsb3cgcnVsZXMsIGxpa2UgYEVUSFRPT0xfU1JYQ0xTUkxJTlNgIGFuZCBgRVRIVE9PTF9TUlhDTFNSTERFTGAsIGNvdWxkIGJlIGZydWl0ZnVsLiAgQWxzbywgZmVhdHVyZSBjaGFuZ2VzIHZpYSBuZXRkZXYgY29tbWFuZHMgY291bGQgYWxzbyBwcm92aWRlIGFuIGVudHJ5IHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9HT09HTEUmIzM0OywKICAgICYjMzQ7R1ZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3ZlX2FkZF9mbG93X3J1bGUmIzM0OywKICAgICYjMzQ7Z3ZlX2RlbF9mbG93X3J1bGUmIzM0OywKICAgICYjMzQ7Z3ZlX2Zsb3dfcnVsZXNfcmVzZXQmIzM0OywKICAgICYjMzQ7Z3ZlX3NldF9yeG5mYyYjMzQ7LAogICAgJiMzNDtndmVfc2V0X2ZlYXR1cmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgIHRvIHNjaGVkdWxlIGEgcmVzZXQgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIGEgZGlyZWN0IHJlc2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSB3aGVyZSBzeXprYWxsZXIgcnVucy4gRnV6emluZyBldGh0b29sIGNvbW1hbmRzIChsaWtlIGBFVEhUT09MX1NSWENMU1JMSU5TYCBhbmQgYEVUSFRPT0xfU1JYQ0xTUkxERUxgKSBhbmQgbmV0ZGV2IGZlYXR1cmUgY2hhbmdlcyBjYW4gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9HT09HTEUmIzM0OywKICAgICYjMzQ7R1ZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3ZlX2FkZF9mbG93X3J1bGUmIzM0OywKICAgICYjMzQ7Z3ZlX2RlbF9mbG93X3J1bGUmIzM0OywKICAgICYjMzQ7Z3ZlX2Zsb3dfcnVsZXNfcmVzZXQmIzM0OywKICAgICYjMzQ7Z3ZlX3NldF9yeG5mYyYjMzQ7LAogICAgJiMzNDtndmVfc2V0X2ZlYXR1cmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgIHRvIHNjaGVkdWxlIGEgcmVzZXQgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIGEgZGlyZWN0IHJlc2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSB3aGVyZSBzeXprYWxsZXIgcnVucy4gRnV6emluZyBldGh0b29sIGNvbW1hbmRzIChsaWtlIGBFVEhUT09MX1NSWENMU1JMSU5TYCBhbmQgYEVUSFRPT0xfU1JYQ0xTUkxERUxgKSBhbmQgbmV0ZGV2IGZlYXR1cmUgY2hhbmdlcyBjYW4gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU2OjQwLjM0OTE5ODYzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NzAyODkzMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfR09PR0xFXCIsXG4gICAgXCJHVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndmVfYWRkX2Zsb3dfcnVsZVwiLFxuICAgIFwiZ3ZlX2RlbF9mbG93X3J1bGVcIixcbiAgICBcImd2ZV9mbG93X3J1bGVzX3Jlc2V0XCIsXG4gICAgXCJndmVfc2V0X3J4bmZjXCIsXG4gICAgXCJndmVfc2V0X2ZlYXR1cmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgdG8gc2NoZWR1bGUgYSByZXNldCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBkaXJlY3QgcmVzZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciBydW5zLiBGdXp6aW5nIGV0aHRvb2wgY29tbWFuZHMgKGxpa2UgYEVUSFRPT0xfU1JYQ0xTUkxJTlNgIGFuZCBgRVRIVE9PTF9TUlhDTFNSTERFTGApIGFuZCBuZXRkZXYgZmVhdHVyZSBjaGFuZ2VzIGNhbiB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Njo0MC4zNDkyMDQwOTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDY2ODc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU1ZWM5NjBjMGJjYTQ5ODFiZTY0NmFhMGYyYmZiYjBkYzM0NDlhNjhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAwODo1NjozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jXFxuaW5kZXggMDg1ODdiZjQwZWQ0YS4uMjAzN2IxNzRlNTYxYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jXFxuQEAgLTEzMjIsNyArMTMyMiw3IEBAIGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsXFxuIFxcbiBcXHRpZiAoZXJyID09IC1FVElNRSkge1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIFxcXCJUaW1lb3V0IHRvIGNvbmZpZ3VyZSB0aGUgZmxvdyBydWxlLCB0cmlnZ2VyIHJlc2V0XFxcIik7XFxuLVxcdFxcdGd2ZV9yZXNldChwcml2LCB0cnVlKTtcXG4rXFx0XFx0Z3ZlX3NjaGVkdWxlX3Jlc2V0KHByaXYpO1xcbiBcXHR9IGVsc2UgaWYgKCFlcnIpIHtcXG4gXFx0XFx0cHJpdi1cXHUwMDNlZmxvd19ydWxlc19jYWNoZS5ydWxlc19jYWNoZV9zeW5jZWQgPSBmYWxzZTtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Njo0MC43MzA1ODkwOTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3OTMyMTQ5NDY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0dPT0dMRVwiLFxuICAgIFwiR1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3ZlX2FkZF9mbG93X3J1bGVcIixcbiAgICBcImd2ZV9kZWxfZmxvd19ydWxlXCIsXG4gICAgXCJndmVfZmxvd19ydWxlc19yZXNldFwiLFxuICAgIFwiZ3ZlX3NldF9yeG5mY1wiLFxuICAgIFwiZ3ZlX3NldF9mZWF0dXJlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgIHRvIHNjaGVkdWxlIGEgcmVzZXQgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIGEgZGlyZWN0IHJlc2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSB3aGVyZSBzeXprYWxsZXIgcnVucy4gRnV6emluZyBldGh0b29sIGNvbW1hbmRzIChsaWtlIGBFVEhUT09MX1NSWENMU1JMSU5TYCBhbmQgYEVUSFRPT0xfU1JYQ0xTUkxERUxgKSBhbmQgbmV0ZGV2IGZlYXR1cmUgY2hhbmdlcyBjYW4gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTVlYzk2MGMwYmNhNDk4MWJlNjQ2YWEwZjJiZmJiMGRjMzQ0OWE2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMDg6NTY6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jXG5pbmRleCAwODU4N2JmNDBlZDRhLi4yMDM3YjE3NGU1NjFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jXG5AQCAtMTMyMiw3ICsxMzIyLDcgQEAgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdixcbiBcbiBcdGlmIChlcnIgPT0gLUVUSU1FKSB7XG4gXHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCJUaW1lb3V0IHRvIGNvbmZpZ3VyZSB0aGUgZmxvdyBydWxlLCB0cmlnZ2VyIHJlc2V0XCIpO1xuLVx0XHRndmVfcmVzZXQocHJpdiwgdHJ1ZSk7XG4rXHRcdGd2ZV9zY2hlZHVsZV9yZXNldChwcml2KTtcbiBcdH0gZWxzZSBpZiAoIWVycikge1xuIFx0XHRwcml2LVx1MDAzZWZsb3dfcnVsZXNfY2FjaGUucnVsZXNfY2FjaGVfc3luY2VkID0gZmFsc2U7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Njo0MC43MzA1OTAzMzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTEwMTYyNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEdWRSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGVkIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuY2AuIFRoZSBjb3JlIGNoYW5nZSBpcyByZXBsYWNpbmcgYGd2ZV9yZXNldChwcml2LCB0cnVlKTtgIHdpdGggYGd2ZV9zY2hlZHVsZV9yZXNldChwcml2KTtgIHdpdGhpbiBgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoR1ZFKSBkcml2ZXIsIHNvIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHdoZXRoZXIgb3Igbm90IHRoaXMgZHJpdmVyIGlzIGV2ZW4gcmVhY2hhYmxlIGluIHRoZSBlbnZpcm9ubWVudHMgSSdtIGludGVyZXN0ZWQgaW4sIG5hbWVseSwgdmlydHVhbGl6ZWQgb25lcy5cblxuUmlnaHQsIEdWRS4uLiB0aGF0J3MgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQsIHRoZSBuZXR3b3JrIGRyaXZlciB1c2VkIGluIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKS4gQWhhISBTeXprYWxsZXIgKnJ1bnMqIG9uIEdDRSwgc28gdGhpcyBkcml2ZXIgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiBUaGF0J3MgZ29vZCBuZXdzLiBUaGF0IG1ha2VzIGl0IHdvcnRoIGludmVzdGlnYXRpbmcuXG5cbk5vdywgbGV0J3MgbG9jYXRlIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgIGFuZCBzZWUgaWYgaXQncyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBXYWl0IGEgbWludXRlLiBHVkUgaXMgc3BlY2lmaWNhbGx5IGZvciBHQ0UuIENhbiBJIGV2ZW4gZnV6eiB0aGlzPyBZZXMsIHN5emthbGxlciAqcnVucyogb24gR0NFLCBzbyB0aGUgR1ZFICppcyogdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UuIEkgc2hvdWxkIGdvIGNoZWNrIHRoZSBjb25maWcgZm9yIEdWRSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU2OjQ1Ljg0MDc1NTA2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjA5MzgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM9MTMxND1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTMxNTpndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzMTY6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUgKmZsb3dfcnVsZV9jbWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTMxNy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzE5LVxcdFxcdFxcdEdWRV9BRE1JTlFfQ09ORklHVVJFX0ZMT1dfUlVMRSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYzoxMzIwOlxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlKSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzIxLVxcdFxcdFxcdGZsb3dfcnVsZV9jbWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM9MTMzMz1pbnQgZ3ZlX2FkbWlucV9hZGRfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9hZG1pbnFfZmxvd19ydWxlICpydWxlLCB1MzIgbG9jKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMzQte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzMzU6XFx0c3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSBmbG93X3J1bGVfY21kID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMzYtXFx0XFx0Lm9wY29kZSA9IGNwdV90b19iZTE2KEdWRV9GTE9XX1JVTEVfQ0ZHX0FERCksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNDE6XFx0cmV0dXJuIGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZShwcml2LCBcXHUwMDI2Zmxvd19ydWxlX2NtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM0Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYz0xMzQ0PWludCBndmVfYWRtaW5xX2RlbF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MzIgbG9jKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNDUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNDY6XFx0c3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSBmbG93X3J1bGVfY21kID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNDctXFx0XFx0Lm9wY29kZSA9IGNwdV90b19iZTE2KEdWRV9GTE9XX1JVTEVfQ0ZHX0RFTCksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzUwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNTE6XFx0cmV0dXJuIGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZShwcml2LCBcXHUwMDI2Zmxvd19ydWxlX2NtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM1Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYz0xMzU0PWludCBndmVfYWRtaW5xX3Jlc2V0X2Zsb3dfcnVsZXMoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNTUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNTY6XFx0c3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSBmbG93X3J1bGVfY21kID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNTctXFx0XFx0Lm9wY29kZSA9IGNwdV90b19iZTE2KEdWRV9GTE9XX1JVTEVfQ0ZHX1JFU0VUKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTM2MDpcXHRyZXR1cm4gZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlKHByaXYsIFxcdTAwMjZmbG93X3J1bGVfY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzYxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oPTUxND1zdHJ1Y3QgZ3ZlX2FkbWlucV9mbG93X3J1bGUge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmgtNTIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oOjUyMTpzdHJ1Y3QgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaC01MjItXFx0X19iZTE2IG9wY29kZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oLTUyNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaDo1Mjg6c3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSkgPT0gOTIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oLTUyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTY6NDUuODgyODUzOTk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NDc3OTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIGBndmVfYWRtaW5xYCBGbG93IFJ1bGUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgZmxvdyBydWxlcywgYW5kIEknbSB0cmFja2luZyBob3cgaXQncyB1c2VkLiBJdCdzIGNhbGxlZCBmcm9tIHRocmVlIGRpc3RpbmN0IHBsYWNlczogYGd2ZV9hZG1pbnFfYWRkX2Zsb3dfcnVsZWAsIGBndmVfYWRtaW5xX2RlbF9mbG93X3J1bGVgLCBhbmQgYGd2ZV9hZG1pbnFfcmVzZXRfZmxvd19ydWxlc2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGFkZGluZywgZGVsZXRpbmcsIGFuZCByZXNldHRpbmcgYXJlIHRoZSBmdW5kYW1lbnRhbCBvcGVyYXRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGBjb25maWd1cmVgIGZ1bmN0aW9uIGFuZCBlYWNoIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGxvb2sgaW50byB0aG9zZSBjYWxsZXJzIHRvIHNlZSB0aGUgc3BlY2lmaWMgY29udGV4dCBhbmQgcGFyYW1ldGVycyBwYXNzZWQgdG8gYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAuIEknbGwgd2FudCB0byB0cmFjZSBob3cgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgaXMgdHJpZ2dlcmVkLiBJJ2xsIG5vdGUgdGhlIGRpZmZlcmVuY2VzIGluIHRoZSBzZXR1cCBmb3IgYWRkLCBkZWxldGUgYW5kIHJlc2V0IG9wZXJhdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gYXMgYSB3aG9sZSBkZWFscyB3aXRoIGZsb3cgcnVsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTUsIk91dHB1dFRva2VucyI6NjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Njo1MC43NTc2MzUzMTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2OTEyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3ZlX2FkbWlucV9hZGRfZmxvd19ydWxlfGd2ZV9hZG1pbnFfZGVsX2Zsb3dfcnVsZXxndmVfYWRtaW5xX3Jlc2V0X2Zsb3dfcnVsZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM9MTMxNT1ndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTMzMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYzoxMzMzOmludCBndmVfYWRtaW5xX2FkZF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX2FkbWlucV9mbG93X3J1bGUgKnJ1bGUsIHUzMiBsb2MpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTMzNC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzQzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNDQ6aW50IGd2ZV9hZG1pbnFfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiBsb2MpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM0NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNTQ6aW50IGd2ZV9hZG1pbnFfcmVzZXRfZmxvd19ydWxlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaD02NDY9aW50IGd2ZV9hZG1pbnFfcmVwb3J0X2xpbmtfc3BlZWQoc3RydWN0IGd2ZV9wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaDo2NDc6aW50IGd2ZV9hZG1pbnFfYWRkX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfYWRtaW5xX2Zsb3dfcnVsZSAqcnVsZSwgdTMyIGxvYyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmg6NjQ4OmludCBndmVfYWRtaW5xX2RlbF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MzIgbG9jKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaDo2NDk6aW50IGd2ZV9hZG1pbnFfcmVzZXRfZmxvd19ydWxlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oLTY1MC1pbnQgZ3ZlX2FkbWlucV9xdWVyeV9mbG93X3J1bGVzKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTE2IHF1ZXJ5X29wY29kZSwgdTMyIHN0YXJ0aW5nX2xvYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYz0yNjM9aW50IGd2ZV9hZGRfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI3OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYzoyODA6XFx0ZXJyID0gZ3ZlX2FkbWlucV9hZGRfZmxvd19ydWxlKHByaXYsIHJ1bGUsIGZzcC1cXHUwMDNlbG9jYXRpb24pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI4MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jPTI5MD1pbnQgZ3ZlX2RlbF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmMtMjk2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jOjI5NzpcXHRyZXR1cm4gZ3ZlX2FkbWlucV9kZWxfZmxvd19ydWxlKHByaXYsIGZzcC1cXHUwMDNlbG9jYXRpb24pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI5OC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTg0NT1pbnQgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXQoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE4NDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjE4NTA6XFx0cmV0dXJuIGd2ZV9hZG1pbnFfcmVzZXRfZmxvd19ydWxlcyhwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTg1MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU2OjUwLjgwMzMzMzkzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTA1Mzg0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBuZXR3b3JrIGRyaXZlcnMgYW5kIGV0aHRvb2w6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgZXRodG9vbCBJbnRlcmZhY2UgZm9yIEZsb3cgUnVsZSBNYW5hZ2VtZW50KipcblxuUmlnaHQsIHNvIEknbSBkZWFsaW5nIHdpdGggZmxvdyBydWxlIG1hbmFnZW1lbnQgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGVudHJ5IHBvaW50cyBmb3IgYWRkaW5nIGFuZCBkZWxldGluZyB0aG9zZSBydWxlcyBhcmUgYGd2ZV9hZGRfZmxvd19ydWxlYCBhbmQgYGd2ZV9kZWxfZmxvd19ydWxlYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBhcHBhcmVudGx5IHRyaWdnZXJlZCB0aHJvdWdoIGV0aHRvb2wsIHdoaWNoIG1ha2VzIHNlbnNlLiBFdGh0b29sIGlzIHRoZSBzdGFuZGFyZCB1dGlsaXR5IGZvciBjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXMsIHNvIHRoYXQncyBhIGxvZ2ljYWwgY29ubmVjdGlvbi4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIGNyeXN0YWwgY2xlYXI6IEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGJvdGggYGd2ZV9hZGRfZmxvd19ydWxlYCBhbmQgYGd2ZV9kZWxfZmxvd19ydWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoZXkncmUgZG9pbmcsIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGhhcmR3YXJlLCBhbmQgaG93IHRoZXkgaGFuZGxlIHRoZSBpbnRyaWNhY2llcyBvZiBmbG93IHJ1bGUgaW5zdGFsbGF0aW9uIGFuZCByZW1vdmFsLiBJJ20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHRob3NlIGZ1bmN0aW9ucyBhcmUgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjUsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Njo1NS42OTM4NzQ1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzcxNDkwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndmVfYWRkX2Zsb3dfcnVsZXxndmVfZGVsX2Zsb3dfcnVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEzMTk9aW50IGd2ZV9nZXRfZmxvd19ydWxlX2lkcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQsIHUzMiAqcnVsZV9sb2NzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjEzMjA6aW50IGd2ZV9hZGRfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMzIxOmludCBndmVfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTMyMi1pbnQgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXQoc3RydWN0IGd2ZV9wcml2ICpwcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz04MTg9c3RhdGljIGludCBndmVfc2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtODI3LVxcdGNhc2UgRVRIVE9PTF9TUlhDTFNSTElOUzpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6ODI4OlxcdFxcdGVyciA9IGd2ZV9hZGRfZmxvd19ydWxlKHByaXYsIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTgyOS1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtODMwLVxcdGNhc2UgRVRIVE9PTF9TUlhDTFNSTERFTDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6ODMxOlxcdFxcdGVyciA9IGd2ZV9kZWxfZmxvd19ydWxlKHByaXYsIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTgzMi1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jPTIzMz1pbnQgZ3ZlX2dldF9mbG93X3J1bGVfaWRzKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCwgdTMyICpydWxlX2xvY3MpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYy0yNjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmM6MjYzOmludCBndmVfYWRkX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmMtMjY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYzoyOTA6aW50IGd2ZV9kZWxfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYy0yOTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Njo1NS43Mzc1OTQ3MzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM5ODMzNDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR1ZFIEZsb3cgUnVsZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEdWRSBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgZmxvdyBydWxlIG1hbmFnZW1lbnQuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgaW50ZXJhY3Rpb24gcG9pbnRzIGFyZSB0aGUgYGV0aHRvb2xgIGNvbW1hbmRzOiBgRVRIVE9PTF9TUlhDTFNSTElOU2AgYW5kIGBFVEhUT09MX1NSWENMU1JMREVMYC4gVGhhdCdzIHdoZXJlIEknbGwgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gZm9yIG5vdywgdGhhdCdzIHdoZXJlIHRoZSBydWxlcyBhcmUgZ29pbmcgdG8gYmUgaW5zZXJ0ZWQsIGFuZCBkZWxldGVkLCBmcm9tIHRoZSBrZXJuZWwuIE5vdywgbGV0J3MgdHJhY2UgdGhpcyBgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXRgIGZ1bmN0aW9uOyBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IG9uZSBjYWxsZWQsIGFuZCB0aGF0IGxvb2tzIGxpa2UgaXQgaXMgZ29pbmcgdG8gYmUgZnJvbSBgZ3ZlX21haW4uY2AuIExldCdzIGNvbmZpcm0gdGhhdCwgYW5kIGZvbGxvdyB3aGVyZSBpdCBpcyBjYWxsZWQgaW4gb3JkZXIgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIHJ1bGUgbWFuYWdlbWVudCB3b3JrZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU2NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU2OjU5LjY3NzQzMTEwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMDE4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3ZlX2Zsb3dfcnVsZXNfcmVzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaD0xMzIxPWludCBndmVfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTMyMjppbnQgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXQoc3RydWN0IGd2ZV9wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEzMjMtLyogUlNTIGNvbmZpZyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTcyNz1zdGF0aWMgdm9pZCBndmVfdGVhcmRvd25fZGV2aWNlX3Jlc291cmNlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtNzMyLVxcdGlmIChndmVfZ2V0X2RldmljZV9yZXNvdXJjZXNfb2socHJpdikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6NzMzOlxcdFxcdGVyciA9IGd2ZV9mbG93X3J1bGVzX3Jlc2V0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy03MzQtXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTE4MjU9aW50IGd2ZV9pbml0X3Jzc19jb25maWcoc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MTYgbnVtX3F1ZXVlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xODQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxODQ1OmludCBndmVfZmxvd19ydWxlc19yZXNldChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE4NDYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTIxNjk9c3RhdGljIGludCBndmVfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjE5NS1cXHRpZiAoKG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX05UVVBMRSkgXFx1MDAyNlxcdTAwMjYgIShmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfTlRVUExFKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyMTk2OlxcdFxcdGVyciA9IGd2ZV9mbG93X3J1bGVzX3Jlc2V0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMTk3LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU2OjU5LjcyMDU0MzI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNDg3MDAwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqR1ZFIERyaXZlciBSZXNldCBTdHJhdGVneSoqXG5cbk9rYXksIHNvIHRoZSBgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlYCBmdW5jdGlvbiBoYXMgYmVlbiB1cGRhdGVkLiBJbnRlcmVzdGluZy4gTG9va3MgbGlrZSB0aGV5J3ZlIHN3YXBwZWQgb3V0IGBndmVfcmVzZXQocHJpdiwgdHJ1ZSk7YCBmb3IgYGd2ZV9zY2hlZHVsZV9yZXNldChwcml2KTtgLiBUaGF0J3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBpcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgZHJpdmVyIHdlJ3JlIHRhbGtpbmcgYWJvdXQsIHNvIGl0J3MgcmVsZXZhbnQgdG8gR0NFIGVudmlyb25tZW50cy5cblxuQ2FuIHdlIGZ1enogdGhpcz8gTGV0IG1lIHRoaW5r4oCmIHN5emthbGxlciBydW5zIG9uIEdDRSwgc28gaXQgKmRvZXMqIGludGVyYWN0IHdpdGggdGhlIEdWRSBkcml2ZXIuIEFoYSEgU2luY2Ugc3l6a2FsbGVyIHJ1bnMgb24gR0NFLCBpdCB1c2VzIHRoZSBHVkUgZHJpdmVyLiBJIGJldCBpdCB1c2VzIGV0aHRvb2wgdG8gaW50ZXJhY3Qgd2l0aCBpdCwgdG9vLiBXZSBjb3VsZCBmdXp6IGV0aHRvb2wgY29tbWFuZHMgb24gdGhlIEdWRSBkcml2ZXIuIEJ1dCBob2xkIG9uLCBpZiB3ZSBmdXp6IGV0aHRvb2wgY29tbWFuZHMsIGEgYmFkIGNvbW1hbmQgbWlnaHQgdHJpZ2dlciBhIHJlc2V0LCB0YWtpbmcgZG93biB0aGUgbmV0d29yayBpbnRlcmZhY2UuIElmIHRoZSBuZXR3b3JrIGdvZXMgZG93biwgdGhlIFZNIGJlY29tZXMgdW5yZWFjaGFibGUuIFRoYXQncyBhIGd1YXJhbnRlZWQgdGVzdCBmYWlsdXJlIVxuXG5CdXQsIGRpZG4ndCBJIHNlZSB0aGF0IHN5emthbGxlciAqZG9lcyogZnV6eiBldGh0b29sIGNvbW1hbmRzPyBIbW0uIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlnIGZvciBHVkUsIHNlZSBpZiB0aGVyZSdzIGFueSBwcm90ZWN0aW9uIGFnYWluc3QgdGhhdCBzb3J0IG9mIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU3OjA0Ljg2OTI0NTQ2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxOTIyMjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBHVkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU3OjA0LjkxMTQ0NDk0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTk4MzU4NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERyaXZlciBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhhdCBHb29nbGUgZXRoZXJuZXQgZHJpdmVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYEtjb25maWdgIGZpbGUuIEknbSB0aGlua2luZyB0aGUgcmVsZXZhbnQgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCB2YWx1ZXMgd2lsbCBhbGwgYmUgZGVmaW5lZCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIHZhcmlvdXMgc2V0dGluZ3MgYW5kIHZhcmlhYmxlcyB0aGF0IGNvbnRyb2wgdGhlIGRyaXZlcidzIGJlaGF2aW9yIGFuZCBpZiBhbnl0aGluZyBuZWVkcyB0byBiZSB1cGRhdGVkLiBJdCdzIHRoZSBzdGFuZGFyZCBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhYmxlIGFzcGVjdHMgb2YgYW55IGtlcm5lbCBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1NzowNy45MDk4MDU4ODVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDQ2NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBHVkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZz0xNj1pZiBORVRfVkVORE9SX0dPT0dMRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnLTE3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnOjE4OmNvbmZpZyBHVkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiR29vZ2xlIFZpcnR1YWwgTklDIChnVk5JQykgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTc6MDcuOTUyMjU5OThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxMDI1MDk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDT05GSUdfR1ZFIERlcGVuZGVuY3kgVHJlZSoqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfR1ZFYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJ3JlIGxvb2tpbmcgYXQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IGl0cyBkZXBlbmRlbmNpZXMuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciBgQ09ORklHX0dWRWAgdG8gYmUgdmFsaWQuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpdHMgcG9zaXRpb24gaW4gdGhlIGRlcGVuZGVuY3kgdHJlZS4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMsIHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCBob3cgZGVlcGx5IGludGVncmF0ZWQgdGhpcyBvcHRpb24gaXMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1NzoxMS4xNjI1MTM0MzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjXFxuICAgMjpcXHQjIEdvb2dsZSBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgMzpcXHQjXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBORVRfVkVORE9SX0dPT0dMRVxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiR29vZ2xlIERldmljZXNcXFwiXFxuICAgNzpcXHRcXHRkZWZhdWx0IHlcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgZGV2aWNlIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTI6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxMzpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgR29vZ2xlIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWRcXG4gIDE0OlxcdFxcdCAgZm9yIHlvdXIgc3BlY2lmaWMgZGV2aWNlIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBORVRfVkVORE9SX0dPT0dMRVxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgR1ZFXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiR29vZ2xlIFZpcnR1YWwgTklDIChnVk5JQykgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gKFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgKFg4NiB8fCBDUFVfTElUVExFX0VORElBTikpXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAyMjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEdvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpXFxcIlxcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuICAyNzpcXHRcXHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3ZlLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRlbmRpZiAjTkVUX1ZFTkRPUl9HT09HTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTc6MTEuMTYyNTc4ODk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDg1NDc5NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpczogR1ZFIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBgQ09ORklHX05FVF9WRU5ET1JfR09PR0xFYCBhbmQgYENPTkZJR19HVkVgIGFyZSBlbmFibGVkLCB3aGljaCBnZXRzIG15IGF0dGVudGlvbi4gVGhlIEdWRSBkcml2ZXIsIHRoYXQncyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgZHJpdmVyLiBOb3csIEkgaGF2ZSB0byB0aGluaywgY2FuIHRoaXMgZXZlbiBiZSByZWFjaGVkIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQ/IE5vLCBJIHF1aWNrbHkgcmVhbGl6ZSB0aGF0IEdWRSBpcyBhIEdvb2dsZS1zcGVjaWZpYyB2aXJ0dWFsIE5JQy5cblxuQnV0IHdhaXQgYSBtaW51dGUsIHRoZSBwZW5ueSBkcm9wcyEgU3l6a2FsbGVyICpydW5zKiBvbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSksIHdoZXJlIEdWRSBpcyBhY3R1YWxseSB0aGUgKmhhcmR3YXJlKiBuZXR3b3JrIGludGVyZmFjZS4gQWggaGEhIFNvLCBldmVuIHRob3VnaCBpdCdzIHZpcnR1YWwsIGl0J3MgdGhlIHJlYWwgbmV0d29yayBpbnRlcmZhY2UgdXNlZCBieSB0aGUgZnV6emVyLiBGdXp6aW5nIGl0IG1pZ2h0IHBvdGVudGlhbGx5IGRpc3J1cHQgdGhlIG5ldHdvcmsgY29ubmVjdGl2aXR5LCBidXQgU3l6a2FsbGVyIGNhbiBzdGlsbCBmdXp6IGl0IHdpdGhvdXQgY29tcGxldGVseSBsb3NpbmcgY29ubmVjdGlvbiBiZWNhdXNlIGl0J3Mgb24gR0NFLlxuXG5Ob3cgbGV0J3MgZ28gYmFjayBhbmQgcmVyZWFkIHRoZSBwcm9tcHQgdG8gbWFrZSBzdXJlLiBPa2F5LCB0aGUgcHJvbXB0IHNheXMgcmV0dXJuIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgb25seSBpZiB0aGUgcGF0Y2ggY29udGFpbnM6XG4tIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGVkIGhhcmR3YXJlLlxuLSBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuXG5HaXZlbiB0aGUgcHJvbXB0LCBHVkUgaXMgYSB2aXJ0dWFsIE5JQyB1c2VkIGluIEdDRS4gU2luY2UgU3l6a2FsbGVyIHJ1bnMgb24gR0NFIChhbmQgUUVNVSBkb2VzICpub3QqIGVtdWxhdGUgaXQsIGFsdGhvdWdoIGl0IGRvZXMgcnVuIG9uIEdDRSksIEkgaGF2ZSB0byB0aGluayBhZ2Fpbi4gRG9lcyB0aGlzIHF1YWxpZnkgYXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZT8gTm8sIEdWRSBpcyBhIHZpcnR1YWwgTklDLCB0aGVyZWZvcmUsIG5vdCBjb25zaWRlcmVkIGEgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGNhbiBzdGlsbCBiZSBmdXp6YWJsZS5cblxuU28sIGluIEdDRSwgaXQgKmlzKiByZWFjaGFibGUuIEkgYnJpZWZseSBjb25zaWRlciB0aGUgUUVNVSBlbXVsYXRpb24gb2YgR1ZFIC0gbm8sIHRoZXJlIGlzbid0IGFueSwgYnV0IEdDRSBwcm92aWRlcyBpdCwgYW5kIHN5emthbGxlciBkb2VzIHJ1biBvbiBHQ0UuIEdWRSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdDRS5cblxuVGhlIHByb21wdCBzYXlzIHJldHVybiBcIldvcnRoRnV6emluZz1mYWxzZVwiIG9ubHkgaWYgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gR0NFIG9yIFFFTVUsIGJ1dCBzaW5jZSBpdCBpcyByZWFjaGFibGUgaW4gR0NFLCBpdCdzIGZpbmUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gbWVudGlvbmVkLCBgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlYC4gSXQncyBzdGF0aWMsIHNvIGl0IGlzbid0IGEgZGlyZWN0IGVudHJ5IHBvaW50LiBUaGUgbm9uLXN0YXRpYyBlbnRyeXBvaW50cyBhcmU6IGBndmVfYWRkX2Zsb3dfcnVsZWAsIGBndmVfZGVsX2Zsb3dfcnVsZWAsIGFuZCBgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXRgLiBJIHNob3VsZCB2ZXJpZnkgdGhlc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MjMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1NzoyMS4yNDgwNjEwNjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDU4Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd2ZV9hZGRfZmxvd19ydWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg9MTMxOT1pbnQgZ3ZlX2dldF9mbG93X3J1bGVfaWRzKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCwgdTMyICpydWxlX2xvY3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTMyMDppbnQgZ3ZlX2FkZF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEzMjEtaW50IGd2ZV9kZWxfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9ODE4PXN0YXRpYyBpbnQgZ3ZlX3NldF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTgyNy1cXHRjYXNlIEVUSFRPT0xfU1JYQ0xTUkxJTlM6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjgyODpcXHRcXHRlcnIgPSBndmVfYWRkX2Zsb3dfcnVsZShwcml2LCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy04MjktXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYz0yMzM9aW50IGd2ZV9nZXRfZmxvd19ydWxlX2lkcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQsIHUzMiAqcnVsZV9sb2NzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmMtMjYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jOjI2MzppbnQgZ3ZlX2FkZF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI2NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU3OjIxLjI5MDEzMjUxN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY5OTI2NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgRXRodG9vbCBDYWxsYmFjayoqXG5cbkFscmlnaHQsIHNvIEknbSBkZWFsaW5nIHdpdGggdGhlIGBndmVfc2V0X3J4bmZjYCBmdW5jdGlvbi4gVGhlIG5hbWUgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYW4gZXRodG9vbCBjYWxsYmFjayBmdW5jdGlvbiwgYW5kIHRoYXQncyBleGFjdGx5IHdoYXQgSSBzdXNwZWN0ZWQgZ2l2ZW4gdGhlIGNvbnRleHQuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMsIG9mIGNvdXJzZSwgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGRldmljZSdzIFJYIGZpbHRlcmluZyBjYXBhYmlsaXRpZXMuIFRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGlyZWN0bHkgaW50byBleGFtaW5pbmcgaXRzIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgZnVuY3Rpb24gKmFjdHVhbGx5KiBkb2VzLiBJJ20ga2VlbiB0byBzZWUgaG93IGl0IHNldHMgdGhlIFJlY2VpdmUgRmxvdyBDbGFzc2lmaWNhdGlvbiwgb3IgUlhORkMsIHBhcmFtZXRlcnMuIEl0IGlzIGltcGVyYXRpdmUgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNldCBvZiBmaWx0ZXJzLCBkZWZpbmVkIGhlcmUsIGFyZSBhcHBsaWVkLCBhbmQgd2hhdCBpbXBhY3QgdGhpcyBoYXMgb24gdGhlIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NDMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1NzoyNS4wNjAwNjE5MjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Mjg3MjQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndmVfc2V0X3J4bmZjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz03NzY9c3RhdGljIGludCBndmVfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtODE3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo4MTg6c3RhdGljIGludCBndmVfc2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTgxOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9OTgyPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBndmVfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtOTk2LVxcdC5nZXRfY2hhbm5lbHMgPSBndmVfZ2V0X2NoYW5uZWxzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo5OTc6XFx0LnNldF9yeG5mYyA9IGd2ZV9zZXRfcnhuZmMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTk5OC1cXHQuZ2V0X3J4bmZjID0gZ3ZlX2dldF9yeG5mYyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTc6MjUuMjUyOTQxMjAzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMTIxOTEyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgR1ZFIEV0aGVybmV0IERyaXZlciBGbG93IFJ1bGUgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgZ3ZlYCBFdGhlcm5ldCBkcml2ZXIgY29kZSwgYW5kIGZpcnN0IG9mZiwgSSdtIG5vdGluZyB0aGF0IGBndmVfc2V0X3J4bmZjYCBpcyBkZWZpbml0ZWx5IHRoZSBldGh0b29sIGNhbGxiYWNrIGZ1bmN0aW9uIGhlcmUuIEdvdCBpdC4gTm93LCB3aGVyZSBlbHNlIGlzIGl0IGJlaW5nIHVzZWQ/IEkgc2VlIHRoYXQgYGd2ZV9mbG93X3J1bGVzX3Jlc2V0YCBpcyBjYWxsZWQgZnJvbSBib3RoIGBndmVfc2V0X2ZlYXR1cmVzYCBhbmQgYGd2ZV90ZWFyZG93bl9kZXZpY2VfcmVzb3VyY2VzYC4gSW50ZXJlc3RpbmcsIHRoYXQncyBpbXBvcnRhbnQuIFRoaXMgc3VnZ2VzdHMgZmxvdyBydWxlIG1hbmFnZW1lbnQgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggZmVhdHVyZSBjb25maWd1cmF0aW9uIGFuZCByZXNvdXJjZSBjbGVhbnVwLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgZ3ZlX3NldF9mZWF0dXJlc2AgZmlyc3QgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgdGhlIHJlc2V0IGZ1bmN0aW9uLiBJJ2xsIHRha2UgYSBsb29rIGF0IGl0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMzQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1NzozMC4zNjUxMzUyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwMTc1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3ZlX3NldF9mZWF0dXJlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjE0Mz1pbnQgZ3ZlX3NldF9oc3BsaXRfY29uZmlnKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTggdGNwX2RhdGFfc3BsaXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjE2OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MjE2OTpzdGF0aWMgaW50IGd2ZV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjE3MC1cXHRcXHRcXHQgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjI0ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGd2ZV9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIyNTAtXFx0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSAgICAgICBndmVfdHhfdGltZW91dCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MjI1MTpcXHQubmRvX3NldF9mZWF0dXJlc1xcdD1cXHRndmVfc2V0X2ZlYXR1cmVzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMjUyLVxcdC5uZG9fYnBmXFx0XFx0PVxcdGd2ZV94ZHAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU3OjMwLjQwOTE1OTEwNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYxMDY2NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEdWRSBEZXZpY2UgRnVuY3Rpb25hbGl0eSoqXG5cblJpZ2h0LCBzbyBgZ3ZlX3NldF9mZWF0dXJlc2AuLi4gdGhhdCdzIHRoZSBkcml2ZXIncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYG5kb19zZXRfZmVhdHVyZXNgIG5ldHdvcmsgZGV2aWNlIG9wZXJhdGlvbiBjYWxsYmFjaywgaXNuJ3QgaXQ/IEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHJlbGF0aW9uc2hpcCBleHBsaWNpdGx5LiBJdCdzIGVhc3kgdG8gbG9zZSB0cmFjayB3aGVuIHlvdSdyZSBqdW1waW5nIGFyb3VuZCB0aGUgY29kZS5cblxuQW5kIHRoZW4gYGd2ZV90ZWFyZG93bl9kZXZpY2VfcmVzb3VyY2VzYC4uLiB0aGF0J3MgZGVmaW5pdGVseSBjYWxsZWQgdG8gY2xlYW4gdGhpbmdzIHVwLCBidXQgd2hlcmUgZXhhY3RseSBpcyBpdCBpbnZva2VkPyBJIHZhZ3VlbHkgcmVjYWxsIGl0IGJlaW5nIHBhcnQgb2YgdGhlIHJlbW92YWwgcHJvY2Vzcy4gTGV0IG1lIGp1c3QgY29uZmlybSBpZiBpdCdzIGNhbGxlZCBmcm9tIGBndmVfcmVtb3ZlYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFuZCBuYWlsIGRvd24gdGhlIHJlc291cmNlIGxpZmVjeWNsZS4gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhlIHJpZ2h0IGNsZWFudXAgYXQgdGhlIHJpZ2h0IHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjU2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTc6MzQuMTcwMjM5NzMyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzU5MTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndmVfdGVhcmRvd25fZGV2aWNlX3Jlc291cmNlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9NzI1PXN0YXRpYyB2b2lkIGd2ZV90cmlnZ2VyX3Jlc2V0KHN0cnVjdCBndmVfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTcyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6NzI3OnN0YXRpYyB2b2lkIGd2ZV90ZWFyZG93bl9kZXZpY2VfcmVzb3VyY2VzKHN0cnVjdCBndmVfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtNzI4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0yNTEzPXN0YXRpYyB2b2lkIGd2ZV90ZWFyZG93bl9wcml2X3Jlc291cmNlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTI1MTQte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyNTE1OlxcdGd2ZV90ZWFyZG93bl9kZXZpY2VfcmVzb3VyY2VzKHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yNTE2LVxcdGd2ZV9hZG1pbnFfZnJlZShcXHUwMDI2cHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBwcml2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTc6MzQuMjUzODM5MjU0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNjE3MzA1MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEcml2ZXIgUmVzZXQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBjaGFuZ2UgaXMgaW4gdGhlIGRyaXZlcidzIHRlYXJkb3duIHNlcXVlbmNlLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgbW92ZWQgZnJvbSBhIGRpcmVjdCBgZ3ZlX3Jlc2V0KHByaXYsIHRydWUpYCB0byBhIHNjaGVkdWxlZCByZXNldCB2aWEgYGd2ZV9zY2hlZHVsZV9yZXNldChwcml2KWAuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IHNjcmVhbXMgXCJwb3RlbnRpYWwgZnV6eiB0YXJnZXRcIiB0byBtZS5cblxuTGV0J3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy4gSW5pdGlhbGx5LCBJIHdhcyBmb2N1c2luZyBvbiBgZ3ZlX3NldF9yeG5mY2AgYW5kIGBndmVfc2V0X2ZlYXR1cmVzYCwgYnV0IGhhbmcgb24gYSBtaW51dGUuLi4gdGhvc2UgYXJlIGV0aHRvb2wgYW5kIG5ldGRldiBjYWxsYmFja3MgcmVzcGVjdGl2ZWx5LiBJbnRlcmVzdGluZywgYnV0IGxldCdzIGRpZyBkZWVwZXIuIEFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGRyaXZlciB0aGF0IHdlIGNhbiBnZXQgYWNjZXNzIHRvLiBBaCBoYSwgaGVyZSB3ZSBnbyEgYGd2ZV9hZGRfZmxvd19ydWxlYCwgYGd2ZV9kZWxfZmxvd19ydWxlYCwgYW5kIGBndmVfZmxvd19ydWxlc19yZXNldGAuIFRob3NlIGFyZSBhbGwgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIE5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiBhbnkgb2YgdGhlbSBhcmUgZXhwb3J0ZWQgb3IganVzdCBub24tc3RhdGljIGludGVybmFsbHkgd2l0aGluIHRoZSBkcml2ZXIuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgdnVsbmVyYWJpbGl0eSBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIzMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Nzo0MC40MTU1NzM0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0NTIwMzYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU3OjQwLjQ1OTAzNTU3NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzIzNDcyODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgU3ltYm9sIFZpc2liaWxpdHkgYW5kIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIHRoZXNlIHN5bWJvbHMgYXJlbid0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIG1lYW5pbmcgdGhleSdyZSBub3QgaW50ZW5kZWQgZm9yIGRpcmVjdCB1c2UgYnkgZXh0ZXJuYWwgbW9kdWxlcy4gSG93ZXZlciwgdGhleSAqYXJlKiBub24tc3RhdGljLCB3aGljaCBpbXBsaWVzIHRoZXkgaGF2ZSB0aGVpciBvd24gdW5pcXVlIHN5bWJvbHMgd2l0aGluIHRoZSBrZXJuZWwgaW1hZ2UgaXRzZWxmLiBUaGF0J3MgdGhlIGtleSBkaWZmZXJlbmNlLiBMZXQncyBmb2N1cyBvbiB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnM6IGBndmVfYWRkX2Zsb3dfcnVsZWAsIGBndmVfZGVsX2Zsb3dfcnVsZWAsIGBndmVfZmxvd19ydWxlc19yZXNldGAsIGBndmVfc2V0X3J4bmZjYCwgYW5kIGBndmVfc2V0X2ZlYXR1cmVzYC4gVGhlc2UgYXJlIHRoZSBvbmVzIG9mIGludGVyZXN0LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBORVRfVkVORE9SX0dPT0dMRWAgYW5kIGBHVkVgLiBIbW0sIGBHVkVgIGlzIGludGVyZXN0aW5nOyBJIGtub3cgaG93IEdvb2dsZeKAmXMgR1ZFIHByb2plY3RzIGFyZSBidWlsdC4gQWxyaWdodCwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgR1ZFYC4gQWgsIGhlcmUgd2UgZ286IGBQQ0lfTVNJYCBhbmQgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYC4gYFBDSV9NU0lgIGlzIHR5cGljYWxseSBlbmFibGVkLCB3aGljaCBpcyB0byBiZSBleHBlY3RlZCwgYnV0IGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgaXMgd29ydGggYSBjbG9zZXIgbG9vay4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBkZXRhaWxzIG9mIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcyOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Nzo0Ni4xODI1MTE0NThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTQ4OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3B0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZz04PWNvbmZpZyBQVFBfMTU4OF9DTE9DS1xcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjMwOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvcHRwL0tjb25maWctMzEtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTc6NDYuMjI4MDY1OTEzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDE1Mjk4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCdWlsZCBDb25maWd1cmF0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBidWlsZCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgc2V0dGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBhIHRyaXN0YXRlIG9wdGlvbiwgbGlrZWx5IHNlbGVjdGVkIGltcGxpY2l0bHkgYnkgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgbWF5YmUganVzdCBhbHdheXMgYXZhaWxhYmxlLiBUaGVuIEkgbm90aWNlZCB0aGUgZGVwZW5kZW5jeTogYGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBUaGF0J3MgaW1wbHlpbmcgdGhhdCBgR1ZFYCBjYW4gb25seSBiZSBidWlsdCBpZiBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgIGlzIG1ldC5cblxuSGFuZyBvbiBhIHNlY29uZCwgbGV0IG1lIGNoZWNrIHRoZSBhY3R1YWwgZGVmaW5pdGlvbiBvZiBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBMZXQgbWUgc2VlLi4uIG9rYXksIGhlcmUgaXQgaXM6XG5cbmBgYFxuY29uZmlnIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5cdHRyaXN0YXRlXG5cdGRlZmF1bHQgeSBpZiBQVFBfMTU4OF9DTE9DSz1uXG5cdGRlZmF1bHQgUFRQXzE1ODhfQ0xPQ0tcbmBgYFxuXG5SaWdodC4gU28sIHRoYXQncyBpbnRlcmVzdGluZy4gSXQncyB0cmlzdGF0ZSBhcyBleHBlY3RlZC4gQnV0IHRoZSBkZWZhdWx0cyBhcmUgd2hhdCBtYXR0ZXIgaGVyZS4gSXQncyBgZGVmYXVsdCB5IGlmIFBUUF8xNTg4X0NMT0NLPW5gIGFuZCBgZGVmYXVsdCBQVFBfMTU4OF9DTE9DS2AuIEVzc2VudGlhbGx5LCBpdCAqYWx3YXlzKiByZXNvbHZlcyB0byBiZWluZyBlaXRoZXIgc2VsZWN0ZWQgb3Igb3B0aW9uYWwsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYFBUUF8xNTg4X0NMT0NLYC4gVGhhdCBtZWFucyB0aGUgZGVwZW5kZW5jeSBzaG91bGQgYWx3YXlzIGJlIG1ldC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBgZ3ZlX3NjaGVkdWxlX3Jlc2V0YCwganVzdCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Nzo1Mi4yMjk1OTg3MzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjQ5NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd2ZV9zY2hlZHVsZV9yZXNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEyOTc9c3RydWN0IHBhZ2VfcG9vbCAqZ3ZlX3J4X2NyZWF0ZV9wYWdlX3Bvb2woc3RydWN0IGd2ZV9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMzAxLS8qIFJlc2V0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMzAyOnZvaWQgZ3ZlX3NjaGVkdWxlX3Jlc2V0KHN0cnVjdCBndmVfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMzAzLWludCBndmVfcmVzZXQoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBib29sIGF0dGVtcHRfdGVhcmRvd24pO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM9MTMxNT1ndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTMyNC1cXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIFxcXCJUaW1lb3V0IHRvIGNvbmZpZ3VyZSB0aGUgZmxvdyBydWxlLCB0cmlnZ2VyIHJlc2V0XFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTMyNTpcXHRcXHRndmVfc2NoZWR1bGVfcmVzZXQocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTMyNi1cXHR9IGVsc2UgaWYgKCFlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xMTY5PXZvaWQgZ3ZlX2ZyZWVfcXVldWVfcGFnZV9saXN0KHN0cnVjdCBndmVfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xMTk4LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxMTk5OnZvaWQgZ3ZlX3NjaGVkdWxlX3Jlc2V0KHN0cnVjdCBndmVfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTIwMC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjA4NT1zdGF0aWMgdm9pZCBndmVfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMDkzLVxcdGlmICghZ3ZlX3R4X3RpbWVvdXRfdHJ5X3Ffa2ljayhwcml2LCB0eHF1ZXVlKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MjA5NDpcXHRcXHRndmVfc2NoZWR1bGVfcmVzZXQocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIwOTUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jPTUzND1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmd2ZV9yeF9jb3B5X3RvX3Bvb2woc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNTUwLVxcdFxcdGlmICh1bmxpa2VseShyZWN5Y2xlIFxcdTAwM2MgMCkpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjU1MTpcXHRcXHRcXHRndmVfc2NoZWR1bGVfcmVzZXQocngtXFx1MDAzZWd2ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy01NTItXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jPTY0OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmd2ZV9yeF9za2Ioc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy02NzAtXFx0XFx0aWYgKHVubGlrZWx5KHJlY3ljbGUgXFx1MDAzYyAwKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6NjcxOlxcdFxcdFxcdGd2ZV9zY2hlZHVsZV9yZXNldChwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTY3Mi1cXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM9Nzk2PXN0YXRpYyB2b2lkIGd2ZV9yeChzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy04MzItXFx0XFx0bmFwaV9mcmVlX2ZyYWdzKG5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6ODMzOlxcdFxcdGd2ZV9zY2hlZHVsZV9yZXNldChyeC1cXHUwMDNlZ3ZlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTgzNC1cXHRcXHRnb3RvIGZpbmlzaF9mcmFnO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYz05NDc9c3RhdGljIGJvb2wgZ3ZlX3J4X3JlZmlsbF9idWZmZXJzKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtOTc3LVxcdFxcdFxcdFxcdGlmICghcngtXFx1MDAzZWRhdGEucmF3X2FkZHJlc3NpbmcpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYzo5Nzg6XFx0XFx0XFx0XFx0XFx0Z3ZlX3NjaGVkdWxlX3Jlc2V0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtOTc5LVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM9MTAwMD1zdGF0aWMgaW50IGd2ZV9jbGVhbl9yeF9kb25lKHN0cnVjdCBndmVfcnhfcmluZyAqcngsIGludCBidWRnZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTEwMzYtXFx0XFx0XFx0ICAgIEdWRV9TRVFOTyhkZXNjLVxcdTAwM2VmbGFnc19zZXEpLCByeC1cXHUwMDNlZGVzYy5zZXFubyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYzoxMDM3OlxcdFxcdGd2ZV9zY2hlZHVsZV9yZXNldChyeC1cXHUwMDNlZ3ZlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTEwMzgtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Nzo1Mi4yNzQyNTQ4ODJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY5NTE4MjYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgR1ZFIFJlc2V0IFNjaGVkdWxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBHVkUgZHJpdmVyLiBUaGUgY29yZSBvZiBpdCBpbnZvbHZlcyBzd2FwcGluZyBvdXQgdGhlIGRpcmVjdCBgZ3ZlX3Jlc2V0YCBmdW5jdGlvbiB3aXRoIGBndmVfc2NoZWR1bGVfcmVzZXRgIHdpdGhpbiB0aGUgYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgZnVuY3Rpb24uIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhpczogaXQncyBubyBsb25nZXIgYW4gaW1tZWRpYXRlIHJlc2V0IGJ1dCBhIHNjaGVkdWxlZCBvbmUuIFRoaXMgaXMgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbkxldCdzIGJyZWFrIHRoaXMgZG93biBmdXJ0aGVyIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIHNwb3RzLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgIHNpbmNlIHRoYXQgZnVuY3Rpb24gaXMgbm90IGV4cG9ydGVkLiBJJ3ZlIG5vdGVkIHRoYXQgYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgaXMgc3RhdGljLCBzbyBJIHNob3VsZCBiZSBsb29raW5nIGF0IHRoZSBjYWxsZXJzLiAgSSd2ZSBpZGVudGlmaWVkOlxuXG4qICAgYGd2ZV9hZGRfZmxvd19ydWxlYFxuKiAgIGBndmVfZGVsX2Zsb3dfcnVsZWBcbiogICBgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXRgXG4qICAgYGd2ZV9zZXRfcnhuZmNgXG4qICAgYGd2ZV9zZXRfZmVhdHVyZXNgXG5cbk15IHJlYXNvbmluZyBpcyB0aGF0IGZ1enppbmcgdGhlc2UgY2FsbHMsIGdpdmVuIHRoZXkgdHJpZ2dlciB0aGlzIHNjaGVkdWxpbmcgY2hhbmdlLCBhcmUgZ29vZCB0YXJnZXRzLiBBbHNvLCB0aGUgcGF0Y2ggZGVhbHMgd2l0aCB0aGUgR1ZFIGRyaXZlciwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9ucyB0aGF0IHdvdWxkIGVuYWJsZSB0aGUgR1ZFIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBORVRfVkVORE9SX0dPT0dMRWAgYW5kIGBHVkVgLlxuXG5UaGUgZmFjdCB0aGF0IHRoaXMgaXMgaW4gR1ZFIG1ha2VzIGl0IGVzcGVjaWFsbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBHVkUgaXMgc3BlY2lmaWNhbGx5IHVzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdDRS4gU3l6a2FsbGVyIGlzIGtub3duIHRvIHJ1biBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuICBJIGJlbGlldmUgZnV6emluZyBldGh0b29sIGNvbW1hbmRzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCBtaWdodCBtYW5pcHVsYXRlIGZsb3cgcnVsZXMsIGxpa2UgYEVUSFRPT0xfU1JYQ0xTUkxJTlNgIGFuZCBgRVRIVE9PTF9TUlhDTFNSTERFTGAsIGNvdWxkIGJlIGZydWl0ZnVsLiAgQWxzbywgZmVhdHVyZSBjaGFuZ2VzIHZpYSBuZXRkZXYgY29tbWFuZHMgY291bGQgYWxzbyBwcm92aWRlIGFuIGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI3NSwiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTc6NTkuOTY5NDM5NzU4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2NDEzMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfR09PR0xFXCIsXG4gICAgXCJHVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndmVfYWRkX2Zsb3dfcnVsZVwiLFxuICAgIFwiZ3ZlX2RlbF9mbG93X3J1bGVcIixcbiAgICBcImd2ZV9mbG93X3J1bGVzX3Jlc2V0XCIsXG4gICAgXCJndmVfc2V0X3J4bmZjXCIsXG4gICAgXCJndmVfc2V0X2ZlYXR1cmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgdG8gc2NoZWR1bGUgYSByZXNldCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBkaXJlY3QgcmVzZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciBydW5zLiBGdXp6aW5nIGV0aHRvb2wgY29tbWFuZHMgKGxpa2UgYEVUSFRPT0xfU1JYQ0xTUkxJTlNgIGFuZCBgRVRIVE9PTF9TUlhDTFNSTERFTGApIGFuZCBuZXRkZXYgZmVhdHVyZSBjaGFuZ2VzIGNhbiB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfR09PR0xFXCIsXG4gICAgXCJHVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndmVfYWRkX2Zsb3dfcnVsZVwiLFxuICAgIFwiZ3ZlX2RlbF9mbG93X3J1bGVcIixcbiAgICBcImd2ZV9mbG93X3J1bGVzX3Jlc2V0XCIsXG4gICAgXCJndmVfc2V0X3J4bmZjXCIsXG4gICAgXCJndmVfc2V0X2ZlYXR1cmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgdG8gc2NoZWR1bGUgYSByZXNldCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBkaXJlY3QgcmVzZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciBydW5zLiBGdXp6aW5nIGV0aHRvb2wgY29tbWFuZHMgKGxpa2UgYEVUSFRPT0xfU1JYQ0xTUkxJTlNgIGFuZCBgRVRIVE9PTF9TUlhDTFNSTERFTGApIGFuZCBuZXRkZXYgZmVhdHVyZSBjaGFuZ2VzIGNhbiB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkfz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 08:55:10 +0000 UTC FinishedAt: 2026-08-06 08:58:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_GOOGLE", "GVE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_GOOGLE", "GVE" ], "series_id": "b893eee9-99ca-4659-a1fb-c24306f08cbe" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "gve_add_flow_rule", "gve_del_flow_rule", "gve_flow_rules_reset", "gve_set_rxnfc", "gve_set_features" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfR09PR0xFJiMzNDssCiAgICAmIzM0O0dWRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d2ZV9hZGRfZmxvd19ydWxlJiMzNDssCiAgICAmIzM0O2d2ZV9kZWxfZmxvd19ydWxlJiMzNDssCiAgICAmIzM0O2d2ZV9mbG93X3J1bGVzX3Jlc2V0JiMzNDssCiAgICAmIzM0O2d2ZV9zZXRfcnhuZmMmIzM0OywKICAgICYjMzQ7Z3ZlX3NldF9mZWF0dXJlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlYCB0byBzY2hlZHVsZSBhIHJlc2V0IGluc3RlYWQgb2YgcGVyZm9ybWluZyBhIGRpcmVjdCByZXNldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoR1ZFKSBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugd2hlcmUgc3l6a2FsbGVyIHJ1bnMuIEZ1enppbmcgZXRodG9vbCBjb21tYW5kcyAobGlrZSBgRVRIVE9PTF9TUlhDTFNSTElOU2AgYW5kIGBFVEhUT09MX1NSWENMU1JMREVMYCkgYW5kIG5ldGRldiBmZWF0dXJlIGNoYW5nZXMgY2FuIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NWVjOTYwYzBiY2E0OTgxYmU2NDZhYTBmMmJmYmIwZGMzNDQ5YTY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAwODo1NjozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jXG5pbmRleCAwODU4N2JmNDBlZDRhLi4yMDM3YjE3NGU1NjFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jXG5AQCAtMTMyMiw3ICYjNDM7MTMyMiw3IEBAIGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsXG4gXG4gXHRpZiAoZXJyID09IC1FVElNRSkge1xuIFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwmIzM0O1RpbWVvdXQgdG8gY29uZmlndXJlIHRoZSBmbG93IHJ1bGUsIHRyaWdnZXIgcmVzZXRcJiMzNDspO1xuLVx0XHRndmVfcmVzZXQocHJpdiwgdHJ1ZSk7XG4mIzQzO1x0XHRndmVfc2NoZWR1bGVfcmVzZXQocHJpdik7XG4gXHR9IGVsc2UgaWYgKCFlcnIpIHtcbiBcdFx0cHJpdi1cdTAwM2VmbG93X3J1bGVzX2NhY2hlLnJ1bGVzX2NhY2hlX3N5bmNlZCA9IGZhbHNlO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX0dPT0dMRSYjMzQ7LAogICAgJiMzNDtHVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndmVfYWRkX2Zsb3dfcnVsZSYjMzQ7LAogICAgJiMzNDtndmVfZGVsX2Zsb3dfcnVsZSYjMzQ7LAogICAgJiMzNDtndmVfZmxvd19ydWxlc19yZXNldCYjMzQ7LAogICAgJiMzNDtndmVfc2V0X3J4bmZjJiMzNDssCiAgICAmIzM0O2d2ZV9zZXRfZmVhdHVyZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgdG8gc2NoZWR1bGUgYSByZXNldCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBkaXJlY3QgcmVzZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciBydW5zLiBGdXp6aW5nIGV0aHRvb2wgY29tbWFuZHMgKGxpa2UgYEVUSFRPT0xfU1JYQ0xTUkxJTlNgIGFuZCBgRVRIVE9PTF9TUlhDTFNSTERFTGApIGFuZCBuZXRkZXYgZmVhdHVyZSBjaGFuZ2VzIGNhbiB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTVlYzk2MGMwYmNhNDk4MWJlNjQ2YWEwZjJiZmJiMGRjMzQ0OWE2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMDg6NTY6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jCmluZGV4IDA4NTg3YmY0MGVkNGEuLjIwMzdiMTc0ZTU2MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jCkBAIC0xMzIyLDcgJiM0MzsxMzIyLDcgQEAgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwKIAogCWlmIChlcnIgPT0gLUVUSU1FKSB7CiAJCWRldl9lcnIoJmFtcDtwcml2LSZndDtwZGV2LSZndDtkZXYsICYjMzQ7VGltZW91dCB0byBjb25maWd1cmUgdGhlIGZsb3cgcnVsZSwgdHJpZ2dlciByZXNldCYjMzQ7KTsKLQkJZ3ZlX3Jlc2V0KHByaXYsIHRydWUpOwomIzQzOwkJZ3ZlX3NjaGVkdWxlX3Jlc2V0KHByaXYpOwogCX0gZWxzZSBpZiAoIWVycikgewogCQlwcml2LSZndDtmbG93X3J1bGVzX2NhY2hlLnJ1bGVzX2NhY2hlX3N5bmNlZCA9IGZhbHNlOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBHVkUgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hlZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGBndmVfcmVzZXQocHJpdiwgdHJ1ZSk7YCB3aXRoIGBndmVfc2NoZWR1bGVfcmVzZXQocHJpdik7YCB3aXRoaW4gYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCBzbyBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGRyaXZlciBpcyBldmVuIHJlYWNoYWJsZSBpbiB0aGUgZW52aXJvbm1lbnRzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgbmFtZWx5LCB2aXJ0dWFsaXplZCBvbmVzLgoKUmlnaHQsIEdWRS4uLiB0aGF0JiMzOTtzIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0LCB0aGUgbmV0d29yayBkcml2ZXIgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkuIEFoYSEgU3l6a2FsbGVyICpydW5zKiBvbiBHQ0UsIHNvIHRoaXMgZHJpdmVyIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4gVGhhdCYjMzk7cyBnb29kIG5ld3MuIFRoYXQgbWFrZXMgaXQgd29ydGggaW52ZXN0aWdhdGluZy4KCk5vdywgbGV0JiMzOTtzIGxvY2F0ZSBgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlYCBhbmQgc2VlIGlmIGl0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIFdhaXQgYSBtaW51dGUuIEdWRSBpcyBzcGVjaWZpY2FsbHkgZm9yIEdDRS4gQ2FuIEkgZXZlbiBmdXp6IHRoaXM/IFllcywgc3l6a2FsbGVyICpydW5zKiBvbiBHQ0UsIHNvIHRoZSBHVkUgKmlzKiB0aGUgcHJpbWFyeSBuZXR3b3JrIGludGVyZmFjZS4gSSBzaG91bGQgZ28gY2hlY2sgdGhlIGNvbmZpZyBmb3IgR1ZFIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jPTEzMTQ9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTMxNTpndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTMxNjpcdFx0XHQgICAgICAgc3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSAqZmxvd19ydWxlX2NtZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMTcte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMTktXHRcdFx0R1ZFX0FETUlOUV9DT05GSUdVUkVfRkxPV19SVUxFLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTMyMDpcdFx0XHRzaXplb2Yoc3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzIxLVx0XHRcdGZsb3dfcnVsZV9jbWQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jPTEzMzM9aW50IGd2ZV9hZG1pbnFfYWRkX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfYWRtaW5xX2Zsb3dfcnVsZSAqcnVsZSwgdTMyIGxvYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMzQte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTMzNTpcdHN0cnVjdCBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUgZmxvd19ydWxlX2NtZCA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMzYtXHRcdC5vcGNvZGUgPSBjcHVfdG9fYmUxNihHVkVfRkxPV19SVUxFX0NGR19BREQpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYzoxMzQxOlx0cmV0dXJuIGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZShwcml2LCBcdTAwMjZmbG93X3J1bGVfY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNDItfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jPTEzNDQ9aW50IGd2ZV9hZG1pbnFfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiBsb2MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzQ1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNDY6XHRzdHJ1Y3QgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlIGZsb3dfcnVsZV9jbWQgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzQ3LVx0XHQub3Bjb2RlID0gY3B1X3RvX2JlMTYoR1ZFX0ZMT1dfUlVMRV9DRkdfREVMKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzUwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTM1MTpcdHJldHVybiBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUocHJpdiwgXHUwMDI2Zmxvd19ydWxlX2NtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzUyLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYz0xMzU0PWludCBndmVfYWRtaW5xX3Jlc2V0X2Zsb3dfcnVsZXMoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM1NS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYzoxMzU2Olx0c3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSBmbG93X3J1bGVfY21kID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM1Ny1cdFx0Lm9wY29kZSA9IGNwdV90b19iZTE2KEdWRV9GTE9XX1JVTEVfQ0ZHX1JFU0VUKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzU5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTM2MDpcdHJldHVybiBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUocHJpdiwgXHUwMDI2Zmxvd19ydWxlX2NtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzYxLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaD01MTQ9c3RydWN0IGd2ZV9hZG1pbnFfZmxvd19ydWxlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaC01MjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaDo1MjE6c3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaC01MjItXHRfX2JlMTYgb3Bjb2RlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oLTUyNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oOjUyODpzdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlKSA9PSA5Mik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaC01MjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5NQoJCQkJCQkJb3V0cHV0OiA2NwoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIHRoZSBgZ3ZlX2FkbWlucWAgRmxvdyBSdWxlIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBtYW5hZ2luZyBmbG93IHJ1bGVzLCBhbmQgSSYjMzk7bSB0cmFja2luZyBob3cgaXQmIzM5O3MgdXNlZC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gdGhyZWUgZGlzdGluY3QgcGxhY2VzOiBgZ3ZlX2FkbWlucV9hZGRfZmxvd19ydWxlYCwgYGd2ZV9hZG1pbnFfZGVsX2Zsb3dfcnVsZWAsIGFuZCBgZ3ZlX2FkbWlucV9yZXNldF9mbG93X3J1bGVzYC4gVGhhdCBtYWtlcyBzZW5zZTsgYWRkaW5nLCBkZWxldGluZywgYW5kIHJlc2V0dGluZyBhcmUgdGhlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGBjb25maWd1cmVgIGZ1bmN0aW9uIGFuZCBlYWNoIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGludG8gdGhvc2UgY2FsbGVycyB0byBzZWUgdGhlIHNwZWNpZmljIGNvbnRleHQgYW5kIHBhcmFtZXRlcnMgcGFzc2VkIHRvIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgLiBJJiMzOTtsbCB3YW50IHRvIHRyYWNlIGhvdyB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBpcyB0cmlnZ2VyZWQuIEkmIzM5O2xsIG5vdGUgdGhlIGRpZmZlcmVuY2VzIGluIHRoZSBzZXR1cCBmb3IgYWRkLCBkZWxldGUgYW5kIHJlc2V0IG9wZXJhdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gYXMgYSB3aG9sZSBkZWFscyB3aXRoIGZsb3cgcnVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3ZlX2FkbWlucV9hZGRfZmxvd19ydWxlfGd2ZV9hZG1pbnFfZGVsX2Zsb3dfcnVsZXxndmVfYWRtaW5xX3Jlc2V0X2Zsb3dfcnVsZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYz0xMzE1PWd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTMzMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzMzM6aW50IGd2ZV9hZG1pbnFfYWRkX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfYWRtaW5xX2Zsb3dfcnVsZSAqcnVsZSwgdTMyIGxvYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMzQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYzoxMzQ0OmludCBndmVfYWRtaW5xX2RlbF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MzIgbG9jKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM0NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNTQ6aW50IGd2ZV9hZG1pbnFfcmVzZXRfZmxvd19ydWxlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzU1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaD02NDY9aW50IGd2ZV9hZG1pbnFfcmVwb3J0X2xpbmtfc3BlZWQoc3RydWN0IGd2ZV9wcml2ICpwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oOjY0NzppbnQgZ3ZlX2FkbWlucV9hZGRfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9hZG1pbnFfZmxvd19ydWxlICpydWxlLCB1MzIgbG9jKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oOjY0ODppbnQgZ3ZlX2FkbWlucV9kZWxfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTMyIGxvYyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaDo2NDk6aW50IGd2ZV9hZG1pbnFfcmVzZXRfZmxvd19ydWxlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmgtNjUwLWludCBndmVfYWRtaW5xX3F1ZXJ5X2Zsb3dfcnVsZXMoc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MTYgcXVlcnlfb3Bjb2RlLCB1MzIgc3RhcnRpbmdfbG9jKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYz0yNjM9aW50IGd2ZV9hZGRfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYy0yNzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYzoyODA6XHRlcnIgPSBndmVfYWRtaW5xX2FkZF9mbG93X3J1bGUocHJpdiwgcnVsZSwgZnNwLVx1MDAzZWxvY2F0aW9uKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI4MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYz0yOTA9aW50IGd2ZV9kZWxfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYy0yOTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYzoyOTc6XHRyZXR1cm4gZ3ZlX2FkbWlucV9kZWxfZmxvd19ydWxlKHByaXYsIGZzcC1cdTAwM2Vsb2NhdGlvbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYy0yOTgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xODQ1PWludCBndmVfZmxvd19ydWxlc19yZXNldChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE4NDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MTg1MDpcdHJldHVybiBndmVfYWRtaW5xX3Jlc2V0X2Zsb3dfcnVsZXMocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTg1MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2NQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBuZXR3b3JrIGRyaXZlcnMgYW5kIGV0aHRvb2w6CgoqKkludmVzdGlnYXRpbmcgdGhlIGV0aHRvb2wgSW50ZXJmYWNlIGZvciBGbG93IFJ1bGUgTWFuYWdlbWVudCoqCgpSaWdodCwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggZmxvdyBydWxlIG1hbmFnZW1lbnQgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGVudHJ5IHBvaW50cyBmb3IgYWRkaW5nIGFuZCBkZWxldGluZyB0aG9zZSBydWxlcyBhcmUgYGd2ZV9hZGRfZmxvd19ydWxlYCBhbmQgYGd2ZV9kZWxfZmxvd19ydWxlYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBhcHBhcmVudGx5IHRyaWdnZXJlZCB0aHJvdWdoIGV0aHRvb2wsIHdoaWNoIG1ha2VzIHNlbnNlLiBFdGh0b29sIGlzIHRoZSBzdGFuZGFyZCB1dGlsaXR5IGZvciBjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXMsIHNvIHRoYXQmIzM5O3MgYSBsb2dpY2FsIGNvbm5lY3Rpb24uIE5vdywgdGhlIG5leHQgc3RlcCBpcyBjcnlzdGFsIGNsZWFyOiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBib3RoIGBndmVfYWRkX2Zsb3dfcnVsZWAgYW5kIGBndmVfZGVsX2Zsb3dfcnVsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGV5JiMzOTtyZSBkb2luZywgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgaGFyZHdhcmUsIGFuZCBob3cgdGhleSBoYW5kbGUgdGhlIGludHJpY2FjaWVzIG9mIGZsb3cgcnVsZSBpbnN0YWxsYXRpb24gYW5kIHJlbW92YWwuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHRob3NlIGZ1bmN0aW9ucyBhcmUgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3ZlX2FkZF9mbG93X3J1bGV8Z3ZlX2RlbF9mbG93X3J1bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEzMTk9aW50IGd2ZV9nZXRfZmxvd19ydWxlX2lkcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQsIHUzMiAqcnVsZV9sb2NzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTMyMDppbnQgZ3ZlX2FkZF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTMyMTppbnQgZ3ZlX2RlbF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTMyMi1pbnQgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXQoc3RydWN0IGd2ZV9wcml2ICpwcml2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9ODE4PXN0YXRpYyBpbnQgZ3ZlX3NldF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy04MjctXHRjYXNlIEVUSFRPT0xfU1JYQ0xTUkxJTlM6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6ODI4Olx0XHRlcnIgPSBndmVfYWRkX2Zsb3dfcnVsZShwcml2LCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTgyOS1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtODMwLVx0Y2FzZSBFVEhUT09MX1NSWENMU1JMREVMOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjgzMTpcdFx0ZXJyID0gZ3ZlX2RlbF9mbG93X3J1bGUocHJpdiwgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy04MzItXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jPTIzMz1pbnQgZ3ZlX2dldF9mbG93X3J1bGVfaWRzKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCwgdTMyICpydWxlX2xvY3MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmMtMjYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmM6MjYzOmludCBndmVfYWRkX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYy0yNjQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI4OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jOjI5MDppbnQgZ3ZlX2RlbF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmMtMjkxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTY0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHVkUgRmxvdyBSdWxlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBHVkUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGZsb3cgcnVsZSBtYW5hZ2VtZW50LiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGludGVyYWN0aW9uIHBvaW50cyBhcmUgdGhlIGBldGh0b29sYCBjb21tYW5kczogYEVUSFRPT0xfU1JYQ0xTUkxJTlNgIGFuZCBgRVRIVE9PTF9TUlhDTFNSTERFTGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gZm9yIG5vdywgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcnVsZXMgYXJlIGdvaW5nIHRvIGJlIGluc2VydGVkLCBhbmQgZGVsZXRlZCwgZnJvbSB0aGUga2VybmVsLiBOb3csIGxldCYjMzk7cyB0cmFjZSB0aGlzIGBndmVfZmxvd19ydWxlc19yZXNldGAgZnVuY3Rpb247IEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgb25lIGNhbGxlZCwgYW5kIHRoYXQgbG9va3MgbGlrZSBpdCBpcyBnb2luZyB0byBiZSBmcm9tIGBndmVfbWFpbi5jYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCwgYW5kIGZvbGxvdyB3aGVyZSBpdCBpcyBjYWxsZWQgaW4gb3JkZXIgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIHJ1bGUgbWFuYWdlbWVudCB3b3JrZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3ZlX2Zsb3dfcnVsZXNfcmVzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEzMjE9aW50IGd2ZV9kZWxfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjEzMjI6aW50IGd2ZV9mbG93X3J1bGVzX3Jlc2V0KHN0cnVjdCBndmVfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEzMjMtLyogUlNTIGNvbmZpZyAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz03Mjc9c3RhdGljIHZvaWQgZ3ZlX3RlYXJkb3duX2RldmljZV9yZXNvdXJjZXMoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy03MzItXHRpZiAoZ3ZlX2dldF9kZXZpY2VfcmVzb3VyY2VzX29rKHByaXYpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6NzMzOlx0XHRlcnIgPSBndmVfZmxvd19ydWxlc19yZXNldChwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy03MzQtXHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTgyNT1pbnQgZ3ZlX2luaXRfcnNzX2NvbmZpZyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUxNiBudW1fcXVldWVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xODQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjE4NDU6aW50IGd2ZV9mbG93X3J1bGVzX3Jlc2V0KHN0cnVjdCBndmVfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xODQ2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjE2OT1zdGF0aWMgaW50IGd2ZV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjE5NS1cdGlmICgobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX05UVVBMRSkgXHUwMDI2XHUwMDI2ICEoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfTlRVUExFKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjIxOTY6XHRcdGVyciA9IGd2ZV9mbG93X3J1bGVzX3Jlc2V0KHByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIxOTctXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqR1ZFIERyaXZlciBSZXNldCBTdHJhdGVneSoqCgpPa2F5LCBzbyB0aGUgYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgZnVuY3Rpb24gaGFzIGJlZW4gdXBkYXRlZC4gSW50ZXJlc3RpbmcuIExvb2tzIGxpa2UgdGhleSYjMzk7dmUgc3dhcHBlZCBvdXQgYGd2ZV9yZXNldChwcml2LCB0cnVlKTtgIGZvciBgZ3ZlX3NjaGVkdWxlX3Jlc2V0KHByaXYpO2AuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBpcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgZHJpdmVyIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0LCBzbyBpdCYjMzk7cyByZWxldmFudCB0byBHQ0UgZW52aXJvbm1lbnRzLgoKQ2FuIHdlIGZ1enogdGhpcz8gTGV0IG1lIHRoaW5r4oCmIHN5emthbGxlciBydW5zIG9uIEdDRSwgc28gaXQgKmRvZXMqIGludGVyYWN0IHdpdGggdGhlIEdWRSBkcml2ZXIuIEFoYSEgU2luY2Ugc3l6a2FsbGVyIHJ1bnMgb24gR0NFLCBpdCB1c2VzIHRoZSBHVkUgZHJpdmVyLiBJIGJldCBpdCB1c2VzIGV0aHRvb2wgdG8gaW50ZXJhY3Qgd2l0aCBpdCwgdG9vLiBXZSBjb3VsZCBmdXp6IGV0aHRvb2wgY29tbWFuZHMgb24gdGhlIEdWRSBkcml2ZXIuIEJ1dCBob2xkIG9uLCBpZiB3ZSBmdXp6IGV0aHRvb2wgY29tbWFuZHMsIGEgYmFkIGNvbW1hbmQgbWlnaHQgdHJpZ2dlciBhIHJlc2V0LCB0YWtpbmcgZG93biB0aGUgbmV0d29yayBpbnRlcmZhY2UuIElmIHRoZSBuZXR3b3JrIGdvZXMgZG93biwgdGhlIFZNIGJlY29tZXMgdW5yZWFjaGFibGUuIFRoYXQmIzM5O3MgYSBndWFyYW50ZWVkIHRlc3QgZmFpbHVyZSEKCkJ1dCwgZGlkbiYjMzk7dCBJIHNlZSB0aGF0IHN5emthbGxlciAqZG9lcyogZnV6eiBldGh0b29sIGNvbW1hbmRzPyBIbW0uIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlnIGZvciBHVkUsIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgcHJvdGVjdGlvbiBhZ2FpbnN0IHRoYXQgc29ydCBvZiB0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgR1ZFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTQyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBEcml2ZXIgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhhdCBHb29nbGUgZXRoZXJuZXQgZHJpdmVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYEtjb25maWdgIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgdmFsdWVzIHdpbGwgYWxsIGJlIGRlZmluZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgdmFyaW91cyBzZXR0aW5ncyBhbmQgdmFyaWFibGVzIHRoYXQgY29udHJvbCB0aGUgZHJpdmVyJiMzOTtzIGJlaGF2aW9yIGFuZCBpZiBhbnl0aGluZyBuZWVkcyB0byBiZSB1cGRhdGVkLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYWJsZSBhc3BlY3RzIG9mIGFueSBrZXJuZWwgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgR1ZFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZz0xNj1pZiBORVRfVkVORE9SX0dPT0dMRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZzoxODpjb25maWcgR1ZFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O0dvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ09ORklHX0dWRSBEZXBlbmRlbmN5IFRyZWUqKgoKQWxyaWdodCwgc28gYENPTkZJR19HVkVgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O3JlIGxvb2tpbmcgYXQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IGl0cyBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgYENPTkZJR19HVkVgIHRvIGJlIHZhbGlkLiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaXRzIHBvc2l0aW9uIGluIHRoZSBkZXBlbmRlbmN5IHRyZWUuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLCBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgaG93IGRlZXBseSBpbnRlZ3JhdGVkIHRoaXMgb3B0aW9uIGlzIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCNcbiAgIDI6XHQjIEdvb2dsZSBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXG4gICAzOlx0I1xuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBORVRfVkVORE9SX0dPT0dMRVxuICAgNjpcdFx0Ym9vbCBcJiMzNDtHb29nbGUgRGV2aWNlc1wmIzM0O1xuICAgNzpcdFx0ZGVmYXVsdCB5XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGRldmljZSBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXG4gIDEwOlx0XG4gIDExOlx0XHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuICAxMjpcdFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXG4gIDEzOlx0XHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgR29vZ2xlIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWRcbiAgMTQ6XHRcdCAgZm9yIHlvdXIgc3BlY2lmaWMgZGV2aWNlIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxNTpcdFxuICAxNjpcdGlmIE5FVF9WRU5ET1JfR09PR0xFXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIEdWRVxuICAxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7R29vZ2xlIFZpcnR1YWwgTklDIChnVk5JQykgc3VwcG9ydFwmIzM0O1xuICAyMDpcdFx0ZGVwZW5kcyBvbiAoUENJX01TSSBcdTAwMjZcdTAwMjYgKFg4NiB8fCBDUFVfTElUVExFX0VORElBTikpXG4gIDIxOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDIyOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEdvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpXCYjMzQ7XG4gIDI1Olx0XG4gIDI2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gIDI3Olx0XHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3ZlLlxuICAyODpcdFxuICAyOTpcdGVuZGlmICNORVRfVkVORE9SX0dPT0dMRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODIzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogR1ZFIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBDT05GSUdfTkVUX1ZFTkRPUl9HT09HTEVgIGFuZCBgQ09ORklHX0dWRWAgYXJlIGVuYWJsZWQsIHdoaWNoIGdldHMgbXkgYXR0ZW50aW9uLiBUaGUgR1ZFIGRyaXZlciwgdGhhdCYjMzk7cyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgZHJpdmVyLiBOb3csIEkgaGF2ZSB0byB0aGluaywgY2FuIHRoaXMgZXZlbiBiZSByZWFjaGVkIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQ/IE5vLCBJIHF1aWNrbHkgcmVhbGl6ZSB0aGF0IEdWRSBpcyBhIEdvb2dsZS1zcGVjaWZpYyB2aXJ0dWFsIE5JQy4KCkJ1dCB3YWl0IGEgbWludXRlLCB0aGUgcGVubnkgZHJvcHMhIFN5emthbGxlciAqcnVucyogb24gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpLCB3aGVyZSBHVkUgaXMgYWN0dWFsbHkgdGhlICpoYXJkd2FyZSogbmV0d29yayBpbnRlcmZhY2UuIEFoIGhhISBTbywgZXZlbiB0aG91Z2ggaXQmIzM5O3MgdmlydHVhbCwgaXQmIzM5O3MgdGhlIHJlYWwgbmV0d29yayBpbnRlcmZhY2UgdXNlZCBieSB0aGUgZnV6emVyLiBGdXp6aW5nIGl0IG1pZ2h0IHBvdGVudGlhbGx5IGRpc3J1cHQgdGhlIG5ldHdvcmsgY29ubmVjdGl2aXR5LCBidXQgU3l6a2FsbGVyIGNhbiBzdGlsbCBmdXp6IGl0IHdpdGhvdXQgY29tcGxldGVseSBsb3NpbmcgY29ubmVjdGlvbiBiZWNhdXNlIGl0JiMzOTtzIG9uIEdDRS4KCk5vdyBsZXQmIzM5O3MgZ28gYmFjayBhbmQgcmVyZWFkIHRoZSBwcm9tcHQgdG8gbWFrZSBzdXJlLiBPa2F5LCB0aGUgcHJvbXB0IHNheXMgcmV0dXJuICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgb25seSBpZiB0aGUgcGF0Y2ggY29udGFpbnM6Ci0gY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUuCi0gY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KCkdpdmVuIHRoZSBwcm9tcHQsIEdWRSBpcyBhIHZpcnR1YWwgTklDIHVzZWQgaW4gR0NFLiBTaW5jZSBTeXprYWxsZXIgcnVucyBvbiBHQ0UgKGFuZCBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSBpdCwgYWx0aG91Z2ggaXQgZG9lcyBydW4gb24gR0NFKSwgSSBoYXZlIHRvIHRoaW5rIGFnYWluLiBEb2VzIHRoaXMgcXVhbGlmeSBhcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlPyBObywgR1ZFIGlzIGEgdmlydHVhbCBOSUMsIHRoZXJlZm9yZSwgbm90IGNvbnNpZGVyZWQgYSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgY2FuIHN0aWxsIGJlIGZ1enphYmxlLgoKU28sIGluIEdDRSwgaXQgKmlzKiByZWFjaGFibGUuIEkgYnJpZWZseSBjb25zaWRlciB0aGUgUUVNVSBlbXVsYXRpb24gb2YgR1ZFIC0gbm8sIHRoZXJlIGlzbiYjMzk7dCBhbnksIGJ1dCBHQ0UgcHJvdmlkZXMgaXQsIGFuZCBzeXprYWxsZXIgZG9lcyBydW4gb24gR0NFLiBHVkUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHQ0UuCgpUaGUgcHJvbXB0IHNheXMgcmV0dXJuICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgb25seSBpZiB0aGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBHQ0Ugb3IgUUVNVSwgYnV0IHNpbmNlIGl0IGlzIHJlYWNoYWJsZSBpbiBHQ0UsIGl0JiMzOTtzIGZpbmUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBtZW50aW9uZWQsIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgLiBJdCYjMzk7cyBzdGF0aWMsIHNvIGl0IGlzbiYjMzk7dCBhIGRpcmVjdCBlbnRyeSBwb2ludC4gVGhlIG5vbi1zdGF0aWMgZW50cnlwb2ludHMgYXJlOiBgZ3ZlX2FkZF9mbG93X3J1bGVgLCBgZ3ZlX2RlbF9mbG93X3J1bGVgLCBhbmQgYGd2ZV9mbG93X3J1bGVzX3Jlc2V0YC4gSSBzaG91bGQgdmVyaWZ5IHRoZXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndmVfYWRkX2Zsb3dfcnVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg9MTMxOT1pbnQgZ3ZlX2dldF9mbG93X3J1bGVfaWRzKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCwgdTMyICpydWxlX2xvY3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMzIwOmludCBndmVfYWRkX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMzIxLWludCBndmVfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz04MTg9c3RhdGljIGludCBndmVfc2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTgyNy1cdGNhc2UgRVRIVE9PTF9TUlhDTFNSTElOUzpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo4Mjg6XHRcdGVyciA9IGd2ZV9hZGRfZmxvd19ydWxlKHByaXYsIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtODI5LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYz0yMzM9aW50IGd2ZV9nZXRfZmxvd19ydWxlX2lkcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQsIHUzMiAqcnVsZV9sb2NzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI2Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jOjI2MzppbnQgZ3ZlX2FkZF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmMtMjY0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NDMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgRXRodG9vbCBDYWxsYmFjayoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgYGd2ZV9zZXRfcnhuZmNgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhbiBldGh0b29sIGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSBzdXNwZWN0ZWQgZ2l2ZW4gdGhlIGNvbnRleHQuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMsIG9mIGNvdXJzZSwgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGRldmljZSYjMzk7cyBSWCBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzLiBUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gZXhhbWluaW5nIGl0cyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIGZ1bmN0aW9uICphY3R1YWxseSogZG9lcy4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgaXQgc2V0cyB0aGUgUmVjZWl2ZSBGbG93IENsYXNzaWZpY2F0aW9uLCBvciBSWE5GQywgcGFyYW1ldGVycy4gSXQgaXMgaW1wZXJhdGl2ZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2V0IG9mIGZpbHRlcnMsIGRlZmluZWQgaGVyZSwgYXJlIGFwcGxpZWQsIGFuZCB3aGF0IGltcGFjdCB0aGlzIGhhcyBvbiB0aGUgZGF0YSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndmVfc2V0X3J4bmZjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jPTc3Nj1zdGF0aWMgaW50IGd2ZV9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtODE3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjgxODpzdGF0aWMgaW50IGd2ZV9zZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy04MTkte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz05ODI9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGd2ZV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtOTk2LVx0LmdldF9jaGFubmVscyA9IGd2ZV9nZXRfY2hhbm5lbHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6OTk3Olx0LnNldF9yeG5mYyA9IGd2ZV9zZXRfcnhuZmMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtOTk4LVx0LmdldF9yeG5mYyA9IGd2ZV9nZXRfcnhuZmMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDM0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBHVkUgRXRoZXJuZXQgRHJpdmVyIEZsb3cgUnVsZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGd2ZWAgRXRoZXJuZXQgZHJpdmVyIGNvZGUsIGFuZCBmaXJzdCBvZmYsIEkmIzM5O20gbm90aW5nIHRoYXQgYGd2ZV9zZXRfcnhuZmNgIGlzIGRlZmluaXRlbHkgdGhlIGV0aHRvb2wgY2FsbGJhY2sgZnVuY3Rpb24gaGVyZS4gR290IGl0LiBOb3csIHdoZXJlIGVsc2UgaXMgaXQgYmVpbmcgdXNlZD8gSSBzZWUgdGhhdCBgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXRgIGlzIGNhbGxlZCBmcm9tIGJvdGggYGd2ZV9zZXRfZmVhdHVyZXNgIGFuZCBgZ3ZlX3RlYXJkb3duX2RldmljZV9yZXNvdXJjZXNgLiBJbnRlcmVzdGluZywgdGhhdCYjMzk7cyBpbXBvcnRhbnQuIFRoaXMgc3VnZ2VzdHMgZmxvdyBydWxlIG1hbmFnZW1lbnQgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggZmVhdHVyZSBjb25maWd1cmF0aW9uIGFuZCByZXNvdXJjZSBjbGVhbnVwLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgZ3ZlX3NldF9mZWF0dXJlc2AgZmlyc3QgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgdGhlIHJlc2V0IGZ1bmN0aW9uLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBpdCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d2ZV9zZXRfZmVhdHVyZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjE0Mz1pbnQgZ3ZlX3NldF9oc3BsaXRfY29uZmlnKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTggdGNwX2RhdGFfc3BsaXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIxNjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MjE2OTpzdGF0aWMgaW50IGd2ZV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMTcwLVx0XHRcdCAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjI0ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGd2ZV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMjUwLVx0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSAgICAgICBndmVfdHhfdGltZW91dCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyMjUxOlx0Lm5kb19zZXRfZmVhdHVyZXNcdD1cdGd2ZV9zZXRfZmVhdHVyZXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjI1Mi1cdC5uZG9fYnBmXHRcdD1cdGd2ZV94ZHAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjU2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBHVkUgRGV2aWNlIEZ1bmN0aW9uYWxpdHkqKgoKUmlnaHQsIHNvIGBndmVfc2V0X2ZlYXR1cmVzYC4uLiB0aGF0JiMzOTtzIHRoZSBkcml2ZXImIzM5O3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIGBuZG9fc2V0X2ZlYXR1cmVzYCBuZXR3b3JrIGRldmljZSBvcGVyYXRpb24gY2FsbGJhY2ssIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgcmVsYXRpb25zaGlwIGV4cGxpY2l0bHkuIEl0JiMzOTtzIGVhc3kgdG8gbG9zZSB0cmFjayB3aGVuIHlvdSYjMzk7cmUganVtcGluZyBhcm91bmQgdGhlIGNvZGUuCgpBbmQgdGhlbiBgZ3ZlX3RlYXJkb3duX2RldmljZV9yZXNvdXJjZXNgLi4uIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBjYWxsZWQgdG8gY2xlYW4gdGhpbmdzIHVwLCBidXQgd2hlcmUgZXhhY3RseSBpcyBpdCBpbnZva2VkPyBJIHZhZ3VlbHkgcmVjYWxsIGl0IGJlaW5nIHBhcnQgb2YgdGhlIHJlbW92YWwgcHJvY2Vzcy4gTGV0IG1lIGp1c3QgY29uZmlybSBpZiBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgZ3ZlX3JlbW92ZWAgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBhbmQgbmFpbCBkb3duIHRoZSByZXNvdXJjZSBsaWZlY3ljbGUuIEl0JiMzOTtzIGFsbCBhYm91dCBlbnN1cmluZyB0aGUgcmlnaHQgY2xlYW51cCBhdCB0aGUgcmlnaHQgdGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3ZlX3RlYXJkb3duX2RldmljZV9yZXNvdXJjZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9NzI1PXN0YXRpYyB2b2lkIGd2ZV90cmlnZ2VyX3Jlc2V0KHN0cnVjdCBndmVfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtNzI2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjcyNzpzdGF0aWMgdm9pZCBndmVfdGVhcmRvd25fZGV2aWNlX3Jlc291cmNlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtNzI4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjUxMz1zdGF0aWMgdm9pZCBndmVfdGVhcmRvd25fcHJpdl9yZXNvdXJjZXMoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTI1MTQte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjI1MTU6XHRndmVfdGVhcmRvd25fZGV2aWNlX3Jlc291cmNlcyhwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yNTE2LVx0Z3ZlX2FkbWlucV9mcmVlKFx1MDAyNnByaXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIHByaXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERyaXZlciBSZXNldCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgY2hhbmdlIGlzIGluIHRoZSBkcml2ZXImIzM5O3MgdGVhcmRvd24gc2VxdWVuY2UuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgbW92ZWQgZnJvbSBhIGRpcmVjdCBgZ3ZlX3Jlc2V0KHByaXYsIHRydWUpYCB0byBhIHNjaGVkdWxlZCByZXNldCB2aWEgYGd2ZV9zY2hlZHVsZV9yZXNldChwcml2KWAuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIGZ1enogdGFyZ2V0JiMzNDsgdG8gbWUuCgpMZXQmIzM5O3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy4gSW5pdGlhbGx5LCBJIHdhcyBmb2N1c2luZyBvbiBgZ3ZlX3NldF9yeG5mY2AgYW5kIGBndmVfc2V0X2ZlYXR1cmVzYCwgYnV0IGhhbmcgb24gYSBtaW51dGUuLi4gdGhvc2UgYXJlIGV0aHRvb2wgYW5kIG5ldGRldiBjYWxsYmFja3MgcmVzcGVjdGl2ZWx5LiBJbnRlcmVzdGluZywgYnV0IGxldCYjMzk7cyBkaWcgZGVlcGVyLiBBbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBkcml2ZXIgdGhhdCB3ZSBjYW4gZ2V0IGFjY2VzcyB0by4gQWggaGEsIGhlcmUgd2UgZ28hIGBndmVfYWRkX2Zsb3dfcnVsZWAsIGBndmVfZGVsX2Zsb3dfcnVsZWAsIGFuZCBgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXRgLiBUaG9zZSBhcmUgYWxsIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBOb3cgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZW0gYXJlIGV4cG9ydGVkIG9yIGp1c3Qgbm9uLXN0YXRpYyBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgZHJpdmVyLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHZ1bG5lcmFiaWxpdHkgbGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIFN5bWJvbCBWaXNpYmlsaXR5IGFuZCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlc2Ugc3ltYm9scyBhcmVuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIG1lYW5pbmcgdGhleSYjMzk7cmUgbm90IGludGVuZGVkIGZvciBkaXJlY3QgdXNlIGJ5IGV4dGVybmFsIG1vZHVsZXMuIEhvd2V2ZXIsIHRoZXkgKmFyZSogbm9uLXN0YXRpYywgd2hpY2ggaW1wbGllcyB0aGV5IGhhdmUgdGhlaXIgb3duIHVuaXF1ZSBzeW1ib2xzIHdpdGhpbiB0aGUga2VybmVsIGltYWdlIGl0c2VsZi4gVGhhdCYjMzk7cyB0aGUga2V5IGRpZmZlcmVuY2UuIExldCYjMzk7cyBmb2N1cyBvbiB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnM6IGBndmVfYWRkX2Zsb3dfcnVsZWAsIGBndmVfZGVsX2Zsb3dfcnVsZWAsIGBndmVfZmxvd19ydWxlc19yZXNldGAsIGBndmVfc2V0X3J4bmZjYCwgYW5kIGBndmVfc2V0X2ZlYXR1cmVzYC4gVGhlc2UgYXJlIHRoZSBvbmVzIG9mIGludGVyZXN0LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9ucy4gSSBzZWUgYE5FVF9WRU5ET1JfR09PR0xFYCBhbmQgYEdWRWAuIEhtbSwgYEdWRWAgaXMgaW50ZXJlc3Rpbmc7IEkga25vdyBob3cgR29vZ2xl4oCZcyBHVkUgcHJvamVjdHMgYXJlIGJ1aWx0LiBBbHJpZ2h0LCBsZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBHVkVgLiBBaCwgaGVyZSB3ZSBnbzogYFBDSV9NU0lgIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBgUENJX01TSWAgaXMgdHlwaWNhbGx5IGVuYWJsZWQsIHdoaWNoIGlzIHRvIGJlIGV4cGVjdGVkLCBidXQgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBpcyB3b3J0aCBhIGNsb3NlciBsb29rLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoZSBkZXRhaWxzIG9mIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZz04PWNvbmZpZyBQVFBfMTU4OF9DTE9DS1xuLS1cbmRyaXZlcnMvcHRwL0tjb25maWctMjktXG5kcml2ZXJzL3B0cC9LY29uZmlnOjMwOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9wdHAvS2NvbmZpZy0zMS1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzE3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBidWlsZCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgc2V0dGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgYSB0cmlzdGF0ZSBvcHRpb24sIGxpa2VseSBzZWxlY3RlZCBpbXBsaWNpdGx5IGJ5IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIG1heWJlIGp1c3QgYWx3YXlzIGF2YWlsYWJsZS4gVGhlbiBJIG5vdGljZWQgdGhlIGRlcGVuZGVuY3k6IGBkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYC4gVGhhdCYjMzk7cyBpbXBseWluZyB0aGF0IGBHVkVgIGNhbiBvbmx5IGJlIGJ1aWx0IGlmIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgaXMgbWV0LgoKSGFuZyBvbiBhIHNlY29uZCwgbGV0IG1lIGNoZWNrIHRoZSBhY3R1YWwgZGVmaW5pdGlvbiBvZiBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBMZXQgbWUgc2VlLi4uIG9rYXksIGhlcmUgaXQgaXM6CgpgYGAKY29uZmlnIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMCgl0cmlzdGF0ZQoJZGVmYXVsdCB5IGlmIFBUUF8xNTg4X0NMT0NLPW4KCWRlZmF1bHQgUFRQXzE1ODhfQ0xPQ0sKYGBgCgpSaWdodC4gU28sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIHRyaXN0YXRlIGFzIGV4cGVjdGVkLiBCdXQgdGhlIGRlZmF1bHRzIGFyZSB3aGF0IG1hdHRlciBoZXJlLiBJdCYjMzk7cyBgZGVmYXVsdCB5IGlmIFBUUF8xNTg4X0NMT0NLPW5gIGFuZCBgZGVmYXVsdCBQVFBfMTU4OF9DTE9DS2AuIEVzc2VudGlhbGx5LCBpdCAqYWx3YXlzKiByZXNvbHZlcyB0byBiZWluZyBlaXRoZXIgc2VsZWN0ZWQgb3Igb3B0aW9uYWwsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYFBUUF8xNTg4X0NMT0NLYC4gVGhhdCBtZWFucyB0aGUgZGVwZW5kZW5jeSBzaG91bGQgYWx3YXlzIGJlIG1ldC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBgZ3ZlX3NjaGVkdWxlX3Jlc2V0YCwganVzdCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndmVfc2NoZWR1bGVfcmVzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEyOTc9c3RydWN0IHBhZ2VfcG9vbCAqZ3ZlX3J4X2NyZWF0ZV9wYWdlX3Bvb2woc3RydWN0IGd2ZV9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTMwMS0vKiBSZXNldCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMzAyOnZvaWQgZ3ZlX3NjaGVkdWxlX3Jlc2V0KHN0cnVjdCBndmVfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEzMDMtaW50IGd2ZV9yZXNldChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIGJvb2wgYXR0ZW1wdF90ZWFyZG93bik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM9MTMxNT1ndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMjQtXHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7VGltZW91dCB0byBjb25maWd1cmUgdGhlIGZsb3cgcnVsZSwgdHJpZ2dlciByZXNldFwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYzoxMzI1Olx0XHRndmVfc2NoZWR1bGVfcmVzZXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzI2LVx0fSBlbHNlIGlmICghZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTExNjk9dm9pZCBndmVfZnJlZV9xdWV1ZV9wYWdlX2xpc3Qoc3RydWN0IGd2ZV9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xMTk4LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjExOTk6dm9pZCBndmVfc2NoZWR1bGVfcmVzZXQoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTEyMDAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0yMDg1PXN0YXRpYyB2b2lkIGd2ZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMDkzLVx0aWYgKCFndmVfdHhfdGltZW91dF90cnlfcV9raWNrKHByaXYsIHR4cXVldWUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjIwOTQ6XHRcdGd2ZV9zY2hlZHVsZV9yZXNldChwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMDk1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM9NTM0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZ3ZlX3J4X2NvcHlfdG9fcG9vbChzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNTUwLVx0XHRpZiAodW5saWtlbHkocmVjeWNsZSBcdTAwM2MgMCkpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6NTUxOlx0XHRcdGd2ZV9zY2hlZHVsZV9yZXNldChyeC1cdTAwM2VndmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy01NTItXHRcdFx0cmV0dXJuIE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYz02NDg9c3RhdGljIHN0cnVjdCBza19idWZmICpndmVfcnhfc2tiKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTY3MC1cdFx0aWYgKHVubGlrZWx5KHJlY3ljbGUgXHUwMDNjIDApKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjY3MTpcdFx0XHRndmVfc2NoZWR1bGVfcmVzZXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTY3Mi1cdFx0XHRyZXR1cm4gTlVMTDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jPTc5Nj1zdGF0aWMgdm9pZCBndmVfcngoc3RydWN0IGd2ZV9yeF9yaW5nICpyeCwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTgzMi1cdFx0bmFwaV9mcmVlX2ZyYWdzKG5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYzo4MzM6XHRcdGd2ZV9zY2hlZHVsZV9yZXNldChyeC1cdTAwM2VndmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy04MzQtXHRcdGdvdG8gZmluaXNoX2ZyYWc7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYz05NDc9c3RhdGljIGJvb2wgZ3ZlX3J4X3JlZmlsbF9idWZmZXJzKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTk3Ny1cdFx0XHRcdGlmICghcngtXHUwMDNlZGF0YS5yYXdfYWRkcmVzc2luZylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6OTc4Olx0XHRcdFx0XHRndmVfc2NoZWR1bGVfcmVzZXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTk3OS1cdFx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jPTEwMDA9c3RhdGljIGludCBndmVfY2xlYW5fcnhfZG9uZShzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LCBpbnQgYnVkZ2V0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtMTAzNi1cdFx0XHQgICAgR1ZFX1NFUU5PKGRlc2MtXHUwMDNlZmxhZ3Nfc2VxKSwgcngtXHUwMDNlZGVzYy5zZXFubyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjEwMzc6XHRcdGd2ZV9zY2hlZHVsZV9yZXNldChyeC1cdTAwM2VndmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy0xMDM4LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI3NQoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiAzMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEdWRSBSZXNldCBTY2hlZHVsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEdWRSBkcml2ZXIuIFRoZSBjb3JlIG9mIGl0IGludm9sdmVzIHN3YXBwaW5nIG91dCB0aGUgZGlyZWN0IGBndmVfcmVzZXRgIGZ1bmN0aW9uIHdpdGggYGd2ZV9zY2hlZHVsZV9yZXNldGAgd2l0aGluIHRoZSBgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlYCBmdW5jdGlvbi4gVGhlIGtleSB0YWtlYXdheSBpcyB0aGlzOiBpdCYjMzk7cyBubyBsb25nZXIgYW4gaW1tZWRpYXRlIHJlc2V0IGJ1dCBhIHNjaGVkdWxlZCBvbmUuIFRoaXMgaXMgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZ1cnRoZXIgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3Rpbmcgc3BvdHMuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgc2luY2UgdGhhdCBmdW5jdGlvbiBpcyBub3QgZXhwb3J0ZWQuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgaXMgc3RhdGljLCBzbyBJIHNob3VsZCBiZSBsb29raW5nIGF0IHRoZSBjYWxsZXJzLiAgSSYjMzk7dmUgaWRlbnRpZmllZDoKCiogICBgZ3ZlX2FkZF9mbG93X3J1bGVgCiogICBgZ3ZlX2RlbF9mbG93X3J1bGVgCiogICBgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXRgCiogICBgZ3ZlX3NldF9yeG5mY2AKKiAgIGBndmVfc2V0X2ZlYXR1cmVzYAoKTXkgcmVhc29uaW5nIGlzIHRoYXQgZnV6emluZyB0aGVzZSBjYWxscywgZ2l2ZW4gdGhleSB0cmlnZ2VyIHRoaXMgc2NoZWR1bGluZyBjaGFuZ2UsIGFyZSBnb29kIHRhcmdldHMuIEFsc28sIHRoZSBwYXRjaCBkZWFscyB3aXRoIHRoZSBHVkUgZHJpdmVyLCBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgd291bGQgZW5hYmxlIHRoZSBHVkUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYE5FVF9WRU5ET1JfR09PR0xFYCBhbmQgYEdWRWAuCgpUaGUgZmFjdCB0aGF0IHRoaXMgaXMgaW4gR1ZFIG1ha2VzIGl0IGVzcGVjaWFsbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBHVkUgaXMgc3BlY2lmaWNhbGx5IHVzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdDRS4gU3l6a2FsbGVyIGlzIGtub3duIHRvIHJ1biBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuICBJIGJlbGlldmUgZnV6emluZyBldGh0b29sIGNvbW1hbmRzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCBtaWdodCBtYW5pcHVsYXRlIGZsb3cgcnVsZXMsIGxpa2UgYEVUSFRPT0xfU1JYQ0xTUkxJTlNgIGFuZCBgRVRIVE9PTF9TUlhDTFNSTERFTGAsIGNvdWxkIGJlIGZydWl0ZnVsLiAgQWxzbywgZmVhdHVyZSBjaGFuZ2VzIHZpYSBuZXRkZXYgY29tbWFuZHMgY291bGQgYWxzbyBwcm92aWRlIGFuIGVudHJ5IHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9HT09HTEUmIzM0OywKICAgICYjMzQ7R1ZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3ZlX2FkZF9mbG93X3J1bGUmIzM0OywKICAgICYjMzQ7Z3ZlX2RlbF9mbG93X3J1bGUmIzM0OywKICAgICYjMzQ7Z3ZlX2Zsb3dfcnVsZXNfcmVzZXQmIzM0OywKICAgICYjMzQ7Z3ZlX3NldF9yeG5mYyYjMzQ7LAogICAgJiMzNDtndmVfc2V0X2ZlYXR1cmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgIHRvIHNjaGVkdWxlIGEgcmVzZXQgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIGEgZGlyZWN0IHJlc2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSB3aGVyZSBzeXprYWxsZXIgcnVucy4gRnV6emluZyBldGh0b29sIGNvbW1hbmRzIChsaWtlIGBFVEhUT09MX1NSWENMU1JMSU5TYCBhbmQgYEVUSFRPT0xfU1JYQ0xTUkxERUxgKSBhbmQgbmV0ZGV2IGZlYXR1cmUgY2hhbmdlcyBjYW4gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9HT09HTEUmIzM0OywKICAgICYjMzQ7R1ZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3ZlX2FkZF9mbG93X3J1bGUmIzM0OywKICAgICYjMzQ7Z3ZlX2RlbF9mbG93X3J1bGUmIzM0OywKICAgICYjMzQ7Z3ZlX2Zsb3dfcnVsZXNfcmVzZXQmIzM0OywKICAgICYjMzQ7Z3ZlX3NldF9yeG5mYyYjMzQ7LAogICAgJiMzNDtndmVfc2V0X2ZlYXR1cmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgIHRvIHNjaGVkdWxlIGEgcmVzZXQgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIGEgZGlyZWN0IHJlc2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSB3aGVyZSBzeXprYWxsZXIgcnVucy4gRnV6emluZyBldGh0b29sIGNvbW1hbmRzIChsaWtlIGBFVEhUT09MX1NSWENMU1JMSU5TYCBhbmQgYEVUSFRPT0xfU1JYQ0xTUkxERUxgKSBhbmQgbmV0ZGV2IGZlYXR1cmUgY2hhbmdlcyBjYW4gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU2OjQwLjM0OTE5ODYzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NzAyODkzMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfR09PR0xFXCIsXG4gICAgXCJHVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndmVfYWRkX2Zsb3dfcnVsZVwiLFxuICAgIFwiZ3ZlX2RlbF9mbG93X3J1bGVcIixcbiAgICBcImd2ZV9mbG93X3J1bGVzX3Jlc2V0XCIsXG4gICAgXCJndmVfc2V0X3J4bmZjXCIsXG4gICAgXCJndmVfc2V0X2ZlYXR1cmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgdG8gc2NoZWR1bGUgYSByZXNldCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBkaXJlY3QgcmVzZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciBydW5zLiBGdXp6aW5nIGV0aHRvb2wgY29tbWFuZHMgKGxpa2UgYEVUSFRPT0xfU1JYQ0xTUkxJTlNgIGFuZCBgRVRIVE9PTF9TUlhDTFNSTERFTGApIGFuZCBuZXRkZXYgZmVhdHVyZSBjaGFuZ2VzIGNhbiB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Njo0MC4zNDkyMDQwOTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDY2ODc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU1ZWM5NjBjMGJjYTQ5ODFiZTY0NmFhMGYyYmZiYjBkYzM0NDlhNjhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAwODo1NjozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jXFxuaW5kZXggMDg1ODdiZjQwZWQ0YS4uMjAzN2IxNzRlNTYxYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jXFxuQEAgLTEzMjIsNyArMTMyMiw3IEBAIGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsXFxuIFxcbiBcXHRpZiAoZXJyID09IC1FVElNRSkge1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIFxcXCJUaW1lb3V0IHRvIGNvbmZpZ3VyZSB0aGUgZmxvdyBydWxlLCB0cmlnZ2VyIHJlc2V0XFxcIik7XFxuLVxcdFxcdGd2ZV9yZXNldChwcml2LCB0cnVlKTtcXG4rXFx0XFx0Z3ZlX3NjaGVkdWxlX3Jlc2V0KHByaXYpO1xcbiBcXHR9IGVsc2UgaWYgKCFlcnIpIHtcXG4gXFx0XFx0cHJpdi1cXHUwMDNlZmxvd19ydWxlc19jYWNoZS5ydWxlc19jYWNoZV9zeW5jZWQgPSBmYWxzZTtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Njo0MC43MzA1ODkwOTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3OTMyMTQ5NDY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0dPT0dMRVwiLFxuICAgIFwiR1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3ZlX2FkZF9mbG93X3J1bGVcIixcbiAgICBcImd2ZV9kZWxfZmxvd19ydWxlXCIsXG4gICAgXCJndmVfZmxvd19ydWxlc19yZXNldFwiLFxuICAgIFwiZ3ZlX3NldF9yeG5mY1wiLFxuICAgIFwiZ3ZlX3NldF9mZWF0dXJlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgIHRvIHNjaGVkdWxlIGEgcmVzZXQgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIGEgZGlyZWN0IHJlc2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSB3aGVyZSBzeXprYWxsZXIgcnVucy4gRnV6emluZyBldGh0b29sIGNvbW1hbmRzIChsaWtlIGBFVEhUT09MX1NSWENMU1JMSU5TYCBhbmQgYEVUSFRPT0xfU1JYQ0xTUkxERUxgKSBhbmQgbmV0ZGV2IGZlYXR1cmUgY2hhbmdlcyBjYW4gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTVlYzk2MGMwYmNhNDk4MWJlNjQ2YWEwZjJiZmJiMGRjMzQ0OWE2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMDg6NTY6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jXG5pbmRleCAwODU4N2JmNDBlZDRhLi4yMDM3YjE3NGU1NjFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jXG5AQCAtMTMyMiw3ICsxMzIyLDcgQEAgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdixcbiBcbiBcdGlmIChlcnIgPT0gLUVUSU1FKSB7XG4gXHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCJUaW1lb3V0IHRvIGNvbmZpZ3VyZSB0aGUgZmxvdyBydWxlLCB0cmlnZ2VyIHJlc2V0XCIpO1xuLVx0XHRndmVfcmVzZXQocHJpdiwgdHJ1ZSk7XG4rXHRcdGd2ZV9zY2hlZHVsZV9yZXNldChwcml2KTtcbiBcdH0gZWxzZSBpZiAoIWVycikge1xuIFx0XHRwcml2LVx1MDAzZWZsb3dfcnVsZXNfY2FjaGUucnVsZXNfY2FjaGVfc3luY2VkID0gZmFsc2U7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Njo0MC43MzA1OTAzMzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTEwMTYyNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEdWRSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGVkIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuY2AuIFRoZSBjb3JlIGNoYW5nZSBpcyByZXBsYWNpbmcgYGd2ZV9yZXNldChwcml2LCB0cnVlKTtgIHdpdGggYGd2ZV9zY2hlZHVsZV9yZXNldChwcml2KTtgIHdpdGhpbiBgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoR1ZFKSBkcml2ZXIsIHNvIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHdoZXRoZXIgb3Igbm90IHRoaXMgZHJpdmVyIGlzIGV2ZW4gcmVhY2hhYmxlIGluIHRoZSBlbnZpcm9ubWVudHMgSSdtIGludGVyZXN0ZWQgaW4sIG5hbWVseSwgdmlydHVhbGl6ZWQgb25lcy5cblxuUmlnaHQsIEdWRS4uLiB0aGF0J3MgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQsIHRoZSBuZXR3b3JrIGRyaXZlciB1c2VkIGluIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKS4gQWhhISBTeXprYWxsZXIgKnJ1bnMqIG9uIEdDRSwgc28gdGhpcyBkcml2ZXIgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiBUaGF0J3MgZ29vZCBuZXdzLiBUaGF0IG1ha2VzIGl0IHdvcnRoIGludmVzdGlnYXRpbmcuXG5cbk5vdywgbGV0J3MgbG9jYXRlIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgIGFuZCBzZWUgaWYgaXQncyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBXYWl0IGEgbWludXRlLiBHVkUgaXMgc3BlY2lmaWNhbGx5IGZvciBHQ0UuIENhbiBJIGV2ZW4gZnV6eiB0aGlzPyBZZXMsIHN5emthbGxlciAqcnVucyogb24gR0NFLCBzbyB0aGUgR1ZFICppcyogdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UuIEkgc2hvdWxkIGdvIGNoZWNrIHRoZSBjb25maWcgZm9yIEdWRSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU2OjQ1Ljg0MDc1NTA2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjA5MzgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM9MTMxND1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTMxNTpndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzMTY6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUgKmZsb3dfcnVsZV9jbWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTMxNy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzE5LVxcdFxcdFxcdEdWRV9BRE1JTlFfQ09ORklHVVJFX0ZMT1dfUlVMRSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYzoxMzIwOlxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlKSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzIxLVxcdFxcdFxcdGZsb3dfcnVsZV9jbWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM9MTMzMz1pbnQgZ3ZlX2FkbWlucV9hZGRfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9hZG1pbnFfZmxvd19ydWxlICpydWxlLCB1MzIgbG9jKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMzQte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzMzU6XFx0c3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSBmbG93X3J1bGVfY21kID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzMzYtXFx0XFx0Lm9wY29kZSA9IGNwdV90b19iZTE2KEdWRV9GTE9XX1JVTEVfQ0ZHX0FERCksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNDE6XFx0cmV0dXJuIGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZShwcml2LCBcXHUwMDI2Zmxvd19ydWxlX2NtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM0Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYz0xMzQ0PWludCBndmVfYWRtaW5xX2RlbF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MzIgbG9jKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNDUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNDY6XFx0c3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSBmbG93X3J1bGVfY21kID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNDctXFx0XFx0Lm9wY29kZSA9IGNwdV90b19iZTE2KEdWRV9GTE9XX1JVTEVfQ0ZHX0RFTCksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzUwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNTE6XFx0cmV0dXJuIGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZShwcml2LCBcXHUwMDI2Zmxvd19ydWxlX2NtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM1Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYz0xMzU0PWludCBndmVfYWRtaW5xX3Jlc2V0X2Zsb3dfcnVsZXMoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNTUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNTY6XFx0c3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSBmbG93X3J1bGVfY21kID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNTctXFx0XFx0Lm9wY29kZSA9IGNwdV90b19iZTE2KEdWRV9GTE9XX1JVTEVfQ0ZHX1JFU0VUKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jLTEzNTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTM2MDpcXHRyZXR1cm4gZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlKHByaXYsIFxcdTAwMjZmbG93X3J1bGVfY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzYxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oPTUxND1zdHJ1Y3QgZ3ZlX2FkbWlucV9mbG93X3J1bGUge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmgtNTIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oOjUyMTpzdHJ1Y3QgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaC01MjItXFx0X19iZTE2IG9wY29kZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oLTUyNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaDo1Mjg6c3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZSkgPT0gOTIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oLTUyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTY6NDUuODgyODUzOTk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NDc3OTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIGBndmVfYWRtaW5xYCBGbG93IFJ1bGUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgZmxvdyBydWxlcywgYW5kIEknbSB0cmFja2luZyBob3cgaXQncyB1c2VkLiBJdCdzIGNhbGxlZCBmcm9tIHRocmVlIGRpc3RpbmN0IHBsYWNlczogYGd2ZV9hZG1pbnFfYWRkX2Zsb3dfcnVsZWAsIGBndmVfYWRtaW5xX2RlbF9mbG93X3J1bGVgLCBhbmQgYGd2ZV9hZG1pbnFfcmVzZXRfZmxvd19ydWxlc2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGFkZGluZywgZGVsZXRpbmcsIGFuZCByZXNldHRpbmcgYXJlIHRoZSBmdW5kYW1lbnRhbCBvcGVyYXRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGBjb25maWd1cmVgIGZ1bmN0aW9uIGFuZCBlYWNoIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGxvb2sgaW50byB0aG9zZSBjYWxsZXJzIHRvIHNlZSB0aGUgc3BlY2lmaWMgY29udGV4dCBhbmQgcGFyYW1ldGVycyBwYXNzZWQgdG8gYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAuIEknbGwgd2FudCB0byB0cmFjZSBob3cgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgaXMgdHJpZ2dlcmVkLiBJJ2xsIG5vdGUgdGhlIGRpZmZlcmVuY2VzIGluIHRoZSBzZXR1cCBmb3IgYWRkLCBkZWxldGUgYW5kIHJlc2V0IG9wZXJhdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gYXMgYSB3aG9sZSBkZWFscyB3aXRoIGZsb3cgcnVsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTUsIk91dHB1dFRva2VucyI6NjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Njo1MC43NTc2MzUzMTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2OTEyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3ZlX2FkbWlucV9hZGRfZmxvd19ydWxlfGd2ZV9hZG1pbnFfZGVsX2Zsb3dfcnVsZXxndmVfYWRtaW5xX3Jlc2V0X2Zsb3dfcnVsZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM9MTMxNT1ndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTMzMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYzoxMzMzOmludCBndmVfYWRtaW5xX2FkZF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX2FkbWlucV9mbG93X3J1bGUgKnJ1bGUsIHUzMiBsb2MpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTMzNC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzQzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNDQ6aW50IGd2ZV9hZG1pbnFfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiBsb2MpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM0NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuYy0xMzUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5jOjEzNTQ6aW50IGd2ZV9hZG1pbnFfcmVzZXRfZmxvd19ydWxlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTM1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaD02NDY9aW50IGd2ZV9hZG1pbnFfcmVwb3J0X2xpbmtfc3BlZWQoc3RydWN0IGd2ZV9wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaDo2NDc6aW50IGd2ZV9hZG1pbnFfYWRkX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfYWRtaW5xX2Zsb3dfcnVsZSAqcnVsZSwgdTMyIGxvYyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmg6NjQ4OmludCBndmVfYWRtaW5xX2RlbF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MzIgbG9jKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9hZG1pbnEuaDo2NDk6aW50IGd2ZV9hZG1pbnFfcmVzZXRfZmxvd19ydWxlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2FkbWlucS5oLTY1MC1pbnQgZ3ZlX2FkbWlucV9xdWVyeV9mbG93X3J1bGVzKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTE2IHF1ZXJ5X29wY29kZSwgdTMyIHN0YXJ0aW5nX2xvYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYz0yNjM9aW50IGd2ZV9hZGRfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI3OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYzoyODA6XFx0ZXJyID0gZ3ZlX2FkbWlucV9hZGRfZmxvd19ydWxlKHByaXYsIHJ1bGUsIGZzcC1cXHUwMDNlbG9jYXRpb24pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI4MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jPTI5MD1pbnQgZ3ZlX2RlbF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmMtMjk2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jOjI5NzpcXHRyZXR1cm4gZ3ZlX2FkbWlucV9kZWxfZmxvd19ydWxlKHByaXYsIGZzcC1cXHUwMDNlbG9jYXRpb24pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI5OC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTg0NT1pbnQgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXQoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE4NDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjE4NTA6XFx0cmV0dXJuIGd2ZV9hZG1pbnFfcmVzZXRfZmxvd19ydWxlcyhwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTg1MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU2OjUwLjgwMzMzMzkzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTA1Mzg0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBuZXR3b3JrIGRyaXZlcnMgYW5kIGV0aHRvb2w6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgZXRodG9vbCBJbnRlcmZhY2UgZm9yIEZsb3cgUnVsZSBNYW5hZ2VtZW50KipcblxuUmlnaHQsIHNvIEknbSBkZWFsaW5nIHdpdGggZmxvdyBydWxlIG1hbmFnZW1lbnQgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGVudHJ5IHBvaW50cyBmb3IgYWRkaW5nIGFuZCBkZWxldGluZyB0aG9zZSBydWxlcyBhcmUgYGd2ZV9hZGRfZmxvd19ydWxlYCBhbmQgYGd2ZV9kZWxfZmxvd19ydWxlYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBhcHBhcmVudGx5IHRyaWdnZXJlZCB0aHJvdWdoIGV0aHRvb2wsIHdoaWNoIG1ha2VzIHNlbnNlLiBFdGh0b29sIGlzIHRoZSBzdGFuZGFyZCB1dGlsaXR5IGZvciBjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXMsIHNvIHRoYXQncyBhIGxvZ2ljYWwgY29ubmVjdGlvbi4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIGNyeXN0YWwgY2xlYXI6IEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGJvdGggYGd2ZV9hZGRfZmxvd19ydWxlYCBhbmQgYGd2ZV9kZWxfZmxvd19ydWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoZXkncmUgZG9pbmcsIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGhhcmR3YXJlLCBhbmQgaG93IHRoZXkgaGFuZGxlIHRoZSBpbnRyaWNhY2llcyBvZiBmbG93IHJ1bGUgaW5zdGFsbGF0aW9uIGFuZCByZW1vdmFsLiBJJ20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHRob3NlIGZ1bmN0aW9ucyBhcmUgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjUsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Njo1NS42OTM4NzQ1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzcxNDkwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndmVfYWRkX2Zsb3dfcnVsZXxndmVfZGVsX2Zsb3dfcnVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEzMTk9aW50IGd2ZV9nZXRfZmxvd19ydWxlX2lkcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQsIHUzMiAqcnVsZV9sb2NzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjEzMjA6aW50IGd2ZV9hZGRfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMzIxOmludCBndmVfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTMyMi1pbnQgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXQoc3RydWN0IGd2ZV9wcml2ICpwcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz04MTg9c3RhdGljIGludCBndmVfc2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtODI3LVxcdGNhc2UgRVRIVE9PTF9TUlhDTFNSTElOUzpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6ODI4OlxcdFxcdGVyciA9IGd2ZV9hZGRfZmxvd19ydWxlKHByaXYsIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTgyOS1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtODMwLVxcdGNhc2UgRVRIVE9PTF9TUlhDTFNSTERFTDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6ODMxOlxcdFxcdGVyciA9IGd2ZV9kZWxfZmxvd19ydWxlKHByaXYsIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTgzMi1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jPTIzMz1pbnQgZ3ZlX2dldF9mbG93X3J1bGVfaWRzKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCwgdTMyICpydWxlX2xvY3MpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYy0yNjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmM6MjYzOmludCBndmVfYWRkX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmMtMjY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYzoyOTA6aW50IGd2ZV9kZWxfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYy0yOTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Njo1NS43Mzc1OTQ3MzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM5ODMzNDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR1ZFIEZsb3cgUnVsZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEdWRSBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgZmxvdyBydWxlIG1hbmFnZW1lbnQuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgaW50ZXJhY3Rpb24gcG9pbnRzIGFyZSB0aGUgYGV0aHRvb2xgIGNvbW1hbmRzOiBgRVRIVE9PTF9TUlhDTFNSTElOU2AgYW5kIGBFVEhUT09MX1NSWENMU1JMREVMYC4gVGhhdCdzIHdoZXJlIEknbGwgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gZm9yIG5vdywgdGhhdCdzIHdoZXJlIHRoZSBydWxlcyBhcmUgZ29pbmcgdG8gYmUgaW5zZXJ0ZWQsIGFuZCBkZWxldGVkLCBmcm9tIHRoZSBrZXJuZWwuIE5vdywgbGV0J3MgdHJhY2UgdGhpcyBgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXRgIGZ1bmN0aW9uOyBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IG9uZSBjYWxsZWQsIGFuZCB0aGF0IGxvb2tzIGxpa2UgaXQgaXMgZ29pbmcgdG8gYmUgZnJvbSBgZ3ZlX21haW4uY2AuIExldCdzIGNvbmZpcm0gdGhhdCwgYW5kIGZvbGxvdyB3aGVyZSBpdCBpcyBjYWxsZWQgaW4gb3JkZXIgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIHJ1bGUgbWFuYWdlbWVudCB3b3JrZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU2NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU2OjU5LjY3NzQzMTEwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMDE4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3ZlX2Zsb3dfcnVsZXNfcmVzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaD0xMzIxPWludCBndmVfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTMyMjppbnQgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXQoc3RydWN0IGd2ZV9wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEzMjMtLyogUlNTIGNvbmZpZyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTcyNz1zdGF0aWMgdm9pZCBndmVfdGVhcmRvd25fZGV2aWNlX3Jlc291cmNlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtNzMyLVxcdGlmIChndmVfZ2V0X2RldmljZV9yZXNvdXJjZXNfb2socHJpdikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6NzMzOlxcdFxcdGVyciA9IGd2ZV9mbG93X3J1bGVzX3Jlc2V0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy03MzQtXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTE4MjU9aW50IGd2ZV9pbml0X3Jzc19jb25maWcoc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MTYgbnVtX3F1ZXVlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xODQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxODQ1OmludCBndmVfZmxvd19ydWxlc19yZXNldChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE4NDYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTIxNjk9c3RhdGljIGludCBndmVfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjE5NS1cXHRpZiAoKG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX05UVVBMRSkgXFx1MDAyNlxcdTAwMjYgIShmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfTlRVUExFKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyMTk2OlxcdFxcdGVyciA9IGd2ZV9mbG93X3J1bGVzX3Jlc2V0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMTk3LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU2OjU5LjcyMDU0MzI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNDg3MDAwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqR1ZFIERyaXZlciBSZXNldCBTdHJhdGVneSoqXG5cbk9rYXksIHNvIHRoZSBgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlYCBmdW5jdGlvbiBoYXMgYmVlbiB1cGRhdGVkLiBJbnRlcmVzdGluZy4gTG9va3MgbGlrZSB0aGV5J3ZlIHN3YXBwZWQgb3V0IGBndmVfcmVzZXQocHJpdiwgdHJ1ZSk7YCBmb3IgYGd2ZV9zY2hlZHVsZV9yZXNldChwcml2KTtgLiBUaGF0J3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBpcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgZHJpdmVyIHdlJ3JlIHRhbGtpbmcgYWJvdXQsIHNvIGl0J3MgcmVsZXZhbnQgdG8gR0NFIGVudmlyb25tZW50cy5cblxuQ2FuIHdlIGZ1enogdGhpcz8gTGV0IG1lIHRoaW5r4oCmIHN5emthbGxlciBydW5zIG9uIEdDRSwgc28gaXQgKmRvZXMqIGludGVyYWN0IHdpdGggdGhlIEdWRSBkcml2ZXIuIEFoYSEgU2luY2Ugc3l6a2FsbGVyIHJ1bnMgb24gR0NFLCBpdCB1c2VzIHRoZSBHVkUgZHJpdmVyLiBJIGJldCBpdCB1c2VzIGV0aHRvb2wgdG8gaW50ZXJhY3Qgd2l0aCBpdCwgdG9vLiBXZSBjb3VsZCBmdXp6IGV0aHRvb2wgY29tbWFuZHMgb24gdGhlIEdWRSBkcml2ZXIuIEJ1dCBob2xkIG9uLCBpZiB3ZSBmdXp6IGV0aHRvb2wgY29tbWFuZHMsIGEgYmFkIGNvbW1hbmQgbWlnaHQgdHJpZ2dlciBhIHJlc2V0LCB0YWtpbmcgZG93biB0aGUgbmV0d29yayBpbnRlcmZhY2UuIElmIHRoZSBuZXR3b3JrIGdvZXMgZG93biwgdGhlIFZNIGJlY29tZXMgdW5yZWFjaGFibGUuIFRoYXQncyBhIGd1YXJhbnRlZWQgdGVzdCBmYWlsdXJlIVxuXG5CdXQsIGRpZG4ndCBJIHNlZSB0aGF0IHN5emthbGxlciAqZG9lcyogZnV6eiBldGh0b29sIGNvbW1hbmRzPyBIbW0uIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlnIGZvciBHVkUsIHNlZSBpZiB0aGVyZSdzIGFueSBwcm90ZWN0aW9uIGFnYWluc3QgdGhhdCBzb3J0IG9mIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU3OjA0Ljg2OTI0NTQ2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxOTIyMjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBHVkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU3OjA0LjkxMTQ0NDk0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTk4MzU4NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERyaXZlciBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhhdCBHb29nbGUgZXRoZXJuZXQgZHJpdmVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYEtjb25maWdgIGZpbGUuIEknbSB0aGlua2luZyB0aGUgcmVsZXZhbnQgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCB2YWx1ZXMgd2lsbCBhbGwgYmUgZGVmaW5lZCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIHZhcmlvdXMgc2V0dGluZ3MgYW5kIHZhcmlhYmxlcyB0aGF0IGNvbnRyb2wgdGhlIGRyaXZlcidzIGJlaGF2aW9yIGFuZCBpZiBhbnl0aGluZyBuZWVkcyB0byBiZSB1cGRhdGVkLiBJdCdzIHRoZSBzdGFuZGFyZCBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhYmxlIGFzcGVjdHMgb2YgYW55IGtlcm5lbCBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1NzowNy45MDk4MDU4ODVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDQ2NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBHVkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZz0xNj1pZiBORVRfVkVORE9SX0dPT0dMRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnLTE3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnOjE4OmNvbmZpZyBHVkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiR29vZ2xlIFZpcnR1YWwgTklDIChnVk5JQykgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTc6MDcuOTUyMjU5OThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxMDI1MDk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDT05GSUdfR1ZFIERlcGVuZGVuY3kgVHJlZSoqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfR1ZFYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJ3JlIGxvb2tpbmcgYXQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IGl0cyBkZXBlbmRlbmNpZXMuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciBgQ09ORklHX0dWRWAgdG8gYmUgdmFsaWQuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpdHMgcG9zaXRpb24gaW4gdGhlIGRlcGVuZGVuY3kgdHJlZS4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMsIHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCBob3cgZGVlcGx5IGludGVncmF0ZWQgdGhpcyBvcHRpb24gaXMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1NzoxMS4xNjI1MTM0MzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjXFxuICAgMjpcXHQjIEdvb2dsZSBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgMzpcXHQjXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBORVRfVkVORE9SX0dPT0dMRVxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiR29vZ2xlIERldmljZXNcXFwiXFxuICAgNzpcXHRcXHRkZWZhdWx0IHlcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgZGV2aWNlIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTI6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxMzpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgR29vZ2xlIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWRcXG4gIDE0OlxcdFxcdCAgZm9yIHlvdXIgc3BlY2lmaWMgZGV2aWNlIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBORVRfVkVORE9SX0dPT0dMRVxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgR1ZFXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiR29vZ2xlIFZpcnR1YWwgTklDIChnVk5JQykgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gKFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgKFg4NiB8fCBDUFVfTElUVExFX0VORElBTikpXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAyMjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEdvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpXFxcIlxcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuICAyNzpcXHRcXHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3ZlLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRlbmRpZiAjTkVUX1ZFTkRPUl9HT09HTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTc6MTEuMTYyNTc4ODk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDg1NDc5NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpczogR1ZFIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBgQ09ORklHX05FVF9WRU5ET1JfR09PR0xFYCBhbmQgYENPTkZJR19HVkVgIGFyZSBlbmFibGVkLCB3aGljaCBnZXRzIG15IGF0dGVudGlvbi4gVGhlIEdWRSBkcml2ZXIsIHRoYXQncyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgZHJpdmVyLiBOb3csIEkgaGF2ZSB0byB0aGluaywgY2FuIHRoaXMgZXZlbiBiZSByZWFjaGVkIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQ/IE5vLCBJIHF1aWNrbHkgcmVhbGl6ZSB0aGF0IEdWRSBpcyBhIEdvb2dsZS1zcGVjaWZpYyB2aXJ0dWFsIE5JQy5cblxuQnV0IHdhaXQgYSBtaW51dGUsIHRoZSBwZW5ueSBkcm9wcyEgU3l6a2FsbGVyICpydW5zKiBvbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSksIHdoZXJlIEdWRSBpcyBhY3R1YWxseSB0aGUgKmhhcmR3YXJlKiBuZXR3b3JrIGludGVyZmFjZS4gQWggaGEhIFNvLCBldmVuIHRob3VnaCBpdCdzIHZpcnR1YWwsIGl0J3MgdGhlIHJlYWwgbmV0d29yayBpbnRlcmZhY2UgdXNlZCBieSB0aGUgZnV6emVyLiBGdXp6aW5nIGl0IG1pZ2h0IHBvdGVudGlhbGx5IGRpc3J1cHQgdGhlIG5ldHdvcmsgY29ubmVjdGl2aXR5LCBidXQgU3l6a2FsbGVyIGNhbiBzdGlsbCBmdXp6IGl0IHdpdGhvdXQgY29tcGxldGVseSBsb3NpbmcgY29ubmVjdGlvbiBiZWNhdXNlIGl0J3Mgb24gR0NFLlxuXG5Ob3cgbGV0J3MgZ28gYmFjayBhbmQgcmVyZWFkIHRoZSBwcm9tcHQgdG8gbWFrZSBzdXJlLiBPa2F5LCB0aGUgcHJvbXB0IHNheXMgcmV0dXJuIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgb25seSBpZiB0aGUgcGF0Y2ggY29udGFpbnM6XG4tIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGVkIGhhcmR3YXJlLlxuLSBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuXG5HaXZlbiB0aGUgcHJvbXB0LCBHVkUgaXMgYSB2aXJ0dWFsIE5JQyB1c2VkIGluIEdDRS4gU2luY2UgU3l6a2FsbGVyIHJ1bnMgb24gR0NFIChhbmQgUUVNVSBkb2VzICpub3QqIGVtdWxhdGUgaXQsIGFsdGhvdWdoIGl0IGRvZXMgcnVuIG9uIEdDRSksIEkgaGF2ZSB0byB0aGluayBhZ2Fpbi4gRG9lcyB0aGlzIHF1YWxpZnkgYXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZT8gTm8sIEdWRSBpcyBhIHZpcnR1YWwgTklDLCB0aGVyZWZvcmUsIG5vdCBjb25zaWRlcmVkIGEgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGNhbiBzdGlsbCBiZSBmdXp6YWJsZS5cblxuU28sIGluIEdDRSwgaXQgKmlzKiByZWFjaGFibGUuIEkgYnJpZWZseSBjb25zaWRlciB0aGUgUUVNVSBlbXVsYXRpb24gb2YgR1ZFIC0gbm8sIHRoZXJlIGlzbid0IGFueSwgYnV0IEdDRSBwcm92aWRlcyBpdCwgYW5kIHN5emthbGxlciBkb2VzIHJ1biBvbiBHQ0UuIEdWRSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdDRS5cblxuVGhlIHByb21wdCBzYXlzIHJldHVybiBcIldvcnRoRnV6emluZz1mYWxzZVwiIG9ubHkgaWYgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gR0NFIG9yIFFFTVUsIGJ1dCBzaW5jZSBpdCBpcyByZWFjaGFibGUgaW4gR0NFLCBpdCdzIGZpbmUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gbWVudGlvbmVkLCBgZ3ZlX2FkbWlucV9jb25maWd1cmVfZmxvd19ydWxlYC4gSXQncyBzdGF0aWMsIHNvIGl0IGlzbid0IGEgZGlyZWN0IGVudHJ5IHBvaW50LiBUaGUgbm9uLXN0YXRpYyBlbnRyeXBvaW50cyBhcmU6IGBndmVfYWRkX2Zsb3dfcnVsZWAsIGBndmVfZGVsX2Zsb3dfcnVsZWAsIGFuZCBgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXRgLiBJIHNob3VsZCB2ZXJpZnkgdGhlc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MjMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1NzoyMS4yNDgwNjEwNjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDU4Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd2ZV9hZGRfZmxvd19ydWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg9MTMxOT1pbnQgZ3ZlX2dldF9mbG93X3J1bGVfaWRzKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCwgdTMyICpydWxlX2xvY3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTMyMDppbnQgZ3ZlX2FkZF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEzMjEtaW50IGd2ZV9kZWxfZmxvd19ydWxlKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9ODE4PXN0YXRpYyBpbnQgZ3ZlX3NldF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTgyNy1cXHRjYXNlIEVUSFRPT0xfU1JYQ0xTUkxJTlM6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjgyODpcXHRcXHRlcnIgPSBndmVfYWRkX2Zsb3dfcnVsZShwcml2LCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy04MjktXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9mbG93X3J1bGUuYz0yMzM9aW50IGd2ZV9nZXRfZmxvd19ydWxlX2lkcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQsIHUzMiAqcnVsZV9sb2NzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZmxvd19ydWxlLmMtMjYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jOjI2MzppbnQgZ3ZlX2FkZF9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Zsb3dfcnVsZS5jLTI2NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU3OjIxLjI5MDEzMjUxN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY5OTI2NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgRXRodG9vbCBDYWxsYmFjayoqXG5cbkFscmlnaHQsIHNvIEknbSBkZWFsaW5nIHdpdGggdGhlIGBndmVfc2V0X3J4bmZjYCBmdW5jdGlvbi4gVGhlIG5hbWUgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYW4gZXRodG9vbCBjYWxsYmFjayBmdW5jdGlvbiwgYW5kIHRoYXQncyBleGFjdGx5IHdoYXQgSSBzdXNwZWN0ZWQgZ2l2ZW4gdGhlIGNvbnRleHQuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMsIG9mIGNvdXJzZSwgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGRldmljZSdzIFJYIGZpbHRlcmluZyBjYXBhYmlsaXRpZXMuIFRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGlyZWN0bHkgaW50byBleGFtaW5pbmcgaXRzIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgZnVuY3Rpb24gKmFjdHVhbGx5KiBkb2VzLiBJJ20ga2VlbiB0byBzZWUgaG93IGl0IHNldHMgdGhlIFJlY2VpdmUgRmxvdyBDbGFzc2lmaWNhdGlvbiwgb3IgUlhORkMsIHBhcmFtZXRlcnMuIEl0IGlzIGltcGVyYXRpdmUgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNldCBvZiBmaWx0ZXJzLCBkZWZpbmVkIGhlcmUsIGFyZSBhcHBsaWVkLCBhbmQgd2hhdCBpbXBhY3QgdGhpcyBoYXMgb24gdGhlIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NDMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1NzoyNS4wNjAwNjE5MjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Mjg3MjQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndmVfc2V0X3J4bmZjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz03NzY9c3RhdGljIGludCBndmVfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtODE3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo4MTg6c3RhdGljIGludCBndmVfc2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTgxOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9OTgyPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBndmVfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtOTk2LVxcdC5nZXRfY2hhbm5lbHMgPSBndmVfZ2V0X2NoYW5uZWxzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo5OTc6XFx0LnNldF9yeG5mYyA9IGd2ZV9zZXRfcnhuZmMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTk5OC1cXHQuZ2V0X3J4bmZjID0gZ3ZlX2dldF9yeG5mYyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTc6MjUuMjUyOTQxMjAzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMTIxOTEyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgR1ZFIEV0aGVybmV0IERyaXZlciBGbG93IFJ1bGUgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgZ3ZlYCBFdGhlcm5ldCBkcml2ZXIgY29kZSwgYW5kIGZpcnN0IG9mZiwgSSdtIG5vdGluZyB0aGF0IGBndmVfc2V0X3J4bmZjYCBpcyBkZWZpbml0ZWx5IHRoZSBldGh0b29sIGNhbGxiYWNrIGZ1bmN0aW9uIGhlcmUuIEdvdCBpdC4gTm93LCB3aGVyZSBlbHNlIGlzIGl0IGJlaW5nIHVzZWQ/IEkgc2VlIHRoYXQgYGd2ZV9mbG93X3J1bGVzX3Jlc2V0YCBpcyBjYWxsZWQgZnJvbSBib3RoIGBndmVfc2V0X2ZlYXR1cmVzYCBhbmQgYGd2ZV90ZWFyZG93bl9kZXZpY2VfcmVzb3VyY2VzYC4gSW50ZXJlc3RpbmcsIHRoYXQncyBpbXBvcnRhbnQuIFRoaXMgc3VnZ2VzdHMgZmxvdyBydWxlIG1hbmFnZW1lbnQgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggZmVhdHVyZSBjb25maWd1cmF0aW9uIGFuZCByZXNvdXJjZSBjbGVhbnVwLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgZ3ZlX3NldF9mZWF0dXJlc2AgZmlyc3QgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgdGhlIHJlc2V0IGZ1bmN0aW9uLiBJJ2xsIHRha2UgYSBsb29rIGF0IGl0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMzQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1NzozMC4zNjUxMzUyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwMTc1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3ZlX3NldF9mZWF0dXJlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjE0Mz1pbnQgZ3ZlX3NldF9oc3BsaXRfY29uZmlnKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTggdGNwX2RhdGFfc3BsaXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjE2OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MjE2OTpzdGF0aWMgaW50IGd2ZV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjE3MC1cXHRcXHRcXHQgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjI0ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGd2ZV9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIyNTAtXFx0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSAgICAgICBndmVfdHhfdGltZW91dCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MjI1MTpcXHQubmRvX3NldF9mZWF0dXJlc1xcdD1cXHRndmVfc2V0X2ZlYXR1cmVzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMjUyLVxcdC5uZG9fYnBmXFx0XFx0PVxcdGd2ZV94ZHAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU3OjMwLjQwOTE1OTEwNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYxMDY2NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEdWRSBEZXZpY2UgRnVuY3Rpb25hbGl0eSoqXG5cblJpZ2h0LCBzbyBgZ3ZlX3NldF9mZWF0dXJlc2AuLi4gdGhhdCdzIHRoZSBkcml2ZXIncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYG5kb19zZXRfZmVhdHVyZXNgIG5ldHdvcmsgZGV2aWNlIG9wZXJhdGlvbiBjYWxsYmFjaywgaXNuJ3QgaXQ/IEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHJlbGF0aW9uc2hpcCBleHBsaWNpdGx5LiBJdCdzIGVhc3kgdG8gbG9zZSB0cmFjayB3aGVuIHlvdSdyZSBqdW1waW5nIGFyb3VuZCB0aGUgY29kZS5cblxuQW5kIHRoZW4gYGd2ZV90ZWFyZG93bl9kZXZpY2VfcmVzb3VyY2VzYC4uLiB0aGF0J3MgZGVmaW5pdGVseSBjYWxsZWQgdG8gY2xlYW4gdGhpbmdzIHVwLCBidXQgd2hlcmUgZXhhY3RseSBpcyBpdCBpbnZva2VkPyBJIHZhZ3VlbHkgcmVjYWxsIGl0IGJlaW5nIHBhcnQgb2YgdGhlIHJlbW92YWwgcHJvY2Vzcy4gTGV0IG1lIGp1c3QgY29uZmlybSBpZiBpdCdzIGNhbGxlZCBmcm9tIGBndmVfcmVtb3ZlYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFuZCBuYWlsIGRvd24gdGhlIHJlc291cmNlIGxpZmVjeWNsZS4gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhlIHJpZ2h0IGNsZWFudXAgYXQgdGhlIHJpZ2h0IHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjU2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTc6MzQuMTcwMjM5NzMyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzU5MTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndmVfdGVhcmRvd25fZGV2aWNlX3Jlc291cmNlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9NzI1PXN0YXRpYyB2b2lkIGd2ZV90cmlnZ2VyX3Jlc2V0KHN0cnVjdCBndmVfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTcyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6NzI3OnN0YXRpYyB2b2lkIGd2ZV90ZWFyZG93bl9kZXZpY2VfcmVzb3VyY2VzKHN0cnVjdCBndmVfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtNzI4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0yNTEzPXN0YXRpYyB2b2lkIGd2ZV90ZWFyZG93bl9wcml2X3Jlc291cmNlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTI1MTQte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyNTE1OlxcdGd2ZV90ZWFyZG93bl9kZXZpY2VfcmVzb3VyY2VzKHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yNTE2LVxcdGd2ZV9hZG1pbnFfZnJlZShcXHUwMDI2cHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBwcml2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTc6MzQuMjUzODM5MjU0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNjE3MzA1MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEcml2ZXIgUmVzZXQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBjaGFuZ2UgaXMgaW4gdGhlIGRyaXZlcidzIHRlYXJkb3duIHNlcXVlbmNlLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgbW92ZWQgZnJvbSBhIGRpcmVjdCBgZ3ZlX3Jlc2V0KHByaXYsIHRydWUpYCB0byBhIHNjaGVkdWxlZCByZXNldCB2aWEgYGd2ZV9zY2hlZHVsZV9yZXNldChwcml2KWAuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IHNjcmVhbXMgXCJwb3RlbnRpYWwgZnV6eiB0YXJnZXRcIiB0byBtZS5cblxuTGV0J3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy4gSW5pdGlhbGx5LCBJIHdhcyBmb2N1c2luZyBvbiBgZ3ZlX3NldF9yeG5mY2AgYW5kIGBndmVfc2V0X2ZlYXR1cmVzYCwgYnV0IGhhbmcgb24gYSBtaW51dGUuLi4gdGhvc2UgYXJlIGV0aHRvb2wgYW5kIG5ldGRldiBjYWxsYmFja3MgcmVzcGVjdGl2ZWx5LiBJbnRlcmVzdGluZywgYnV0IGxldCdzIGRpZyBkZWVwZXIuIEFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGRyaXZlciB0aGF0IHdlIGNhbiBnZXQgYWNjZXNzIHRvLiBBaCBoYSwgaGVyZSB3ZSBnbyEgYGd2ZV9hZGRfZmxvd19ydWxlYCwgYGd2ZV9kZWxfZmxvd19ydWxlYCwgYW5kIGBndmVfZmxvd19ydWxlc19yZXNldGAuIFRob3NlIGFyZSBhbGwgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIE5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiBhbnkgb2YgdGhlbSBhcmUgZXhwb3J0ZWQgb3IganVzdCBub24tc3RhdGljIGludGVybmFsbHkgd2l0aGluIHRoZSBkcml2ZXIuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgdnVsbmVyYWJpbGl0eSBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIzMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Nzo0MC40MTU1NzM0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0NTIwMzYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA4OjU3OjQwLjQ1OTAzNTU3NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzIzNDcyODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgU3ltYm9sIFZpc2liaWxpdHkgYW5kIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIHRoZXNlIHN5bWJvbHMgYXJlbid0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIG1lYW5pbmcgdGhleSdyZSBub3QgaW50ZW5kZWQgZm9yIGRpcmVjdCB1c2UgYnkgZXh0ZXJuYWwgbW9kdWxlcy4gSG93ZXZlciwgdGhleSAqYXJlKiBub24tc3RhdGljLCB3aGljaCBpbXBsaWVzIHRoZXkgaGF2ZSB0aGVpciBvd24gdW5pcXVlIHN5bWJvbHMgd2l0aGluIHRoZSBrZXJuZWwgaW1hZ2UgaXRzZWxmLiBUaGF0J3MgdGhlIGtleSBkaWZmZXJlbmNlLiBMZXQncyBmb2N1cyBvbiB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnM6IGBndmVfYWRkX2Zsb3dfcnVsZWAsIGBndmVfZGVsX2Zsb3dfcnVsZWAsIGBndmVfZmxvd19ydWxlc19yZXNldGAsIGBndmVfc2V0X3J4bmZjYCwgYW5kIGBndmVfc2V0X2ZlYXR1cmVzYC4gVGhlc2UgYXJlIHRoZSBvbmVzIG9mIGludGVyZXN0LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBORVRfVkVORE9SX0dPT0dMRWAgYW5kIGBHVkVgLiBIbW0sIGBHVkVgIGlzIGludGVyZXN0aW5nOyBJIGtub3cgaG93IEdvb2dsZeKAmXMgR1ZFIHByb2plY3RzIGFyZSBidWlsdC4gQWxyaWdodCwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgR1ZFYC4gQWgsIGhlcmUgd2UgZ286IGBQQ0lfTVNJYCBhbmQgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYC4gYFBDSV9NU0lgIGlzIHR5cGljYWxseSBlbmFibGVkLCB3aGljaCBpcyB0byBiZSBleHBlY3RlZCwgYnV0IGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgaXMgd29ydGggYSBjbG9zZXIgbG9vay4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBkZXRhaWxzIG9mIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcyOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Nzo0Ni4xODI1MTE0NThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTQ4OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3B0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZz04PWNvbmZpZyBQVFBfMTU4OF9DTE9DS1xcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjMwOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvcHRwL0tjb25maWctMzEtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTc6NDYuMjI4MDY1OTEzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDE1Mjk4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCdWlsZCBDb25maWd1cmF0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBidWlsZCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgc2V0dGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBhIHRyaXN0YXRlIG9wdGlvbiwgbGlrZWx5IHNlbGVjdGVkIGltcGxpY2l0bHkgYnkgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgbWF5YmUganVzdCBhbHdheXMgYXZhaWxhYmxlLiBUaGVuIEkgbm90aWNlZCB0aGUgZGVwZW5kZW5jeTogYGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBUaGF0J3MgaW1wbHlpbmcgdGhhdCBgR1ZFYCBjYW4gb25seSBiZSBidWlsdCBpZiBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgIGlzIG1ldC5cblxuSGFuZyBvbiBhIHNlY29uZCwgbGV0IG1lIGNoZWNrIHRoZSBhY3R1YWwgZGVmaW5pdGlvbiBvZiBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBMZXQgbWUgc2VlLi4uIG9rYXksIGhlcmUgaXQgaXM6XG5cbmBgYFxuY29uZmlnIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5cdHRyaXN0YXRlXG5cdGRlZmF1bHQgeSBpZiBQVFBfMTU4OF9DTE9DSz1uXG5cdGRlZmF1bHQgUFRQXzE1ODhfQ0xPQ0tcbmBgYFxuXG5SaWdodC4gU28sIHRoYXQncyBpbnRlcmVzdGluZy4gSXQncyB0cmlzdGF0ZSBhcyBleHBlY3RlZC4gQnV0IHRoZSBkZWZhdWx0cyBhcmUgd2hhdCBtYXR0ZXIgaGVyZS4gSXQncyBgZGVmYXVsdCB5IGlmIFBUUF8xNTg4X0NMT0NLPW5gIGFuZCBgZGVmYXVsdCBQVFBfMTU4OF9DTE9DS2AuIEVzc2VudGlhbGx5LCBpdCAqYWx3YXlzKiByZXNvbHZlcyB0byBiZWluZyBlaXRoZXIgc2VsZWN0ZWQgb3Igb3B0aW9uYWwsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYFBUUF8xNTg4X0NMT0NLYC4gVGhhdCBtZWFucyB0aGUgZGVwZW5kZW5jeSBzaG91bGQgYWx3YXlzIGJlIG1ldC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBgZ3ZlX3NjaGVkdWxlX3Jlc2V0YCwganVzdCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Nzo1Mi4yMjk1OTg3MzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjQ5NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd2ZV9zY2hlZHVsZV9yZXNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEyOTc9c3RydWN0IHBhZ2VfcG9vbCAqZ3ZlX3J4X2NyZWF0ZV9wYWdlX3Bvb2woc3RydWN0IGd2ZV9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMzAxLS8qIFJlc2V0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMzAyOnZvaWQgZ3ZlX3NjaGVkdWxlX3Jlc2V0KHN0cnVjdCBndmVfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMzAzLWludCBndmVfcmVzZXQoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBib29sIGF0dGVtcHRfdGVhcmRvd24pO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM9MTMxNT1ndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGUoc3RydWN0IGd2ZV9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTMyNC1cXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIFxcXCJUaW1lb3V0IHRvIGNvbmZpZ3VyZSB0aGUgZmxvdyBydWxlLCB0cmlnZ2VyIHJlc2V0XFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmM6MTMyNTpcXHRcXHRndmVfc2NoZWR1bGVfcmVzZXQocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfYWRtaW5xLmMtMTMyNi1cXHR9IGVsc2UgaWYgKCFlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xMTY5PXZvaWQgZ3ZlX2ZyZWVfcXVldWVfcGFnZV9saXN0KHN0cnVjdCBndmVfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xMTk4LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxMTk5OnZvaWQgZ3ZlX3NjaGVkdWxlX3Jlc2V0KHN0cnVjdCBndmVfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTIwMC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjA4NT1zdGF0aWMgdm9pZCBndmVfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMDkzLVxcdGlmICghZ3ZlX3R4X3RpbWVvdXRfdHJ5X3Ffa2ljayhwcml2LCB0eHF1ZXVlKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MjA5NDpcXHRcXHRndmVfc2NoZWR1bGVfcmVzZXQocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIwOTUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jPTUzND1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmd2ZV9yeF9jb3B5X3RvX3Bvb2woc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNTUwLVxcdFxcdGlmICh1bmxpa2VseShyZWN5Y2xlIFxcdTAwM2MgMCkpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjU1MTpcXHRcXHRcXHRndmVfc2NoZWR1bGVfcmVzZXQocngtXFx1MDAzZWd2ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy01NTItXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jPTY0OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmd2ZV9yeF9za2Ioc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy02NzAtXFx0XFx0aWYgKHVubGlrZWx5KHJlY3ljbGUgXFx1MDAzYyAwKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6NjcxOlxcdFxcdFxcdGd2ZV9zY2hlZHVsZV9yZXNldChwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTY3Mi1cXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM9Nzk2PXN0YXRpYyB2b2lkIGd2ZV9yeChzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy04MzItXFx0XFx0bmFwaV9mcmVlX2ZyYWdzKG5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6ODMzOlxcdFxcdGd2ZV9zY2hlZHVsZV9yZXNldChyeC1cXHUwMDNlZ3ZlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTgzNC1cXHRcXHRnb3RvIGZpbmlzaF9mcmFnO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYz05NDc9c3RhdGljIGJvb2wgZ3ZlX3J4X3JlZmlsbF9idWZmZXJzKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtOTc3LVxcdFxcdFxcdFxcdGlmICghcngtXFx1MDAzZWRhdGEucmF3X2FkZHJlc3NpbmcpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYzo5Nzg6XFx0XFx0XFx0XFx0XFx0Z3ZlX3NjaGVkdWxlX3Jlc2V0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtOTc5LVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM9MTAwMD1zdGF0aWMgaW50IGd2ZV9jbGVhbl9yeF9kb25lKHN0cnVjdCBndmVfcnhfcmluZyAqcngsIGludCBidWRnZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTEwMzYtXFx0XFx0XFx0ICAgIEdWRV9TRVFOTyhkZXNjLVxcdTAwM2VmbGFnc19zZXEpLCByeC1cXHUwMDNlZGVzYy5zZXFubyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYzoxMDM3OlxcdFxcdGd2ZV9zY2hlZHVsZV9yZXNldChyeC1cXHUwMDNlZ3ZlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTEwMzgtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwODo1Nzo1Mi4yNzQyNTQ4ODJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY5NTE4MjYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgR1ZFIFJlc2V0IFNjaGVkdWxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBHVkUgZHJpdmVyLiBUaGUgY29yZSBvZiBpdCBpbnZvbHZlcyBzd2FwcGluZyBvdXQgdGhlIGRpcmVjdCBgZ3ZlX3Jlc2V0YCBmdW5jdGlvbiB3aXRoIGBndmVfc2NoZWR1bGVfcmVzZXRgIHdpdGhpbiB0aGUgYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgZnVuY3Rpb24uIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhpczogaXQncyBubyBsb25nZXIgYW4gaW1tZWRpYXRlIHJlc2V0IGJ1dCBhIHNjaGVkdWxlZCBvbmUuIFRoaXMgaXMgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbkxldCdzIGJyZWFrIHRoaXMgZG93biBmdXJ0aGVyIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIHNwb3RzLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIGBndmVfYWRtaW5xX2NvbmZpZ3VyZV9mbG93X3J1bGVgIHNpbmNlIHRoYXQgZnVuY3Rpb24gaXMgbm90IGV4cG9ydGVkLiBJJ3ZlIG5vdGVkIHRoYXQgYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgaXMgc3RhdGljLCBzbyBJIHNob3VsZCBiZSBsb29raW5nIGF0IHRoZSBjYWxsZXJzLiAgSSd2ZSBpZGVudGlmaWVkOlxuXG4qICAgYGd2ZV9hZGRfZmxvd19ydWxlYFxuKiAgIGBndmVfZGVsX2Zsb3dfcnVsZWBcbiogICBgZ3ZlX2Zsb3dfcnVsZXNfcmVzZXRgXG4qICAgYGd2ZV9zZXRfcnhuZmNgXG4qICAgYGd2ZV9zZXRfZmVhdHVyZXNgXG5cbk15IHJlYXNvbmluZyBpcyB0aGF0IGZ1enppbmcgdGhlc2UgY2FsbHMsIGdpdmVuIHRoZXkgdHJpZ2dlciB0aGlzIHNjaGVkdWxpbmcgY2hhbmdlLCBhcmUgZ29vZCB0YXJnZXRzLiBBbHNvLCB0aGUgcGF0Y2ggZGVhbHMgd2l0aCB0aGUgR1ZFIGRyaXZlciwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9ucyB0aGF0IHdvdWxkIGVuYWJsZSB0aGUgR1ZFIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBORVRfVkVORE9SX0dPT0dMRWAgYW5kIGBHVkVgLlxuXG5UaGUgZmFjdCB0aGF0IHRoaXMgaXMgaW4gR1ZFIG1ha2VzIGl0IGVzcGVjaWFsbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBHVkUgaXMgc3BlY2lmaWNhbGx5IHVzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdDRS4gU3l6a2FsbGVyIGlzIGtub3duIHRvIHJ1biBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuICBJIGJlbGlldmUgZnV6emluZyBldGh0b29sIGNvbW1hbmRzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCBtaWdodCBtYW5pcHVsYXRlIGZsb3cgcnVsZXMsIGxpa2UgYEVUSFRPT0xfU1JYQ0xTUkxJTlNgIGFuZCBgRVRIVE9PTF9TUlhDTFNSTERFTGAsIGNvdWxkIGJlIGZydWl0ZnVsLiAgQWxzbywgZmVhdHVyZSBjaGFuZ2VzIHZpYSBuZXRkZXYgY29tbWFuZHMgY291bGQgYWxzbyBwcm92aWRlIGFuIGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI3NSwiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDg6NTc6NTkuOTY5NDM5NzU4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2NDEzMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfR09PR0xFXCIsXG4gICAgXCJHVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndmVfYWRkX2Zsb3dfcnVsZVwiLFxuICAgIFwiZ3ZlX2RlbF9mbG93X3J1bGVcIixcbiAgICBcImd2ZV9mbG93X3J1bGVzX3Jlc2V0XCIsXG4gICAgXCJndmVfc2V0X3J4bmZjXCIsXG4gICAgXCJndmVfc2V0X2ZlYXR1cmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgdG8gc2NoZWR1bGUgYSByZXNldCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBkaXJlY3QgcmVzZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciBydW5zLiBGdXp6aW5nIGV0aHRvb2wgY29tbWFuZHMgKGxpa2UgYEVUSFRPT0xfU1JYQ0xTUkxJTlNgIGFuZCBgRVRIVE9PTF9TUlhDTFNSTERFTGApIGFuZCBuZXRkZXYgZmVhdHVyZSBjaGFuZ2VzIGNhbiB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfR09PR0xFXCIsXG4gICAgXCJHVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndmVfYWRkX2Zsb3dfcnVsZVwiLFxuICAgIFwiZ3ZlX2RlbF9mbG93X3J1bGVcIixcbiAgICBcImd2ZV9mbG93X3J1bGVzX3Jlc2V0XCIsXG4gICAgXCJndmVfc2V0X3J4bmZjXCIsXG4gICAgXCJndmVfc2V0X2ZlYXR1cmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGd2ZV9hZG1pbnFfY29uZmlndXJlX2Zsb3dfcnVsZWAgdG8gc2NoZWR1bGUgYSByZXNldCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBkaXJlY3QgcmVzZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIHdoZXJlIHN5emthbGxlciBydW5zLiBGdXp6aW5nIGV0aHRvb2wgY29tbWFuZHMgKGxpa2UgYEVUSFRPT0xfU1JYQ0xTUkxJTlNgIGFuZCBgRVRIVE9PTF9TUlhDTFNSTERFTGApIGFuZCBuZXRkZXYgZmVhdHVyZSBjaGFuZ2VzIGNhbiB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkfz[1] Phase: Succeeded StartedAt: 2026-08-06 08:58:12 +0000 UTC FinishedAt: 2026-08-06 08:58:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 08:58:12 +0000 UTC FinishedAt: 2026-08-06 08:58:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2] Phase: Succeeded StartedAt: 2026-08-06 08:58:12 +0000 UTC FinishedAt: 2026-08-06 10:38:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-06 08:58:12 +0000 UTC FinishedAt: 2026-08-06 10:38:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-06 08:58:12 +0000 UTC FinishedAt: 2026-08-06 08:58:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-06 08:58:12 +0000 UTC FinishedAt: 2026-08-06 08:58:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowbwkfz/series-workflowbwkfz-convert-artifact-693725130/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-06 08:58:22 +0000 UTC FinishedAt: 2026-08-06 09:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-06 08:58:22 +0000 UTC FinishedAt: 2026-08-06 09:19: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:*a44993fc-0fa2-40ff-9053-4ca3ad81ba00,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-workflowbwkfz/series-workflowbwkfz-convert-artifact-693725130/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": "941ec248-b6b8-461c-9b05-fed535dc04c3", "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-workflowbwkfz/series-workflowbwkfz-build-action-1554907064/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-06 08:58:22 +0000 UTC FinishedAt: 2026-08-06 09:18:59 +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:*a44993fc-0fa2-40ff-9053-4ca3ad81ba00,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-workflowbwkfz/series-workflowbwkfz-convert-artifact-693725130/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": "941ec248-b6b8-461c-9b05-fed535dc04c3", "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-workflowbwkfz/series-workflowbwkfz-build-action-1554907064/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-06 09:19:12 +0000 UTC FinishedAt: 2026-08-06 09:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-06 09:19:12 +0000 UTC FinishedAt: 2026-08-06 09:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-06 09:19:12 +0000 UTC FinishedAt: 2026-08-06 09:19:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-06 09:19:12 +0000 UTC FinishedAt: 2026-08-06 09:19:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowbwkfz/series-workflowbwkfz-convert-artifact-3938122853/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-06 09:19:22 +0000 UTC FinishedAt: 2026-08-06 09:21:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-06 09:19:22 +0000 UTC FinishedAt: 2026-08-06 09:21:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*941ec248-b6b8-461c-9b05-fed535dc04c3,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-workflowbwkfz/series-workflowbwkfz-build-action-1554907064/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-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-06 09:21:39 +0000 UTC FinishedAt: 2026-08-06 09:21:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-06 09:21:39 +0000 UTC FinishedAt: 2026-08-06 09:21:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-06 09:21:39 +0000 UTC FinishedAt: 2026-08-06 09:38:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-06 09:21:39 +0000 UTC FinishedAt: 2026-08-06 09:38:39 +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:*a44993fc-0fa2-40ff-9053-4ca3ad81ba00,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-workflowbwkfz/series-workflowbwkfz-convert-artifact-3938122853/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": "9ed7d489-ffd3-4fc6-b492-2e01bdd1a8cf", "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-workflowbwkfz/series-workflowbwkfz-build-action-2264780977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-06 09:21:39 +0000 UTC FinishedAt: 2026-08-06 09:38:29 +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:*a44993fc-0fa2-40ff-9053-4ca3ad81ba00,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-workflowbwkfz/series-workflowbwkfz-convert-artifact-3938122853/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": "9ed7d489-ffd3-4fc6-b492-2e01bdd1a8cf", "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-workflowbwkfz/series-workflowbwkfz-build-action-2264780977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-06 09:38:39 +0000 UTC FinishedAt: 2026-08-06 09:38:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-06 09:38:39 +0000 UTC FinishedAt: 2026-08-06 09:38:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-06 09:38:39 +0000 UTC FinishedAt: 2026-08-06 09:40:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-06 09:38:39 +0000 UTC FinishedAt: 2026-08-06 09:40:33 +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:*9ed7d489-ffd3-4fc6-b492-2e01bdd1a8cf,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-workflowbwkfz/series-workflowbwkfz-build-action-2264780977/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-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-06 09:40:43 +0000 UTC FinishedAt: 2026-08-06 10:38:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-06 09:40:43 +0000 UTC FinishedAt: 2026-08-06 10:38:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"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:*941ec248-b6b8-461c-9b05-fed535dc04c3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9ed7d489-ffd3-4fc6-b492-2e01bdd1a8cf,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-workflowbwkfz/series-workflowbwkfz-build-action-1554907064/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-workflowbwkfz/series-workflowbwkfz-build-action-2264780977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-06 09:40:43 +0000 UTC FinishedAt: 2026-08-06 09:40:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-06 09:40:43 +0000 UTC FinishedAt: 2026-08-06 09:40:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"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-workflowbwkfz/series-workflowbwkfz-convert-artifact-2810979306/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-06 09:40:43 +0000 UTC FinishedAt: 2026-08-06 09:40:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-06 09:40:43 +0000 UTC FinishedAt: 2026-08-06 09:40:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-06 09:40:43 +0000 UTC FinishedAt: 2026-08-06 09:40:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-06 09:40:53 +0000 UTC FinishedAt: 2026-08-06 10:38:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbwkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gve_add_flow_rule","gve_del_flow_rule","gve_flow_rules_reset","gve_set_rxnfc","gve_set_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE"],"series_id":"b893eee9-99ca-4659-a1fb-c24306f08cbe","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-06 09:40:53 +0000 UTC FinishedAt: 2026-08-06 10:38:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*941ec248-b6b8-461c-9b05-fed535dc04c3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9ed7d489-ffd3-4fc6-b492-2e01bdd1a8cf,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-workflowbwkfz/series-workflowbwkfz-build-action-1554907064/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-workflowbwkfz/series-workflowbwkfz-build-action-2264780977/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-workflowbwkfz/series-workflowbwkfz-convert-artifact-2810979306/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,}