Name: series-workflowhhcsn Phase: Succeeded StartedAt: 2026-07-29 10:01:57 +0000 UTC FinishedAt: 2026-07-29 11:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[0] Phase: Succeeded StartedAt: 2026-07-29 10:01:57 +0000 UTC FinishedAt: 2026-07-29 10:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 10:01:57 +0000 UTC FinishedAt: 2026-07-29 10:50:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MWIFIEX", "MWIFIEX_USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MWIFIEX", "MWIFIEX_USB" ], "series_id": "70c87716-e10f-41ba-a42e-6726ac77caca" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mwifiex_11n_rx_reorder_pkt", "mwifiex_process_tdls_action_frame", "mwifiex_process_sta_rx_packet", "mwifiex_process_uap_rx_packet", "mwifiex_handle_rx_packet" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01XSUZJRVgmIzM0OywKICAgICYjMzQ7TVdJRklFWF9VU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWUmIzM0OywKICAgICYjMzQ7bXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bXdpZmlleF9oYW5kbGVfcnhfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBNYXJ2ZWxsIFdpRmktRXggZHJpdmVyIHdoZXJlIHRoZSB3cm9uZyBza2IgbGVuZ3RoIHdhcyBwYXNzZWQgdG8gYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAgd2hlbiBwcm9jZXNzaW5nIEEtTVNEVSBwYWNrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIFRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGludGVyZmFjZXMgKGBNV0lGSUVYX1VTQmApLCBzbyBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIFVTQiBnYWRnZXQgZW11bGF0aW9uICh2aGNpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc5Mzg2NzFjNzhjZjZlYmFiYWRiZDE4YzZlZDk5NTkyYzNmYTk0Y2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxMDo0NzozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuY1xuaW5kZXggNjEwZWM4MzAyYWRmMi4uOWRlYjQ3ZjIyYTYxNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmNcbkBAIC00NCw3ICYjNDM7NDQsNyBAQCBzdGF0aWMgaW50IG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuIFx0XHRcdCAgICBudG9ocyhyeF9oZHItXHUwMDNlZXRoODAzX2hkci5oX3Byb3RvKSA9PSBFVEhfUF9URExTKSB7XG4gXHRcdFx0XHRtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWUocHJpdixcbiBcdFx0XHRcdFx0XHRcdFx0ICAodTggKilyeF9oZHIsXG4tXHRcdFx0XHRcdFx0XHRcdCAgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgIHJ4X3NrYi1cdTAwM2VsZW4pO1xuIFx0XHRcdH1cbiBcbiBcdFx0XHRpZiAocHJpdi1cdTAwM2Vic3Nfcm9sZSA9PSBNV0lGSUVYX0JTU19ST0xFX1VBUClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVdJRklFWCYjMzQ7LAogICAgJiMzNDtNV0lGSUVYX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O213aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0JiMzNDssCiAgICAmIzM0O213aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZSYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIE1hcnZlbGwgV2lGaS1FeCBkcml2ZXIgd2hlcmUgdGhlIHdyb25nIHNrYiBsZW5ndGggd2FzIHBhc3NlZCB0byBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYCB3aGVuIHByb2Nlc3NpbmcgQS1NU0RVIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gVGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgaW50ZXJmYWNlcyAoYE1XSUZJRVhfVVNCYCksIHNvIGl0IGNhbiBiZSBmdXp6ZWQgdXNpbmcgVVNCIGdhZGdldCBlbXVsYXRpb24gKHZoY2kpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzkzODY3MWM3OGNmNmViYWJhZGJkMThjNmVkOTk1OTJjM2ZhOTRjZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDI5IDEwOjQ3OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMKaW5kZXggNjEwZWM4MzAyYWRmMi4uOWRlYjQ3ZjIyYTYxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jCkBAIC00NCw3ICYjNDM7NDQsNyBAQCBzdGF0aWMgaW50IG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAogCQkJICAgIG50b2hzKHJ4X2hkci0mZ3Q7ZXRoODAzX2hkci5oX3Byb3RvKSA9PSBFVEhfUF9URExTKSB7CiAJCQkJbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHByaXYsCiAJCQkJCQkJCSAgKHU4ICopcnhfaGRyLAotCQkJCQkJCQkgIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJCQkJCQkJCSAgcnhfc2tiLSZndDtsZW4pOwogCQkJfQogCiAJCQlpZiAocHJpdi0mZ3Q7YnNzX3JvbGUgPT0gTVdJRklFWF9CU1NfUk9MRV9VQVApCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjEKCQkJCQkJCW91dHB1dDogNTYKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIFN1c3BlY3QgUGF0Y2ggaW4gbXdpZmlleCoqCgpBbHJpZ2h0LCBhIHBhdGNoIGhhcyBiZWVuIGZsYWdnZWQgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIHN3YXBwZWQgYHNrYi0mZ3Q7bGVuYCB3aXRoIGByeF9za2ItJmd0O2xlbmAgd2l0aGluIHRoZSBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCBmdW5jdGlvbi4gSG1tLCB0aGF0JiMzOTtzIGEgcHJldHR5IGxvdy1sZXZlbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSAqU0tCKiBsZW5ndGguIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgcmFpc2luZyBzb21lIGZsYWdzIGZvciBtZTsgbWlzaGFuZGxpbmcgKlNLQiogbGVuZ3RocyBpcyBhIGNsYXNzaWMgc291cmNlIG9mIGFsbCBraW5kcyBvZiBuYXN0eSBpc3N1ZXMg4oCTIGJ1ZmZlciBvdmVyZmxvd3MsIHVuZGVyZmxvd3MsIGFuZCBqdXN0IGdlbmVyYWwgZGF0YSBjb3JydXB0aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gYG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdGAgYW5kIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgaG93IHRoZSAqU0tCKiBpcyBiZWluZyB1c2VkIGFuZCBtb2RpZmllZCwgYW5kIHdoYXQgdGhlc2UgdmFyaWFibGVzICpza2IqIGFuZCAqcnhfc2tiKiByZXByZXNlbnQgaW4gdGhhdCBjb250ZXh0LiBXaGF0JiMzOTtzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlPyBDb3VsZCBpdCBiZSBiZW5pZ24sIGEgc2ltcGxlIHR5cG8sIG9yIGlzIHRoZXJlIGEgbW9yZSBmdW5kYW1lbnRhbCBtaXN1bmRlcnN0YW5kaW5nIG9mIHRoZSBBLU1TRFUgcmVhc3NlbWJseSBwcm9jZXNzIGF0IHBsYXk/IEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB2ZXJ5IGNhcmVmdWxseSwgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNpdCBhc3N1bXB0aW9ucy4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBsZXQmIzM5O3MgaG9wZSB0aGlzIGlzbiYjMzk7dCBzb21ldGhpbmcgdGhhdCBjYW4gY2F1c2UgbmV0d29yayBpbnN0YWJpbGl0eSwgb3Igd29yc2UsIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtMTktICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjIwOnN0YXRpYyBpbnQgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTIxLVx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz02Nz1zdGF0aWMgaW50IG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjc4Olx0cmV0ID0gbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0KHByaXYsIHBheWxvYWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy03OS1cdGlmICghcmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODUKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoaXMgTWFydmVsbCBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBBLU1TRFUgcGFja2V0IGRpc3BhdGNoLCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuY2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGN1cmlvdXMgYWJvdXQgaG93IHRoZXkmIzM5O3JlIG1hbmFnaW5nIHRoYXQgMTFuLXNwZWNpZmljIHJlb3JkZXJpbmcuIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGxvZ2ljIGZvciBob3cgdGhleSB0YWtlIHRob3NlIGZyYWdtZW50ZWQgTVNEVXMgYW5kIHB1dCB0aGVtIGJhY2sgdG9nZXRoZXIuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGEgY2xldmVyLCBvciBwZXJoYXBzIGNvbXBsZXgsIG1ldGhvZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0c3RhdGljIGludCBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbiAgMjE6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICAyMjpcdHtcbiAgMjM6XHRcdHN0cnVjdCByeHBkICpsb2NhbF9yeF9wZCA9IChzdHJ1Y3QgcnhwZCAqKShza2ItXHUwMDNlZGF0YSk7XG4gIDI0Olx0XHRpbnQgcmV0O1xuICAyNTpcdFxuICAyNjpcdFx0aWYgKGxlMTZfdG9fY3B1KGxvY2FsX3J4X3BkLVx1MDAzZXJ4X3BrdF90eXBlKSA9PSBQS1RfVFlQRV9BTVNEVSkge1xuICAyNzpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGxpc3Q7XG4gIDI4Olx0XHRcdHN0cnVjdCBza19idWZmICpyeF9za2I7XG4gIDI5Olx0XG4gIDMwOlx0XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZsaXN0KTtcbiAgMzE6XHRcbiAgMzI6XHRcdFx0c2tiX3B1bGwoc2tiLCBsZTE2X3RvX2NwdShsb2NhbF9yeF9wZC1cdTAwM2VyeF9wa3Rfb2Zmc2V0KSk7XG4gIDMzOlx0XHRcdHNrYl90cmltKHNrYiwgbGUxNl90b19jcHUobG9jYWxfcnhfcGQtXHUwMDNlcnhfcGt0X2xlbmd0aCkpO1xuICAzNDpcdFxuICAzNTpcdFx0XHRpZWVlODAyMTFfYW1zZHVfdG9fODAyM3Moc2tiLCBcdTAwMjZsaXN0LCBwcml2LVx1MDAzZWN1cnJfYWRkcixcbiAgMzY6XHRcdFx0XHRcdFx0IHByaXYtXHUwMDNld2Rldi5pZnR5cGUsIDAsIE5VTEwsIE5VTEwsIGZhbHNlKTtcbiAgMzc6XHRcbiAgMzg6XHRcdFx0d2hpbGUgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2bGlzdCkpIHtcbiAgMzk6XHRcdFx0XHRzdHJ1Y3QgcnhfcGFja2V0X2hkciAqcnhfaGRyO1xuICA0MDpcdFxuICA0MTpcdFx0XHRcdHJ4X3NrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2bGlzdCk7XG4gIDQyOlx0XHRcdFx0cnhfaGRyID0gKHN0cnVjdCByeF9wYWNrZXRfaGRyICopcnhfc2tiLVx1MDAzZWRhdGE7XG4gIDQzOlx0XHRcdFx0aWYgKElTU1VQUF9URExTX0VOQUJMRUQocHJpdi1cdTAwM2VhZGFwdGVyLVx1MDAzZWZ3X2NhcF9pbmZvKSBcdTAwMjZcdTAwMjZcbiAgNDQ6XHRcdFx0XHQgICAgbnRvaHMocnhfaGRyLVx1MDAzZWV0aDgwM19oZHIuaF9wcm90bykgPT0gRVRIX1BfVERMUykge1xuICA0NTpcdFx0XHRcdFx0bXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHByaXYsXG4gIDQ2Olx0XHRcdFx0XHRcdFx0XHRcdCAgKHU4ICopcnhfaGRyLFxuICA0NzpcdFx0XHRcdFx0XHRcdFx0XHQgIHJ4X3NrYi1cdTAwM2VsZW4pO1xuICA0ODpcdFx0XHRcdH1cbiAgNDk6XHRcbiAgNTA6XHRcdFx0XHRpZiAocHJpdi1cdTAwM2Vic3Nfcm9sZSA9PSBNV0lGSUVYX0JTU19ST0xFX1VBUClcbiAgNTE6XHRcdFx0XHRcdHJldCA9IG13aWZpZXhfdWFwX3JlY3ZfcGFja2V0KHByaXYsIHJ4X3NrYik7XG4gIDUyOlx0XHRcdFx0ZWxzZVxuICA1MzpcdFx0XHRcdFx0cmV0ID0gbXdpZmlleF9yZWN2X3BhY2tldChwcml2LCByeF9za2IpO1xuICA1NDpcdFx0XHRcdGlmIChyZXQgPT0gLTEpXG4gIDU1Olx0XHRcdFx0XHRtd2lmaWV4X2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxuICA1NjpcdFx0XHRcdFx0XHQgICAgXCYjMzQ7Unggb2YgQS1NU0RVIGZhaWxlZFwmIzM0Oyk7XG4gIDU3Olx0XHRcdH1cbiAgNTg6XHRcdFx0cmV0dXJuIDA7XG4gIDU5Olx0XHR9XG4gIDYwOlx0XG4gIDYxOlx0XHRyZXR1cm4gLTE7XG4gIDYyOlx0fVxuICA2MzpcdFxuICA2NDpcdC8qIFRoaXMgZnVuY3Rpb24gd2lsbCBwcm9jZXNzIHRoZSByeCBwYWNrZXQgYW5kIGZvcndhcmQgaXQgdG8ga2VybmVsL3VwcGVyXG4gIDY1Olx0ICogbGF5ZXIuXG4gIDY2Olx0ICovXG4gIDY3Olx0c3RhdGljIGludCBtd2lmaWV4XzExbl9kaXNwYXRjaF9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbiAgNjg6XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGF5bG9hZClcbiAgNjk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk3OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdpcmVsZXNzIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYSB3aXJlbGVzcyBkcml2ZXIsIGFuZCBpdCBsb29rcyBsaWtlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIHRoYW5rZnVsbHkuIEl0IGFkZHJlc3NlcyBhIGJ1ZyB3aXRoaW4gdGhlIGhhbmRsaW5nIG9mIFRETFMgYWN0aW9uIGZyYW1lcyBpbnNpZGUgYW4gQS1NU0RVIHBhY2tldC4gSXQgc2VlbXMgdGhlIGNvZGUgd2FzIG1pc3Rha2VubHkgcmVmZXJlbmNpbmcgYHNrYi0mZ3Q7bGVuYCBpbnN0ZWFkIG9mIHRoZSBjb3JyZWN0IGByeF9za2ItJmd0O2xlbmAgZHVyaW5nIHByb2Nlc3NpbmcuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGJ1Zywgd2hpY2ggbWVhbnMgd2UgY2FuIGxpa2VseSBleHBlY3QgaW1wcm92ZWQgc3RhYmlsaXR5IG9yIGNvcnJlY3QgYmVoYXZpb3IgYWZ0ZXIgdGhpcyBpcyBhcHBsaWVkLiBOb3csIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIEtjb25maWcgZm9yIG13aWZpZXggdG8gZ2V0IHRoZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNV0lGSUVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI6Y29uZmlnIE1XSUZJRVhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoxMjpjb25maWcgTVdJRklFWF9TRElPXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xMy1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFNEODc4Ni9TRDg3ODcvU0Q4Nzk3L1NEODg4Ny9TRDg4OTcvU0Q4OTc3L1NEODk3OC9TRDg5ODcvU0Q4OTk3XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoyNTpjb25maWcgTVdJRklFWF9QQ0lFXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFBDSUUgODc2Ni84ODk3Lzg5OTdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjM3OmNvbmZpZyBNV0lGSUVYX1VTQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMzgtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBVU0I4NzY2Lzg3OTcvODk5N1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnYCBmaWxlLCBhcyBJIHVuZGVyc3RhbmQgaXQ6CgoqKkV4YW1pbmluZyB0aGUgTXdpZmlleCBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgS2NvbmZpZ2AgZmlsZSBmb3IgdGhlIE1hcnZlbGwgbXdpZmlleCB3aXJlbGVzcyBkcml2ZXIuIEZpcnN0LCBJIGV4cGVjdCB0aGlzIHRvIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZHJpdmVyLCBkZXRhaWxpbmcgYWxsIHRoZSBmZWF0dXJlcyBhbmQgZnVuY3Rpb25hbGl0aWVzIHRoYXQgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZHVyaW5nIGtlcm5lbCBjb21waWxhdGlvbi4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7dmUgc3RydWN0dXJlZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgd2hlcmUgdGhleSYjMzk7dmUgaG9va2VkIGludG8gdGhlIG92ZXJhbGwga2VybmVsIGNvbmZpZ3VyYXRpb24gaGllcmFyY2h5LiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkcml2ZXImIzM5O3MgbW9kdWxhcml0eSwgd2hpY2ggbW9kdWxlcyBhcmUgY3JpdGljYWwsIGFuZCB3aGF0IGxldmVscyBvZiBzdXBwb3J0IGFyZSBpbXBsZW1lbnRlZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGV5JiMzOTt2ZSBpbmNsdWRlZCBvcHRpb25zIGZvciBwb3dlciBtYW5hZ2VtZW50LCBzZWN1cml0eSBmZWF0dXJlcyBsaWtlIFdQQS9XUEEyL1dQQTMgc3VwcG9ydCwgYW5kIGRpZmZlcmVudCByZWd1bGF0b3J5IGRvbWFpbnMuIEkmIzM5O2xsIGJlIGFzc2Vzc2luZyBob3cgd2VsbCB0aGUgb3B0aW9ucyBhcmUgZG9jdW1lbnRlZC4gQXJlIHRoZSBoZWxwIHRleHRzIGNsZWFyIGFuZCBjb25jaXNlPyBEbyB0aGV5IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IGZvciBhIHVzZXIgdG8gbWFrZSBpbmZvcm1lZCBjaG9pY2VzPyBGaW5hbGx5LCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgdmVuZG9yLXNwZWNpZmljIG9wdGlvbnMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhpcyBpcyBhIGdlbmVyYWwtcHVycG9zZSBkcml2ZXIsIG9yIGlmIGl0IGlzIHRhaWxvcmVkIHRvIHNwZWNpZmljIE1hcnZlbGwgY2hpcHNldHMgb3IgaGFyZHdhcmUgcmV2aXNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE1XSUZJRVhcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIE1hcnZlbGxcbiAgIDc6XHRcdCAgODAyLjExbi9hYyBjaGlwc2V0cy5cbiAgIDg6XHRcbiAgIDk6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcbiAgMTA6XHRcdCAgbXdpZmlleC5cbiAgMTE6XHRcbiAgMTI6XHRjb25maWcgTVdJRklFWF9TRElPXG4gIDEzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBTRDg3ODYvU0Q4Nzg3L1NEODc5Ny9TRDg4ODcvU0Q4ODk3L1NEODk3Ny9TRDg5NzgvU0Q4OTg3L1NEODk5N1wmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBNV0lGSUVYIFx1MDAyNlx1MDAyNiBNTUNcbiAgMTU6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMTY6XHRcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxuICAxOTpcdFx0ICA4Nzg2Lzg3ODcvODc5Ny84ODg3Lzg4OTcvODk3Ny84OTc4Lzg5ODcvODk5NyBjaGlwc2V0cyB3aXRoXG4gIDIwOlx0XHQgIFNESU8gaW50ZXJmYWNlLiBTRDg5NzggaXMgYWxzbyBrbm93biBhcyBOWFAgSVc0MTYuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXG4gIDIzOlx0XHQgIG13aWZpZXhfc2Rpby5cbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgTVdJRklFWF9QQ0lFXG4gIDI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBQQ0lFIDg3NjYvODg5Ny84OTk3XCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIE1XSUZJRVggXHUwMDI2XHUwMDI2IFBDSVxuICAyODpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAyOTpcdFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBNYXJ2ZWxsXG4gIDMyOlx0XHQgIDg3NjYvODg5Ny84OTk3IGNoaXBzZXRzIHdpdGggUENJZSBpbnRlcmZhY2UuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXG4gIDM1Olx0XHQgIG13aWZpZXhfcGNpZS5cbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgTVdJRklFWF9VU0JcbiAgMzg6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFVTQjg3NjYvODc5Ny84OTk3XCYjMzQ7XG4gIDM5Olx0XHRkZXBlbmRzIG9uIE1XSUZJRVggXHUwMDI2XHUwMDI2IFVTQlxuICA0MDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxuICA0MzpcdFx0ICA4Nzk3Lzg5OTcgY2hpcHNldCB3aXRoIFVTQiBpbnRlcmZhY2UuXG4gIDQ0Olx0XG4gIDQ1Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXG4gIDQ2Olx0XHQgIG13aWZpZXhfdXNiLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQ5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE1hcnZlbGwgV2lGaS1FeCBEcml2ZXIsIHNwZWNpZmljYWxseS4gSXQmIzM5O3MgYnVpbHQgdG8gc3VwcG9ydCBTRElPLCBQQ0llLCAqYW5kKiBVU0IuIFRoZSBVU0IgaW50ZXJmYWNlLCB0aGF0JiMzOTtzIGtleS4gVGhhdCBgTVdJRklFWF9VU0JgIGluZGljYXRlcyBpdCBjYW4gYmUgZnV6emVkIHZpYSBgdmhjaWAsIHdoaWNoIGlzIGEgZmFudGFzdGljIGFuZ2xlIOKAkyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiBvcGVucyB1cCBhIHdvcmxkIG9mIHBvc3NpYmlsaXRpZXMgZm9yIGluamVjdGluZyBtYWxpY2lvdXMgZGF0YS4KClJpZ2h0LCBzbyBJIHNlZSB0aGlzIGZ1bmN0aW9uLCBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCwgYmVpbmcgY2FsbGVkIGZyb20gYG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdGAuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGNoYWluIGFuZCBkYXRhIGZsb3csIGFuZCBmaWd1cmluZyBvdXQgd2hlcmUgYG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdGAgaXMgY2FsbGVkIHdpbGwgYmUgdml0YWwgZm9yIGV4cGxvaXRhdGlvbi4gVGhpcyBpcyB3aGVyZSBJIHdhbnQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyBkZWVwIHdlIGNhbiBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTIwPXN0YXRpYyBpbnQgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy02Ni0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6Njc6c3RhdGljIGludCBtd2lmaWV4XzExbl9kaXNwYXRjaF9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNjgtXHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnBheWxvYWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz05Nj1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo5Nzptd2lmaWV4XzExbl9kaXNwYXRjaF9wa3RfdW50aWxfc3RhcnRfd2luKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTk4LVx0XHRcdFx0XHQgc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwgKnRibCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTEzMi1cdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZsaXN0KSkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjEzMzpcdFx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0KHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTEzNC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz0xNDU9bXdpZmlleF8xMW5fc2Nhbl9hbmRfZGlzcGF0Y2goc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTE3OC1cdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZsaXN0KSkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjE3OTpcdFx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0KHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTE4MC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz0xODk9bXdpZmlleF9kZWxfcnhfcmVvcmRlcl9lbnRyeShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtMjA2LVx0c3RhcnRfd2luID0gKHRibC1cdTAwM2VzdGFydF93aW4gJiM0MzsgdGJsLVx1MDAzZXdpbl9zaXplKSBcdTAwMjYgKE1BWF9USURfVkFMVUUgLSAxKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6MjA3Olx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0X3VudGlsX3N0YXJ0X3dpbihwcml2LCB0YmwsIHN0YXJ0X3dpbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTIwOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTMwMD1td2lmaWV4X2ZsdXNoX2RhdGEoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0zMTMtXHRzdGFydF93aW4gPSAoY3R4LVx1MDAzZXB0ci1cdTAwM2VzdGFydF93aW4gJiM0Mzsgc2VxX251bSAmIzQzOyAxKSBcdTAwMjYgKE1BWF9USURfVkFMVUUgLSAxKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6MzE0Olx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0X3VudGlsX3N0YXJ0X3dpbihjdHgtXHUwMDNlcHJpdiwgY3R4LVx1MDAzZXB0cixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtMzE1LVx0XHRcdFx0XHRcdCBzdGFydF93aW4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9MzI5PW13aWZpZXhfMTFuX2NyZWF0ZV9yeF9yZW9yZGVyX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqdGEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0zNDItXHRpZiAodGJsKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjM0MzpcdFx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0X3VudGlsX3N0YXJ0X3dpbihwcml2LCB0YmwsIHNlcV9udW0pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0zNDQtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTU0Nz1pbnQgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTU1OS1cdFx0aWYgKHBrdF90eXBlICE9IFBLVF9UWVBFX0JBUilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6NTYwOlx0XHRcdG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdChwcml2LCBwYXlsb2FkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNTYxLVx0XHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNTY0LVx0aWYgKChwa3RfdHlwZSA9PSBQS1RfVFlQRV9BTVNEVSkgXHUwMDI2XHUwMDI2ICF0YmwtXHUwMDNlYW1zZHUpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6NTY1Olx0XHRtd2lmaWV4XzExbl9kaXNwYXRjaF9wa3QocHJpdiwgcGF5bG9hZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTU2Ni1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTYyMy1cdFx0XHRzdGFydF93aW4gPSAoTUFYX1RJRF9WQUxVRSAtICh3aW5fc2l6ZSAtIGVuZF93aW4pKSAmIzQzOyAxO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo2MjQ6XHRcdG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdF91bnRpbF9zdGFydF93aW4ocHJpdiwgdGJsLCBzdGFydF93aW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy02MjUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MjQKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFBhY2tldCBSZW9yZGVyaW5nIExvZ2ljKioKCk9rYXksIHNvIGBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdGAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBwYWNrZXQgcmVjZXB0aW9uLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgZ2F0ZXdheSBmb3IgaW5jb21pbmcgZnJhbWVzLiBOb3csIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGJyb2FkZXIgZGF0YSBmbG93LiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGguIFdoZXJlICpleGFjdGx5KiBpcyBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgIGludm9rZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBjYWxscywgdGhlIGNvbnRleHQsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgcGFja2V0IGRhdGEgZ2V0cyBoZXJlLiBJJiMzOTttIHRoaW5raW5nOiBIb3cgaXMgdGhpcyBmdW5jdGlvbiB0cmlnZ2VyZWQ/IElzIGl0IGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBkaXJlY3RseT8gSXMgaXQgcGFydCBvZiBhIGxvd2VyLWxldmVsIGhhcmR3YXJlIGFic3RyYWN0aW9uPyBJcyBpdCBpbnZva2VkIGJ5IHNvbWUgZGF0YSBwcm9jZXNzIEkmIzM5O20gZmFtaWxpYXIgd2l0aD8gS25vd2luZyB0aGUgY2FsbGVyIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBkcml2ZXImIzM5O3MgcmVjZWl2ZSBwYXRoIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBvdXQtb2Ytb3JkZXIgcGFja2V0cy4gU28sIGxldCYjMzk7cyBnbyBmaW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz01MjM9aW50IG13aWZpZXhfY21kXzExbl9kZWxiYShzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCB2b2lkICpkYXRhX2J1Zilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTU0Ni0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6NTQ3OmludCBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy01NDgtXHRcdFx0XHR1MTYgc2VxX251bSwgdTE2IHRpZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTkwMj12b2lkIG13aWZpZXhfMTFuX3J4YmFfc3luY19ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtOTY2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo5Njc6XHRcdFx0XHRcdHJldCA9IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTk2OC1cdFx0XHRcdFx0KHByaXYsIHNlcV9udW0sIHRsdl9yeGJhLVx1MDAzZXRpZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5oPTM5PXN0YXRpYyBpbmxpbmUgdm9pZCBtd2lmaWV4X3Jlc2V0XzExbl9yeF9zZXFfbnVtKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuaC00My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmg6NDQ6aW50IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmgtNDUtXHRcdFx0ICAgICAgIHUxNiBzZXFOdW0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jPTE4OT1pbnQgbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtMjYwLVx0LyogUmVvcmRlciBhbmQgc2VuZCB0byBPUyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jOjI2MTpcdHJldCA9IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0KHByaXYsIHNlcV9udW0sIGxvY2FsX3J4X3BkLVx1MDAzZXByaW9yaXR5LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jLTI2Mi1cdFx0XHRcdFx0IHRhLCAodTgpIHJ4X3BrdF90eXBlLCBza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jPTM3Mz1pbnQgbXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYy00NDItXHRwa3RfdHlwZSA9ICh1OClsZTE2X3RvX2NwdSh1YXBfcnhfcGQtXHUwMDNlcnhfcGt0X3R5cGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmM6NDQzOlx0cmV0ID0gbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3QocHJpdiwgbGUxNl90b19jcHUodWFwX3J4X3BkLVx1MDAzZXNlcV9udW0pLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmMtNDQ0LVx0XHRcdFx0XHQgdWFwX3J4X3BkLVx1MDAzZXByaW9yaXR5LCB0YSwgcGt0X3R5cGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgUGFja2V0IFJlY2VwdGlvbiBpbiB0aGUgTWFydmVsbCBXaS1GaSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgTWFydmVsbCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgaXQgaGFuZGxlcyBpbmNvbWluZyBwYWNrZXRzLiBNeSBpbml0aWFsIGh1bmNoIGlzIGNvbmZpcm1lZDogYG13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0YCBhbmQgYG13aWZpZXhfcHJvY2Vzc191YXBfcnhfcGFja2V0YCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3IgcGFyc2luZyBhbmQgaGFuZGxpbmcgcmVjZWl2ZWQgcGFja2V0cy4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIFNUQSAoc3RhdGlvbi9jbGllbnQpIGFuZCBVQVAgKFVuaXZlcnNhbCBBY2Nlc3MgUG9pbnQpIHJvbGVzLiBOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHRzIG9mIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGVzZSBlbnRyeSBwb2ludHMgYW5kIHNlZSB3aGVyZSB0aGV5JiMzOTtyZSBpbnZva2VkIHRvIGZ1bGx5IGdyYXNwIHRoZSBwYWNrZXQgcmVjZXB0aW9uIGZsb3cuIEtub3dpbmcgdGhlaXIgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgZHJpdmVyIG9yY2hlc3RyYXRlcyB0aGUgcHJvY2Vzc2luZyBvZiB0aGVzZSBpbmNvbWluZyBmcmFtZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTExMzc9aW50IG13aWZpZXhfcHJvY2Vzc19zdGFfY21kcmVzcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosIHUxNiBjbWRyZXNwX25vLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMTM4LVx0XHRcdFx0c3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxMTM5OmludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTExNDAtXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYz03MT1pbnQgbXdpZmlleF9wcm9jZXNzX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0xODgtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM6MTg5OmludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jLTE5MC1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jPTI0PWludCBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTU1LVx0ZWxzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYzo1NjpcdFx0cmV0ID0gbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmMtNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIERhdGEgRmxvdzogYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGAqKgoKQWxyaWdodCwgc28gdGhlIFVTQiBkcml2ZXImIzM5O3MgZ290IHNvbWV0aGluZyB0cmlnZ2VyaW5nIGEgY2FsbCB0byBgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0YC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQsIHRoZSByZWNlaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBwaW5wb2ludCAqZXhhY3RseSogd2hlcmUgdGhhdCBjYWxsIGlzIG9yaWdpbmF0aW5nIHdpdGhpbiB0aGUgVVNCIGRyaXZlci4gV2UgbmVlZCB0byBmb2xsb3cgdGhpcyBjaGFpbiwgbWF5YmUgdG8gYW4gaW50ZXJydXB0IGhhbmRsZXIgb3IgYSBzcGVjaWZpYyByZWNlaXZlIHJvdXRpbmUuIFRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBzdWdnZXN0cyB0aGlzIGlzIHdoZXJlIHdlIG5lZWQgdG8gdHJhY2UgdGhlIGluY29taW5nIHBhY2tldCBoYW5kbGluZywgc28gbGV0JiMzOTtzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCB0aGUgY29kZSYjMzk7cyBnb3QgZm9yIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MTc0PXN0YXRpYyBpbnQgbXdpZmlleF9wcm9jZXNzX3J4KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0yMDQtXHRcdH0gZWxzZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjIwNTpcdFx0XHRtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQoYWRhcHRlciwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMjA2LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMTAyPXZvaWQgbXdpZmlleF9wcm9jZXNzX2Fzc29jX3Jlc3Aoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjExMDM6aW50IG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMTA0LVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3BjaWUuYz0xNTI2PXN0YXRpYyBpbnQgbXdpZmlleF9wY2llX3Byb2Nlc3NfcmVjdl9kYXRhKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3BjaWUuYy0xNTg4LVx0XHRcdH0gZWxzZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvcGNpZS5jOjE1ODk6XHRcdFx0XHRtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQoYWRhcHRlciwgc2tiX2RhdGEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3BjaWUuYy0xNTkwLVx0XHRcdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jPTE1OTM9c3RhdGljIHZvaWQgbXdpZmlleF9kZWFnZ3Jfc2Rpb19wa3Qoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jLTE2MzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjE2MzQ6XHRcdG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChhZGFwdGVyLCBza2JfZGVhZ2dyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTYzNS1cdFx0ZGF0YSAmIzQzOz0gYmxrX3NpemU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYz0xNjQ3PXN0YXRpYyBpbnQgbXdpZmlleF9kZWNvZGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xNjg0LVx0XHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYzoxNjg1Olx0XHRcdG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChhZGFwdGVyLCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xNjg2LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYy0yMy0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmM6MjQ6aW50IG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYy0yNS1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYy01OS19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jOjYwOkVYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTYxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgzOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW5jb21pbmcgUGFja2V0IEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBkYXRhIGZsb3cgZm9yIGluY29taW5nIHBhY2tldHMgaW4gdGhpcyBXaUZpIGRyaXZlci4gSXQgbG9va3MgbGlrZSBgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0YCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBoZXJlOyBpdCYjMzk7cyB0aGUgb25lIGFjdHVhbGx5IGRvaW5nIHRoZSB3b3JrIG9mIHByb2Nlc3NpbmcgcmVjZWl2ZWQgcGFja2V0cy4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG13aWZpZXhfcHJvY2Vzc19yeGAsIHdoaWNoIG1ha2VzIHNlbnNlIOKAkyB0aGF0JiMzOTtzIGxpa2VseSB0aGUgY2VudHJhbCByZWNlaXZlciBsb29wIGluIGBtYWluLmNgLiBCdXQgaXQmIzM5O3MgYWxzbyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgcGNpZS5jYCBhbmQgYHNkaW8uY2AuIFRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgZGVzaWduIGNob2ljZSwgYnlwYXNzaW5nIHRoZSBtYWluIGxvb3AgZm9yIHNwZWNpZmljIGludGVyZmFjZXMuIEkmIzM5O20gbm90aW5nIHRoZSBkaXJlY3QgY2FsbHMgZm9yIGxhdGVyLgoKV2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBXaGF0IGFib3V0IHRoZSBVU0IgaW50ZXJmYWNlPyBJcyB0aGUgcGFja2V0IGhhbmRsaW5nIGRvbmUgYnkgYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGAgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyB2aWEgVVNCPyBJIG5lZWQgdG8gY2hlY2sgYHVzYi5jYCB0byBzZWUgaG93IGluY29taW5nIHBhY2tldHMgYXJlIGhhbmRsZWQgb24gdGhhdCBmcm9udC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXdpZmlleF9wcm9jZXNzX3J4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTY3PXN0YXRpYyBpbnQgbXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy04NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6ODU6XHRyZXR1cm4gbXdpZmlleF9wcm9jZXNzX3J4X3BhY2tldChwcml2LCBwYXlsb2FkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtODYtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MTYzPXN0YXRpYyB2b2lkIG13aWZpZXhfcXVldWVfcnhfd29yayhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMTczLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoxNzQ6c3RhdGljIGludCBtd2lmaWV4X3Byb2Nlc3Nfcngoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMTc1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTE0MDM9c3RhdGljIHZvaWQgbXdpZmlleF9yeF93b3JrX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTE0MDktXHRcdHJldHVybjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MTQxMDpcdG13aWZpZXhfcHJvY2Vzc19yeChhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMTQxMS19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMTI3PWludCBtd2lmaWV4X3JldF84MDJfMTFfaHNfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTExMjgtXHRcdFx0ICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxMTI5OmludCBtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTExMzAtXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jPTIzPW13aWZpZXhfZGlzY2FyZF9ncmF0dWl0b3VzX2FycChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy03MC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYzo3MTppbnQgbXdpZmlleF9wcm9jZXNzX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jLTcyLVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jPTE4OT1pbnQgbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtMjMzLVx0ICAgICFldGhlcl9hZGRyX2VxdWFsX3VuYWxpZ25lZChwcml2LVx1MDAzZWN1cnJfYWRkciwgcnhfcGt0X2hkci1cdTAwM2VldGg4MDNfaGRyLmhfZGVzdCkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYzoyMzQ6XHRcdG13aWZpZXhfcHJvY2Vzc19yeF9wYWNrZXQocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0yMzUtXHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmM9MjMyPWludCBtd2lmaWV4X2hhbmRsZV91YXBfcnhfZm9yd2FyZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jLTI3My1cdC8qIEZvcndhcmQgdW5pY2F0L0ludGVyLUJTUyBwYWNrZXRzIHRvIGtlcm5lbC4gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jOjI3NDpcdHJldHVybiBtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYy0yNzUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgbXdpZmlleF9yeF93b3JrX3F1ZXVlYCBFbnF1ZXVlaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYG13aWZpZXhfcnhfd29ya19xdWV1ZWAgYW5kIHRoZSBtZWNoYW5pY3Mgb2YgKmhvdyogaXQmIzM5O3MgYWN0dWFsbHkgZ2V0dGluZyBxdWV1ZWQuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGZsb3cg4oCTIHRoZSB0cmlnZ2VycywgdGhlIGNvbnRleHQsIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IsIGV2ZW4gbW9yZSBsaWtlbHksIHBvdGVudGlhbCBjb250ZW50aW9uIHBvaW50cyB3aXRoaW4gdGhlIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB3ZSBhcmUgdXRpbGl6aW5nIHRoZSB3b3JrcXVldWUgY29ycmVjdGx5LiBBcmUgd2Ugc2VlaW5nIHVuZHVlIGxhdGVuY3ksIHN0YXJ2YXRpb24sIG9yIGxvY2sgY29udGVudGlvbiBpbiB0aGUgcmVsZXZhbnQgd29ya3F1ZXVlIGNvbnRleHRzLCBpbiB0aGUgY2FzZXMgb2YgY29uY3VycmVudCBhY2Nlc3M/IEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHNjaGVkdWxpbmcgb2YgdGhhdCB3b3JrLCBzcGVjaWZpY2FsbHkgdGhlIHdvcmsgZG9uZSBieSB0aGUgYG13aWZpZXhfcnhfd29ya19xdWV1ZWAsIGlzbiYjMzk7dCBjcmVhdGluZyBhIGJvdHRsZW5lY2ssIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGluY3JlYXNpbmdseSBkZW1hbmRpbmcgdGhyb3VnaHB1dCByZXF1aXJlbWVudHMgYW5kIHRoZSBudWFuY2VzIG9mIHZhcmlvdXMgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgYW5kIHRyYWZmaWMgcHJvZmlsZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCByZWxldmFudCBjb2RlIHBhdGhzIOKAkyBpbnRlcnJ1cHQgaGFuZGxlcnMsIGRhdGEgcGF0aHMsIGFuZCBhbnkgYXNzb2NpYXRlZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gV2hhdCBzcGVjaWZpYyBlbGVtZW50cyBhcmUgdHJpZ2dlcmluZyB0aGUgZW5xdWV1ZWluZywgd2hlcmUgYXJlIHRoZXkgZGVmaW5lZCwgYW5kIHdoYXQgaXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBxdWV1ZSBzdGF0ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIFdMQU4gZHJpdmVyIGZsb3c/IEkgc2hvdWxkIGFsc28gZXhhbWluZSB0aGUgcXVldWUmIzM5O3MgY29uZmlndXJhdGlvbiwgYW55IHdvcmsgaXRlbSBwcmlvcml0aWVzLCBhbmQgdGhlIHVuZGVybHlpbmcgd29ya3F1ZXVlIGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X3F1ZXVlX3J4X3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MTYxPUVYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfcXVldWVfbWFpbl93b3JrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMTYyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoxNjM6c3RhdGljIHZvaWQgbXdpZmlleF9xdWV1ZV9yeF93b3JrKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTE2NC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz0yNDg9aW50IG13aWZpZXhfbWFpbl9wcm9jZXNzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0yNzgtXHRcdFx0YWRhcHRlci1cdTAwM2VkZWxheV9tYWluX3dvcmsgPSB0cnVlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoyNzk6XHRcdFx0bXdpZmlleF9xdWV1ZV9yeF93b3JrKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0yODAtXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0yOTEtXHRcdGlmIChhZGFwdGVyLVx1MDAzZXJ4X3dvcmtfZW5hYmxlZCBcdTAwMjZcdTAwMjYgYWRhcHRlci1cdTAwM2VkYXRhX3JlY2VpdmVkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoyOTI6XHRcdFx0bXdpZmlleF9xdWV1ZV9yeF93b3JrKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0yOTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTUxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBEYXRhIEZsb3c6IEZvY3VzaW5nIG9uIFJYIGFuZCBVU0IqKgoKT2theSwgc28gYmFzZWQgb24gdGhlIGNvbnRleHQsIEkmIzM5O20gcHJldHR5IHN1cmUgYG13aWZpZXhfbWFpbl9wcm9jZXNzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhhbmRsaW5nIGluY29taW5nLCByZWNlaXZlZCBkYXRhIOKAkyB0aGUgUlggc2lkZSBvZiB0aGluZ3MuIFRoYXQmIzM5O3MgbXkgaW1tZWRpYXRlIGltcHJlc3Npb24uIE5vdywgSSBuZWVkIHRvIHNlZSAqaG93KiB0aGlzIGRhdGEgaXMgYWN0dWFsbHkgbWFraW5nIGl0cyB3YXkgaW50byB0aGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCB0aGUgVVNCIGludGVyZmFjZS4gVGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYHVzYi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIFVTQiBkYXRhIHJlY2VwdGlvbiBob29rcyBhcmUgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhpcyBgbXdpZmlleF9tYWluX3Byb2Nlc3NgIGZ1bmN0aW9uLiBJJiMzOTttIHRoaW5raW5nIHRoZSBgdXNiLmNgIGZpbGUgd2lsbCBnaXZlIG1lIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGUgVVNCIHRyYW5zZmVyIGFuZCB3aGVyZSBpdCBoYW5kcyBvZmYgdGhlIHJhdyBkYXRhIHRvIHRoZSBoaWdoZXItbGV2ZWwgV2ktRmkgc3RhY2sgZm9yIHByb2Nlc3NpbmcuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXdpZmlleF91c2JfcnhfY29tcGxldGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYz00Nj1zdGF0aWMgaW50IG13aWZpZXhfdXNiX3JlY3Yoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMTUxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jOjE1MjpzdGF0aWMgdm9pZCBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMTUzLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM9Mjg1PXN0YXRpYyBpbnQgbXdpZmlleF91c2Jfc3VibWl0X3J4X3VyYihzdHJ1Y3QgdXJiX2NvbnRleHQgKmN0eCwgaW50IHNpemUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTMxNS1cdFx0XHRcdCB1c2JfcmN2aW50cGlwZShjYXJkLVx1MDAzZXVkZXYsIGN0eC1cdTAwM2VlcCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM6MzE2Olx0XHRcdFx0IGN0eC1cdTAwM2Vza2ItXHUwMDNlZGF0YSwgc2l6ZSwgbXdpZmlleF91c2JfcnhfY29tcGxldGUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMzE3LVx0XHRcdFx0ICh2b2lkICopY3R4LCBjYXJkLVx1MDAzZXJ4X2NtZF9pbnRlcnZhbCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTMyMC1cdFx0XHRcdCAgdXNiX3JjdmJ1bGtwaXBlKGNhcmQtXHUwMDNldWRldiwgY3R4LVx1MDAzZWVwKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzozMjE6XHRcdFx0XHQgIGN0eC1cdTAwM2Vza2ItXHUwMDNlZGF0YSwgc2l6ZSwgbXdpZmlleF91c2JfcnhfY29tcGxldGUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMzIyLVx0XHRcdFx0ICAodm9pZCAqKWN0eCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjQxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYG13aWZpZXhfdXNiX3J4X2NvbXBsZXRlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiwgc28gSSYjMzk7bSBnb2luZyB0byBicmVhayBkb3duIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIFVTQiBXaS1GaSBmcmFtZXdvcmsuIEZpcnN0LCBJIGV4cGVjdCBpdCBoYW5kbGVzIHRoZSBjb21wbGV0aW9uIG9mIGEgVVNCIHJlY2VpdmUgb3BlcmF0aW9uLCBsaWtlbHkgY2FsbGVkIHdoZW4gZGF0YSBpcyBhdmFpbGFibGUgb24gdGhlIFVTQiBidXMuIFRoaXMgc3VnZ2VzdHMgaXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludCBmb3IgZGF0YSBpbmdyZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5zIGFmdGVyIHRoZSBkYXRhIGlzIHJlY2VpdmVkIOKAkyBpcyBpdCBpbW1lZGlhdGVseSBwYXNzZWQgb24gZm9yIHByb2Nlc3NpbmcsIGJ1ZmZlcmVkLCBvciBtYXliZSBldmVuIGRpc2NhcmRlZCB1bmRlciBjZXJ0YWluIGVycm9yIGNvbmRpdGlvbnM/CgpJIGltYWdpbmUgaXQgd291bGQgaW50ZXJhY3Qgd2l0aCBVU0IgZGVzY3JpcHRvcnMsIHBvc3NpYmx5IGluY2x1ZGluZyB0aGUgYHVyYmAgKFVTQiBSZXF1ZXN0IEJsb2NrKSwgYW5kIHByb2JhYmx5IGludm9sdmVzIGNoZWNraW5nIHRoZSBzdGF0dXMgb2YgdGhlIHRyYW5zZmVyIGZvciBzdWNjZXNzIG9yIGZhaWx1cmUuIEVycm9yIGhhbmRsaW5nIGlzIGFsd2F5cyBhIGtleSBhc3BlY3QgaW4gdGhlc2Uga2luZHMgb2Ygcm91dGluZXMsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHNob3J0IHBhY2tldHMsIHRpbWVvdXRzLCBvciBvdGhlciBVU0ItcmVsYXRlZCBpc3N1ZXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHV0aWxpemVkLCBhcyBjb25jdXJyZW5jeSBpcyBhIHNpZ25pZmljYW50IGNvbmNlcm4gd2l0aGluIGRyaXZlciBjb2RlLiBJcyB0aGVyZSBhbiBhc3NvY2lhdGVkIHdvcmtxdWV1ZSB0byBvZmZsb2FkIHByb2Nlc3NpbmcsIG9yIGlzIGl0IGhhbmRsZWQgc3luY2hyb25vdXNseT8gRmluYWxseSwgSSBhbnRpY2lwYXRlIHRoaXMgZnVuY3Rpb24gd2lsbCBldmVudHVhbGx5IGNhbGwgb3RoZXIgV2ktRmkgc3BlY2lmaWMgZnVuY3Rpb25zLCBsaWtlbHkgdG8gcHJvY2VzcyB0aGUgcmVjZWl2ZWQgcGFja2V0cy4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBlbnRpcmUgZGF0YSBmbG93IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTI6XHRzdGF0aWMgdm9pZCBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gMTUzOlx0e1xuIDE1NDpcdFx0c3RydWN0IHVyYl9jb250ZXh0ICpjb250ZXh0ID0gKHN0cnVjdCB1cmJfY29udGV4dCAqKXVyYi1cdTAwM2Vjb250ZXh0O1xuIDE1NTpcdFx0c3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRleHQtXHUwMDNlYWRhcHRlcjtcbiAxNTY6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBjb250ZXh0LVx1MDAzZXNrYjtcbiAxNTc6XHRcdHN0cnVjdCB1c2JfY2FyZF9yZWMgKmNhcmQ7XG4gMTU4Olx0XHRpbnQgcmVjdl9sZW5ndGggPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aDtcbiAxNTk6XHRcdGludCBzaXplLCBzdGF0dXM7XG4gMTYwOlx0XG4gMTYxOlx0XHRpZiAoIWFkYXB0ZXIgfHwgIWFkYXB0ZXItXHUwMDNlY2FyZCkge1xuIDE2MjpcdFx0XHRwcl9lcnIoXCYjMzQ7bXdpZmlleCBhZGFwdGVyIG9yIGNhcmQgc3RydWN0dXJlIGlzIG5vdCB2YWxpZFxcblwmIzM0Oyk7XG4gMTYzOlx0XHRcdHJldHVybjtcbiAxNjQ6XHRcdH1cbiAxNjU6XHRcbiAxNjY6XHRcdGNhcmQgPSAoc3RydWN0IHVzYl9jYXJkX3JlYyAqKWFkYXB0ZXItXHUwMDNlY2FyZDtcbiAxNjc6XHRcdGlmIChjYXJkLVx1MDAzZXJ4X2NtZF9lcCA9PSBjb250ZXh0LVx1MDAzZWVwKVxuIDE2ODpcdFx0XHRhdG9taWNfZGVjKFx1MDAyNmNhcmQtXHUwMDNlcnhfY21kX3VyYl9wZW5kaW5nKTtcbiAxNjk6XHRcdGVsc2VcbiAxNzA6XHRcdFx0YXRvbWljX2RlYyhcdTAwMjZjYXJkLVx1MDAzZXJ4X2RhdGFfdXJiX3BlbmRpbmcpO1xuIDE3MTpcdFxuIDE3MjpcdFx0aWYgKHJlY3ZfbGVuZ3RoKSB7XG4gMTczOlx0XHRcdGlmICh1cmItXHUwMDNlc3RhdHVzIHx8XG4gMTc0Olx0XHRcdCAgICB0ZXN0X2JpdChNV0lGSUVYX1NVUlBSSVNFX1JFTU9WRUQsIFx1MDAyNmFkYXB0ZXItXHUwMDNld29ya19mbGFncykpIHtcbiAxNzU6XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiAxNzY6XHRcdFx0XHRcdCAgICBcJiMzNDtVUkIgc3RhdHVzIGlzIGZhaWxlZDogJWRcXG5cJiMzNDssIHVyYi1cdTAwM2VzdGF0dXMpO1xuIDE3NzpcdFx0XHRcdC8qIERvIG5vdCBmcmVlIHNrYiBpbiBjYXNlIG9mIGNvbW1hbmQgZXAgKi9cbiAxNzg6XHRcdFx0XHRpZiAoY2FyZC1cdTAwM2VyeF9jbWRfZXAgIT0gY29udGV4dC1cdTAwM2VlcClcbiAxNzk6XHRcdFx0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gMTgwOlx0XHRcdFx0Z290byBzZXR1cF9mb3JfbmV4dDtcbiAxODE6XHRcdFx0fVxuIDE4MjpcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2UgcmVjdl9sZW5ndGgpXG4gMTgzOlx0XHRcdFx0c2tiX3RyaW0oc2tiLCByZWN2X2xlbmd0aCk7XG4gMTg0Olx0XHRcdGVsc2VcbiAxODU6XHRcdFx0XHRza2JfcHV0KHNrYiwgcmVjdl9sZW5ndGggLSBza2ItXHUwMDNlbGVuKTtcbiAxODY6XHRcbiAxODc6XHRcdFx0c3RhdHVzID0gbXdpZmlleF91c2JfcmVjdihhZGFwdGVyLCBza2IsIGNvbnRleHQtXHUwMDNlZXApO1xuIDE4ODpcdFxuIDE4OTpcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBJTkZPLFxuIDE5MDpcdFx0XHRcdCAgICBcJiMzNDtpbmZvOiByZWN2X2xlbmd0aD0lZCwgc3RhdHVzPSVkXFxuXCYjMzQ7LFxuIDE5MTpcdFx0XHRcdCAgICByZWN2X2xlbmd0aCwgc3RhdHVzKTtcbiAxOTI6XHRcdFx0aWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHtcbiAxOTM6XHRcdFx0XHRtd2lmaWV4X3F1ZXVlX21haW5fd29yayhhZGFwdGVyKTtcbiAxOTQ6XHRcbiAxOTU6XHRcdFx0XHQvKiB1cmIgZm9yIGRhdGFfZXAgaXMgcmUtc3VibWl0dGVkIG5vdztcbiAxOTY6XHRcdFx0XHQgKiB1cmIgZm9yIGNtZF9lcCB3aWxsIGJlIHJlLXN1Ym1pdHRlZCBpbiBjYWxsYmFja1xuIDE5NzpcdFx0XHRcdCAqIG13aWZpZXhfdXNiX3JlY3ZfY29tcGxldGVcbiAxOTg6XHRcdFx0XHQgKi9cbiAxOTk6XHRcdFx0XHRpZiAoY2FyZC1cdTAwM2VyeF9jbWRfZXAgPT0gY29udGV4dC1cdTAwM2VlcClcbiAyMDA6XHRcdFx0XHRcdHJldHVybjtcbiAyMDE6XHRcdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3ODIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBtd2lmaWV4X3VzYl9yZWN2YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSB0YXJnZXQgaGVyZSBpcyBgbXdpZmlleF91c2JfcmVjdmAsIHNvIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIFVTQiB3aXJlbGVzcyBpbnRlcmZhY2UgY29udGV4dC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEnigJltIG1lbnRhbGx5IG1hcHBpbmcgdGhpcyBmdW5jdGlvbiB0byB0aGUgdHlwaWNhbCBVU0IgcmVjZWl2ZSBwYXRoIGZvciBhIHdpcmVsZXNzIGRyaXZlcjogZGF0YSBhcnJpdmluZyBvdmVyIHRoZSBVU0IgYnVzLCBiZWluZyBwaWNrZWQgdXAgYnkgdGhlIGRyaXZlciwgcHJvY2Vzc2VkLCBhbmQgcGFzc2VkIHVwIHRoZSBzdGFjay4gTXkgZXhwZWN0YXRpb24gaXMgdGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGluY29taW5nIHBhY2tldHMgdmlhIFVTQi4KCknigJlsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgVVNCIGhvc3QgY29udHJvbGxlcjsgaG93IGl0IGhhbmRsZXMgVVJCcyAoVVNCIFJlcXVlc3QgQmxvY2tzKSBhbmQgdGhlaXIgY29tcGxldGlvbjsgd2hhdCBraW5kIG9mIGJ1ZmZlcmluZyBzdHJhdGVneSBpdCBlbXBsb3lzOyBhbmQsIGNydWNpYWxseSwgaG93IGl0IHZlcmlmaWVzIHRoZSBkYXRhIGludGVncml0eSBhbmQgcG90ZW50aWFsbHkgdW5wYWNrcyB0aGUgODAyLjExIGZyYW1lcywgdGhlbiBwYXNzZXMgdGhvc2UgZnJhbWVzIHVwIHRvIHRoZSBwcm90b2NvbCBzdGFjay4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBxdWVzdGlvbnMgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgbG9ja2luZyBzdHJhdGVnaWVzIHdpdGhpbiB0aGUgZnVuY3Rpb24uIElzIGl0IGludGVycnVwdC1kcml2ZW4/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgVVNCIHRyYW5zZmVyIGVycm9ycz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGJ1ZmZlciBtYW5hZ2VtZW50IG9yIERNQSB1c2FnZT8gSeKAmWxsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBlcnJvciBoYW5kbGluZy4gSSBob3BlIHRvIHNwb3Qgd2VsbC1kZWZpbmVkIGVycm9yIGNvZGVzIGFuZCBwZXJoYXBzIHJldHJ5IG1lY2hhbmlzbXMuIEnigJltIHByZXBhcmVkIHRvIGRpZyBkZWVwLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQ2Olx0c3RhdGljIGludCBtd2lmaWV4X3VzYl9yZWN2KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4gIDQ3Olx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGVwKVxuICA0ODpcdHtcbiAgNDk6XHRcdHUzMiByZWN2X3R5cGU7XG4gIDUwOlx0XHRfX2xlMzIgdG1wO1xuICA1MTpcdFx0aW50IHJldDtcbiAgNTI6XHRcbiAgNTM6XHRcdGlmIChhZGFwdGVyLVx1MDAzZWhzX2FjdGl2YXRlZClcbiAgNTQ6XHRcdFx0bXdpZmlleF9wcm9jZXNzX2hzX2NvbmZpZyhhZGFwdGVyKTtcbiAgNTU6XHRcbiAgNTY6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBJTlRGX0hFQURFUl9MRU4pIHtcbiAgNTc6XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG4gIDU4Olx0XHRcdFx0ICAgIFwmIzM0OyVzOiBpbnZhbGlkIHNrYi1cdTAwM2VsZW5cXG5cJiMzNDssIF9fZnVuY19fKTtcbiAgNTk6XHRcdFx0cmV0dXJuIC0xO1xuICA2MDpcdFx0fVxuICA2MTpcdFxuICA2MjpcdFx0c3dpdGNoIChlcCkge1xuICA2MzpcdFx0Y2FzZSBNV0lGSUVYX1VTQl9FUF9DTURfRVZFTlQ6XG4gIDY0Olx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULFxuICA2NTpcdFx0XHRcdCAgICBcJiMzNDslczogRVBfQ01EX0VWRU5UXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gIDY2Olx0XHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBcdTAwMjZ0bXAsIElOVEZfSEVBREVSX0xFTik7XG4gIDY3Olx0XHRcdHJlY3ZfdHlwZSA9IGxlMzJfdG9fY3B1KHRtcCk7XG4gIDY4Olx0XHRcdHNrYl9wdWxsKHNrYiwgSU5URl9IRUFERVJfTEVOKTtcbiAgNjk6XHRcbiAgNzA6XHRcdFx0c3dpdGNoIChyZWN2X3R5cGUpIHtcbiAgNzE6XHRcdFx0Y2FzZSBNV0lGSUVYX1VTQl9UWVBFX0NNRDpcbiAgNzI6XHRcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2UgTVdJRklFWF9TSVpFX09GX0NNRF9CVUZGRVIpIHtcbiAgNzM6XHRcdFx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuICA3NDpcdFx0XHRcdFx0XHQgICAgXCYjMzQ7Q01EOiBza2ItXHUwMDNlbGVuIHRvbyBsYXJnZVxcblwmIzM0Oyk7XG4gIDc1Olx0XHRcdFx0XHRyZXQgPSAtMTtcbiAgNzY6XHRcdFx0XHRcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcbiAgNzc6XHRcdFx0XHR9IGVsc2UgaWYgKCFhZGFwdGVyLVx1MDAzZWN1cnJfY21kKSB7XG4gIDc4Olx0XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBXQVJOLCBcJiMzNDtDTUQ6IG5vIGN1cnJfY21kXFxuXCYjMzQ7KTtcbiAgNzk6XHRcdFx0XHRcdGlmIChhZGFwdGVyLVx1MDAzZXBzX3N0YXRlID09IFBTX1NUQVRFX1NMRUVQX0NGTSkge1xuICA4MDpcdFx0XHRcdFx0XHRtd2lmaWV4X3Byb2Nlc3Nfc2xlZXBfY29uZmlybV9yZXNwKFxuICA4MTpcdFx0XHRcdFx0XHRcdFx0YWRhcHRlciwgc2tiLVx1MDAzZWRhdGEsXG4gIDgyOlx0XHRcdFx0XHRcdFx0XHRza2ItXHUwMDNlbGVuKTtcbiAgODM6XHRcdFx0XHRcdFx0cmV0ID0gMDtcbiAgODQ6XHRcdFx0XHRcdFx0Z290byBleGl0X3Jlc3RvcmVfc2tiO1xuICA4NTpcdFx0XHRcdFx0fVxuICA4NjpcdFx0XHRcdFx0cmV0ID0gLTE7XG4gIDg3Olx0XHRcdFx0XHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XG4gIDg4Olx0XHRcdFx0fVxuICA4OTpcdFxuICA5MDpcdFx0XHRcdGFkYXB0ZXItXHUwMDNlY3Vycl9jbWQtXHUwMDNlcmVzcF9za2IgPSBza2I7XG4gIDkxOlx0XHRcdFx0YWRhcHRlci1cdTAwM2VjbWRfcmVzcF9yZWNlaXZlZCA9IHRydWU7XG4gIDkyOlx0XHRcdFx0YnJlYWs7XG4gIDkzOlx0XHRcdGNhc2UgTVdJRklFWF9VU0JfVFlQRV9FVkVOVDpcbiAgOTQ6XHRcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKHUzMikpIHtcbiAgOTU6XHRcdFx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkxNAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG13aWZpZXhfdXNiX3JlY3ZgIGZ1bmN0aW9uLiBJIG5lZWQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBoYW5kbGVzIGRhdGEgcmVjZXB0aW9uIG92ZXIgVVNCIGZvciB0aGlzIE1hcnZlbGwgV2ktRmkgZHJpdmVyLiBUaGlzIHNlZW1zIGxpa2UgYSBjb3JlIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGUgY3JpdGljYWwgdGFzayBvZiBtYW5hZ2luZyBkYXRhIGZsb3cgZnJvbSB0aGUgVVNCIGludGVyZmFjZSB0byB0aGUgaGlnaGVyLWxldmVsIG5ldHdvcmtpbmcgc3RhY2suIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBrZXkgb3BlcmF0aW9uczogaG93IGl0IHJlY2VpdmVzIGRhdGEsIGhvdyBpdCBidWZmZXJzIGl0LCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLCBhbmQgaG93IGl0IHRoZW4gcGFzc2VzIHRoYXQgZGF0YSB1cHdhcmRzLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB1c2VkIGFuZCB0aGUgZWZmaWNpZW5jeSBvZiB0aGUgZGF0YSB0cmFuc2ZlcnMg4oCTIHBvdGVudGlhbCBib3R0bGVuZWNrcyBoZXJlIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDk2Olx0XHRcdFx0XHRcdCAgICBcJiMzNDtFVkVOVDogc2tiLVx1MDAzZWxlbiB0b28gc21hbGxcXG5cJiMzNDspO1xuICA5NzpcdFx0XHRcdFx0cmV0ID0gLTE7XG4gIDk4Olx0XHRcdFx0XHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XG4gIDk5Olx0XHRcdFx0fVxuIDEwMDpcdFx0XHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBcdTAwMjZ0bXAsIHNpemVvZih1MzIpKTtcbiAxMDE6XHRcdFx0XHRhZGFwdGVyLVx1MDAzZWV2ZW50X2NhdXNlID0gbGUzMl90b19jcHUodG1wKTtcbiAxMDI6XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFVkVOVCxcbiAxMDM6XHRcdFx0XHRcdCAgICBcJiMzNDtldmVudF9jYXVzZSAlI3hcXG5cJiMzNDssIGFkYXB0ZXItXHUwMDNlZXZlbnRfY2F1c2UpO1xuIDEwNDpcdFxuIDEwNTpcdFx0XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZSBNQVhfRVZFTlRfU0laRSkge1xuIDEwNjpcdFx0XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG4gMTA3Olx0XHRcdFx0XHRcdCAgICBcJiMzNDtFVkVOVDogZXZlbnQgYm9keSB0b28gbGFyZ2VcXG5cJiMzNDspO1xuIDEwODpcdFx0XHRcdFx0cmV0ID0gLTE7XG4gMTA5Olx0XHRcdFx0XHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XG4gMTEwOlx0XHRcdFx0fVxuIDExMTpcdFxuIDExMjpcdFx0XHRcdG1lbWNweShhZGFwdGVyLVx1MDAzZWV2ZW50X2JvZHksIHNrYi1cdTAwM2VkYXRhICYjNDM7XG4gMTEzOlx0XHRcdFx0ICAgICAgIE1XSUZJRVhfRVZFTlRfSEVBREVSX0xFTiwgc2tiLVx1MDAzZWxlbik7XG4gMTE0Olx0XG4gMTE1Olx0XHRcdFx0YWRhcHRlci1cdTAwM2VldmVudF9yZWNlaXZlZCA9IHRydWU7XG4gMTE2Olx0XHRcdFx0YWRhcHRlci1cdTAwM2VldmVudF9za2IgPSBza2I7XG4gMTE3Olx0XHRcdFx0YnJlYWs7XG4gMTE4Olx0XHRcdGRlZmF1bHQ6XG4gMTE5Olx0XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG4gMTIwOlx0XHRcdFx0XHQgICAgXCYjMzQ7dW5rbm93biByZWN2X3R5cGUgJSN4XFxuXCYjMzQ7LCByZWN2X3R5cGUpO1xuIDEyMTpcdFx0XHRcdHJldCA9IC0xO1xuIDEyMjpcdFx0XHRcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcbiAxMjM6XHRcdFx0fVxuIDEyNDpcdFx0XHRicmVhaztcbiAxMjU6XHRcdGNhc2UgTVdJRklFWF9VU0JfRVBfREFUQTpcbiAxMjY6XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgREFUQSwgXCYjMzQ7JXM6IEVQX0RBVEFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiAxMjc6XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlIE1XSUZJRVhfUlhfREFUQV9CVUZfU0laRSkge1xuIDEyODpcdFx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuIDEyOTpcdFx0XHRcdFx0ICAgIFwmIzM0O0RBVEE6IHNrYi1cdTAwM2VsZW4gdG9vIGxhcmdlXFxuXCYjMzQ7KTtcbiAxMzA6XHRcdFx0XHRyZXR1cm4gLTE7XG4gMTMxOlx0XHRcdH1cbiAxMzI6XHRcbiAxMzM6XHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2YWRhcHRlci1cdTAwM2VyeF9kYXRhX3EsIHNrYik7XG4gMTM0Olx0XHRcdGFkYXB0ZXItXHUwMDNlZGF0YV9yZWNlaXZlZCA9IHRydWU7XG4gMTM1Olx0XHRcdGF0b21pY19pbmMoXHUwMDI2YWRhcHRlci1cdTAwM2VyeF9wZW5kaW5nKTtcbiAxMzY6XHRcdFx0YnJlYWs7XG4gMTM3Olx0XHRkZWZhdWx0OlxuIDEzODpcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiAxMzk6XHRcdFx0XHQgICAgXCYjMzQ7JXM6IHVua25vd24gZW5kcG9ydCAlI3hcXG5cJiMzNDssIF9fZnVuY19fLCBlcCk7XG4gMTQwOlx0XHRcdHJldHVybiAtMTtcbiAxNDE6XHRcdH1cbiAxNDI6XHRcbiAxNDM6XHRcdHJldHVybiAtRUlOUFJPR1JFU1M7XG4gMTQ0Olx0XG4gMTQ1Olx0ZXhpdF9yZXN0b3JlX3NrYjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4ODAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFdpLUZpIERyaXZlciYjMzk7cyBSZWNlaXZlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSByZWNlaXZlIHBhdGggaW4gdGhpcyBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBmcm9tIHRoZSBVU0IgaW50ZXJmYWNlLiBJdCBzZWVtcyBsaWtlIHRoZSBgbXdpZmlleF91c2JfcmVjdmAgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGluY29taW5nIGRhdGEuIEl0IGxvb2tzIGxpa2UgaXQgcXVldWVzIHRoZSByZWNlaXZlZCBkYXRhIHRvIHRoZSBhZGFwdGVyJiMzOTtzIHJlY2VpdmUgZGF0YSBxdWV1ZSwgc3BlY2lmaWNhbGx5IGBhZGFwdGVyLSZndDtyeF9kYXRhX3FgLCBhbmQgdGhlbiBjcnVjaWFsbHkgc2V0cyB0aGUgYGFkYXB0ZXItJmd0O2RhdGFfcmVjZWl2ZWRgIGZsYWcgdG8gYHRydWVgLiBUaGlzIGxpa2VseSBzaWduYWxzIHRoYXQgbmV3IGRhdGEgaXMgYXZhaWxhYmxlIGZvciBwcm9jZXNzaW5nLgoKVGhlIG5leHQgcGllY2Ugb2YgdGhlIHB1enpsZSBpcyBgbXdpZmlleF9tYWluX3Byb2Nlc3NgLiBGcm9tIGhlcmUsIHRoZSBleGVjdXRpb24gZmxvdyBicmFuY2hlcyB0byBgbXdpZmlleF9xdWV1ZV9yeF93b3JrKGFkYXB0ZXIpYC4gVGhpcyBsb29rcyBsaWtlIGl0JiMzOTtzIGEgbWVjaGFuaXNtIGZvciBkZWZlcnJpbmcgdGhlIHJ4IHByb2Nlc3NpbmcsIHBsYWNpbmcgYG13aWZpZXhfcnhfd29ya19xdWV1ZWAgaW50byBhIHdvcmtxdWV1ZS4gVGhpcywgaW4gdHVybiwgY2FsbHMgYG13aWZpZXhfcHJvY2Vzc19yeChhZGFwdGVyKWAuIFRoYXQgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIGhlYXZ5IGxpZnRpbmcgb2YgYWN0dWFsbHkgaGFuZGxpbmcgdGhlIHJlY2VpdmVkIGRhdGEgbGlrZWx5IGhhcHBlbnMuCgpJJiMzOTttIG5vdyBnb2luZyB0byBkaWcgaW50byBgbXdpZmlleF9wcm9jZXNzX3J4YCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIHNob3VsZCBiZS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIHJlYWwgZGV0YWlscyBvbiBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZCwgZGUtcXVldWVkLCBhbmQgcHJvY2Vzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3NDpcdHN0YXRpYyBpbnQgbXdpZmlleF9wcm9jZXNzX3J4KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG4gMTc1Olx0e1xuIDE3NjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAxNzc6XHRcdHN0cnVjdCBtd2lmaWV4X3J4aW5mbyAqcnhfaW5mbztcbiAxNzg6XHRcbiAxNzk6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZXJ4X3Byb2NfbG9jayk7XG4gMTgwOlx0XHRpZiAoYWRhcHRlci1cdTAwM2VyeF9wcm9jZXNzaW5nIHx8IGFkYXB0ZXItXHUwMDNlcnhfbG9ja2VkKSB7XG4gMTgxOlx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlcnhfcHJvY19sb2NrKTtcbiAxODI6XHRcdFx0Z290byBleGl0X3J4X3Byb2M7XG4gMTgzOlx0XHR9IGVsc2Uge1xuIDE4NDpcdFx0XHRhZGFwdGVyLVx1MDAzZXJ4X3Byb2Nlc3NpbmcgPSB0cnVlO1xuIDE4NTpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZXJ4X3Byb2NfbG9jayk7XG4gMTg2Olx0XHR9XG4gMTg3Olx0XG4gMTg4Olx0XHQvKiBDaGVjayBmb3IgUnggZGF0YSAqL1xuIDE4OTpcdFx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZhZGFwdGVyLVx1MDAzZXJ4X2RhdGFfcSkpKSB7XG4gMTkwOlx0XHRcdGF0b21pY19kZWMoXHUwMDI2YWRhcHRlci1cdTAwM2VyeF9wZW5kaW5nKTtcbiAxOTE6XHRcdFx0aWYgKChhZGFwdGVyLVx1MDAzZWRlbGF5X21haW5fd29yayB8fFxuIDE5MjpcdFx0XHQgICAgIGFkYXB0ZXItXHUwMDNlaWZhY2VfdHlwZSA9PSBNV0lGSUVYX1VTQikgXHUwMDI2XHUwMDI2XG4gMTkzOlx0XHRcdCAgICAoYXRvbWljX3JlYWQoXHUwMDI2YWRhcHRlci1cdTAwM2VyeF9wZW5kaW5nKSBcdTAwM2MgTE9XX1JYX1BFTkRJTkcpKSB7XG4gMTk0Olx0XHRcdFx0aWYgKGFkYXB0ZXItXHUwMDNlaWZfb3BzLnN1Ym1pdF9yZW1fcnhfdXJicylcbiAxOTU6XHRcdFx0XHRcdGFkYXB0ZXItXHUwMDNlaWZfb3BzLnN1Ym1pdF9yZW1fcnhfdXJicyhhZGFwdGVyKTtcbiAxOTY6XHRcdFx0XHRhZGFwdGVyLVx1MDAzZWRlbGF5X21haW5fd29yayA9IGZhbHNlO1xuIDE5NzpcdFx0XHRcdG13aWZpZXhfcXVldWVfbWFpbl93b3JrKGFkYXB0ZXIpO1xuIDE5ODpcdFx0XHR9XG4gMTk5Olx0XHRcdHJ4X2luZm8gPSBNV0lGSUVYX1NLQl9SWENCKHNrYik7XG4gMjAwOlx0XHRcdGlmIChyeF9pbmZvLVx1MDAzZWJ1Zl90eXBlID09IE1XSUZJRVhfVFlQRV9BR0dSX0RBVEEpIHtcbiAyMDE6XHRcdFx0XHRpZiAoYWRhcHRlci1cdTAwM2VpZl9vcHMuZGVhZ2dyX3BrdClcbiAyMDI6XHRcdFx0XHRcdGFkYXB0ZXItXHUwMDNlaWZfb3BzLmRlYWdncl9wa3QoYWRhcHRlciwgc2tiKTtcbiAyMDM6XHRcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIDIwNDpcdFx0XHR9IGVsc2Uge1xuIDIwNTpcdFx0XHRcdG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChhZGFwdGVyLCBza2IpO1xuIDIwNjpcdFx0XHR9XG4gMjA3Olx0XHR9XG4gMjA4Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VyeF9wcm9jX2xvY2spO1xuIDIwOTpcdFx0YWRhcHRlci1cdTAwM2VyeF9wcm9jZXNzaW5nID0gZmFsc2U7XG4gMjEwOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZXJ4X3Byb2NfbG9jayk7XG4gMjExOlx0XG4gMjEyOlx0ZXhpdF9yeF9wcm9jOlxuIDIxMzpcdFx0cmV0dXJuIDA7XG4gMjE0Olx0fVxuIDIxNTpcdFxuIDIxNjpcdHN0YXRpYyB2b2lkIG1heWJlX3F1aXJrX2Z3X2Rpc2FibGVfZHMoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbiAyMTc6XHR7XG4gMjE4Olx0XHRzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLCBNV0lGSUVYX0JTU19ST0xFX1NUQSk7XG4gMjE5Olx0XHRzdHJ1Y3QgbXdpZmlleF92ZXJfZXh0IHZlcl9leHQ7XG4gMjIwOlx0XG4gMjIxOlx0XHRpZiAodGVzdF9hbmRfc2V0X2JpdChNV0lGSUVYX0lTX1JFUVVFU1RJTkdfRldfVkVSRVhULCBcdTAwMjZhZGFwdGVyLVx1MDAzZXdvcmtfZmxhZ3MpKVxuIDIyMjpcdFx0XHRyZXR1cm47XG4gMjIzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTYxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlJiMzOTtzIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBjYWxsIHN0YXJ0cyB3aXRoIGBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXRgLCBnb3QgaXQuIFRoYXQgdGhlbiBicmFuY2hlcyBvdXQgdG8gZWl0aGVyIGBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldGAgb3IgYG13aWZpZXhfcHJvY2Vzc191YXBfcnhfcGFja2V0YCwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBGcm9tIHRoZXJlLCB3ZSBoaXQgYG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0YCBhbmQgdGhlbiBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0YC4gRmluYWxseSwgd2UgZ2V0IHRvIHRoZSBjcml0aWNhbCBmdW5jdGlvbjogYG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdGAuIFRoYXQgaXMgZ29vZCEKClRoaXMgZmxvdyBjb25maXJtcyB0aGF0IHRoaXMgc2VjdGlvbiBvZiBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggYSBVU0IgZ2FkZ2V0IGZ1enppbmcgYXBwcm9hY2guIFdlIGhhdmUgYSBjbGVhciBwYXRoIG9mIGZ1bmN0aW9uIGNhbGxzIHRoYXQgbGVhZHMgcmlnaHQgdG8gaXQuIEV4Y2VsbGVudCEKCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZSBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3QuIFdlJiMzOTtsbCBuZWVkIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBlbmFibGVkIGluIHRoZSBidWlsZC4gV2FpdCwgYE1XSUZJRVhfVVNCYCAqZGVwZW5kcyogb24gYm90aCBgTVdJRklFWGAgYW5kIGBVU0JgLCBvZiBjb3Vyc2UuIFNvLCB5ZXMsIHdlIG5lZWQgYm90aCBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgdG8gZW5zdXJlIHRoaXMgY29kZSBpcyBidWlsdCBpbnRvIHRoZSBVU0IgZ2FkZ2V0LiBHb29kLgoKQmFjayB0byB0aGUgY29kZSwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgcmlnaHQ/IEkgcmVjYWxsIHRoYXQgaXQgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcGFja2V0IHR5cGUgaXMgYFBLVF9UWVBFX0FNU0RVYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGxlMTZfdG9fY3B1KGxvY2FsX3J4X3BkLSZndDtyeF9wa3RfdHlwZSkgPT0gUEtUX1RZUEVfQU1TRFVgLiBJdCBhbHNvIHByb2Nlc3NlcyBURExTIGFjdGlvbiBmcmFtZXMuIFJpZ2h0LCBhbmQgdGhlIHBhdGNoIGZpeGVzIHRoZSBhc3NpZ25tZW50IG9mIGBza2ItJmd0O2xlbmAgdG8gYHJ4X3NrYi0mZ3Q7bGVuYCBiZWZvcmUgY2FsbGluZyBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYC4KCk5leHQgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgYmVoYXZpb3VyIG9mIGBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVgIG5vdywgYnV0IHRoaXMgbG9va3MgbGlrZSBhIGdvb2Qgc3BvdCB0byBzdGFydCBvdXIgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz0yMD1zdGF0aWMgaW50IG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNDQtXHRcdFx0ICAgIG50b2hzKHJ4X2hkci1cdTAwM2VldGg4MDNfaGRyLmhfcHJvdG8pID09IEVUSF9QX1RETFMpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6NDU6XHRcdFx0XHRtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWUocHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNDYtXHRcdFx0XHRcdFx0XHRcdCAgKHU4ICopcnhfaGRyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg9MTYwMz1pbnQgbXdpZmlleF9zZW5kX3RkbHNfYWN0aW9uX2ZyYW1lKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNvbnN0IHU4ICpwZWVyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTYwNi1cdFx0XHRcdCAgIHNpemVfdCBleHRyYV9pZXNfbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTYwNzp2b2lkIG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNjA4LVx0XHRcdFx0ICAgICAgIHU4ICpidWYsIGludCBsZW4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYz03MT1pbnQgbXdpZmlleF9wcm9jZXNzX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0xNTAtXHRcdG9mZnNldCA9ICh1OCAqKWxvY2FsX3J4X3BkICYjNDM7IHJ4X3BrdF9vZmY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM6MTUxOlx0XHRtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWUocHJpdiwgb2Zmc2V0LCByeF9wa3RfbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0xNTItXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3RkbHMuYz04MDk9aW50IG13aWZpZXhfc2VuZF90ZGxzX2FjdGlvbl9mcmFtZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqcGVlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdGRscy5jLTg4OS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90ZGxzLmM6ODkwOnZvaWQgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdGRscy5jLTg5MS1cdFx0XHRcdCAgICAgICB1OCAqYnVmLCBpbnQgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY3MAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDM5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQcmlvcml0aXppbmcgRnV6emluZyBUYXJnZXRzIGluIHRoZSBtd2lmaWV4IERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBzb21lIGtleSBmdW5jdGlvbnMgaW4gdGhlIGBtd2lmaWV4YCBkcml2ZXIgZm9yIGZ1enppbmcuIEluaXRpYWxseSwgSSB0aG91Z2h0IGBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVgLCBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCwgYG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0YCwgYW5kIGBtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0YCB3ZXJlIHByb21pc2luZyBjYW5kaWRhdGVzLiBIb3dldmVyLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwcmVmZXJyZWQgZnV6emluZyB0YXJnZXRzOiBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgd2lsbCBiZSBtb3JlIGZydWl0ZnVsLgoKR2l2ZW4gdGhhdCwgSSYjMzk7bSBnb2luZyB0byByZXZpc2UgbXkgbGlzdC4gV2hpbGUgYG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdGAgbG9va2VkIGludGVyZXN0aW5nLCBpdCYjMzk7cyBzdGF0aWNhbGx5IGRlY2xhcmVkIHdoaWNoIHJlbmRlcnMgaXQgbGVzcyBzdWl0YWJsZSBmb3IgZnV6emluZy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlc2UgaW5zdGVhZCwgYXMgdGhleSBtZWV0IHRoZSBjcml0ZXJpYToKCiogICBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgCiogICBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYAoqICAgYG13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0YAoqICAgYG13aWZpZXhfcHJvY2Vzc191YXBfcnhfcGFja2V0YAoqICAgYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGAKClRvIGJlIGNlcnRhaW4sIGxldCBtZSB2ZXJpZnkgdGhlIHN0YXRpYyBzdGF0dXMgb2YgdGhvc2UgdGFyZ2V0cy4gQ2hlY2tpbmcgYG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0YCwgY29uZmlybWVkIGl0IGlzIG5vdCBzdGF0aWMuIFNpbWlsYXJseSwgYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAsIGBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldGAsIGBtd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldGAgYW5kIGBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXRgIGFyZSBhbHNvIG5vdCBzdGF0aWMuIFRoYXQmIzM5O3MgYSBzb2xpZCBsaXN0IHRvIHN0YXJ0IHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTUyMz1pbnQgbXdpZmlleF9jbWRfMTFuX2RlbGJhKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsIHZvaWQgKmRhdGFfYnVmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNTQ2LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo1NDc6aW50IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTU0OC1cdFx0XHRcdHUxNiBzZXFfbnVtLCB1MTYgdGlkLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9OTAyPXZvaWQgbXdpZmlleF8xMW5fcnhiYV9zeW5jX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy05NjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjk2NzpcdFx0XHRcdFx0cmV0ID0gbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtOTY4LVx0XHRcdFx0XHQocHJpdiwgc2VxX251bSwgdGx2X3J4YmEtXHUwMDNldGlkLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmg9Mzk9c3RhdGljIGlubGluZSB2b2lkIG13aWZpZXhfcmVzZXRfMTFuX3J4X3NlcV9udW0oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5oLTQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuaDo0NDppbnQgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuaC00NS1cdFx0XHQgICAgICAgdTE2IHNlcU51bSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM9MTg5PWludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0yNjAtXHQvKiBSZW9yZGVyIGFuZCBzZW5kIHRvIE9TICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM6MjYxOlx0cmV0ID0gbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3QocHJpdiwgc2VxX251bSwgbG9jYWxfcnhfcGQtXHUwMDNlcHJpb3JpdHksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtMjYyLVx0XHRcdFx0XHQgdGEsICh1OCkgcnhfcGt0X3R5cGUsIHNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmM9MzczPWludCBtd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jLTQ0Mi1cdHBrdF90eXBlID0gKHU4KWxlMTZfdG9fY3B1KHVhcF9yeF9wZC1cdTAwM2VyeF9wa3RfdHlwZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYzo0NDM6XHRyZXQgPSBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdChwcml2LCBsZTE2X3RvX2NwdSh1YXBfcnhfcGQtXHUwMDNlc2VxX251bSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYy00NDQtXHRcdFx0XHRcdCB1YXBfcnhfcGQtXHUwMDNlcHJpb3JpdHksIHRhLCBwa3RfdHlwZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MzkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIE1vZHVsZSBDb25maWd1cmF0aW9uIGZvciBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0YCAqaXMqIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBpdCBpc24mIzM5O3Qgc3RhdGljLCB3aGljaCBpcyBnb29kLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBrZXJuZWwgY29uZmlncyB0byBlbmFibGUgaXQuIEkga25vdyB0aGF0IGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBhcmUgZGVmaW5pdGVseSByZXF1aXJlZC4gQnV0IGxldCYjMzk7cyBiZSB0aG9yb3VnaCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVycy4gUmlnaHQsIGhlcmUgd2UgZ28sIGBDRkc4MDIxMWAgaXMgYSBkZXBlbmRlbmN5IG9mIGBNV0lGSUVYYCwgYW5kIGBVU0JgIGlzIGEgZGVwZW5kZW5jeSBvZiBgTVdJRklFWF9VU0JgLiBTbywgYXMgSSB0aG91Z2h0LCBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgYXJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byB3b3JyeSBhYm91dC4KCk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgaWYganVzdCBlbmFibGluZyBgTVdJRklFWF9VU0JgIGlzIHN1ZmZpY2llbnQuIFllcywgYE1XSUZJRVhfVVNCYCAqZG9lcyogc2VsZWN0IGBGV19MT0FERVJgIGFuZCwgaW1wb3J0YW50bHksIGRlcGVuZHMgb24gKmJvdGgqIGBNV0lGSUVYYCBhbmQgYFVTQmAuIEFuZCB3ZSBrbm93IHRoYXQgYE1XSUZJRVhgIGl0c2VsZiBkZXBlbmRzIG9uIGBDRkc4MDIxMWAuIFRoYXQgbG9va3MgbGlrZSBhIGNvbXBsZXRlIGFuZCB3ZWxsLWRlZmluZWQgc2V0IG9mIGRlcGVuZGVuY2llcy4KCkZpbmFsbHksIGp1c3QgZm9yIGdvb2QgbWVhc3VyZSwgbGV0JiMzOTtzIGNvbmZpcm0gd2hldGhlciBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYCBpcyBub24tc3RhdGljIGFzIHdlbGwuIFRoYXQgd2lsbCBoZWxwIHRvIGluZm9ybSB0aGUgd2lkZXIgdmlldyBvZiB3aGF0IGlzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNjAzPWludCBtd2lmaWV4X3NlbmRfdGRsc19hY3Rpb25fZnJhbWUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgY29uc3QgdTggKnBlZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNjA2LVx0XHRcdFx0ICAgc2l6ZV90IGV4dHJhX2llc19sZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxNjA3OnZvaWQgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE2MDgtXHRcdFx0XHQgICAgICAgdTggKmJ1ZiwgaW50IGxlbik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3RkbHMuYz04MDk9aW50IG13aWZpZXhfc2VuZF90ZGxzX2FjdGlvbl9mcmFtZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqcGVlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdGRscy5jLTg4OS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90ZGxzLmM6ODkwOnZvaWQgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdGRscy5jLTg5MS1cdFx0XHRcdCAgICAgICB1OCAqYnVmLCBpbnQgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM1MwoJCQkJCQkJb3V0cHV0OiAxOTgKCQkJCQkJCXRob3VnaHRzOiA1MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTWFydmVsbCBXaUZpLUV4IERyaXZlciBWdWxuZXJhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBjb25maXJtaW5nIHRoZSBvYnZpb3VzLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbm9uLXN0YXRpYyBpc3N1ZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgaW50ZXJuYWxzIG9mIHRoZSBwYWNrZXQgaGFuZGxpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGNoYWluIGFuZCBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGludm9sdmVkLgoKTXkgaW5pdGlhbCBjaGVjayBjb25maXJtcyB0aGF0IGJvdGggYG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdGAgYW5kIGBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3RgIGFyZSwgaW4gZmFjdCwgc3RhdGljIHdpdGhpbiBgMTFuX3J4cmVvcmRlci5jYC4gVGhpcyBzdWdnZXN0cyB0aGV5JiMzOTtyZSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIG1vZHVsZSwgd2hpY2ggbmFycm93cyB0aGUgc2NvcGUgb2YgdGhlIGludmVzdGlnYXRpb24uCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBjYWxsIGhpZXJhcmNoeSwgdGhlIHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uOgoKKiAgIGBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdGAKKiAgIGBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVgCiogICBgbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXRgCiogICBgbXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXRgCiogICBgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0YAoKYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGAgc2VlbXMgYSBiaXQgYnJvYWQsIGFjdGluZyBhcyBhbiBlbnRyeSBwb2ludCwgYnV0IGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgY29udGV4dC4gYG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0YCBzZWVtcyBtb3JlIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBBLU1TRFUgcHJvY2Vzc2luZywgYW5kIGBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVgIGlzIHNwZWNpZmljYWxseSB0YXJnZXRlZCBieSB0aGUgYnVnZ3kgY29kZS4KCkFoLCB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB3aXRoaW4gYG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdGAg4oCTIHByZWNpc2VseSBiZWNhdXNlIGl0JiMzOTtzIHN0YXRpYy4gVGhlIHBhdGNoIGNsZWFybHkgYWRkcmVzc2VzIHRoZSBsZW5ndGggZGlzY3JlcGFuY3ksIGNvcnJlY3RpbmcgdGhlIGluY29ycmVjdCB1c2FnZSBvZiBgc2tiLSZndDtsZW5gIHdpdGggYHJ4X3NrYi0mZ3Q7bGVuYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4LiBUaGUgZHJpdmVyIGlzIHJlYWNoYWJsZSBmb3IgdnVsbmVyYWJpbGl0eSBhbmFseXNpcyB1c2luZyBVU0IgZ2FkZ2V0IGZ1enppbmcsIGdpdmVuIHRoZSBwcmVzZW5jZSBvZiB0aGUgYE1XSUZJRVhfVVNCYCBjb25maWd1cmF0aW9uLgoKVGhlcmVmb3JlLCB0aGUgcmVzdWx0cyBhcmUgcmVhZHk6CgoqICAgKipXb3J0aEZ1enppbmc6IFRydWUqKiAoZHVlIHRvIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgVVNCIHN1cHBvcnQpCiogICAqKkZvY3VzU3ltYm9sczoqKiAoYXMgbGlzdGVkIGFib3ZlKQoqICAgKipFbmFibGVDb25maWdzOioqIGBNV0lGSUVYYCwgYE1XSUZJRVhfVVNCYAoKVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxlbmd0aC1yZWxhdGVkIGJ1ZyBpbiB0aGUgQS1NU0RVIHBhY2tldCBwcm9jZXNzaW5nIHBhdGggd2l0aGluIHRoZSBNYXJ2ZWxsIFdpRmktRXggZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2hlbiBjYWxsaW5nIGBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVgLiBUaGUgYnVnIGNhbiBiZSByZXByb2R1Y2VkIHVzaW5nIFVTQiBnYWRnZXQgZW11bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVdJRklFWCYjMzQ7LAogICAgJiMzNDtNV0lGSUVYX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O213aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0JiMzNDssCiAgICAmIzM0O213aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZSYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIE1hcnZlbGwgV2lGaS1FeCBkcml2ZXIgd2hlcmUgdGhlIHdyb25nIHNrYiBsZW5ndGggd2FzIHBhc3NlZCB0byBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYCB3aGVuIHByb2Nlc3NpbmcgQS1NU0RVIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gVGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgaW50ZXJmYWNlcyAoYE1XSUZJRVhfVVNCYCksIHNvIGl0IGNhbiBiZSBmdXp6ZWQgdXNpbmcgVVNCIGdhZGdldCBlbXVsYXRpb24gKHZoY2kpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNV0lGSUVYJiMzNDssCiAgICAmIzM0O01XSUZJRVhfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3QmIzM0OywKICAgICYjMzQ7bXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lJiMzNDssCiAgICAmIzM0O213aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0JiMzNDssCiAgICAmIzM0O213aWZpZXhfcHJvY2Vzc191YXBfcnhfcGFja2V0JiMzNDssCiAgICAmIzM0O213aWZpZXhfaGFuZGxlX3J4X3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgTWFydmVsbCBXaUZpLUV4IGRyaXZlciB3aGVyZSB0aGUgd3Jvbmcgc2tiIGxlbmd0aCB3YXMgcGFzc2VkIHRvIGBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVgIHdoZW4gcHJvY2Vzc2luZyBBLU1TRFUgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoLiBUaGUgZHJpdmVyIHN1cHBvcnRzIFVTQiBpbnRlcmZhY2VzIChgTVdJRklFWF9VU0JgKSwgc28gaXQgY2FuIGJlIGZ1enplZCB1c2luZyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiAodmhjaSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0NzozNC41MDU3NDcwMjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ4NTEzOTUwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVdJRklFWFwiLFxuICAgIFwiTVdJRklFWF9VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdFwiLFxuICAgIFwibXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lXCIsXG4gICAgXCJtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldFwiLFxuICAgIFwibXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXRcIixcbiAgICBcIm13aWZpZXhfaGFuZGxlX3J4X3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBNYXJ2ZWxsIFdpRmktRXggZHJpdmVyIHdoZXJlIHRoZSB3cm9uZyBza2IgbGVuZ3RoIHdhcyBwYXNzZWQgdG8gYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAgd2hlbiBwcm9jZXNzaW5nIEEtTVNEVSBwYWNrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIFRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGludGVyZmFjZXMgKGBNV0lGSUVYX1VTQmApLCBzbyBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIFVTQiBnYWRnZXQgZW11bGF0aW9uICh2aGNpKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDc6MzQuNTA1NzU0NjQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzYzNDQ1NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3OTM4NjcxYzc4Y2Y2ZWJhYmFkYmQxOGM2ZWQ5OTU5MmMzZmE5NGNmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDEwOjQ3OjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jXFxuaW5kZXggNjEwZWM4MzAyYWRmMi4uOWRlYjQ3ZjIyYTYxNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuY1xcbkBAIC00NCw3ICs0NCw3IEBAIHN0YXRpYyBpbnQgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuIFxcdFxcdFxcdCAgICBudG9ocyhyeF9oZHItXFx1MDAzZWV0aDgwM19oZHIuaF9wcm90bykgPT0gRVRIX1BfVERMUykge1xcbiBcXHRcXHRcXHRcXHRtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWUocHJpdixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAodTggKilyeF9oZHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHJ4X3NrYi1cXHUwMDNlbGVuKTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWJzc19yb2xlID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0NzozNS4wODI4NjczMjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjQyNzQyNTk1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVdJRklFWFwiLFxuICAgIFwiTVdJRklFWF9VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdFwiLFxuICAgIFwibXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lXCIsXG4gICAgXCJtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldFwiLFxuICAgIFwibXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXRcIixcbiAgICBcIm13aWZpZXhfaGFuZGxlX3J4X3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBNYXJ2ZWxsIFdpRmktRXggZHJpdmVyIHdoZXJlIHRoZSB3cm9uZyBza2IgbGVuZ3RoIHdhcyBwYXNzZWQgdG8gYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAgd2hlbiBwcm9jZXNzaW5nIEEtTVNEVSBwYWNrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIFRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGludGVyZmFjZXMgKGBNV0lGSUVYX1VTQmApLCBzbyBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIFVTQiBnYWRnZXQgZW11bGF0aW9uICh2aGNpKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzkzODY3MWM3OGNmNmViYWJhZGJkMThjNmVkOTk1OTJjM2ZhOTRjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDEwOjQ3OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmNcbmluZGV4IDYxMGVjODMwMmFkZjIuLjlkZWI0N2YyMmE2MTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jXG5AQCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgaW50IG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuIFx0XHRcdCAgICBudG9ocyhyeF9oZHItXHUwMDNlZXRoODAzX2hkci5oX3Byb3RvKSA9PSBFVEhfUF9URExTKSB7XG4gXHRcdFx0XHRtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWUocHJpdixcbiBcdFx0XHRcdFx0XHRcdFx0ICAodTggKilyeF9oZHIsXG4tXHRcdFx0XHRcdFx0XHRcdCAgc2tiLVx1MDAzZWxlbik7XG4rXHRcdFx0XHRcdFx0XHRcdCAgcnhfc2tiLVx1MDAzZWxlbik7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChwcml2LVx1MDAzZWJzc19yb2xlID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDc6MzUuMDgyODY4NjMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4Njc1MzkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIFN1c3BlY3QgUGF0Y2ggaW4gbXdpZmlleCoqXG5cbkFscmlnaHQsIGEgcGF0Y2ggaGFzIGJlZW4gZmxhZ2dlZCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuY2AuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBzd2FwcGVkIGBza2ItXHUwMDNlbGVuYCB3aXRoIGByeF9za2ItXHUwMDNlbGVuYCB3aXRoaW4gdGhlIGBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3RgIGZ1bmN0aW9uLiBIbW0sIHRoYXQncyBhIHByZXR0eSBsb3ctbGV2ZWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgKlNLQiogbGVuZ3RoLiBUaGF0J3MgaW1tZWRpYXRlbHkgcmFpc2luZyBzb21lIGZsYWdzIGZvciBtZTsgbWlzaGFuZGxpbmcgKlNLQiogbGVuZ3RocyBpcyBhIGNsYXNzaWMgc291cmNlIG9mIGFsbCBraW5kcyBvZiBuYXN0eSBpc3N1ZXMg4oCTIGJ1ZmZlciBvdmVyZmxvd3MsIHVuZGVyZmxvd3MsIGFuZCBqdXN0IGdlbmVyYWwgZGF0YSBjb3JydXB0aW9uLiBMZXQncyBkaWcgaW50byBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCBhbmQgc2VlIHdoYXQncyByZWFsbHkgZ29pbmcgb24gdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGhvdyB0aGUgKlNLQiogaXMgYmVpbmcgdXNlZCBhbmQgbW9kaWZpZWQsIGFuZCB3aGF0IHRoZXNlIHZhcmlhYmxlcyAqc2tiKiBhbmQgKnJ4X3NrYiogcmVwcmVzZW50IGluIHRoYXQgY29udGV4dC4gV2hhdCdzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlPyBDb3VsZCBpdCBiZSBiZW5pZ24sIGEgc2ltcGxlIHR5cG8sIG9yIGlzIHRoZXJlIGEgbW9yZSBmdW5kYW1lbnRhbCBtaXN1bmRlcnN0YW5kaW5nIG9mIHRoZSBBLU1TRFUgcmVhc3NlbWJseSBwcm9jZXNzIGF0IHBsYXk/IEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHZlcnkgY2FyZWZ1bGx5LCBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2l0IGFzc3VtcHRpb25zLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcg4oCTIGxldCdzIGhvcGUgdGhpcyBpc24ndCBzb21ldGhpbmcgdGhhdCBjYW4gY2F1c2UgbmV0d29yayBpbnN0YWJpbGl0eSwgb3Igd29yc2UsIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMSwiT3V0cHV0VG9rZW5zIjo1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDc6MzkuMjY5NjI1MjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUwMDkyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0xOS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjIwOnN0YXRpYyBpbnQgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0yMS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTY3PXN0YXRpYyBpbnQgbXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTc3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6Nzg6XFx0cmV0ID0gbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0KHByaXYsIHBheWxvYWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNzktXFx0aWYgKCFyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjQ3OjM5LjM2NDY2MTEyOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzM1MzQwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3RgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoaXMgTWFydmVsbCBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5J3JlIGhhbmRsaW5nIEEtTVNEVSBwYWNrZXQgZGlzcGF0Y2gsIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdGAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmNgLiBJJ20gc3BlY2lmaWNhbGx5IGN1cmlvdXMgYWJvdXQgaG93IHRoZXkncmUgbWFuYWdpbmcgdGhhdCAxMW4tc3BlY2lmaWMgcmVvcmRlcmluZy4gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgbG9naWMgZm9yIGhvdyB0aGV5IHRha2UgdGhvc2UgZnJhZ21lbnRlZCBNU0RVcyBhbmQgcHV0IHRoZW0gYmFjayB0b2dldGhlci4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3IgYSBjbGV2ZXIsIG9yIHBlcmhhcHMgY29tcGxleCwgbWV0aG9kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg1LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDc6NDIuNDk4MTk5MDc2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0c3RhdGljIGludCBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4gIDIxOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDIyOlxcdHtcXG4gIDIzOlxcdFxcdHN0cnVjdCByeHBkICpsb2NhbF9yeF9wZCA9IChzdHJ1Y3QgcnhwZCAqKShza2ItXFx1MDAzZWRhdGEpO1xcbiAgMjQ6XFx0XFx0aW50IHJldDtcXG4gIDI1OlxcdFxcbiAgMjY6XFx0XFx0aWYgKGxlMTZfdG9fY3B1KGxvY2FsX3J4X3BkLVxcdTAwM2VyeF9wa3RfdHlwZSkgPT0gUEtUX1RZUEVfQU1TRFUpIHtcXG4gIDI3OlxcdFxcdFxcdHN0cnVjdCBza19idWZmX2hlYWQgbGlzdDtcXG4gIDI4OlxcdFxcdFxcdHN0cnVjdCBza19idWZmICpyeF9za2I7XFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdFxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bGlzdCk7XFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgbGUxNl90b19jcHUobG9jYWxfcnhfcGQtXFx1MDAzZXJ4X3BrdF9vZmZzZXQpKTtcXG4gIDMzOlxcdFxcdFxcdHNrYl90cmltKHNrYiwgbGUxNl90b19jcHUobG9jYWxfcnhfcGQtXFx1MDAzZXJ4X3BrdF9sZW5ndGgpKTtcXG4gIDM0OlxcdFxcbiAgMzU6XFx0XFx0XFx0aWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKHNrYiwgXFx1MDAyNmxpc3QsIHByaXYtXFx1MDAzZWN1cnJfYWRkcixcXG4gIDM2OlxcdFxcdFxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2V3ZGV2LmlmdHlwZSwgMCwgTlVMTCwgTlVMTCwgZmFsc2UpO1xcbiAgMzc6XFx0XFxuICAzODpcXHRcXHRcXHR3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2bGlzdCkpIHtcXG4gIDM5OlxcdFxcdFxcdFxcdHN0cnVjdCByeF9wYWNrZXRfaGRyICpyeF9oZHI7XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdFxcdFxcdHJ4X3NrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmxpc3QpO1xcbiAgNDI6XFx0XFx0XFx0XFx0cnhfaGRyID0gKHN0cnVjdCByeF9wYWNrZXRfaGRyICopcnhfc2tiLVxcdTAwM2VkYXRhO1xcbiAgNDM6XFx0XFx0XFx0XFx0aWYgKElTU1VQUF9URExTX0VOQUJMRUQocHJpdi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlZndfY2FwX2luZm8pIFxcdTAwMjZcXHUwMDI2XFxuICA0NDpcXHRcXHRcXHRcXHQgICAgbnRvaHMocnhfaGRyLVxcdTAwM2VldGg4MDNfaGRyLmhfcHJvdG8pID09IEVUSF9QX1RETFMpIHtcXG4gIDQ1OlxcdFxcdFxcdFxcdFxcdG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZShwcml2LFxcbiAgNDY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAodTggKilyeF9oZHIsXFxuICA0NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHJ4X3NrYi1cXHUwMDNlbGVuKTtcXG4gIDQ4OlxcdFxcdFxcdFxcdH1cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWJzc19yb2xlID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQKVxcbiAgNTE6XFx0XFx0XFx0XFx0XFx0cmV0ID0gbXdpZmlleF91YXBfcmVjdl9wYWNrZXQocHJpdiwgcnhfc2tiKTtcXG4gIDUyOlxcdFxcdFxcdFxcdGVsc2VcXG4gIDUzOlxcdFxcdFxcdFxcdFxcdHJldCA9IG13aWZpZXhfcmVjdl9wYWNrZXQocHJpdiwgcnhfc2tiKTtcXG4gIDU0OlxcdFxcdFxcdFxcdGlmIChyZXQgPT0gLTEpXFxuICA1NTpcXHRcXHRcXHRcXHRcXHRtd2lmaWV4X2RiZyhwcml2LVxcdTAwM2VhZGFwdGVyLCBFUlJPUixcXG4gIDU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiUnggb2YgQS1NU0RVIGZhaWxlZFxcXCIpO1xcbiAgNTc6XFx0XFx0XFx0fVxcbiAgNTg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA1OTpcXHRcXHR9XFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdHJldHVybiAtMTtcXG4gIDYyOlxcdH1cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0LyogVGhpcyBmdW5jdGlvbiB3aWxsIHByb2Nlc3MgdGhlIHJ4IHBhY2tldCBhbmQgZm9yd2FyZCBpdCB0byBrZXJuZWwvdXBwZXJcXG4gIDY1OlxcdCAqIGxheWVyLlxcbiAgNjY6XFx0ICovXFxuICA2NzpcXHRzdGF0aWMgaW50IG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbiAgNjg6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpwYXlsb2FkKVxcbiAgNjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo0Mi40OTgzNTk2NzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA2NjQ0OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFdpcmVsZXNzIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGEgd2lyZWxlc3MgZHJpdmVyLCBhbmQgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgZml4LCB0aGFua2Z1bGx5LiBJdCBhZGRyZXNzZXMgYSBidWcgd2l0aGluIHRoZSBoYW5kbGluZyBvZiBURExTIGFjdGlvbiBmcmFtZXMgaW5zaWRlIGFuIEEtTVNEVSBwYWNrZXQuIEl0IHNlZW1zIHRoZSBjb2RlIHdhcyBtaXN0YWtlbmx5IHJlZmVyZW5jaW5nIGBza2ItXHUwMDNlbGVuYCBpbnN0ZWFkIG9mIHRoZSBjb3JyZWN0IGByeF9za2ItXHUwMDNlbGVuYCBkdXJpbmcgcHJvY2Vzc2luZy4gVGhhdCdzIGEgZnVuY3Rpb25hbCBidWcsIHdoaWNoIG1lYW5zIHdlIGNhbiBsaWtlbHkgZXhwZWN0IGltcHJvdmVkIHN0YWJpbGl0eSBvciBjb3JyZWN0IGJlaGF2aW9yIGFmdGVyIHRoaXMgaXMgYXBwbGllZC4gTm93LCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSBpZiB0aGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gTGV0J3MgZGlnIGludG8gdGhlIEtjb25maWcgZm9yIG13aWZpZXggdG8gZ2V0IHRoZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTc5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo0Ni4xMDUwMDc2OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY4ODQ4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1XSUZJRVhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoyOmNvbmZpZyBNV0lGSUVYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTExLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjEyOmNvbmZpZyBNV0lGSUVYX1NESU9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xMy1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgU0Q4Nzg2L1NEODc4Ny9TRDg3OTcvU0Q4ODg3L1NEODg5Ny9TRDg5NzcvU0Q4OTc4L1NEODk4Ny9TRDg5OTdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoyNTpjb25maWcgTVdJRklFWF9QQ0lFXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFBDSUUgODc2Ni84ODk3Lzg5OTdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzozNzpjb25maWcgTVdJRklFWF9VU0JcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zOC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgVVNCODc2Ni84Nzk3Lzg5OTdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjQ3OjQ2LjE4MTkwMDIyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mjc1NzMzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnYCBmaWxlLCBhcyBJIHVuZGVyc3RhbmQgaXQ6XG5cbioqRXhhbWluaW5nIHRoZSBNd2lmaWV4IEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgS2NvbmZpZ2AgZmlsZSBmb3IgdGhlIE1hcnZlbGwgbXdpZmlleCB3aXJlbGVzcyBkcml2ZXIuIEZpcnN0LCBJIGV4cGVjdCB0aGlzIHRvIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZHJpdmVyLCBkZXRhaWxpbmcgYWxsIHRoZSBmZWF0dXJlcyBhbmQgZnVuY3Rpb25hbGl0aWVzIHRoYXQgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZHVyaW5nIGtlcm5lbCBjb21waWxhdGlvbi4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSd2ZSBzdHJ1Y3R1cmVkIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCB3aGVyZSB0aGV5J3ZlIGhvb2tlZCBpbnRvIHRoZSBvdmVyYWxsIGtlcm5lbCBjb25maWd1cmF0aW9uIGhpZXJhcmNoeS4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkcml2ZXIncyBtb2R1bGFyaXR5LCB3aGljaCBtb2R1bGVzIGFyZSBjcml0aWNhbCwgYW5kIHdoYXQgbGV2ZWxzIG9mIHN1cHBvcnQgYXJlIGltcGxlbWVudGVkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhleSd2ZSBpbmNsdWRlZCBvcHRpb25zIGZvciBwb3dlciBtYW5hZ2VtZW50LCBzZWN1cml0eSBmZWF0dXJlcyBsaWtlIFdQQS9XUEEyL1dQQTMgc3VwcG9ydCwgYW5kIGRpZmZlcmVudCByZWd1bGF0b3J5IGRvbWFpbnMuIEknbGwgYmUgYXNzZXNzaW5nIGhvdyB3ZWxsIHRoZSBvcHRpb25zIGFyZSBkb2N1bWVudGVkLiBBcmUgdGhlIGhlbHAgdGV4dHMgY2xlYXIgYW5kIGNvbmNpc2U/IERvIHRoZXkgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgZm9yIGEgdXNlciB0byBtYWtlIGluZm9ybWVkIGNob2ljZXM/IEZpbmFsbHksIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB2ZW5kb3Itc3BlY2lmaWMgb3B0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIGRyaXZlciwgb3IgaWYgaXQgaXMgdGFpbG9yZWQgdG8gc3BlY2lmaWMgTWFydmVsbCBjaGlwc2V0cyBvciBoYXJkd2FyZSByZXZpc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo1MC4wMDk0Nzc2MDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTVdJRklFWFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXJcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBNYXJ2ZWxsXFxuICAgNzpcXHRcXHQgIDgwMi4xMW4vYWMgY2hpcHNldHMuXFxuICAgODpcXHRcXG4gICA5OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcXG4gIDEwOlxcdFxcdCAgbXdpZmlleC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0Y29uZmlnIE1XSUZJRVhfU0RJT1xcbiAgMTM6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFNEODc4Ni9TRDg3ODcvU0Q4Nzk3L1NEODg4Ny9TRDg4OTcvU0Q4OTc3L1NEODk3OC9TRDg5ODcvU0Q4OTk3XFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBNV0lGSUVYIFxcdTAwMjZcXHUwMDI2IE1NQ1xcbiAgMTU6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMTY6XFx0XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBNYXJ2ZWxsXFxuICAxOTpcXHRcXHQgIDg3ODYvODc4Ny84Nzk3Lzg4ODcvODg5Ny84OTc3Lzg5NzgvODk4Ny84OTk3IGNoaXBzZXRzIHdpdGhcXG4gIDIwOlxcdFxcdCAgU0RJTyBpbnRlcmZhY2UuIFNEODk3OCBpcyBhbHNvIGtub3duIGFzIE5YUCBJVzQxNi5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZFxcbiAgMjM6XFx0XFx0ICBtd2lmaWV4X3NkaW8uXFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBNV0lGSUVYX1BDSUVcXG4gIDI2OlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBQQ0lFIDg3NjYvODg5Ny84OTk3XFxcIlxcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBNV0lGSUVYIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiAgMjg6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjk6XFx0XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBNYXJ2ZWxsXFxuICAzMjpcXHRcXHQgIDg3NjYvODg5Ny84OTk3IGNoaXBzZXRzIHdpdGggUENJZSBpbnRlcmZhY2UuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcXG4gIDM1OlxcdFxcdCAgbXdpZmlleF9wY2llLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRjb25maWcgTVdJRklFWF9VU0JcXG4gIDM4OlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBVU0I4NzY2Lzg3OTcvODk5N1xcXCJcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gTVdJRklFWCBcXHUwMDI2XFx1MDAyNiBVU0JcXG4gIDQwOlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDQxOlxcdFxcdGhlbHBcXG4gIDQyOlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIE1hcnZlbGxcXG4gIDQzOlxcdFxcdCAgODc5Ny84OTk3IGNoaXBzZXQgd2l0aCBVU0IgaW50ZXJmYWNlLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXFxuICA0NjpcXHRcXHQgIG13aWZpZXhfdXNiLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo1MC4wMDk2MTk2OThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0NzIyNDIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTWFydmVsbCBXaUZpLUV4IERyaXZlciwgc3BlY2lmaWNhbGx5LiBJdCdzIGJ1aWx0IHRvIHN1cHBvcnQgU0RJTywgUENJZSwgKmFuZCogVVNCLiBUaGUgVVNCIGludGVyZmFjZSwgdGhhdCdzIGtleS4gVGhhdCBgTVdJRklFWF9VU0JgIGluZGljYXRlcyBpdCBjYW4gYmUgZnV6emVkIHZpYSBgdmhjaWAsIHdoaWNoIGlzIGEgZmFudGFzdGljIGFuZ2xlIOKAkyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiBvcGVucyB1cCBhIHdvcmxkIG9mIHBvc3NpYmlsaXRpZXMgZm9yIGluamVjdGluZyBtYWxpY2lvdXMgZGF0YS5cblxuUmlnaHQsIHNvIEkgc2VlIHRoaXMgZnVuY3Rpb24sIGBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3RgLCBiZWluZyBjYWxsZWQgZnJvbSBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0YC4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW4gYW5kIGRhdGEgZmxvdywgYW5kIGZpZ3VyaW5nIG91dCB3aGVyZSBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0YCBpcyBjYWxsZWQgd2lsbCBiZSB2aXRhbCBmb3IgZXhwbG9pdGF0aW9uLiBUaGlzIGlzIHdoZXJlIEkgd2FudCB0byBmb2N1cyBteSBhdHRlbnRpb24uIExldCdzIHNlZSBob3cgZGVlcCB3ZSBjYW4gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo1NC4zNTY4NDgyMTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3OTYxOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9MjA9c3RhdGljIGludCBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNjYtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo2NzpzdGF0aWMgaW50IG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNjgtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpwYXlsb2FkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz05Nj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6OTc6bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0X3VudGlsX3N0YXJ0X3dpbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtOTgtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBtd2lmaWV4X3J4X3Jlb3JkZXJfdGJsICp0YmwsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTEzMi1cXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmxpc3QpKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjEzMzpcXHRcXHRtd2lmaWV4XzExbl9kaXNwYXRjaF9wa3QocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTEzNC19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTE0NT1td2lmaWV4XzExbl9zY2FuX2FuZF9kaXNwYXRjaChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0xNzgtXFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFxcdTAwMjZsaXN0KSkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzoxNzk6XFx0XFx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0KHByaXYsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0xODAtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz0xODk9bXdpZmlleF9kZWxfcnhfcmVvcmRlcl9lbnRyeShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0yMDYtXFx0c3RhcnRfd2luID0gKHRibC1cXHUwMDNlc3RhcnRfd2luICsgdGJsLVxcdTAwM2V3aW5fc2l6ZSkgXFx1MDAyNiAoTUFYX1RJRF9WQUxVRSAtIDEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6MjA3OlxcdG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdF91bnRpbF9zdGFydF93aW4ocHJpdiwgdGJsLCBzdGFydF93aW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtMjA4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz0zMDA9bXdpZmlleF9mbHVzaF9kYXRhKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0zMTMtXFx0c3RhcnRfd2luID0gKGN0eC1cXHUwMDNlcHRyLVxcdTAwM2VzdGFydF93aW4gKyBzZXFfbnVtICsgMSkgXFx1MDAyNiAoTUFYX1RJRF9WQUxVRSAtIDEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6MzE0OlxcdG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdF91bnRpbF9zdGFydF93aW4oY3R4LVxcdTAwM2Vwcml2LCBjdHgtXFx1MDAzZXB0cixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTMxNS1cXHRcXHRcXHRcXHRcXHRcXHQgc3RhcnRfd2luKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9MzI5PW13aWZpZXhfMTFuX2NyZWF0ZV9yeF9yZW9yZGVyX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqdGEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTM0Mi1cXHRpZiAodGJsKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzozNDM6XFx0XFx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0X3VudGlsX3N0YXJ0X3dpbihwcml2LCB0YmwsIHNlcV9udW0pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtMzQ0LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9NTQ3PWludCBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy01NTktXFx0XFx0aWYgKHBrdF90eXBlICE9IFBLVF9UWVBFX0JBUilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjU2MDpcXHRcXHRcXHRtd2lmaWV4XzExbl9kaXNwYXRjaF9wa3QocHJpdiwgcGF5bG9hZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy01NjEtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNTY0LVxcdGlmICgocGt0X3R5cGUgPT0gUEtUX1RZUEVfQU1TRFUpIFxcdTAwMjZcXHUwMDI2ICF0YmwtXFx1MDAzZWFtc2R1KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo1NjU6XFx0XFx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0KHByaXYsIHBheWxvYWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNTY2LVxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTYyMy1cXHRcXHRcXHRzdGFydF93aW4gPSAoTUFYX1RJRF9WQUxVRSAtICh3aW5fc2l6ZSAtIGVuZF93aW4pKSArIDE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo2MjQ6XFx0XFx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0X3VudGlsX3N0YXJ0X3dpbihwcml2LCB0YmwsIHN0YXJ0X3dpbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy02MjUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo1NC40MzQ4MTcyOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ1Mjg2NjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgUGFja2V0IFJlb3JkZXJpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcGFja2V0IHJlY2VwdGlvbi4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyB0aGUgZ2F0ZXdheSBmb3IgaW5jb21pbmcgZnJhbWVzLiBOb3csIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGJyb2FkZXIgZGF0YSBmbG93LiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGguIFdoZXJlICpleGFjdGx5KiBpcyBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgIGludm9rZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBjYWxscywgdGhlIGNvbnRleHQsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgcGFja2V0IGRhdGEgZ2V0cyBoZXJlLiBJJ20gdGhpbmtpbmc6IEhvdyBpcyB0aGlzIGZ1bmN0aW9uIHRyaWdnZXJlZD8gSXMgaXQgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyIGRpcmVjdGx5PyBJcyBpdCBwYXJ0IG9mIGEgbG93ZXItbGV2ZWwgaGFyZHdhcmUgYWJzdHJhY3Rpb24/IElzIGl0IGludm9rZWQgYnkgc29tZSBkYXRhIHByb2Nlc3MgSSdtIGZhbWlsaWFyIHdpdGg/IEtub3dpbmcgdGhlIGNhbGxlciBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyJ3MgcmVjZWl2ZSBwYXRoIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBvdXQtb2Ytb3JkZXIgcGFja2V0cy4gU28sIGxldCdzIGdvIGZpbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MjQsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo1Ny44ODAxMDYzODJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NzExMDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz01MjM9aW50IG13aWZpZXhfY21kXzExbl9kZWxiYShzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCB2b2lkICpkYXRhX2J1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNTQ2LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6NTQ3OmludCBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNTQ4LVxcdFxcdFxcdFxcdHUxNiBzZXFfbnVtLCB1MTYgdGlkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz05MDI9dm9pZCBtd2lmaWV4XzExbl9yeGJhX3N5bmNfZXZlbnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtOTY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6OTY3OlxcdFxcdFxcdFxcdFxcdHJldCA9IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy05NjgtXFx0XFx0XFx0XFx0XFx0KHByaXYsIHNlcV9udW0sIHRsdl9yeGJhLVxcdTAwM2V0aWQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5oPTM5PXN0YXRpYyBpbmxpbmUgdm9pZCBtd2lmaWV4X3Jlc2V0XzExbl9yeF9zZXFfbnVtKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5oLTQzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmg6NDQ6aW50IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5oLTQ1LVxcdFxcdFxcdCAgICAgICB1MTYgc2VxTnVtLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jPTE4OT1pbnQgbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0yNjAtXFx0LyogUmVvcmRlciBhbmQgc2VuZCB0byBPUyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYzoyNjE6XFx0cmV0ID0gbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3QocHJpdiwgc2VxX251bSwgbG9jYWxfcnhfcGQtXFx1MDAzZXByaW9yaXR5LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0yNjItXFx0XFx0XFx0XFx0XFx0IHRhLCAodTgpIHJ4X3BrdF90eXBlLCBza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmM9MzczPWludCBtd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmMtNDQyLVxcdHBrdF90eXBlID0gKHU4KWxlMTZfdG9fY3B1KHVhcF9yeF9wZC1cXHUwMDNlcnhfcGt0X3R5cGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jOjQ0MzpcXHRyZXQgPSBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdChwcml2LCBsZTE2X3RvX2NwdSh1YXBfcnhfcGQtXFx1MDAzZXNlcV9udW0pLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jLTQ0NC1cXHRcXHRcXHRcXHRcXHQgdWFwX3J4X3BkLVxcdTAwM2Vwcmlvcml0eSwgdGEsIHBrdF90eXBlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo1Ny45NzU4Mjg1M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYwODAwNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgUGFja2V0IFJlY2VwdGlvbiBpbiB0aGUgTWFydmVsbCBXaS1GaSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIE1hcnZlbGwgV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgaW5jb21pbmcgcGFja2V0cy4gTXkgaW5pdGlhbCBodW5jaCBpcyBjb25maXJtZWQ6IGBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldGAgYW5kIGBtd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldGAgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIHBhcnNpbmcgYW5kIGhhbmRsaW5nIHJlY2VpdmVkIHBhY2tldHMuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBTVEEgKHN0YXRpb24vY2xpZW50KSBhbmQgVUFQIChVbml2ZXJzYWwgQWNjZXNzIFBvaW50KSByb2xlcy4gTm93LCB0aGUgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0cyBvZiB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlc2UgZW50cnkgcG9pbnRzIGFuZCBzZWUgd2hlcmUgdGhleSdyZSBpbnZva2VkIHRvIGZ1bGx5IGdyYXNwIHRoZSBwYWNrZXQgcmVjZXB0aW9uIGZsb3cuIEtub3dpbmcgdGhlaXIgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgZHJpdmVyIG9yY2hlc3RyYXRlcyB0aGUgcHJvY2Vzc2luZyBvZiB0aGVzZSBpbmNvbWluZyBmcmFtZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODowMS40MzY2MzQzNjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTk3Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMTM3PWludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2NtZHJlc3Aoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLCB1MTYgY21kcmVzcF9ubyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTExMzgtXFx0XFx0XFx0XFx0c3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTEzOTppbnQgbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTE0MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jPTcxPWludCBtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtMTg4LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYzoxODk6aW50IG13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jLTE5MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jPTI0PWludCBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmMtNTUtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmM6NTY6XFx0XFx0cmV0ID0gbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODowMS40OTc2Mzg3OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTI2OTg1NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGF0YSBGbG93OiBgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBVU0IgZHJpdmVyJ3MgZ290IHNvbWV0aGluZyB0cmlnZ2VyaW5nIGEgY2FsbCB0byBgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0YC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCB3ZSdyZSB0YWxraW5nIGFib3V0LCB0aGUgcmVjZWl2ZXIuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8gcGlucG9pbnQgKmV4YWN0bHkqIHdoZXJlIHRoYXQgY2FsbCBpcyBvcmlnaW5hdGluZyB3aXRoaW4gdGhlIFVTQiBkcml2ZXIuIFdlIG5lZWQgdG8gZm9sbG93IHRoaXMgY2hhaW4sIG1heWJlIHRvIGFuIGludGVycnVwdCBoYW5kbGVyIG9yIGEgc3BlY2lmaWMgcmVjZWl2ZSByb3V0aW5lLiBUaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgc3VnZ2VzdHMgdGhpcyBpcyB3aGVyZSB3ZSBuZWVkIHRvIHRyYWNlIHRoZSBpbmNvbWluZyBwYWNrZXQgaGFuZGxpbmcsIHNvIGxldCdzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCB0aGUgY29kZSdzIGdvdCBmb3IgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODowNS4wMjQ2Mjg1MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjU2ODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfaGFuZGxlX3J4X3BhY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MTc0PXN0YXRpYyBpbnQgbXdpZmlleF9wcm9jZXNzX3J4KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTIwNC1cXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MjA1OlxcdFxcdFxcdG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChhZGFwdGVyLCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMjA2LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg9MTEwMj12b2lkIG13aWZpZXhfcHJvY2Vzc19hc3NvY19yZXNwKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTEwMzppbnQgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMTA0LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvcGNpZS5jPTE1MjY9c3RhdGljIGludCBtd2lmaWV4X3BjaWVfcHJvY2Vzc19yZWN2X2RhdGEoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmMtMTU4OC1cXHRcXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmM6MTU4OTpcXHRcXHRcXHRcXHRtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQoYWRhcHRlciwgc2tiX2RhdGEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmMtMTU5MC1cXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jPTE1OTM9c3RhdGljIHZvaWQgbXdpZmlleF9kZWFnZ3Jfc2Rpb19wa3Qoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTYzMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjE2MzQ6XFx0XFx0bXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYl9kZWFnZ3IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTYzNS1cXHRcXHRkYXRhICs9IGJsa19zaXplO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYz0xNjQ3PXN0YXRpYyBpbnQgbXdpZmlleF9kZWNvZGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jLTE2ODQtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjE2ODU6XFx0XFx0XFx0bXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xNjg2LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmMtMjMtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYzoyNDppbnQgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYy0yNS1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTU5LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jOjYwOkVYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYy02MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDg6MDUuMDg1ODkzMjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NTk5MTM4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEluY29taW5nIFBhY2tldCBGbG93KipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGRhdGEgZmxvdyBmb3IgaW5jb21pbmcgcGFja2V0cyBpbiB0aGlzIFdpRmkgZHJpdmVyLiBJdCBsb29rcyBsaWtlIGBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXRgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGhlcmU7IGl0J3MgdGhlIG9uZSBhY3R1YWxseSBkb2luZyB0aGUgd29yayBvZiBwcm9jZXNzaW5nIHJlY2VpdmVkIHBhY2tldHMuIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYG13aWZpZXhfcHJvY2Vzc19yeGAsIHdoaWNoIG1ha2VzIHNlbnNlIOKAkyB0aGF0J3MgbGlrZWx5IHRoZSBjZW50cmFsIHJlY2VpdmVyIGxvb3AgaW4gYG1haW4uY2AuIEJ1dCBpdCdzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGZyb20gYHBjaWUuY2AgYW5kIGBzZGlvLmNgLiBUaGF0J3MgYW4gaW50ZXJlc3RpbmcgZGVzaWduIGNob2ljZSwgYnlwYXNzaW5nIHRoZSBtYWluIGxvb3AgZm9yIHNwZWNpZmljIGludGVyZmFjZXMuIEknbSBub3RpbmcgdGhlIGRpcmVjdCBjYWxscyBmb3IgbGF0ZXIuXG5cbldhaXQgYSBtaW51dGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBXaGF0IGFib3V0IHRoZSBVU0IgaW50ZXJmYWNlPyBJcyB0aGUgcGFja2V0IGhhbmRsaW5nIGRvbmUgYnkgYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGAgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyB2aWEgVVNCPyBJIG5lZWQgdG8gY2hlY2sgYHVzYi5jYCB0byBzZWUgaG93IGluY29taW5nIHBhY2tldHMgYXJlIGhhbmRsZWQgb24gdGhhdCBmcm9udC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODowOC45NjE4ODcyODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNzAxNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfcHJvY2Vzc19yeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9Njc9c3RhdGljIGludCBtd2lmaWV4XzExbl9kaXNwYXRjaF9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtODQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo4NTpcXHRyZXR1cm4gbXdpZmlleF9wcm9jZXNzX3J4X3BhY2tldChwcml2LCBwYXlsb2FkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTg2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MTYzPXN0YXRpYyB2b2lkIG13aWZpZXhfcXVldWVfcnhfd29yayhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0xNzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoxNzQ6c3RhdGljIGludCBtd2lmaWV4X3Byb2Nlc3Nfcngoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTE3NS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTE0MDM9c3RhdGljIHZvaWQgbXdpZmlleF9yeF93b3JrX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMTQwOS1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoxNDEwOlxcdG13aWZpZXhfcHJvY2Vzc19yeChhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTE0MTEtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMTI3PWludCBtd2lmaWV4X3JldF84MDJfMTFfaHNfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMTI4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjExMjk6aW50IG13aWZpZXhfcHJvY2Vzc19yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTExMzAtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM9MjM9bXdpZmlleF9kaXNjYXJkX2dyYXR1aXRvdXNfYXJwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtNzAtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jOjcxOmludCBtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jLTcyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM9MTg5PWludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jLTIzMy1cXHQgICAgIWV0aGVyX2FkZHJfZXF1YWxfdW5hbGlnbmVkKHByaXYtXFx1MDAzZWN1cnJfYWRkciwgcnhfcGt0X2hkci1cXHUwMDNlZXRoODAzX2hkci5oX2Rlc3QpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jOjIzNDpcXHRcXHRtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHByaXYsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jLTIzNS1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmM9MjMyPWludCBtd2lmaWV4X2hhbmRsZV91YXBfcnhfZm9yd2FyZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmMtMjczLVxcdC8qIEZvcndhcmQgdW5pY2F0L0ludGVyLUJTUyBwYWNrZXRzIHRvIGtlcm5lbC4gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYzoyNzQ6XFx0cmV0dXJuIG13aWZpZXhfcHJvY2Vzc19yeF9wYWNrZXQocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYy0yNzUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODowOS4wNTM1OTU5MTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxMTQwNzgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBtd2lmaWV4X3J4X3dvcmtfcXVldWVgIEVucXVldWVpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBtd2lmaWV4X3J4X3dvcmtfcXVldWVgIGFuZCB0aGUgbWVjaGFuaWNzIG9mICpob3cqIGl0J3MgYWN0dWFsbHkgZ2V0dGluZyBxdWV1ZWQuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgZmxvdyDigJMgdGhlIHRyaWdnZXJzLCB0aGUgY29udGV4dCwgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciwgZXZlbiBtb3JlIGxpa2VseSwgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzIHdpdGhpbiB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHdlIGFyZSB1dGlsaXppbmcgdGhlIHdvcmtxdWV1ZSBjb3JyZWN0bHkuIEFyZSB3ZSBzZWVpbmcgdW5kdWUgbGF0ZW5jeSwgc3RhcnZhdGlvbiwgb3IgbG9jayBjb250ZW50aW9uIGluIHRoZSByZWxldmFudCB3b3JrcXVldWUgY29udGV4dHMsIGluIHRoZSBjYXNlcyBvZiBjb25jdXJyZW50IGFjY2Vzcz8gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgc2NoZWR1bGluZyBvZiB0aGF0IHdvcmssIHNwZWNpZmljYWxseSB0aGUgd29yayBkb25lIGJ5IHRoZSBgbXdpZmlleF9yeF93b3JrX3F1ZXVlYCwgaXNuJ3QgY3JlYXRpbmcgYSBib3R0bGVuZWNrLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbmNyZWFzaW5nbHkgZGVtYW5kaW5nIHRocm91Z2hwdXQgcmVxdWlyZW1lbnRzIGFuZCB0aGUgbnVhbmNlcyBvZiB2YXJpb3VzIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIGFuZCB0cmFmZmljIHByb2ZpbGVzLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCByZWxldmFudCBjb2RlIHBhdGhzIOKAkyBpbnRlcnJ1cHQgaGFuZGxlcnMsIGRhdGEgcGF0aHMsIGFuZCBhbnkgYXNzb2NpYXRlZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gV2hhdCBzcGVjaWZpYyBlbGVtZW50cyBhcmUgdHJpZ2dlcmluZyB0aGUgZW5xdWV1ZWluZywgd2hlcmUgYXJlIHRoZXkgZGVmaW5lZCwgYW5kIHdoYXQgaXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBxdWV1ZSBzdGF0ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIFdMQU4gZHJpdmVyIGZsb3c/IEkgc2hvdWxkIGFsc28gZXhhbWluZSB0aGUgcXVldWUncyBjb25maWd1cmF0aW9uLCBhbnkgd29yayBpdGVtIHByaW9yaXRpZXMsIGFuZCB0aGUgdW5kZXJseWluZyB3b3JrcXVldWUgZmxhZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjM5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDg6MTIuNzY1MDA3MTY4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTc1Mjk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X3F1ZXVlX3J4X3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTE2MT1FWFBPUlRfU1lNQk9MX0dQTChtd2lmaWV4X3F1ZXVlX21haW5fd29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0xNjItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoxNjM6c3RhdGljIHZvaWQgbXdpZmlleF9xdWV1ZV9yeF93b3JrKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0xNjQte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz0yNDg9aW50IG13aWZpZXhfbWFpbl9wcm9jZXNzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTI3OC1cXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VkZWxheV9tYWluX3dvcmsgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6Mjc5OlxcdFxcdFxcdG13aWZpZXhfcXVldWVfcnhfd29yayhhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTI4MC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMjkxLVxcdFxcdGlmIChhZGFwdGVyLVxcdTAwM2VyeF93b3JrX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgYWRhcHRlci1cXHUwMDNlZGF0YV9yZWNlaXZlZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjI5MjpcXHRcXHRcXHRtd2lmaWV4X3F1ZXVlX3J4X3dvcmsoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0yOTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjQ4OjEyLjg1Njc2Njc0N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA0MTY2NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIERhdGEgRmxvdzogRm9jdXNpbmcgb24gUlggYW5kIFVTQioqXG5cbk9rYXksIHNvIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gcHJldHR5IHN1cmUgYG13aWZpZXhfbWFpbl9wcm9jZXNzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhhbmRsaW5nIGluY29taW5nLCByZWNlaXZlZCBkYXRhIOKAkyB0aGUgUlggc2lkZSBvZiB0aGluZ3MuIFRoYXQncyBteSBpbW1lZGlhdGUgaW1wcmVzc2lvbi4gTm93LCBJIG5lZWQgdG8gc2VlICpob3cqIHRoaXMgZGF0YSBpcyBhY3R1YWxseSBtYWtpbmcgaXRzIHdheSBpbnRvIHRoZSBzeXN0ZW0sIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBVU0IgaW50ZXJmYWNlLiBUaGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgdXNiLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgVVNCIGRhdGEgcmVjZXB0aW9uIGhvb2tzIGFyZSBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGlzIGBtd2lmaWV4X21haW5fcHJvY2Vzc2AgZnVuY3Rpb24uIEknbSB0aGlua2luZyB0aGUgYHVzYi5jYCBmaWxlIHdpbGwgZ2l2ZSBtZSB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgdGhlIFVTQiB0cmFuc2ZlciBhbmQgd2hlcmUgaXQgaGFuZHMgb2ZmIHRoZSByYXcgZGF0YSB0byB0aGUgaGlnaGVyLWxldmVsIFdpLUZpIHN0YWNrIGZvciBwcm9jZXNzaW5nLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTUxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDg6MTYuNzYwOTM1OTk5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODY0NzE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYz00Nj1zdGF0aWMgaW50IG13aWZpZXhfdXNiX3JlY3Yoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0xNTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jOjE1MjpzdGF0aWMgdm9pZCBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTE1My17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM9Mjg1PXN0YXRpYyBpbnQgbXdpZmlleF91c2Jfc3VibWl0X3J4X3VyYihzdHJ1Y3QgdXJiX2NvbnRleHQgKmN0eCwgaW50IHNpemUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMzE1LVxcdFxcdFxcdFxcdCB1c2JfcmN2aW50cGlwZShjYXJkLVxcdTAwM2V1ZGV2LCBjdHgtXFx1MDAzZWVwKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM6MzE2OlxcdFxcdFxcdFxcdCBjdHgtXFx1MDAzZXNrYi1cXHUwMDNlZGF0YSwgc2l6ZSwgbXdpZmlleF91c2JfcnhfY29tcGxldGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTMxNy1cXHRcXHRcXHRcXHQgKHZvaWQgKiljdHgsIGNhcmQtXFx1MDAzZXJ4X2NtZF9pbnRlcnZhbCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMzIwLVxcdFxcdFxcdFxcdCAgdXNiX3JjdmJ1bGtwaXBlKGNhcmQtXFx1MDAzZXVkZXYsIGN0eC1cXHUwMDNlZXApLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzozMjE6XFx0XFx0XFx0XFx0ICBjdHgtXFx1MDAzZXNrYi1cXHUwMDNlZGF0YSwgc2l6ZSwgbXdpZmlleF91c2JfcnhfY29tcGxldGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTMyMi1cXHRcXHRcXHRcXHQgICh2b2lkICopY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDg6MTYuODU5NTg4NzA3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTczOTM2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgbXdpZmlleF91c2JfcnhfY29tcGxldGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLCBzbyBJJ20gZ29pbmcgdG8gYnJlYWsgZG93biBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBVU0IgV2ktRmkgZnJhbWV3b3JrLiBGaXJzdCwgSSBleHBlY3QgaXQgaGFuZGxlcyB0aGUgY29tcGxldGlvbiBvZiBhIFVTQiByZWNlaXZlIG9wZXJhdGlvbiwgbGlrZWx5IGNhbGxlZCB3aGVuIGRhdGEgaXMgYXZhaWxhYmxlIG9uIHRoZSBVU0IgYnVzLiBUaGlzIHN1Z2dlc3RzIGl0J3MgYSBjcml0aWNhbCBwb2ludCBmb3IgZGF0YSBpbmdyZXNzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgYWZ0ZXIgdGhlIGRhdGEgaXMgcmVjZWl2ZWQg4oCTIGlzIGl0IGltbWVkaWF0ZWx5IHBhc3NlZCBvbiBmb3IgcHJvY2Vzc2luZywgYnVmZmVyZWQsIG9yIG1heWJlIGV2ZW4gZGlzY2FyZGVkIHVuZGVyIGNlcnRhaW4gZXJyb3IgY29uZGl0aW9ucz9cblxuSSBpbWFnaW5lIGl0IHdvdWxkIGludGVyYWN0IHdpdGggVVNCIGRlc2NyaXB0b3JzLCBwb3NzaWJseSBpbmNsdWRpbmcgdGhlIGB1cmJgIChVU0IgUmVxdWVzdCBCbG9jayksIGFuZCBwcm9iYWJseSBpbnZvbHZlcyBjaGVja2luZyB0aGUgc3RhdHVzIG9mIHRoZSB0cmFuc2ZlciBmb3Igc3VjY2VzcyBvciBmYWlsdXJlLiBFcnJvciBoYW5kbGluZyBpcyBhbHdheXMgYSBrZXkgYXNwZWN0IGluIHRoZXNlIGtpbmRzIG9mIHJvdXRpbmVzLCBzbyBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHNob3J0IHBhY2tldHMsIHRpbWVvdXRzLCBvciBvdGhlciBVU0ItcmVsYXRlZCBpc3N1ZXMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdXRpbGl6ZWQsIGFzIGNvbmN1cnJlbmN5IGlzIGEgc2lnbmlmaWNhbnQgY29uY2VybiB3aXRoaW4gZHJpdmVyIGNvZGUuIElzIHRoZXJlIGFuIGFzc29jaWF0ZWQgd29ya3F1ZXVlIHRvIG9mZmxvYWQgcHJvY2Vzc2luZywgb3IgaXMgaXQgaGFuZGxlZCBzeW5jaHJvbm91c2x5PyBGaW5hbGx5LCBJIGFudGljaXBhdGUgdGhpcyBmdW5jdGlvbiB3aWxsIGV2ZW50dWFsbHkgY2FsbCBvdGhlciBXaS1GaSBzcGVjaWZpYyBmdW5jdGlvbnMsIGxpa2VseSB0byBwcm9jZXNzIHRoZSByZWNlaXZlZCBwYWNrZXRzLiBNeSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGVudGlyZSBkYXRhIGZsb3cgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2NDEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODoyMC43MTY5ODY2OTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTI6XFx0c3RhdGljIHZvaWQgbXdpZmlleF91c2JfcnhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbiAxNTM6XFx0e1xcbiAxNTQ6XFx0XFx0c3RydWN0IHVyYl9jb250ZXh0ICpjb250ZXh0ID0gKHN0cnVjdCB1cmJfY29udGV4dCAqKXVyYi1cXHUwMDNlY29udGV4dDtcXG4gMTU1OlxcdFxcdHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250ZXh0LVxcdTAwM2VhZGFwdGVyO1xcbiAxNTY6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGNvbnRleHQtXFx1MDAzZXNrYjtcXG4gMTU3OlxcdFxcdHN0cnVjdCB1c2JfY2FyZF9yZWMgKmNhcmQ7XFxuIDE1ODpcXHRcXHRpbnQgcmVjdl9sZW5ndGggPSB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGg7XFxuIDE1OTpcXHRcXHRpbnQgc2l6ZSwgc3RhdHVzO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRpZiAoIWFkYXB0ZXIgfHwgIWFkYXB0ZXItXFx1MDAzZWNhcmQpIHtcXG4gMTYyOlxcdFxcdFxcdHByX2VycihcXFwibXdpZmlleCBhZGFwdGVyIG9yIGNhcmQgc3RydWN0dXJlIGlzIG5vdCB2YWxpZFxcXFxuXFxcIik7XFxuIDE2MzpcXHRcXHRcXHRyZXR1cm47XFxuIDE2NDpcXHRcXHR9XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdGNhcmQgPSAoc3RydWN0IHVzYl9jYXJkX3JlYyAqKWFkYXB0ZXItXFx1MDAzZWNhcmQ7XFxuIDE2NzpcXHRcXHRpZiAoY2FyZC1cXHUwMDNlcnhfY21kX2VwID09IGNvbnRleHQtXFx1MDAzZWVwKVxcbiAxNjg6XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2Y2FyZC1cXHUwMDNlcnhfY21kX3VyYl9wZW5kaW5nKTtcXG4gMTY5OlxcdFxcdGVsc2VcXG4gMTcwOlxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmNhcmQtXFx1MDAzZXJ4X2RhdGFfdXJiX3BlbmRpbmcpO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRpZiAocmVjdl9sZW5ndGgpIHtcXG4gMTczOlxcdFxcdFxcdGlmICh1cmItXFx1MDAzZXN0YXR1cyB8fFxcbiAxNzQ6XFx0XFx0XFx0ICAgIHRlc3RfYml0KE1XSUZJRVhfU1VSUFJJU0VfUkVNT1ZFRCwgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXdvcmtfZmxhZ3MpKSB7XFxuIDE3NTpcXHRcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gMTc2OlxcdFxcdFxcdFxcdFxcdCAgICBcXFwiVVJCIHN0YXR1cyBpcyBmYWlsZWQ6ICVkXFxcXG5cXFwiLCB1cmItXFx1MDAzZXN0YXR1cyk7XFxuIDE3NzpcXHRcXHRcXHRcXHQvKiBEbyBub3QgZnJlZSBza2IgaW4gY2FzZSBvZiBjb21tYW5kIGVwICovXFxuIDE3ODpcXHRcXHRcXHRcXHRpZiAoY2FyZC1cXHUwMDNlcnhfY21kX2VwICE9IGNvbnRleHQtXFx1MDAzZWVwKVxcbiAxNzk6XFx0XFx0XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gMTgwOlxcdFxcdFxcdFxcdGdvdG8gc2V0dXBfZm9yX25leHQ7XFxuIDE4MTpcXHRcXHRcXHR9XFxuIDE4MjpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSByZWN2X2xlbmd0aClcXG4gMTgzOlxcdFxcdFxcdFxcdHNrYl90cmltKHNrYiwgcmVjdl9sZW5ndGgpO1xcbiAxODQ6XFx0XFx0XFx0ZWxzZVxcbiAxODU6XFx0XFx0XFx0XFx0c2tiX3B1dChza2IsIHJlY3ZfbGVuZ3RoIC0gc2tiLVxcdTAwM2VsZW4pO1xcbiAxODY6XFx0XFxuIDE4NzpcXHRcXHRcXHRzdGF0dXMgPSBtd2lmaWV4X3VzYl9yZWN2KGFkYXB0ZXIsIHNrYiwgY29udGV4dC1cXHUwMDNlZXApO1xcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBJTkZPLFxcbiAxOTA6XFx0XFx0XFx0XFx0ICAgIFxcXCJpbmZvOiByZWN2X2xlbmd0aD0lZCwgc3RhdHVzPSVkXFxcXG5cXFwiLFxcbiAxOTE6XFx0XFx0XFx0XFx0ICAgIHJlY3ZfbGVuZ3RoLCBzdGF0dXMpO1xcbiAxOTI6XFx0XFx0XFx0aWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHtcXG4gMTkzOlxcdFxcdFxcdFxcdG13aWZpZXhfcXVldWVfbWFpbl93b3JrKGFkYXB0ZXIpO1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHRcXHRcXHRcXHQvKiB1cmIgZm9yIGRhdGFfZXAgaXMgcmUtc3VibWl0dGVkIG5vdztcXG4gMTk2OlxcdFxcdFxcdFxcdCAqIHVyYiBmb3IgY21kX2VwIHdpbGwgYmUgcmUtc3VibWl0dGVkIGluIGNhbGxiYWNrXFxuIDE5NzpcXHRcXHRcXHRcXHQgKiBtd2lmaWV4X3VzYl9yZWN2X2NvbXBsZXRlXFxuIDE5ODpcXHRcXHRcXHRcXHQgKi9cXG4gMTk5OlxcdFxcdFxcdFxcdGlmIChjYXJkLVxcdTAwM2VyeF9jbWRfZXAgPT0gY29udGV4dC1cXHUwMDNlZXApXFxuIDIwMDpcXHRcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDIwMTpcXHRcXHRcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODoyMC43MTcxNTEyNzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0ODMxNjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgbXdpZmlleF91c2JfcmVjdmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIHRhcmdldCBoZXJlIGlzIGBtd2lmaWV4X3VzYl9yZWN2YCwgc28gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBVU0Igd2lyZWxlc3MgaW50ZXJmYWNlIGNvbnRleHQuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJ4oCZbSBtZW50YWxseSBtYXBwaW5nIHRoaXMgZnVuY3Rpb24gdG8gdGhlIHR5cGljYWwgVVNCIHJlY2VpdmUgcGF0aCBmb3IgYSB3aXJlbGVzcyBkcml2ZXI6IGRhdGEgYXJyaXZpbmcgb3ZlciB0aGUgVVNCIGJ1cywgYmVpbmcgcGlja2VkIHVwIGJ5IHRoZSBkcml2ZXIsIHByb2Nlc3NlZCwgYW5kIHBhc3NlZCB1cCB0aGUgc3RhY2suIE15IGV4cGVjdGF0aW9uIGlzIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBpbmNvbWluZyBwYWNrZXRzIHZpYSBVU0IuXG5cbknigJlsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgVVNCIGhvc3QgY29udHJvbGxlcjsgaG93IGl0IGhhbmRsZXMgVVJCcyAoVVNCIFJlcXVlc3QgQmxvY2tzKSBhbmQgdGhlaXIgY29tcGxldGlvbjsgd2hhdCBraW5kIG9mIGJ1ZmZlcmluZyBzdHJhdGVneSBpdCBlbXBsb3lzOyBhbmQsIGNydWNpYWxseSwgaG93IGl0IHZlcmlmaWVzIHRoZSBkYXRhIGludGVncml0eSBhbmQgcG90ZW50aWFsbHkgdW5wYWNrcyB0aGUgODAyLjExIGZyYW1lcywgdGhlbiBwYXNzZXMgdGhvc2UgZnJhbWVzIHVwIHRvIHRoZSBwcm90b2NvbCBzdGFjay4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHF1ZXN0aW9ucyBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMgd2l0aGluIHRoZSBmdW5jdGlvbi4gSXMgaXQgaW50ZXJydXB0LWRyaXZlbj8gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCBVU0IgdHJhbnNmZXIgZXJyb3JzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgYnVmZmVyIG1hbmFnZW1lbnQgb3IgRE1BIHVzYWdlPyBJ4oCZbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGVycm9yIGhhbmRsaW5nLiBJIGhvcGUgdG8gc3BvdCB3ZWxsLWRlZmluZWQgZXJyb3IgY29kZXMgYW5kIHBlcmhhcHMgcmV0cnkgbWVjaGFuaXNtcy4gSeKAmW0gcHJlcGFyZWQgdG8gZGlnIGRlZXAuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3ODIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjQ4OjI0Ljc2NTQ3MTczMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ2OlxcdHN0YXRpYyBpbnQgbXdpZmlleF91c2JfcmVjdihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbiAgNDc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGVwKVxcbiAgNDg6XFx0e1xcbiAgNDk6XFx0XFx0dTMyIHJlY3ZfdHlwZTtcXG4gIDUwOlxcdFxcdF9fbGUzMiB0bXA7XFxuICA1MTpcXHRcXHRpbnQgcmV0O1xcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHRpZiAoYWRhcHRlci1cXHUwMDNlaHNfYWN0aXZhdGVkKVxcbiAgNTQ6XFx0XFx0XFx0bXdpZmlleF9wcm9jZXNzX2hzX2NvbmZpZyhhZGFwdGVyKTtcXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgSU5URl9IRUFERVJfTEVOKSB7XFxuICA1NzpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gIDU4OlxcdFxcdFxcdFxcdCAgICBcXFwiJXM6IGludmFsaWQgc2tiLVxcdTAwM2VsZW5cXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gIDU5OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gIDYwOlxcdFxcdH1cXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0c3dpdGNoIChlcCkge1xcbiAgNjM6XFx0XFx0Y2FzZSBNV0lGSUVYX1VTQl9FUF9DTURfRVZFTlQ6XFxuICA2NDpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFVkVOVCxcXG4gIDY1OlxcdFxcdFxcdFxcdCAgICBcXFwiJXM6IEVQX0NNRF9FVkVOVFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiAgNjY6XFx0XFx0XFx0c2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIFxcdTAwMjZ0bXAsIElOVEZfSEVBREVSX0xFTik7XFxuICA2NzpcXHRcXHRcXHRyZWN2X3R5cGUgPSBsZTMyX3RvX2NwdSh0bXApO1xcbiAgNjg6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBJTlRGX0hFQURFUl9MRU4pO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRcXHRzd2l0Y2ggKHJlY3ZfdHlwZSkge1xcbiAgNzE6XFx0XFx0XFx0Y2FzZSBNV0lGSUVYX1VTQl9UWVBFX0NNRDpcXG4gIDcyOlxcdFxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNlIE1XSUZJRVhfU0laRV9PRl9DTURfQlVGRkVSKSB7XFxuICA3MzpcXHRcXHRcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gIDc0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiQ01EOiBza2ItXFx1MDAzZWxlbiB0b28gbGFyZ2VcXFxcblxcXCIpO1xcbiAgNzU6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLTE7XFxuICA3NjpcXHRcXHRcXHRcXHRcXHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XFxuICA3NzpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKCFhZGFwdGVyLVxcdTAwM2VjdXJyX2NtZCkge1xcbiAgNzg6XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgV0FSTiwgXFxcIkNNRDogbm8gY3Vycl9jbWRcXFxcblxcXCIpO1xcbiAgNzk6XFx0XFx0XFx0XFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZXBzX3N0YXRlID09IFBTX1NUQVRFX1NMRUVQX0NGTSkge1xcbiAgODA6XFx0XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9wcm9jZXNzX3NsZWVwX2NvbmZpcm1fcmVzcChcXG4gIDgxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGFkYXB0ZXIsIHNrYi1cXHUwMDNlZGF0YSxcXG4gIDgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuKTtcXG4gIDgzOlxcdFxcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuICA4NDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XFxuICA4NTpcXHRcXHRcXHRcXHRcXHR9XFxuICA4NjpcXHRcXHRcXHRcXHRcXHRyZXQgPSAtMTtcXG4gIDg3OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcXG4gIDg4OlxcdFxcdFxcdFxcdH1cXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlY3Vycl9jbWQtXFx1MDAzZXJlc3Bfc2tiID0gc2tiO1xcbiAgOTE6XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlY21kX3Jlc3BfcmVjZWl2ZWQgPSB0cnVlO1xcbiAgOTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA5MzpcXHRcXHRcXHRjYXNlIE1XSUZJRVhfVVNCX1RZUEVfRVZFTlQ6XFxuICA5NDpcXHRcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBzaXplb2YodTMyKSkge1xcbiAgOTU6XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjQ4OjI0Ljc2NTYwNjUwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc2MzIwODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbXdpZmlleF91c2JfcmVjdmAgZnVuY3Rpb24uIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGhhbmRsZXMgZGF0YSByZWNlcHRpb24gb3ZlciBVU0IgZm9yIHRoaXMgTWFydmVsbCBXaS1GaSBkcml2ZXIuIFRoaXMgc2VlbXMgbGlrZSBhIGNvcmUgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIEknbSBndWVzc2luZyBpdCdzIHJlc3BvbnNpYmxlIGZvciB0aGUgY3JpdGljYWwgdGFzayBvZiBtYW5hZ2luZyBkYXRhIGZsb3cgZnJvbSB0aGUgVVNCIGludGVyZmFjZSB0byB0aGUgaGlnaGVyLWxldmVsIG5ldHdvcmtpbmcgc3RhY2suIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBrZXkgb3BlcmF0aW9uczogaG93IGl0IHJlY2VpdmVzIGRhdGEsIGhvdyBpdCBidWZmZXJzIGl0LCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLCBhbmQgaG93IGl0IHRoZW4gcGFzc2VzIHRoYXQgZGF0YSB1cHdhcmRzLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIHVzZWQgYW5kIHRoZSBlZmZpY2llbmN5IG9mIHRoZSBkYXRhIHRyYW5zZmVycyDigJMgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGhlcmUgY291bGQgaGF2ZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTE0LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODoyOS44NDE5MzI1NDFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcIkVWRU5UOiBza2ItXFx1MDAzZWxlbiB0b28gc21hbGxcXFxcblxcXCIpO1xcbiAgOTc6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLTE7XFxuICA5ODpcXHRcXHRcXHRcXHRcXHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XFxuICA5OTpcXHRcXHRcXHRcXHR9XFxuIDEwMDpcXHRcXHRcXHRcXHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgXFx1MDAyNnRtcCwgc2l6ZW9mKHUzMikpO1xcbiAxMDE6XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZXZlbnRfY2F1c2UgPSBsZTMyX3RvX2NwdSh0bXApO1xcbiAxMDI6XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsXFxuIDEwMzpcXHRcXHRcXHRcXHRcXHQgICAgXFxcImV2ZW50X2NhdXNlICUjeFxcXFxuXFxcIiwgYWRhcHRlci1cXHUwMDNlZXZlbnRfY2F1c2UpO1xcbiAxMDQ6XFx0XFxuIDEwNTpcXHRcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSBNQVhfRVZFTlRfU0laRSkge1xcbiAxMDY6XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcIkVWRU5UOiBldmVudCBib2R5IHRvbyBsYXJnZVxcXFxuXFxcIik7XFxuIDEwODpcXHRcXHRcXHRcXHRcXHRyZXQgPSAtMTtcXG4gMTA5OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcXG4gMTEwOlxcdFxcdFxcdFxcdH1cXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0XFx0XFx0bWVtY3B5KGFkYXB0ZXItXFx1MDAzZWV2ZW50X2JvZHksIHNrYi1cXHUwMDNlZGF0YSArXFxuIDExMzpcXHRcXHRcXHRcXHQgICAgICAgTVdJRklFWF9FVkVOVF9IRUFERVJfTEVOLCBza2ItXFx1MDAzZWxlbik7XFxuIDExNDpcXHRcXG4gMTE1OlxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZWV2ZW50X3JlY2VpdmVkID0gdHJ1ZTtcXG4gMTE2OlxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZWV2ZW50X3NrYiA9IHNrYjtcXG4gMTE3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMTg6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gMTE5OlxcdFxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiAxMjA6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJ1bmtub3duIHJlY3ZfdHlwZSAlI3hcXFxcblxcXCIsIHJlY3ZfdHlwZSk7XFxuIDEyMTpcXHRcXHRcXHRcXHRyZXQgPSAtMTtcXG4gMTIyOlxcdFxcdFxcdFxcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcXG4gMTIzOlxcdFxcdFxcdH1cXG4gMTI0OlxcdFxcdFxcdGJyZWFrO1xcbiAxMjU6XFx0XFx0Y2FzZSBNV0lGSUVYX1VTQl9FUF9EQVRBOlxcbiAxMjY6XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgREFUQSwgXFxcIiVzOiBFUF9EQVRBXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIDEyNzpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSBNV0lGSUVYX1JYX0RBVEFfQlVGX1NJWkUpIHtcXG4gMTI4OlxcdFxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiAxMjk6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJEQVRBOiBza2ItXFx1MDAzZWxlbiB0b28gbGFyZ2VcXFxcblxcXCIpO1xcbiAxMzA6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxMzE6XFx0XFx0XFx0fVxcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcnhfZGF0YV9xLCBza2IpO1xcbiAxMzQ6XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZGF0YV9yZWNlaXZlZCA9IHRydWU7XFxuIDEzNTpcXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VyeF9wZW5kaW5nKTtcXG4gMTM2OlxcdFxcdFxcdGJyZWFrO1xcbiAxMzc6XFx0XFx0ZGVmYXVsdDpcXG4gMTM4OlxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiAxMzk6XFx0XFx0XFx0XFx0ICAgIFxcXCIlczogdW5rbm93biBlbmRwb3J0ICUjeFxcXFxuXFxcIiwgX19mdW5jX18sIGVwKTtcXG4gMTQwOlxcdFxcdFxcdHJldHVybiAtMTtcXG4gMTQxOlxcdFxcdH1cXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0cmV0dXJuIC1FSU5QUk9HUkVTUztcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0ZXhpdF9yZXN0b3JlX3NrYjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDg6MjkuODQyMDk5NzgxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNjEyNDM4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIFdpLUZpIERyaXZlcidzIFJlY2VpdmUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSByZWNlaXZlIHBhdGggaW4gdGhpcyBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBmcm9tIHRoZSBVU0IgaW50ZXJmYWNlLiBJdCBzZWVtcyBsaWtlIHRoZSBgbXdpZmlleF91c2JfcmVjdmAgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGluY29taW5nIGRhdGEuIEl0IGxvb2tzIGxpa2UgaXQgcXVldWVzIHRoZSByZWNlaXZlZCBkYXRhIHRvIHRoZSBhZGFwdGVyJ3MgcmVjZWl2ZSBkYXRhIHF1ZXVlLCBzcGVjaWZpY2FsbHkgYGFkYXB0ZXItXHUwMDNlcnhfZGF0YV9xYCwgYW5kIHRoZW4gY3J1Y2lhbGx5IHNldHMgdGhlIGBhZGFwdGVyLVx1MDAzZWRhdGFfcmVjZWl2ZWRgIGZsYWcgdG8gYHRydWVgLiBUaGlzIGxpa2VseSBzaWduYWxzIHRoYXQgbmV3IGRhdGEgaXMgYXZhaWxhYmxlIGZvciBwcm9jZXNzaW5nLlxuXG5UaGUgbmV4dCBwaWVjZSBvZiB0aGUgcHV6emxlIGlzIGBtd2lmaWV4X21haW5fcHJvY2Vzc2AuIEZyb20gaGVyZSwgdGhlIGV4ZWN1dGlvbiBmbG93IGJyYW5jaGVzIHRvIGBtd2lmaWV4X3F1ZXVlX3J4X3dvcmsoYWRhcHRlcilgLiBUaGlzIGxvb2tzIGxpa2UgaXQncyBhIG1lY2hhbmlzbSBmb3IgZGVmZXJyaW5nIHRoZSByeCBwcm9jZXNzaW5nLCBwbGFjaW5nIGBtd2lmaWV4X3J4X3dvcmtfcXVldWVgIGludG8gYSB3b3JrcXVldWUuIFRoaXMsIGluIHR1cm4sIGNhbGxzIGBtd2lmaWV4X3Byb2Nlc3NfcngoYWRhcHRlcilgLiBUaGF0IGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBoZWF2eSBsaWZ0aW5nIG9mIGFjdHVhbGx5IGhhbmRsaW5nIHRoZSByZWNlaXZlZCBkYXRhIGxpa2VseSBoYXBwZW5zLlxuXG5JJ20gbm93IGdvaW5nIHRvIGRpZyBpbnRvIGBtd2lmaWV4X3Byb2Nlc3NfcnhgIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBzaG91bGQgYmUuIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgdGhlIHJlYWwgZGV0YWlscyBvbiBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZCwgZGUtcXVldWVkLCBhbmQgcHJvY2Vzc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg4MCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjQ4OjM3LjEwMzM0NjkyOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU5NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzQ6XFx0c3RhdGljIGludCBtd2lmaWV4X3Byb2Nlc3Nfcngoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG4gMTc1OlxcdHtcXG4gMTc2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDE3NzpcXHRcXHRzdHJ1Y3QgbXdpZmlleF9yeGluZm8gKnJ4X2luZm87XFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcnhfcHJvY19sb2NrKTtcXG4gMTgwOlxcdFxcdGlmIChhZGFwdGVyLVxcdTAwM2VyeF9wcm9jZXNzaW5nIHx8IGFkYXB0ZXItXFx1MDAzZXJ4X2xvY2tlZCkge1xcbiAxODE6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJ4X3Byb2NfbG9jayk7XFxuIDE4MjpcXHRcXHRcXHRnb3RvIGV4aXRfcnhfcHJvYztcXG4gMTgzOlxcdFxcdH0gZWxzZSB7XFxuIDE4NDpcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VyeF9wcm9jZXNzaW5nID0gdHJ1ZTtcXG4gMTg1OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VyeF9wcm9jX2xvY2spO1xcbiAxODY6XFx0XFx0fVxcbiAxODc6XFx0XFxuIDE4ODpcXHRcXHQvKiBDaGVjayBmb3IgUnggZGF0YSAqL1xcbiAxODk6XFx0XFx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlcnhfZGF0YV9xKSkpIHtcXG4gMTkwOlxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJ4X3BlbmRpbmcpO1xcbiAxOTE6XFx0XFx0XFx0aWYgKChhZGFwdGVyLVxcdTAwM2VkZWxheV9tYWluX3dvcmsgfHxcXG4gMTkyOlxcdFxcdFxcdCAgICAgYWRhcHRlci1cXHUwMDNlaWZhY2VfdHlwZSA9PSBNV0lGSUVYX1VTQikgXFx1MDAyNlxcdTAwMjZcXG4gMTkzOlxcdFxcdFxcdCAgICAoYXRvbWljX3JlYWQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJ4X3BlbmRpbmcpIFxcdTAwM2MgTE9XX1JYX1BFTkRJTkcpKSB7XFxuIDE5NDpcXHRcXHRcXHRcXHRpZiAoYWRhcHRlci1cXHUwMDNlaWZfb3BzLnN1Ym1pdF9yZW1fcnhfdXJicylcXG4gMTk1OlxcdFxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZWlmX29wcy5zdWJtaXRfcmVtX3J4X3VyYnMoYWRhcHRlcik7XFxuIDE5NjpcXHRcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VkZWxheV9tYWluX3dvcmsgPSBmYWxzZTtcXG4gMTk3OlxcdFxcdFxcdFxcdG13aWZpZXhfcXVldWVfbWFpbl93b3JrKGFkYXB0ZXIpO1xcbiAxOTg6XFx0XFx0XFx0fVxcbiAxOTk6XFx0XFx0XFx0cnhfaW5mbyA9IE1XSUZJRVhfU0tCX1JYQ0Ioc2tiKTtcXG4gMjAwOlxcdFxcdFxcdGlmIChyeF9pbmZvLVxcdTAwM2VidWZfdHlwZSA9PSBNV0lGSUVYX1RZUEVfQUdHUl9EQVRBKSB7XFxuIDIwMTpcXHRcXHRcXHRcXHRpZiAoYWRhcHRlci1cXHUwMDNlaWZfb3BzLmRlYWdncl9wa3QpXFxuIDIwMjpcXHRcXHRcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VpZl9vcHMuZGVhZ2dyX3BrdChhZGFwdGVyLCBza2IpO1xcbiAyMDM6XFx0XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gMjA0OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDIwNTpcXHRcXHRcXHRcXHRtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQoYWRhcHRlciwgc2tiKTtcXG4gMjA2OlxcdFxcdFxcdH1cXG4gMjA3OlxcdFxcdH1cXG4gMjA4OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcnhfcHJvY19sb2NrKTtcXG4gMjA5OlxcdFxcdGFkYXB0ZXItXFx1MDAzZXJ4X3Byb2Nlc3NpbmcgPSBmYWxzZTtcXG4gMjEwOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VyeF9wcm9jX2xvY2spO1xcbiAyMTE6XFx0XFxuIDIxMjpcXHRleGl0X3J4X3Byb2M6XFxuIDIxMzpcXHRcXHRyZXR1cm4gMDtcXG4gMjE0OlxcdH1cXG4gMjE1OlxcdFxcbiAyMTY6XFx0c3RhdGljIHZvaWQgbWF5YmVfcXVpcmtfZndfZGlzYWJsZV9kcyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxcbiAyMTc6XFx0e1xcbiAyMTg6XFx0XFx0c3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9TVEEpO1xcbiAyMTk6XFx0XFx0c3RydWN0IG13aWZpZXhfdmVyX2V4dCB2ZXJfZXh0O1xcbiAyMjA6XFx0XFxuIDIyMTpcXHRcXHRpZiAodGVzdF9hbmRfc2V0X2JpdChNV0lGSUVYX0lTX1JFUVVFU1RJTkdfRldfVkVSRVhULCBcXHUwMDI2YWRhcHRlci1cXHUwMDNld29ya19mbGFncykpXFxuIDIyMjpcXHRcXHRcXHRyZXR1cm47XFxuIDIyMzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDg6MzcuMTAzNTU1MTg4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NjA0NjMzNjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlJ3MgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gdGhlIGluaXRpYWwgY2FsbCBzdGFydHMgd2l0aCBgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0YCwgZ290IGl0LiBUaGF0IHRoZW4gYnJhbmNoZXMgb3V0IHRvIGVpdGhlciBgbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXRgIG9yIGBtd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldGAsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gRnJvbSB0aGVyZSwgd2UgaGl0IGBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdGAgYW5kIHRoZW4gYG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdGAuIEZpbmFsbHksIHdlIGdldCB0byB0aGUgY3JpdGljYWwgZnVuY3Rpb246IGBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3RgLiBUaGF0IGlzIGdvb2QhXG5cblRoaXMgZmxvdyBjb25maXJtcyB0aGF0IHRoaXMgc2VjdGlvbiBvZiBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggYSBVU0IgZ2FkZ2V0IGZ1enppbmcgYXBwcm9hY2guIFdlIGhhdmUgYSBjbGVhciBwYXRoIG9mIGZ1bmN0aW9uIGNhbGxzIHRoYXQgbGVhZHMgcmlnaHQgdG8gaXQuIEV4Y2VsbGVudCFcblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBjb3JyZWN0LiBXZSdsbCBuZWVkIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBlbmFibGVkIGluIHRoZSBidWlsZC4gV2FpdCwgYE1XSUZJRVhfVVNCYCAqZGVwZW5kcyogb24gYm90aCBgTVdJRklFWGAgYW5kIGBVU0JgLCBvZiBjb3Vyc2UuIFNvLCB5ZXMsIHdlIG5lZWQgYm90aCBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgdG8gZW5zdXJlIHRoaXMgY29kZSBpcyBidWlsdCBpbnRvIHRoZSBVU0IgZ2FkZ2V0LiBHb29kLlxuXG5CYWNrIHRvIHRoZSBjb2RlLCBsZXQncyBkb3VibGUtY2hlY2sgYG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdGAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJIHJlY2FsbCB0aGF0IGl0IGdldHMgY2FsbGVkIHdoZW4gdGhlIHBhY2tldCB0eXBlIGlzIGBQS1RfVFlQRV9BTVNEVWAsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBsZTE2X3RvX2NwdShsb2NhbF9yeF9wZC1cdTAwM2VyeF9wa3RfdHlwZSkgPT0gUEtUX1RZUEVfQU1TRFVgLiBJdCBhbHNvIHByb2Nlc3NlcyBURExTIGFjdGlvbiBmcmFtZXMuIFJpZ2h0LCBhbmQgdGhlIHBhdGNoIGZpeGVzIHRoZSBhc3NpZ25tZW50IG9mIGBza2ItXHUwMDNlbGVuYCB0byBgcnhfc2tiLVx1MDAzZWxlbmAgYmVmb3JlIGNhbGxpbmcgYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAuXG5cbk5leHQgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBiZWhhdmlvdXIgb2YgYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAgbm93LCBidXQgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBzcG90IHRvIHN0YXJ0IG91ciBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxNjEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0OTo0My43MDgxOTM5NTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTk2MDQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTIwPXN0YXRpYyBpbnQgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTQ0LVxcdFxcdFxcdCAgICBudG9ocyhyeF9oZHItXFx1MDAzZWV0aDgwM19oZHIuaF9wcm90bykgPT0gRVRIX1BfVERMUykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6NDU6XFx0XFx0XFx0XFx0bXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy00Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICh1OCAqKXJ4X2hkcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg9MTYwMz1pbnQgbXdpZmlleF9zZW5kX3RkbHNfYWN0aW9uX2ZyYW1lKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNvbnN0IHU4ICpwZWVyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNjA2LVxcdFxcdFxcdFxcdCAgIHNpemVfdCBleHRyYV9pZXNfbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjE2MDc6dm9pZCBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE2MDgtXFx0XFx0XFx0XFx0ICAgICAgIHU4ICpidWYsIGludCBsZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jPTcxPWludCBtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtMTUwLVxcdFxcdG9mZnNldCA9ICh1OCAqKWxvY2FsX3J4X3BkICsgcnhfcGt0X29mZjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM6MTUxOlxcdFxcdG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZShwcml2LCBvZmZzZXQsIHJ4X3BrdF9sZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0xNTItXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3RkbHMuYz04MDk9aW50IG13aWZpZXhfc2VuZF90ZGxzX2FjdGlvbl9mcmFtZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqcGVlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90ZGxzLmMtODg5LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90ZGxzLmM6ODkwOnZvaWQgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3RkbHMuYy04OTEtXFx0XFx0XFx0XFx0ICAgICAgIHU4ICpidWYsIGludCBsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjQ5OjQ0LjI3ODE2MzM5MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODM0OTY1MDYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQcmlvcml0aXppbmcgRnV6emluZyBUYXJnZXRzIGluIHRoZSBtd2lmaWV4IERyaXZlcioqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gc29tZSBrZXkgZnVuY3Rpb25zIGluIHRoZSBgbXdpZmlleGAgZHJpdmVyIGZvciBmdXp6aW5nLiBJbml0aWFsbHksIEkgdGhvdWdodCBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYCwgYG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdGAsIGBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdGAsIGFuZCBgbXdpZmlleF9wcm9jZXNzX3J4X3BhY2tldGAgd2VyZSBwcm9taXNpbmcgY2FuZGlkYXRlcy4gSG93ZXZlciwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcHJlZmVycmVkIGZ1enppbmcgdGFyZ2V0czogbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IHdpbGwgYmUgbW9yZSBmcnVpdGZ1bC5cblxuR2l2ZW4gdGhhdCwgSSdtIGdvaW5nIHRvIHJldmlzZSBteSBsaXN0LiBXaGlsZSBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCBsb29rZWQgaW50ZXJlc3RpbmcsIGl0J3Mgc3RhdGljYWxseSBkZWNsYXJlZCB3aGljaCByZW5kZXJzIGl0IGxlc3Mgc3VpdGFibGUgZm9yIGZ1enppbmcuIEknbGwgZm9jdXMgb24gdGhlc2UgaW5zdGVhZCwgYXMgdGhleSBtZWV0IHRoZSBjcml0ZXJpYTpcblxuKiAgIGBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdGBcbiogICBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYFxuKiAgIGBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldGBcbiogICBgbXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXRgXG4qICAgYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGBcblxuVG8gYmUgY2VydGFpbiwgbGV0IG1lIHZlcmlmeSB0aGUgc3RhdGljIHN0YXR1cyBvZiB0aG9zZSB0YXJnZXRzLiBDaGVja2luZyBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgLCBjb25maXJtZWQgaXQgaXMgbm90IHN0YXRpYy4gU2ltaWxhcmx5LCBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYCwgYG13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0YCwgYG13aWZpZXhfcHJvY2Vzc191YXBfcnhfcGFja2V0YCBhbmQgYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGAgYXJlIGFsc28gbm90IHN0YXRpYy4gVGhhdCdzIGEgc29saWQgbGlzdCB0byBzdGFydCB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY3MCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo1MDowMi42Mjc4MTc5N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NTAzNTgyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9NTIzPWludCBtd2lmaWV4X2NtZF8xMW5fZGVsYmEoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwgdm9pZCAqZGF0YV9idWYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTU0Ni0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjU0NzppbnQgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTU0OC1cXHRcXHRcXHRcXHR1MTYgc2VxX251bSwgdTE2IHRpZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9OTAyPXZvaWQgbXdpZmlleF8xMW5fcnhiYV9zeW5jX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTk2Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjk2NzpcXHRcXHRcXHRcXHRcXHRyZXQgPSBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtOTY4LVxcdFxcdFxcdFxcdFxcdChwcml2LCBzZXFfbnVtLCB0bHZfcnhiYS1cXHUwMDNldGlkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuaD0zOT1zdGF0aWMgaW5saW5lIHZvaWQgbXdpZmlleF9yZXNldF8xMW5fcnhfc2VxX251bShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuaC00My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5oOjQ0OmludCBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuaC00NS1cXHRcXHRcXHQgICAgICAgdTE2IHNlcU51bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYz0xODk9aW50IG13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtMjYwLVxcdC8qIFJlb3JkZXIgYW5kIHNlbmQgdG8gT1MgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM6MjYxOlxcdHJldCA9IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0KHByaXYsIHNlcV9udW0sIGxvY2FsX3J4X3BkLVxcdTAwM2Vwcmlvcml0eSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtMjYyLVxcdFxcdFxcdFxcdFxcdCB0YSwgKHU4KSByeF9wa3RfdHlwZSwgc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jPTM3Mz1pbnQgbXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jLTQ0Mi1cXHRwa3RfdHlwZSA9ICh1OClsZTE2X3RvX2NwdSh1YXBfcnhfcGQtXFx1MDAzZXJ4X3BrdF90eXBlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYzo0NDM6XFx0cmV0ID0gbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3QocHJpdiwgbGUxNl90b19jcHUodWFwX3J4X3BkLVxcdTAwM2VzZXFfbnVtKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYy00NDQtXFx0XFx0XFx0XFx0XFx0IHVhcF9yeF9wZC1cXHUwMDNlcHJpb3JpdHksIHRhLCBwa3RfdHlwZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NTA6MDQuNDcyODU4NzY0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTY1MzI2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIE1vZHVsZSBDb25maWd1cmF0aW9uIGZvciBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgICppcyogZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IGl0IGlzbid0IHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3MgdG8gZW5hYmxlIGl0LiBJIGtub3cgdGhhdCBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgYXJlIGRlZmluaXRlbHkgcmVxdWlyZWQuIEJ1dCBsZXQncyBiZSB0aG9yb3VnaCwgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzLiBSaWdodCwgaGVyZSB3ZSBnbywgYENGRzgwMjExYCBpcyBhIGRlcGVuZGVuY3kgb2YgYE1XSUZJRVhgLCBhbmQgYFVTQmAgaXMgYSBkZXBlbmRlbmN5IG9mIGBNV0lGSUVYX1VTQmAuIFNvLCBhcyBJIHRob3VnaHQsIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBhcmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHdvcnJ5IGFib3V0LlxuXG5Ob3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyBkb3VibGUtY2hlY2sgaWYganVzdCBlbmFibGluZyBgTVdJRklFWF9VU0JgIGlzIHN1ZmZpY2llbnQuIFllcywgYE1XSUZJRVhfVVNCYCAqZG9lcyogc2VsZWN0IGBGV19MT0FERVJgIGFuZCwgaW1wb3J0YW50bHksIGRlcGVuZHMgb24gKmJvdGgqIGBNV0lGSUVYYCBhbmQgYFVTQmAuIEFuZCB3ZSBrbm93IHRoYXQgYE1XSUZJRVhgIGl0c2VsZiBkZXBlbmRzIG9uIGBDRkc4MDIxMWAuIFRoYXQgbG9va3MgbGlrZSBhIGNvbXBsZXRlIGFuZCB3ZWxsLWRlZmluZWQgc2V0IG9mIGRlcGVuZGVuY2llcy5cblxuRmluYWxseSwganVzdCBmb3IgZ29vZCBtZWFzdXJlLCBsZXQncyBjb25maXJtIHdoZXRoZXIgYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAgaXMgbm9uLXN0YXRpYyBhcyB3ZWxsLiBUaGF0IHdpbGwgaGVscCB0byBpbmZvcm0gdGhlIHdpZGVyIHZpZXcgb2Ygd2hhdCBpcyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MzksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NTA6MDkuNDI5Mzk1NjI2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTU1MzYwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTE2MDM9aW50IG13aWZpZXhfc2VuZF90ZGxzX2FjdGlvbl9mcmFtZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqcGVlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTYwNi1cXHRcXHRcXHRcXHQgICBzaXplX3QgZXh0cmFfaWVzX2xlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxNjA3OnZvaWQgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNjA4LVxcdFxcdFxcdFxcdCAgICAgICB1OCAqYnVmLCBpbnQgbGVuKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90ZGxzLmM9ODA5PWludCBtd2lmaWV4X3NlbmRfdGRsc19hY3Rpb25fZnJhbWUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgY29uc3QgdTggKnBlZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdGRscy5jLTg4OS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdGRscy5jOjg5MDp2b2lkIG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90ZGxzLmMtODkxLVxcdFxcdFxcdFxcdCAgICAgICB1OCAqYnVmLCBpbnQgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo1MDowOS45ODQ5Mzc5MTVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIyMjgxNzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBjb25maXJtaW5nIHRoZSBvYnZpb3VzLCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBub24tc3RhdGljIGlzc3VlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBpbnRlcm5hbHMgb2YgdGhlIHBhY2tldCBoYW5kbGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW4gYW5kIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgaW52b2x2ZWQuXG5cbk15IGluaXRpYWwgY2hlY2sgY29uZmlybXMgdGhhdCBib3RoIGBtd2lmaWV4XzExbl9kaXNwYXRjaF9wa3RgIGFuZCBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCBhcmUsIGluIGZhY3QsIHN0YXRpYyB3aXRoaW4gYDExbl9yeHJlb3JkZXIuY2AuIFRoaXMgc3VnZ2VzdHMgdGhleSdyZSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIG1vZHVsZSwgd2hpY2ggbmFycm93cyB0aGUgc2NvcGUgb2YgdGhlIGludmVzdGlnYXRpb24uXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGNhbGwgaGllcmFyY2h5LCB0aGUgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb246XG5cbiogICBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgXG4qICAgYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWBcbiogICBgbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXRgXG4qICAgYG13aWZpZXhfcHJvY2Vzc191YXBfcnhfcGFja2V0YFxuKiAgIGBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXRgXG5cbmBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXRgIHNlZW1zIGEgYml0IGJyb2FkLCBhY3RpbmcgYXMgYW4gZW50cnkgcG9pbnQsIGJ1dCBpdCdzIGVzc2VudGlhbCBmb3IgY29udGV4dC4gYG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0YCBzZWVtcyBtb3JlIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBBLU1TRFUgcHJvY2Vzc2luZywgYW5kIGBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVgIGlzIHNwZWNpZmljYWxseSB0YXJnZXRlZCBieSB0aGUgYnVnZ3kgY29kZS5cblxuQWgsIHRoZSByb290IG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHdpdGhpbiBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCDigJMgcHJlY2lzZWx5IGJlY2F1c2UgaXQncyBzdGF0aWMuIFRoZSBwYXRjaCBjbGVhcmx5IGFkZHJlc3NlcyB0aGUgbGVuZ3RoIGRpc2NyZXBhbmN5LCBjb3JyZWN0aW5nIHRoZSBpbmNvcnJlY3QgdXNhZ2Ugb2YgYHNrYi1cdTAwM2VsZW5gIHdpdGggYHJ4X3NrYi1cdTAwM2VsZW5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXguIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIGZvciB2dWxuZXJhYmlsaXR5IGFuYWx5c2lzIHVzaW5nIFVTQiBnYWRnZXQgZnV6emluZywgZ2l2ZW4gdGhlIHByZXNlbmNlIG9mIHRoZSBgTVdJRklFWF9VU0JgIGNvbmZpZ3VyYXRpb24uXG5cblRoZXJlZm9yZSwgdGhlIHJlc3VsdHMgYXJlIHJlYWR5OlxuXG4qICAgKipXb3J0aEZ1enppbmc6IFRydWUqKiAoZHVlIHRvIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgVVNCIHN1cHBvcnQpXG4qICAgKipGb2N1c1N5bWJvbHM6KiogKGFzIGxpc3RlZCBhYm92ZSlcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1XSUZJRVhgLCBgTVdJRklFWF9VU0JgXG5cblRoZSBwYXRjaCBhZGRyZXNzZXMgYSBsZW5ndGgtcmVsYXRlZCBidWcgaW4gdGhlIEEtTVNEVSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHdpdGhpbiB0aGUgTWFydmVsbCBXaUZpLUV4IGRyaXZlciwgc3BlY2lmaWNhbGx5IHdoZW4gY2FsbGluZyBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYC4gVGhlIGJ1ZyBjYW4gYmUgcmVwcm9kdWNlZCB1c2luZyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNTMsIk91dHB1dFRva2VucyI6MTk4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjUwOjE5LjIwNzc1OTQwNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTM2MjQ1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVdJRklFWFwiLFxuICAgIFwiTVdJRklFWF9VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdFwiLFxuICAgIFwibXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lXCIsXG4gICAgXCJtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldFwiLFxuICAgIFwibXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXRcIixcbiAgICBcIm13aWZpZXhfaGFuZGxlX3J4X3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBNYXJ2ZWxsIFdpRmktRXggZHJpdmVyIHdoZXJlIHRoZSB3cm9uZyBza2IgbGVuZ3RoIHdhcyBwYXNzZWQgdG8gYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAgd2hlbiBwcm9jZXNzaW5nIEEtTVNEVSBwYWNrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIFRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGludGVyZmFjZXMgKGBNV0lGSUVYX1VTQmApLCBzbyBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIFVTQiBnYWRnZXQgZW11bGF0aW9uICh2aGNpKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNV0lGSUVYXCIsXG4gICAgXCJNV0lGSUVYX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0XCIsXG4gICAgXCJtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVcIixcbiAgICBcIm13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0XCIsXG4gICAgXCJtd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldFwiLFxuICAgIFwibXdpZmlleF9oYW5kbGVfcnhfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIE1hcnZlbGwgV2lGaS1FeCBkcml2ZXIgd2hlcmUgdGhlIHdyb25nIHNrYiBsZW5ndGggd2FzIHBhc3NlZCB0byBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYCB3aGVuIHByb2Nlc3NpbmcgQS1NU0RVIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gVGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgaW50ZXJmYWNlcyAoYE1XSUZJRVhfVVNCYCksIHNvIGl0IGNhbiBiZSBmdXp6ZWQgdXNpbmcgVVNCIGdhZGdldCBlbXVsYXRpb24gKHZoY2kpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhhcsn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 10:01:57 +0000 UTC FinishedAt: 2026-07-29 10:50:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MWIFIEX", "MWIFIEX_USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MWIFIEX", "MWIFIEX_USB" ], "series_id": "70c87716-e10f-41ba-a42e-6726ac77caca" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mwifiex_11n_rx_reorder_pkt", "mwifiex_process_tdls_action_frame", "mwifiex_process_sta_rx_packet", "mwifiex_process_uap_rx_packet", "mwifiex_handle_rx_packet" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01XSUZJRVgmIzM0OywKICAgICYjMzQ7TVdJRklFWF9VU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWUmIzM0OywKICAgICYjMzQ7bXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bXdpZmlleF9oYW5kbGVfcnhfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBNYXJ2ZWxsIFdpRmktRXggZHJpdmVyIHdoZXJlIHRoZSB3cm9uZyBza2IgbGVuZ3RoIHdhcyBwYXNzZWQgdG8gYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAgd2hlbiBwcm9jZXNzaW5nIEEtTVNEVSBwYWNrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIFRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGludGVyZmFjZXMgKGBNV0lGSUVYX1VTQmApLCBzbyBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIFVTQiBnYWRnZXQgZW11bGF0aW9uICh2aGNpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc5Mzg2NzFjNzhjZjZlYmFiYWRiZDE4YzZlZDk5NTkyYzNmYTk0Y2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxMDo0NzozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuY1xuaW5kZXggNjEwZWM4MzAyYWRmMi4uOWRlYjQ3ZjIyYTYxNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmNcbkBAIC00NCw3ICYjNDM7NDQsNyBAQCBzdGF0aWMgaW50IG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuIFx0XHRcdCAgICBudG9ocyhyeF9oZHItXHUwMDNlZXRoODAzX2hkci5oX3Byb3RvKSA9PSBFVEhfUF9URExTKSB7XG4gXHRcdFx0XHRtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWUocHJpdixcbiBcdFx0XHRcdFx0XHRcdFx0ICAodTggKilyeF9oZHIsXG4tXHRcdFx0XHRcdFx0XHRcdCAgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgIHJ4X3NrYi1cdTAwM2VsZW4pO1xuIFx0XHRcdH1cbiBcbiBcdFx0XHRpZiAocHJpdi1cdTAwM2Vic3Nfcm9sZSA9PSBNV0lGSUVYX0JTU19ST0xFX1VBUClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVdJRklFWCYjMzQ7LAogICAgJiMzNDtNV0lGSUVYX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O213aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0JiMzNDssCiAgICAmIzM0O213aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZSYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIE1hcnZlbGwgV2lGaS1FeCBkcml2ZXIgd2hlcmUgdGhlIHdyb25nIHNrYiBsZW5ndGggd2FzIHBhc3NlZCB0byBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYCB3aGVuIHByb2Nlc3NpbmcgQS1NU0RVIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gVGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgaW50ZXJmYWNlcyAoYE1XSUZJRVhfVVNCYCksIHNvIGl0IGNhbiBiZSBmdXp6ZWQgdXNpbmcgVVNCIGdhZGdldCBlbXVsYXRpb24gKHZoY2kpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzkzODY3MWM3OGNmNmViYWJhZGJkMThjNmVkOTk1OTJjM2ZhOTRjZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDI5IDEwOjQ3OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMKaW5kZXggNjEwZWM4MzAyYWRmMi4uOWRlYjQ3ZjIyYTYxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jCkBAIC00NCw3ICYjNDM7NDQsNyBAQCBzdGF0aWMgaW50IG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAogCQkJICAgIG50b2hzKHJ4X2hkci0mZ3Q7ZXRoODAzX2hkci5oX3Byb3RvKSA9PSBFVEhfUF9URExTKSB7CiAJCQkJbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHByaXYsCiAJCQkJCQkJCSAgKHU4ICopcnhfaGRyLAotCQkJCQkJCQkgIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJCQkJCQkJCSAgcnhfc2tiLSZndDtsZW4pOwogCQkJfQogCiAJCQlpZiAocHJpdi0mZ3Q7YnNzX3JvbGUgPT0gTVdJRklFWF9CU1NfUk9MRV9VQVApCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjEKCQkJCQkJCW91dHB1dDogNTYKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIFN1c3BlY3QgUGF0Y2ggaW4gbXdpZmlleCoqCgpBbHJpZ2h0LCBhIHBhdGNoIGhhcyBiZWVuIGZsYWdnZWQgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIHN3YXBwZWQgYHNrYi0mZ3Q7bGVuYCB3aXRoIGByeF9za2ItJmd0O2xlbmAgd2l0aGluIHRoZSBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCBmdW5jdGlvbi4gSG1tLCB0aGF0JiMzOTtzIGEgcHJldHR5IGxvdy1sZXZlbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSAqU0tCKiBsZW5ndGguIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgcmFpc2luZyBzb21lIGZsYWdzIGZvciBtZTsgbWlzaGFuZGxpbmcgKlNLQiogbGVuZ3RocyBpcyBhIGNsYXNzaWMgc291cmNlIG9mIGFsbCBraW5kcyBvZiBuYXN0eSBpc3N1ZXMg4oCTIGJ1ZmZlciBvdmVyZmxvd3MsIHVuZGVyZmxvd3MsIGFuZCBqdXN0IGdlbmVyYWwgZGF0YSBjb3JydXB0aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gYG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdGAgYW5kIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgaG93IHRoZSAqU0tCKiBpcyBiZWluZyB1c2VkIGFuZCBtb2RpZmllZCwgYW5kIHdoYXQgdGhlc2UgdmFyaWFibGVzICpza2IqIGFuZCAqcnhfc2tiKiByZXByZXNlbnQgaW4gdGhhdCBjb250ZXh0LiBXaGF0JiMzOTtzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlPyBDb3VsZCBpdCBiZSBiZW5pZ24sIGEgc2ltcGxlIHR5cG8sIG9yIGlzIHRoZXJlIGEgbW9yZSBmdW5kYW1lbnRhbCBtaXN1bmRlcnN0YW5kaW5nIG9mIHRoZSBBLU1TRFUgcmVhc3NlbWJseSBwcm9jZXNzIGF0IHBsYXk/IEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB2ZXJ5IGNhcmVmdWxseSwgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNpdCBhc3N1bXB0aW9ucy4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBsZXQmIzM5O3MgaG9wZSB0aGlzIGlzbiYjMzk7dCBzb21ldGhpbmcgdGhhdCBjYW4gY2F1c2UgbmV0d29yayBpbnN0YWJpbGl0eSwgb3Igd29yc2UsIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtMTktICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjIwOnN0YXRpYyBpbnQgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTIxLVx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz02Nz1zdGF0aWMgaW50IG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjc4Olx0cmV0ID0gbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0KHByaXYsIHBheWxvYWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy03OS1cdGlmICghcmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODUKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoaXMgTWFydmVsbCBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBBLU1TRFUgcGFja2V0IGRpc3BhdGNoLCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuY2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGN1cmlvdXMgYWJvdXQgaG93IHRoZXkmIzM5O3JlIG1hbmFnaW5nIHRoYXQgMTFuLXNwZWNpZmljIHJlb3JkZXJpbmcuIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGxvZ2ljIGZvciBob3cgdGhleSB0YWtlIHRob3NlIGZyYWdtZW50ZWQgTVNEVXMgYW5kIHB1dCB0aGVtIGJhY2sgdG9nZXRoZXIuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGEgY2xldmVyLCBvciBwZXJoYXBzIGNvbXBsZXgsIG1ldGhvZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0c3RhdGljIGludCBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbiAgMjE6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICAyMjpcdHtcbiAgMjM6XHRcdHN0cnVjdCByeHBkICpsb2NhbF9yeF9wZCA9IChzdHJ1Y3QgcnhwZCAqKShza2ItXHUwMDNlZGF0YSk7XG4gIDI0Olx0XHRpbnQgcmV0O1xuICAyNTpcdFxuICAyNjpcdFx0aWYgKGxlMTZfdG9fY3B1KGxvY2FsX3J4X3BkLVx1MDAzZXJ4X3BrdF90eXBlKSA9PSBQS1RfVFlQRV9BTVNEVSkge1xuICAyNzpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGxpc3Q7XG4gIDI4Olx0XHRcdHN0cnVjdCBza19idWZmICpyeF9za2I7XG4gIDI5Olx0XG4gIDMwOlx0XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZsaXN0KTtcbiAgMzE6XHRcbiAgMzI6XHRcdFx0c2tiX3B1bGwoc2tiLCBsZTE2X3RvX2NwdShsb2NhbF9yeF9wZC1cdTAwM2VyeF9wa3Rfb2Zmc2V0KSk7XG4gIDMzOlx0XHRcdHNrYl90cmltKHNrYiwgbGUxNl90b19jcHUobG9jYWxfcnhfcGQtXHUwMDNlcnhfcGt0X2xlbmd0aCkpO1xuICAzNDpcdFxuICAzNTpcdFx0XHRpZWVlODAyMTFfYW1zZHVfdG9fODAyM3Moc2tiLCBcdTAwMjZsaXN0LCBwcml2LVx1MDAzZWN1cnJfYWRkcixcbiAgMzY6XHRcdFx0XHRcdFx0IHByaXYtXHUwMDNld2Rldi5pZnR5cGUsIDAsIE5VTEwsIE5VTEwsIGZhbHNlKTtcbiAgMzc6XHRcbiAgMzg6XHRcdFx0d2hpbGUgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2bGlzdCkpIHtcbiAgMzk6XHRcdFx0XHRzdHJ1Y3QgcnhfcGFja2V0X2hkciAqcnhfaGRyO1xuICA0MDpcdFxuICA0MTpcdFx0XHRcdHJ4X3NrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2bGlzdCk7XG4gIDQyOlx0XHRcdFx0cnhfaGRyID0gKHN0cnVjdCByeF9wYWNrZXRfaGRyICopcnhfc2tiLVx1MDAzZWRhdGE7XG4gIDQzOlx0XHRcdFx0aWYgKElTU1VQUF9URExTX0VOQUJMRUQocHJpdi1cdTAwM2VhZGFwdGVyLVx1MDAzZWZ3X2NhcF9pbmZvKSBcdTAwMjZcdTAwMjZcbiAgNDQ6XHRcdFx0XHQgICAgbnRvaHMocnhfaGRyLVx1MDAzZWV0aDgwM19oZHIuaF9wcm90bykgPT0gRVRIX1BfVERMUykge1xuICA0NTpcdFx0XHRcdFx0bXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHByaXYsXG4gIDQ2Olx0XHRcdFx0XHRcdFx0XHRcdCAgKHU4ICopcnhfaGRyLFxuICA0NzpcdFx0XHRcdFx0XHRcdFx0XHQgIHJ4X3NrYi1cdTAwM2VsZW4pO1xuICA0ODpcdFx0XHRcdH1cbiAgNDk6XHRcbiAgNTA6XHRcdFx0XHRpZiAocHJpdi1cdTAwM2Vic3Nfcm9sZSA9PSBNV0lGSUVYX0JTU19ST0xFX1VBUClcbiAgNTE6XHRcdFx0XHRcdHJldCA9IG13aWZpZXhfdWFwX3JlY3ZfcGFja2V0KHByaXYsIHJ4X3NrYik7XG4gIDUyOlx0XHRcdFx0ZWxzZVxuICA1MzpcdFx0XHRcdFx0cmV0ID0gbXdpZmlleF9yZWN2X3BhY2tldChwcml2LCByeF9za2IpO1xuICA1NDpcdFx0XHRcdGlmIChyZXQgPT0gLTEpXG4gIDU1Olx0XHRcdFx0XHRtd2lmaWV4X2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxuICA1NjpcdFx0XHRcdFx0XHQgICAgXCYjMzQ7Unggb2YgQS1NU0RVIGZhaWxlZFwmIzM0Oyk7XG4gIDU3Olx0XHRcdH1cbiAgNTg6XHRcdFx0cmV0dXJuIDA7XG4gIDU5Olx0XHR9XG4gIDYwOlx0XG4gIDYxOlx0XHRyZXR1cm4gLTE7XG4gIDYyOlx0fVxuICA2MzpcdFxuICA2NDpcdC8qIFRoaXMgZnVuY3Rpb24gd2lsbCBwcm9jZXNzIHRoZSByeCBwYWNrZXQgYW5kIGZvcndhcmQgaXQgdG8ga2VybmVsL3VwcGVyXG4gIDY1Olx0ICogbGF5ZXIuXG4gIDY2Olx0ICovXG4gIDY3Olx0c3RhdGljIGludCBtd2lmaWV4XzExbl9kaXNwYXRjaF9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbiAgNjg6XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGF5bG9hZClcbiAgNjk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk3OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdpcmVsZXNzIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYSB3aXJlbGVzcyBkcml2ZXIsIGFuZCBpdCBsb29rcyBsaWtlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIHRoYW5rZnVsbHkuIEl0IGFkZHJlc3NlcyBhIGJ1ZyB3aXRoaW4gdGhlIGhhbmRsaW5nIG9mIFRETFMgYWN0aW9uIGZyYW1lcyBpbnNpZGUgYW4gQS1NU0RVIHBhY2tldC4gSXQgc2VlbXMgdGhlIGNvZGUgd2FzIG1pc3Rha2VubHkgcmVmZXJlbmNpbmcgYHNrYi0mZ3Q7bGVuYCBpbnN0ZWFkIG9mIHRoZSBjb3JyZWN0IGByeF9za2ItJmd0O2xlbmAgZHVyaW5nIHByb2Nlc3NpbmcuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGJ1Zywgd2hpY2ggbWVhbnMgd2UgY2FuIGxpa2VseSBleHBlY3QgaW1wcm92ZWQgc3RhYmlsaXR5IG9yIGNvcnJlY3QgYmVoYXZpb3IgYWZ0ZXIgdGhpcyBpcyBhcHBsaWVkLiBOb3csIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIEtjb25maWcgZm9yIG13aWZpZXggdG8gZ2V0IHRoZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNV0lGSUVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI6Y29uZmlnIE1XSUZJRVhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoxMjpjb25maWcgTVdJRklFWF9TRElPXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xMy1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFNEODc4Ni9TRDg3ODcvU0Q4Nzk3L1NEODg4Ny9TRDg4OTcvU0Q4OTc3L1NEODk3OC9TRDg5ODcvU0Q4OTk3XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoyNTpjb25maWcgTVdJRklFWF9QQ0lFXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFBDSUUgODc2Ni84ODk3Lzg5OTdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjM3OmNvbmZpZyBNV0lGSUVYX1VTQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMzgtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBVU0I4NzY2Lzg3OTcvODk5N1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnYCBmaWxlLCBhcyBJIHVuZGVyc3RhbmQgaXQ6CgoqKkV4YW1pbmluZyB0aGUgTXdpZmlleCBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgS2NvbmZpZ2AgZmlsZSBmb3IgdGhlIE1hcnZlbGwgbXdpZmlleCB3aXJlbGVzcyBkcml2ZXIuIEZpcnN0LCBJIGV4cGVjdCB0aGlzIHRvIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZHJpdmVyLCBkZXRhaWxpbmcgYWxsIHRoZSBmZWF0dXJlcyBhbmQgZnVuY3Rpb25hbGl0aWVzIHRoYXQgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZHVyaW5nIGtlcm5lbCBjb21waWxhdGlvbi4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7dmUgc3RydWN0dXJlZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgd2hlcmUgdGhleSYjMzk7dmUgaG9va2VkIGludG8gdGhlIG92ZXJhbGwga2VybmVsIGNvbmZpZ3VyYXRpb24gaGllcmFyY2h5LiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkcml2ZXImIzM5O3MgbW9kdWxhcml0eSwgd2hpY2ggbW9kdWxlcyBhcmUgY3JpdGljYWwsIGFuZCB3aGF0IGxldmVscyBvZiBzdXBwb3J0IGFyZSBpbXBsZW1lbnRlZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGV5JiMzOTt2ZSBpbmNsdWRlZCBvcHRpb25zIGZvciBwb3dlciBtYW5hZ2VtZW50LCBzZWN1cml0eSBmZWF0dXJlcyBsaWtlIFdQQS9XUEEyL1dQQTMgc3VwcG9ydCwgYW5kIGRpZmZlcmVudCByZWd1bGF0b3J5IGRvbWFpbnMuIEkmIzM5O2xsIGJlIGFzc2Vzc2luZyBob3cgd2VsbCB0aGUgb3B0aW9ucyBhcmUgZG9jdW1lbnRlZC4gQXJlIHRoZSBoZWxwIHRleHRzIGNsZWFyIGFuZCBjb25jaXNlPyBEbyB0aGV5IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IGZvciBhIHVzZXIgdG8gbWFrZSBpbmZvcm1lZCBjaG9pY2VzPyBGaW5hbGx5LCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgdmVuZG9yLXNwZWNpZmljIG9wdGlvbnMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhpcyBpcyBhIGdlbmVyYWwtcHVycG9zZSBkcml2ZXIsIG9yIGlmIGl0IGlzIHRhaWxvcmVkIHRvIHNwZWNpZmljIE1hcnZlbGwgY2hpcHNldHMgb3IgaGFyZHdhcmUgcmV2aXNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE1XSUZJRVhcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIE1hcnZlbGxcbiAgIDc6XHRcdCAgODAyLjExbi9hYyBjaGlwc2V0cy5cbiAgIDg6XHRcbiAgIDk6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcbiAgMTA6XHRcdCAgbXdpZmlleC5cbiAgMTE6XHRcbiAgMTI6XHRjb25maWcgTVdJRklFWF9TRElPXG4gIDEzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBTRDg3ODYvU0Q4Nzg3L1NEODc5Ny9TRDg4ODcvU0Q4ODk3L1NEODk3Ny9TRDg5NzgvU0Q4OTg3L1NEODk5N1wmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBNV0lGSUVYIFx1MDAyNlx1MDAyNiBNTUNcbiAgMTU6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMTY6XHRcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxuICAxOTpcdFx0ICA4Nzg2Lzg3ODcvODc5Ny84ODg3Lzg4OTcvODk3Ny84OTc4Lzg5ODcvODk5NyBjaGlwc2V0cyB3aXRoXG4gIDIwOlx0XHQgIFNESU8gaW50ZXJmYWNlLiBTRDg5NzggaXMgYWxzbyBrbm93biBhcyBOWFAgSVc0MTYuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXG4gIDIzOlx0XHQgIG13aWZpZXhfc2Rpby5cbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgTVdJRklFWF9QQ0lFXG4gIDI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBQQ0lFIDg3NjYvODg5Ny84OTk3XCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIE1XSUZJRVggXHUwMDI2XHUwMDI2IFBDSVxuICAyODpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAyOTpcdFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBNYXJ2ZWxsXG4gIDMyOlx0XHQgIDg3NjYvODg5Ny84OTk3IGNoaXBzZXRzIHdpdGggUENJZSBpbnRlcmZhY2UuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXG4gIDM1Olx0XHQgIG13aWZpZXhfcGNpZS5cbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgTVdJRklFWF9VU0JcbiAgMzg6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFVTQjg3NjYvODc5Ny84OTk3XCYjMzQ7XG4gIDM5Olx0XHRkZXBlbmRzIG9uIE1XSUZJRVggXHUwMDI2XHUwMDI2IFVTQlxuICA0MDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxuICA0MzpcdFx0ICA4Nzk3Lzg5OTcgY2hpcHNldCB3aXRoIFVTQiBpbnRlcmZhY2UuXG4gIDQ0Olx0XG4gIDQ1Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXG4gIDQ2Olx0XHQgIG13aWZpZXhfdXNiLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQ5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE1hcnZlbGwgV2lGaS1FeCBEcml2ZXIsIHNwZWNpZmljYWxseS4gSXQmIzM5O3MgYnVpbHQgdG8gc3VwcG9ydCBTRElPLCBQQ0llLCAqYW5kKiBVU0IuIFRoZSBVU0IgaW50ZXJmYWNlLCB0aGF0JiMzOTtzIGtleS4gVGhhdCBgTVdJRklFWF9VU0JgIGluZGljYXRlcyBpdCBjYW4gYmUgZnV6emVkIHZpYSBgdmhjaWAsIHdoaWNoIGlzIGEgZmFudGFzdGljIGFuZ2xlIOKAkyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiBvcGVucyB1cCBhIHdvcmxkIG9mIHBvc3NpYmlsaXRpZXMgZm9yIGluamVjdGluZyBtYWxpY2lvdXMgZGF0YS4KClJpZ2h0LCBzbyBJIHNlZSB0aGlzIGZ1bmN0aW9uLCBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCwgYmVpbmcgY2FsbGVkIGZyb20gYG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdGAuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGNoYWluIGFuZCBkYXRhIGZsb3csIGFuZCBmaWd1cmluZyBvdXQgd2hlcmUgYG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdGAgaXMgY2FsbGVkIHdpbGwgYmUgdml0YWwgZm9yIGV4cGxvaXRhdGlvbi4gVGhpcyBpcyB3aGVyZSBJIHdhbnQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyBkZWVwIHdlIGNhbiBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTIwPXN0YXRpYyBpbnQgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy02Ni0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6Njc6c3RhdGljIGludCBtd2lmaWV4XzExbl9kaXNwYXRjaF9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNjgtXHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnBheWxvYWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz05Nj1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo5Nzptd2lmaWV4XzExbl9kaXNwYXRjaF9wa3RfdW50aWxfc3RhcnRfd2luKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTk4LVx0XHRcdFx0XHQgc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwgKnRibCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTEzMi1cdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZsaXN0KSkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjEzMzpcdFx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0KHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTEzNC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz0xNDU9bXdpZmlleF8xMW5fc2Nhbl9hbmRfZGlzcGF0Y2goc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTE3OC1cdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZsaXN0KSkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjE3OTpcdFx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0KHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTE4MC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz0xODk9bXdpZmlleF9kZWxfcnhfcmVvcmRlcl9lbnRyeShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtMjA2LVx0c3RhcnRfd2luID0gKHRibC1cdTAwM2VzdGFydF93aW4gJiM0MzsgdGJsLVx1MDAzZXdpbl9zaXplKSBcdTAwMjYgKE1BWF9USURfVkFMVUUgLSAxKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6MjA3Olx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0X3VudGlsX3N0YXJ0X3dpbihwcml2LCB0YmwsIHN0YXJ0X3dpbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTIwOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTMwMD1td2lmaWV4X2ZsdXNoX2RhdGEoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0zMTMtXHRzdGFydF93aW4gPSAoY3R4LVx1MDAzZXB0ci1cdTAwM2VzdGFydF93aW4gJiM0Mzsgc2VxX251bSAmIzQzOyAxKSBcdTAwMjYgKE1BWF9USURfVkFMVUUgLSAxKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6MzE0Olx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0X3VudGlsX3N0YXJ0X3dpbihjdHgtXHUwMDNlcHJpdiwgY3R4LVx1MDAzZXB0cixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtMzE1LVx0XHRcdFx0XHRcdCBzdGFydF93aW4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9MzI5PW13aWZpZXhfMTFuX2NyZWF0ZV9yeF9yZW9yZGVyX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqdGEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0zNDItXHRpZiAodGJsKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjM0MzpcdFx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0X3VudGlsX3N0YXJ0X3dpbihwcml2LCB0YmwsIHNlcV9udW0pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0zNDQtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTU0Nz1pbnQgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTU1OS1cdFx0aWYgKHBrdF90eXBlICE9IFBLVF9UWVBFX0JBUilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6NTYwOlx0XHRcdG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdChwcml2LCBwYXlsb2FkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNTYxLVx0XHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNTY0LVx0aWYgKChwa3RfdHlwZSA9PSBQS1RfVFlQRV9BTVNEVSkgXHUwMDI2XHUwMDI2ICF0YmwtXHUwMDNlYW1zZHUpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6NTY1Olx0XHRtd2lmaWV4XzExbl9kaXNwYXRjaF9wa3QocHJpdiwgcGF5bG9hZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTU2Ni1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTYyMy1cdFx0XHRzdGFydF93aW4gPSAoTUFYX1RJRF9WQUxVRSAtICh3aW5fc2l6ZSAtIGVuZF93aW4pKSAmIzQzOyAxO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo2MjQ6XHRcdG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdF91bnRpbF9zdGFydF93aW4ocHJpdiwgdGJsLCBzdGFydF93aW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy02MjUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MjQKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFBhY2tldCBSZW9yZGVyaW5nIExvZ2ljKioKCk9rYXksIHNvIGBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdGAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBwYWNrZXQgcmVjZXB0aW9uLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgZ2F0ZXdheSBmb3IgaW5jb21pbmcgZnJhbWVzLiBOb3csIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGJyb2FkZXIgZGF0YSBmbG93LiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGguIFdoZXJlICpleGFjdGx5KiBpcyBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgIGludm9rZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBjYWxscywgdGhlIGNvbnRleHQsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgcGFja2V0IGRhdGEgZ2V0cyBoZXJlLiBJJiMzOTttIHRoaW5raW5nOiBIb3cgaXMgdGhpcyBmdW5jdGlvbiB0cmlnZ2VyZWQ/IElzIGl0IGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBkaXJlY3RseT8gSXMgaXQgcGFydCBvZiBhIGxvd2VyLWxldmVsIGhhcmR3YXJlIGFic3RyYWN0aW9uPyBJcyBpdCBpbnZva2VkIGJ5IHNvbWUgZGF0YSBwcm9jZXNzIEkmIzM5O20gZmFtaWxpYXIgd2l0aD8gS25vd2luZyB0aGUgY2FsbGVyIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBkcml2ZXImIzM5O3MgcmVjZWl2ZSBwYXRoIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBvdXQtb2Ytb3JkZXIgcGFja2V0cy4gU28sIGxldCYjMzk7cyBnbyBmaW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz01MjM9aW50IG13aWZpZXhfY21kXzExbl9kZWxiYShzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCB2b2lkICpkYXRhX2J1Zilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTU0Ni0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6NTQ3OmludCBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy01NDgtXHRcdFx0XHR1MTYgc2VxX251bSwgdTE2IHRpZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTkwMj12b2lkIG13aWZpZXhfMTFuX3J4YmFfc3luY19ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtOTY2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo5Njc6XHRcdFx0XHRcdHJldCA9IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTk2OC1cdFx0XHRcdFx0KHByaXYsIHNlcV9udW0sIHRsdl9yeGJhLVx1MDAzZXRpZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5oPTM5PXN0YXRpYyBpbmxpbmUgdm9pZCBtd2lmaWV4X3Jlc2V0XzExbl9yeF9zZXFfbnVtKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuaC00My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmg6NDQ6aW50IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmgtNDUtXHRcdFx0ICAgICAgIHUxNiBzZXFOdW0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jPTE4OT1pbnQgbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtMjYwLVx0LyogUmVvcmRlciBhbmQgc2VuZCB0byBPUyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jOjI2MTpcdHJldCA9IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0KHByaXYsIHNlcV9udW0sIGxvY2FsX3J4X3BkLVx1MDAzZXByaW9yaXR5LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jLTI2Mi1cdFx0XHRcdFx0IHRhLCAodTgpIHJ4X3BrdF90eXBlLCBza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jPTM3Mz1pbnQgbXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYy00NDItXHRwa3RfdHlwZSA9ICh1OClsZTE2X3RvX2NwdSh1YXBfcnhfcGQtXHUwMDNlcnhfcGt0X3R5cGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmM6NDQzOlx0cmV0ID0gbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3QocHJpdiwgbGUxNl90b19jcHUodWFwX3J4X3BkLVx1MDAzZXNlcV9udW0pLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmMtNDQ0LVx0XHRcdFx0XHQgdWFwX3J4X3BkLVx1MDAzZXByaW9yaXR5LCB0YSwgcGt0X3R5cGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgUGFja2V0IFJlY2VwdGlvbiBpbiB0aGUgTWFydmVsbCBXaS1GaSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgTWFydmVsbCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgaXQgaGFuZGxlcyBpbmNvbWluZyBwYWNrZXRzLiBNeSBpbml0aWFsIGh1bmNoIGlzIGNvbmZpcm1lZDogYG13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0YCBhbmQgYG13aWZpZXhfcHJvY2Vzc191YXBfcnhfcGFja2V0YCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3IgcGFyc2luZyBhbmQgaGFuZGxpbmcgcmVjZWl2ZWQgcGFja2V0cy4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIFNUQSAoc3RhdGlvbi9jbGllbnQpIGFuZCBVQVAgKFVuaXZlcnNhbCBBY2Nlc3MgUG9pbnQpIHJvbGVzLiBOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHRzIG9mIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGVzZSBlbnRyeSBwb2ludHMgYW5kIHNlZSB3aGVyZSB0aGV5JiMzOTtyZSBpbnZva2VkIHRvIGZ1bGx5IGdyYXNwIHRoZSBwYWNrZXQgcmVjZXB0aW9uIGZsb3cuIEtub3dpbmcgdGhlaXIgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgZHJpdmVyIG9yY2hlc3RyYXRlcyB0aGUgcHJvY2Vzc2luZyBvZiB0aGVzZSBpbmNvbWluZyBmcmFtZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTExMzc9aW50IG13aWZpZXhfcHJvY2Vzc19zdGFfY21kcmVzcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosIHUxNiBjbWRyZXNwX25vLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMTM4LVx0XHRcdFx0c3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxMTM5OmludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTExNDAtXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYz03MT1pbnQgbXdpZmlleF9wcm9jZXNzX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0xODgtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM6MTg5OmludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jLTE5MC1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jPTI0PWludCBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTU1LVx0ZWxzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYzo1NjpcdFx0cmV0ID0gbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmMtNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIERhdGEgRmxvdzogYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGAqKgoKQWxyaWdodCwgc28gdGhlIFVTQiBkcml2ZXImIzM5O3MgZ290IHNvbWV0aGluZyB0cmlnZ2VyaW5nIGEgY2FsbCB0byBgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0YC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQsIHRoZSByZWNlaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBwaW5wb2ludCAqZXhhY3RseSogd2hlcmUgdGhhdCBjYWxsIGlzIG9yaWdpbmF0aW5nIHdpdGhpbiB0aGUgVVNCIGRyaXZlci4gV2UgbmVlZCB0byBmb2xsb3cgdGhpcyBjaGFpbiwgbWF5YmUgdG8gYW4gaW50ZXJydXB0IGhhbmRsZXIgb3IgYSBzcGVjaWZpYyByZWNlaXZlIHJvdXRpbmUuIFRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBzdWdnZXN0cyB0aGlzIGlzIHdoZXJlIHdlIG5lZWQgdG8gdHJhY2UgdGhlIGluY29taW5nIHBhY2tldCBoYW5kbGluZywgc28gbGV0JiMzOTtzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCB0aGUgY29kZSYjMzk7cyBnb3QgZm9yIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MTc0PXN0YXRpYyBpbnQgbXdpZmlleF9wcm9jZXNzX3J4KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0yMDQtXHRcdH0gZWxzZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjIwNTpcdFx0XHRtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQoYWRhcHRlciwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMjA2LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMTAyPXZvaWQgbXdpZmlleF9wcm9jZXNzX2Fzc29jX3Jlc3Aoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjExMDM6aW50IG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMTA0LVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3BjaWUuYz0xNTI2PXN0YXRpYyBpbnQgbXdpZmlleF9wY2llX3Byb2Nlc3NfcmVjdl9kYXRhKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3BjaWUuYy0xNTg4LVx0XHRcdH0gZWxzZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvcGNpZS5jOjE1ODk6XHRcdFx0XHRtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQoYWRhcHRlciwgc2tiX2RhdGEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3BjaWUuYy0xNTkwLVx0XHRcdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jPTE1OTM9c3RhdGljIHZvaWQgbXdpZmlleF9kZWFnZ3Jfc2Rpb19wa3Qoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jLTE2MzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjE2MzQ6XHRcdG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChhZGFwdGVyLCBza2JfZGVhZ2dyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTYzNS1cdFx0ZGF0YSAmIzQzOz0gYmxrX3NpemU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYz0xNjQ3PXN0YXRpYyBpbnQgbXdpZmlleF9kZWNvZGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xNjg0LVx0XHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYzoxNjg1Olx0XHRcdG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChhZGFwdGVyLCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xNjg2LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYy0yMy0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmM6MjQ6aW50IG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYy0yNS1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYy01OS19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jOjYwOkVYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTYxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgzOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW5jb21pbmcgUGFja2V0IEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBkYXRhIGZsb3cgZm9yIGluY29taW5nIHBhY2tldHMgaW4gdGhpcyBXaUZpIGRyaXZlci4gSXQgbG9va3MgbGlrZSBgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0YCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBoZXJlOyBpdCYjMzk7cyB0aGUgb25lIGFjdHVhbGx5IGRvaW5nIHRoZSB3b3JrIG9mIHByb2Nlc3NpbmcgcmVjZWl2ZWQgcGFja2V0cy4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG13aWZpZXhfcHJvY2Vzc19yeGAsIHdoaWNoIG1ha2VzIHNlbnNlIOKAkyB0aGF0JiMzOTtzIGxpa2VseSB0aGUgY2VudHJhbCByZWNlaXZlciBsb29wIGluIGBtYWluLmNgLiBCdXQgaXQmIzM5O3MgYWxzbyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgcGNpZS5jYCBhbmQgYHNkaW8uY2AuIFRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgZGVzaWduIGNob2ljZSwgYnlwYXNzaW5nIHRoZSBtYWluIGxvb3AgZm9yIHNwZWNpZmljIGludGVyZmFjZXMuIEkmIzM5O20gbm90aW5nIHRoZSBkaXJlY3QgY2FsbHMgZm9yIGxhdGVyLgoKV2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBXaGF0IGFib3V0IHRoZSBVU0IgaW50ZXJmYWNlPyBJcyB0aGUgcGFja2V0IGhhbmRsaW5nIGRvbmUgYnkgYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGAgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyB2aWEgVVNCPyBJIG5lZWQgdG8gY2hlY2sgYHVzYi5jYCB0byBzZWUgaG93IGluY29taW5nIHBhY2tldHMgYXJlIGhhbmRsZWQgb24gdGhhdCBmcm9udC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXdpZmlleF9wcm9jZXNzX3J4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTY3PXN0YXRpYyBpbnQgbXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy04NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6ODU6XHRyZXR1cm4gbXdpZmlleF9wcm9jZXNzX3J4X3BhY2tldChwcml2LCBwYXlsb2FkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtODYtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MTYzPXN0YXRpYyB2b2lkIG13aWZpZXhfcXVldWVfcnhfd29yayhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMTczLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoxNzQ6c3RhdGljIGludCBtd2lmaWV4X3Byb2Nlc3Nfcngoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMTc1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTE0MDM9c3RhdGljIHZvaWQgbXdpZmlleF9yeF93b3JrX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTE0MDktXHRcdHJldHVybjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MTQxMDpcdG13aWZpZXhfcHJvY2Vzc19yeChhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMTQxMS19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMTI3PWludCBtd2lmaWV4X3JldF84MDJfMTFfaHNfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTExMjgtXHRcdFx0ICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxMTI5OmludCBtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTExMzAtXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jPTIzPW13aWZpZXhfZGlzY2FyZF9ncmF0dWl0b3VzX2FycChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy03MC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYzo3MTppbnQgbXdpZmlleF9wcm9jZXNzX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jLTcyLVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jPTE4OT1pbnQgbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtMjMzLVx0ICAgICFldGhlcl9hZGRyX2VxdWFsX3VuYWxpZ25lZChwcml2LVx1MDAzZWN1cnJfYWRkciwgcnhfcGt0X2hkci1cdTAwM2VldGg4MDNfaGRyLmhfZGVzdCkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYzoyMzQ6XHRcdG13aWZpZXhfcHJvY2Vzc19yeF9wYWNrZXQocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0yMzUtXHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmM9MjMyPWludCBtd2lmaWV4X2hhbmRsZV91YXBfcnhfZm9yd2FyZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jLTI3My1cdC8qIEZvcndhcmQgdW5pY2F0L0ludGVyLUJTUyBwYWNrZXRzIHRvIGtlcm5lbC4gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jOjI3NDpcdHJldHVybiBtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYy0yNzUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgbXdpZmlleF9yeF93b3JrX3F1ZXVlYCBFbnF1ZXVlaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYG13aWZpZXhfcnhfd29ya19xdWV1ZWAgYW5kIHRoZSBtZWNoYW5pY3Mgb2YgKmhvdyogaXQmIzM5O3MgYWN0dWFsbHkgZ2V0dGluZyBxdWV1ZWQuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGZsb3cg4oCTIHRoZSB0cmlnZ2VycywgdGhlIGNvbnRleHQsIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IsIGV2ZW4gbW9yZSBsaWtlbHksIHBvdGVudGlhbCBjb250ZW50aW9uIHBvaW50cyB3aXRoaW4gdGhlIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB3ZSBhcmUgdXRpbGl6aW5nIHRoZSB3b3JrcXVldWUgY29ycmVjdGx5LiBBcmUgd2Ugc2VlaW5nIHVuZHVlIGxhdGVuY3ksIHN0YXJ2YXRpb24sIG9yIGxvY2sgY29udGVudGlvbiBpbiB0aGUgcmVsZXZhbnQgd29ya3F1ZXVlIGNvbnRleHRzLCBpbiB0aGUgY2FzZXMgb2YgY29uY3VycmVudCBhY2Nlc3M/IEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHNjaGVkdWxpbmcgb2YgdGhhdCB3b3JrLCBzcGVjaWZpY2FsbHkgdGhlIHdvcmsgZG9uZSBieSB0aGUgYG13aWZpZXhfcnhfd29ya19xdWV1ZWAsIGlzbiYjMzk7dCBjcmVhdGluZyBhIGJvdHRsZW5lY2ssIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGluY3JlYXNpbmdseSBkZW1hbmRpbmcgdGhyb3VnaHB1dCByZXF1aXJlbWVudHMgYW5kIHRoZSBudWFuY2VzIG9mIHZhcmlvdXMgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgYW5kIHRyYWZmaWMgcHJvZmlsZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCByZWxldmFudCBjb2RlIHBhdGhzIOKAkyBpbnRlcnJ1cHQgaGFuZGxlcnMsIGRhdGEgcGF0aHMsIGFuZCBhbnkgYXNzb2NpYXRlZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gV2hhdCBzcGVjaWZpYyBlbGVtZW50cyBhcmUgdHJpZ2dlcmluZyB0aGUgZW5xdWV1ZWluZywgd2hlcmUgYXJlIHRoZXkgZGVmaW5lZCwgYW5kIHdoYXQgaXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBxdWV1ZSBzdGF0ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIFdMQU4gZHJpdmVyIGZsb3c/IEkgc2hvdWxkIGFsc28gZXhhbWluZSB0aGUgcXVldWUmIzM5O3MgY29uZmlndXJhdGlvbiwgYW55IHdvcmsgaXRlbSBwcmlvcml0aWVzLCBhbmQgdGhlIHVuZGVybHlpbmcgd29ya3F1ZXVlIGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X3F1ZXVlX3J4X3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MTYxPUVYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfcXVldWVfbWFpbl93b3JrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMTYyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoxNjM6c3RhdGljIHZvaWQgbXdpZmlleF9xdWV1ZV9yeF93b3JrKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTE2NC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz0yNDg9aW50IG13aWZpZXhfbWFpbl9wcm9jZXNzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0yNzgtXHRcdFx0YWRhcHRlci1cdTAwM2VkZWxheV9tYWluX3dvcmsgPSB0cnVlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoyNzk6XHRcdFx0bXdpZmlleF9xdWV1ZV9yeF93b3JrKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0yODAtXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0yOTEtXHRcdGlmIChhZGFwdGVyLVx1MDAzZXJ4X3dvcmtfZW5hYmxlZCBcdTAwMjZcdTAwMjYgYWRhcHRlci1cdTAwM2VkYXRhX3JlY2VpdmVkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoyOTI6XHRcdFx0bXdpZmlleF9xdWV1ZV9yeF93b3JrKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0yOTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTUxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBEYXRhIEZsb3c6IEZvY3VzaW5nIG9uIFJYIGFuZCBVU0IqKgoKT2theSwgc28gYmFzZWQgb24gdGhlIGNvbnRleHQsIEkmIzM5O20gcHJldHR5IHN1cmUgYG13aWZpZXhfbWFpbl9wcm9jZXNzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhhbmRsaW5nIGluY29taW5nLCByZWNlaXZlZCBkYXRhIOKAkyB0aGUgUlggc2lkZSBvZiB0aGluZ3MuIFRoYXQmIzM5O3MgbXkgaW1tZWRpYXRlIGltcHJlc3Npb24uIE5vdywgSSBuZWVkIHRvIHNlZSAqaG93KiB0aGlzIGRhdGEgaXMgYWN0dWFsbHkgbWFraW5nIGl0cyB3YXkgaW50byB0aGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCB0aGUgVVNCIGludGVyZmFjZS4gVGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYHVzYi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIFVTQiBkYXRhIHJlY2VwdGlvbiBob29rcyBhcmUgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhpcyBgbXdpZmlleF9tYWluX3Byb2Nlc3NgIGZ1bmN0aW9uLiBJJiMzOTttIHRoaW5raW5nIHRoZSBgdXNiLmNgIGZpbGUgd2lsbCBnaXZlIG1lIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGUgVVNCIHRyYW5zZmVyIGFuZCB3aGVyZSBpdCBoYW5kcyBvZmYgdGhlIHJhdyBkYXRhIHRvIHRoZSBoaWdoZXItbGV2ZWwgV2ktRmkgc3RhY2sgZm9yIHByb2Nlc3NpbmcuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXdpZmlleF91c2JfcnhfY29tcGxldGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYz00Nj1zdGF0aWMgaW50IG13aWZpZXhfdXNiX3JlY3Yoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMTUxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jOjE1MjpzdGF0aWMgdm9pZCBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMTUzLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM9Mjg1PXN0YXRpYyBpbnQgbXdpZmlleF91c2Jfc3VibWl0X3J4X3VyYihzdHJ1Y3QgdXJiX2NvbnRleHQgKmN0eCwgaW50IHNpemUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTMxNS1cdFx0XHRcdCB1c2JfcmN2aW50cGlwZShjYXJkLVx1MDAzZXVkZXYsIGN0eC1cdTAwM2VlcCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM6MzE2Olx0XHRcdFx0IGN0eC1cdTAwM2Vza2ItXHUwMDNlZGF0YSwgc2l6ZSwgbXdpZmlleF91c2JfcnhfY29tcGxldGUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMzE3LVx0XHRcdFx0ICh2b2lkICopY3R4LCBjYXJkLVx1MDAzZXJ4X2NtZF9pbnRlcnZhbCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTMyMC1cdFx0XHRcdCAgdXNiX3JjdmJ1bGtwaXBlKGNhcmQtXHUwMDNldWRldiwgY3R4LVx1MDAzZWVwKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzozMjE6XHRcdFx0XHQgIGN0eC1cdTAwM2Vza2ItXHUwMDNlZGF0YSwgc2l6ZSwgbXdpZmlleF91c2JfcnhfY29tcGxldGUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMzIyLVx0XHRcdFx0ICAodm9pZCAqKWN0eCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjQxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYG13aWZpZXhfdXNiX3J4X2NvbXBsZXRlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiwgc28gSSYjMzk7bSBnb2luZyB0byBicmVhayBkb3duIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIFVTQiBXaS1GaSBmcmFtZXdvcmsuIEZpcnN0LCBJIGV4cGVjdCBpdCBoYW5kbGVzIHRoZSBjb21wbGV0aW9uIG9mIGEgVVNCIHJlY2VpdmUgb3BlcmF0aW9uLCBsaWtlbHkgY2FsbGVkIHdoZW4gZGF0YSBpcyBhdmFpbGFibGUgb24gdGhlIFVTQiBidXMuIFRoaXMgc3VnZ2VzdHMgaXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludCBmb3IgZGF0YSBpbmdyZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5zIGFmdGVyIHRoZSBkYXRhIGlzIHJlY2VpdmVkIOKAkyBpcyBpdCBpbW1lZGlhdGVseSBwYXNzZWQgb24gZm9yIHByb2Nlc3NpbmcsIGJ1ZmZlcmVkLCBvciBtYXliZSBldmVuIGRpc2NhcmRlZCB1bmRlciBjZXJ0YWluIGVycm9yIGNvbmRpdGlvbnM/CgpJIGltYWdpbmUgaXQgd291bGQgaW50ZXJhY3Qgd2l0aCBVU0IgZGVzY3JpcHRvcnMsIHBvc3NpYmx5IGluY2x1ZGluZyB0aGUgYHVyYmAgKFVTQiBSZXF1ZXN0IEJsb2NrKSwgYW5kIHByb2JhYmx5IGludm9sdmVzIGNoZWNraW5nIHRoZSBzdGF0dXMgb2YgdGhlIHRyYW5zZmVyIGZvciBzdWNjZXNzIG9yIGZhaWx1cmUuIEVycm9yIGhhbmRsaW5nIGlzIGFsd2F5cyBhIGtleSBhc3BlY3QgaW4gdGhlc2Uga2luZHMgb2Ygcm91dGluZXMsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHNob3J0IHBhY2tldHMsIHRpbWVvdXRzLCBvciBvdGhlciBVU0ItcmVsYXRlZCBpc3N1ZXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHV0aWxpemVkLCBhcyBjb25jdXJyZW5jeSBpcyBhIHNpZ25pZmljYW50IGNvbmNlcm4gd2l0aGluIGRyaXZlciBjb2RlLiBJcyB0aGVyZSBhbiBhc3NvY2lhdGVkIHdvcmtxdWV1ZSB0byBvZmZsb2FkIHByb2Nlc3NpbmcsIG9yIGlzIGl0IGhhbmRsZWQgc3luY2hyb25vdXNseT8gRmluYWxseSwgSSBhbnRpY2lwYXRlIHRoaXMgZnVuY3Rpb24gd2lsbCBldmVudHVhbGx5IGNhbGwgb3RoZXIgV2ktRmkgc3BlY2lmaWMgZnVuY3Rpb25zLCBsaWtlbHkgdG8gcHJvY2VzcyB0aGUgcmVjZWl2ZWQgcGFja2V0cy4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBlbnRpcmUgZGF0YSBmbG93IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTI6XHRzdGF0aWMgdm9pZCBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gMTUzOlx0e1xuIDE1NDpcdFx0c3RydWN0IHVyYl9jb250ZXh0ICpjb250ZXh0ID0gKHN0cnVjdCB1cmJfY29udGV4dCAqKXVyYi1cdTAwM2Vjb250ZXh0O1xuIDE1NTpcdFx0c3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRleHQtXHUwMDNlYWRhcHRlcjtcbiAxNTY6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBjb250ZXh0LVx1MDAzZXNrYjtcbiAxNTc6XHRcdHN0cnVjdCB1c2JfY2FyZF9yZWMgKmNhcmQ7XG4gMTU4Olx0XHRpbnQgcmVjdl9sZW5ndGggPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aDtcbiAxNTk6XHRcdGludCBzaXplLCBzdGF0dXM7XG4gMTYwOlx0XG4gMTYxOlx0XHRpZiAoIWFkYXB0ZXIgfHwgIWFkYXB0ZXItXHUwMDNlY2FyZCkge1xuIDE2MjpcdFx0XHRwcl9lcnIoXCYjMzQ7bXdpZmlleCBhZGFwdGVyIG9yIGNhcmQgc3RydWN0dXJlIGlzIG5vdCB2YWxpZFxcblwmIzM0Oyk7XG4gMTYzOlx0XHRcdHJldHVybjtcbiAxNjQ6XHRcdH1cbiAxNjU6XHRcbiAxNjY6XHRcdGNhcmQgPSAoc3RydWN0IHVzYl9jYXJkX3JlYyAqKWFkYXB0ZXItXHUwMDNlY2FyZDtcbiAxNjc6XHRcdGlmIChjYXJkLVx1MDAzZXJ4X2NtZF9lcCA9PSBjb250ZXh0LVx1MDAzZWVwKVxuIDE2ODpcdFx0XHRhdG9taWNfZGVjKFx1MDAyNmNhcmQtXHUwMDNlcnhfY21kX3VyYl9wZW5kaW5nKTtcbiAxNjk6XHRcdGVsc2VcbiAxNzA6XHRcdFx0YXRvbWljX2RlYyhcdTAwMjZjYXJkLVx1MDAzZXJ4X2RhdGFfdXJiX3BlbmRpbmcpO1xuIDE3MTpcdFxuIDE3MjpcdFx0aWYgKHJlY3ZfbGVuZ3RoKSB7XG4gMTczOlx0XHRcdGlmICh1cmItXHUwMDNlc3RhdHVzIHx8XG4gMTc0Olx0XHRcdCAgICB0ZXN0X2JpdChNV0lGSUVYX1NVUlBSSVNFX1JFTU9WRUQsIFx1MDAyNmFkYXB0ZXItXHUwMDNld29ya19mbGFncykpIHtcbiAxNzU6XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiAxNzY6XHRcdFx0XHRcdCAgICBcJiMzNDtVUkIgc3RhdHVzIGlzIGZhaWxlZDogJWRcXG5cJiMzNDssIHVyYi1cdTAwM2VzdGF0dXMpO1xuIDE3NzpcdFx0XHRcdC8qIERvIG5vdCBmcmVlIHNrYiBpbiBjYXNlIG9mIGNvbW1hbmQgZXAgKi9cbiAxNzg6XHRcdFx0XHRpZiAoY2FyZC1cdTAwM2VyeF9jbWRfZXAgIT0gY29udGV4dC1cdTAwM2VlcClcbiAxNzk6XHRcdFx0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gMTgwOlx0XHRcdFx0Z290byBzZXR1cF9mb3JfbmV4dDtcbiAxODE6XHRcdFx0fVxuIDE4MjpcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2UgcmVjdl9sZW5ndGgpXG4gMTgzOlx0XHRcdFx0c2tiX3RyaW0oc2tiLCByZWN2X2xlbmd0aCk7XG4gMTg0Olx0XHRcdGVsc2VcbiAxODU6XHRcdFx0XHRza2JfcHV0KHNrYiwgcmVjdl9sZW5ndGggLSBza2ItXHUwMDNlbGVuKTtcbiAxODY6XHRcbiAxODc6XHRcdFx0c3RhdHVzID0gbXdpZmlleF91c2JfcmVjdihhZGFwdGVyLCBza2IsIGNvbnRleHQtXHUwMDNlZXApO1xuIDE4ODpcdFxuIDE4OTpcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBJTkZPLFxuIDE5MDpcdFx0XHRcdCAgICBcJiMzNDtpbmZvOiByZWN2X2xlbmd0aD0lZCwgc3RhdHVzPSVkXFxuXCYjMzQ7LFxuIDE5MTpcdFx0XHRcdCAgICByZWN2X2xlbmd0aCwgc3RhdHVzKTtcbiAxOTI6XHRcdFx0aWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHtcbiAxOTM6XHRcdFx0XHRtd2lmaWV4X3F1ZXVlX21haW5fd29yayhhZGFwdGVyKTtcbiAxOTQ6XHRcbiAxOTU6XHRcdFx0XHQvKiB1cmIgZm9yIGRhdGFfZXAgaXMgcmUtc3VibWl0dGVkIG5vdztcbiAxOTY6XHRcdFx0XHQgKiB1cmIgZm9yIGNtZF9lcCB3aWxsIGJlIHJlLXN1Ym1pdHRlZCBpbiBjYWxsYmFja1xuIDE5NzpcdFx0XHRcdCAqIG13aWZpZXhfdXNiX3JlY3ZfY29tcGxldGVcbiAxOTg6XHRcdFx0XHQgKi9cbiAxOTk6XHRcdFx0XHRpZiAoY2FyZC1cdTAwM2VyeF9jbWRfZXAgPT0gY29udGV4dC1cdTAwM2VlcClcbiAyMDA6XHRcdFx0XHRcdHJldHVybjtcbiAyMDE6XHRcdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3ODIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBtd2lmaWV4X3VzYl9yZWN2YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSB0YXJnZXQgaGVyZSBpcyBgbXdpZmlleF91c2JfcmVjdmAsIHNvIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIFVTQiB3aXJlbGVzcyBpbnRlcmZhY2UgY29udGV4dC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEnigJltIG1lbnRhbGx5IG1hcHBpbmcgdGhpcyBmdW5jdGlvbiB0byB0aGUgdHlwaWNhbCBVU0IgcmVjZWl2ZSBwYXRoIGZvciBhIHdpcmVsZXNzIGRyaXZlcjogZGF0YSBhcnJpdmluZyBvdmVyIHRoZSBVU0IgYnVzLCBiZWluZyBwaWNrZWQgdXAgYnkgdGhlIGRyaXZlciwgcHJvY2Vzc2VkLCBhbmQgcGFzc2VkIHVwIHRoZSBzdGFjay4gTXkgZXhwZWN0YXRpb24gaXMgdGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGluY29taW5nIHBhY2tldHMgdmlhIFVTQi4KCknigJlsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgVVNCIGhvc3QgY29udHJvbGxlcjsgaG93IGl0IGhhbmRsZXMgVVJCcyAoVVNCIFJlcXVlc3QgQmxvY2tzKSBhbmQgdGhlaXIgY29tcGxldGlvbjsgd2hhdCBraW5kIG9mIGJ1ZmZlcmluZyBzdHJhdGVneSBpdCBlbXBsb3lzOyBhbmQsIGNydWNpYWxseSwgaG93IGl0IHZlcmlmaWVzIHRoZSBkYXRhIGludGVncml0eSBhbmQgcG90ZW50aWFsbHkgdW5wYWNrcyB0aGUgODAyLjExIGZyYW1lcywgdGhlbiBwYXNzZXMgdGhvc2UgZnJhbWVzIHVwIHRvIHRoZSBwcm90b2NvbCBzdGFjay4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBxdWVzdGlvbnMgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgbG9ja2luZyBzdHJhdGVnaWVzIHdpdGhpbiB0aGUgZnVuY3Rpb24uIElzIGl0IGludGVycnVwdC1kcml2ZW4/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgVVNCIHRyYW5zZmVyIGVycm9ycz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGJ1ZmZlciBtYW5hZ2VtZW50IG9yIERNQSB1c2FnZT8gSeKAmWxsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBlcnJvciBoYW5kbGluZy4gSSBob3BlIHRvIHNwb3Qgd2VsbC1kZWZpbmVkIGVycm9yIGNvZGVzIGFuZCBwZXJoYXBzIHJldHJ5IG1lY2hhbmlzbXMuIEnigJltIHByZXBhcmVkIHRvIGRpZyBkZWVwLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQ2Olx0c3RhdGljIGludCBtd2lmaWV4X3VzYl9yZWN2KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4gIDQ3Olx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGVwKVxuICA0ODpcdHtcbiAgNDk6XHRcdHUzMiByZWN2X3R5cGU7XG4gIDUwOlx0XHRfX2xlMzIgdG1wO1xuICA1MTpcdFx0aW50IHJldDtcbiAgNTI6XHRcbiAgNTM6XHRcdGlmIChhZGFwdGVyLVx1MDAzZWhzX2FjdGl2YXRlZClcbiAgNTQ6XHRcdFx0bXdpZmlleF9wcm9jZXNzX2hzX2NvbmZpZyhhZGFwdGVyKTtcbiAgNTU6XHRcbiAgNTY6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBJTlRGX0hFQURFUl9MRU4pIHtcbiAgNTc6XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG4gIDU4Olx0XHRcdFx0ICAgIFwmIzM0OyVzOiBpbnZhbGlkIHNrYi1cdTAwM2VsZW5cXG5cJiMzNDssIF9fZnVuY19fKTtcbiAgNTk6XHRcdFx0cmV0dXJuIC0xO1xuICA2MDpcdFx0fVxuICA2MTpcdFxuICA2MjpcdFx0c3dpdGNoIChlcCkge1xuICA2MzpcdFx0Y2FzZSBNV0lGSUVYX1VTQl9FUF9DTURfRVZFTlQ6XG4gIDY0Olx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULFxuICA2NTpcdFx0XHRcdCAgICBcJiMzNDslczogRVBfQ01EX0VWRU5UXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gIDY2Olx0XHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBcdTAwMjZ0bXAsIElOVEZfSEVBREVSX0xFTik7XG4gIDY3Olx0XHRcdHJlY3ZfdHlwZSA9IGxlMzJfdG9fY3B1KHRtcCk7XG4gIDY4Olx0XHRcdHNrYl9wdWxsKHNrYiwgSU5URl9IRUFERVJfTEVOKTtcbiAgNjk6XHRcbiAgNzA6XHRcdFx0c3dpdGNoIChyZWN2X3R5cGUpIHtcbiAgNzE6XHRcdFx0Y2FzZSBNV0lGSUVYX1VTQl9UWVBFX0NNRDpcbiAgNzI6XHRcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2UgTVdJRklFWF9TSVpFX09GX0NNRF9CVUZGRVIpIHtcbiAgNzM6XHRcdFx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuICA3NDpcdFx0XHRcdFx0XHQgICAgXCYjMzQ7Q01EOiBza2ItXHUwMDNlbGVuIHRvbyBsYXJnZVxcblwmIzM0Oyk7XG4gIDc1Olx0XHRcdFx0XHRyZXQgPSAtMTtcbiAgNzY6XHRcdFx0XHRcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcbiAgNzc6XHRcdFx0XHR9IGVsc2UgaWYgKCFhZGFwdGVyLVx1MDAzZWN1cnJfY21kKSB7XG4gIDc4Olx0XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBXQVJOLCBcJiMzNDtDTUQ6IG5vIGN1cnJfY21kXFxuXCYjMzQ7KTtcbiAgNzk6XHRcdFx0XHRcdGlmIChhZGFwdGVyLVx1MDAzZXBzX3N0YXRlID09IFBTX1NUQVRFX1NMRUVQX0NGTSkge1xuICA4MDpcdFx0XHRcdFx0XHRtd2lmaWV4X3Byb2Nlc3Nfc2xlZXBfY29uZmlybV9yZXNwKFxuICA4MTpcdFx0XHRcdFx0XHRcdFx0YWRhcHRlciwgc2tiLVx1MDAzZWRhdGEsXG4gIDgyOlx0XHRcdFx0XHRcdFx0XHRza2ItXHUwMDNlbGVuKTtcbiAgODM6XHRcdFx0XHRcdFx0cmV0ID0gMDtcbiAgODQ6XHRcdFx0XHRcdFx0Z290byBleGl0X3Jlc3RvcmVfc2tiO1xuICA4NTpcdFx0XHRcdFx0fVxuICA4NjpcdFx0XHRcdFx0cmV0ID0gLTE7XG4gIDg3Olx0XHRcdFx0XHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XG4gIDg4Olx0XHRcdFx0fVxuICA4OTpcdFxuICA5MDpcdFx0XHRcdGFkYXB0ZXItXHUwMDNlY3Vycl9jbWQtXHUwMDNlcmVzcF9za2IgPSBza2I7XG4gIDkxOlx0XHRcdFx0YWRhcHRlci1cdTAwM2VjbWRfcmVzcF9yZWNlaXZlZCA9IHRydWU7XG4gIDkyOlx0XHRcdFx0YnJlYWs7XG4gIDkzOlx0XHRcdGNhc2UgTVdJRklFWF9VU0JfVFlQRV9FVkVOVDpcbiAgOTQ6XHRcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKHUzMikpIHtcbiAgOTU6XHRcdFx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkxNAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG13aWZpZXhfdXNiX3JlY3ZgIGZ1bmN0aW9uLiBJIG5lZWQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBoYW5kbGVzIGRhdGEgcmVjZXB0aW9uIG92ZXIgVVNCIGZvciB0aGlzIE1hcnZlbGwgV2ktRmkgZHJpdmVyLiBUaGlzIHNlZW1zIGxpa2UgYSBjb3JlIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGUgY3JpdGljYWwgdGFzayBvZiBtYW5hZ2luZyBkYXRhIGZsb3cgZnJvbSB0aGUgVVNCIGludGVyZmFjZSB0byB0aGUgaGlnaGVyLWxldmVsIG5ldHdvcmtpbmcgc3RhY2suIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBrZXkgb3BlcmF0aW9uczogaG93IGl0IHJlY2VpdmVzIGRhdGEsIGhvdyBpdCBidWZmZXJzIGl0LCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLCBhbmQgaG93IGl0IHRoZW4gcGFzc2VzIHRoYXQgZGF0YSB1cHdhcmRzLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB1c2VkIGFuZCB0aGUgZWZmaWNpZW5jeSBvZiB0aGUgZGF0YSB0cmFuc2ZlcnMg4oCTIHBvdGVudGlhbCBib3R0bGVuZWNrcyBoZXJlIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDk2Olx0XHRcdFx0XHRcdCAgICBcJiMzNDtFVkVOVDogc2tiLVx1MDAzZWxlbiB0b28gc21hbGxcXG5cJiMzNDspO1xuICA5NzpcdFx0XHRcdFx0cmV0ID0gLTE7XG4gIDk4Olx0XHRcdFx0XHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XG4gIDk5Olx0XHRcdFx0fVxuIDEwMDpcdFx0XHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBcdTAwMjZ0bXAsIHNpemVvZih1MzIpKTtcbiAxMDE6XHRcdFx0XHRhZGFwdGVyLVx1MDAzZWV2ZW50X2NhdXNlID0gbGUzMl90b19jcHUodG1wKTtcbiAxMDI6XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFVkVOVCxcbiAxMDM6XHRcdFx0XHRcdCAgICBcJiMzNDtldmVudF9jYXVzZSAlI3hcXG5cJiMzNDssIGFkYXB0ZXItXHUwMDNlZXZlbnRfY2F1c2UpO1xuIDEwNDpcdFxuIDEwNTpcdFx0XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZSBNQVhfRVZFTlRfU0laRSkge1xuIDEwNjpcdFx0XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG4gMTA3Olx0XHRcdFx0XHRcdCAgICBcJiMzNDtFVkVOVDogZXZlbnQgYm9keSB0b28gbGFyZ2VcXG5cJiMzNDspO1xuIDEwODpcdFx0XHRcdFx0cmV0ID0gLTE7XG4gMTA5Olx0XHRcdFx0XHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XG4gMTEwOlx0XHRcdFx0fVxuIDExMTpcdFxuIDExMjpcdFx0XHRcdG1lbWNweShhZGFwdGVyLVx1MDAzZWV2ZW50X2JvZHksIHNrYi1cdTAwM2VkYXRhICYjNDM7XG4gMTEzOlx0XHRcdFx0ICAgICAgIE1XSUZJRVhfRVZFTlRfSEVBREVSX0xFTiwgc2tiLVx1MDAzZWxlbik7XG4gMTE0Olx0XG4gMTE1Olx0XHRcdFx0YWRhcHRlci1cdTAwM2VldmVudF9yZWNlaXZlZCA9IHRydWU7XG4gMTE2Olx0XHRcdFx0YWRhcHRlci1cdTAwM2VldmVudF9za2IgPSBza2I7XG4gMTE3Olx0XHRcdFx0YnJlYWs7XG4gMTE4Olx0XHRcdGRlZmF1bHQ6XG4gMTE5Olx0XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG4gMTIwOlx0XHRcdFx0XHQgICAgXCYjMzQ7dW5rbm93biByZWN2X3R5cGUgJSN4XFxuXCYjMzQ7LCByZWN2X3R5cGUpO1xuIDEyMTpcdFx0XHRcdHJldCA9IC0xO1xuIDEyMjpcdFx0XHRcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcbiAxMjM6XHRcdFx0fVxuIDEyNDpcdFx0XHRicmVhaztcbiAxMjU6XHRcdGNhc2UgTVdJRklFWF9VU0JfRVBfREFUQTpcbiAxMjY6XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgREFUQSwgXCYjMzQ7JXM6IEVQX0RBVEFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiAxMjc6XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlIE1XSUZJRVhfUlhfREFUQV9CVUZfU0laRSkge1xuIDEyODpcdFx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuIDEyOTpcdFx0XHRcdFx0ICAgIFwmIzM0O0RBVEE6IHNrYi1cdTAwM2VsZW4gdG9vIGxhcmdlXFxuXCYjMzQ7KTtcbiAxMzA6XHRcdFx0XHRyZXR1cm4gLTE7XG4gMTMxOlx0XHRcdH1cbiAxMzI6XHRcbiAxMzM6XHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2YWRhcHRlci1cdTAwM2VyeF9kYXRhX3EsIHNrYik7XG4gMTM0Olx0XHRcdGFkYXB0ZXItXHUwMDNlZGF0YV9yZWNlaXZlZCA9IHRydWU7XG4gMTM1Olx0XHRcdGF0b21pY19pbmMoXHUwMDI2YWRhcHRlci1cdTAwM2VyeF9wZW5kaW5nKTtcbiAxMzY6XHRcdFx0YnJlYWs7XG4gMTM3Olx0XHRkZWZhdWx0OlxuIDEzODpcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiAxMzk6XHRcdFx0XHQgICAgXCYjMzQ7JXM6IHVua25vd24gZW5kcG9ydCAlI3hcXG5cJiMzNDssIF9fZnVuY19fLCBlcCk7XG4gMTQwOlx0XHRcdHJldHVybiAtMTtcbiAxNDE6XHRcdH1cbiAxNDI6XHRcbiAxNDM6XHRcdHJldHVybiAtRUlOUFJPR1JFU1M7XG4gMTQ0Olx0XG4gMTQ1Olx0ZXhpdF9yZXN0b3JlX3NrYjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4ODAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFdpLUZpIERyaXZlciYjMzk7cyBSZWNlaXZlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSByZWNlaXZlIHBhdGggaW4gdGhpcyBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBmcm9tIHRoZSBVU0IgaW50ZXJmYWNlLiBJdCBzZWVtcyBsaWtlIHRoZSBgbXdpZmlleF91c2JfcmVjdmAgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGluY29taW5nIGRhdGEuIEl0IGxvb2tzIGxpa2UgaXQgcXVldWVzIHRoZSByZWNlaXZlZCBkYXRhIHRvIHRoZSBhZGFwdGVyJiMzOTtzIHJlY2VpdmUgZGF0YSBxdWV1ZSwgc3BlY2lmaWNhbGx5IGBhZGFwdGVyLSZndDtyeF9kYXRhX3FgLCBhbmQgdGhlbiBjcnVjaWFsbHkgc2V0cyB0aGUgYGFkYXB0ZXItJmd0O2RhdGFfcmVjZWl2ZWRgIGZsYWcgdG8gYHRydWVgLiBUaGlzIGxpa2VseSBzaWduYWxzIHRoYXQgbmV3IGRhdGEgaXMgYXZhaWxhYmxlIGZvciBwcm9jZXNzaW5nLgoKVGhlIG5leHQgcGllY2Ugb2YgdGhlIHB1enpsZSBpcyBgbXdpZmlleF9tYWluX3Byb2Nlc3NgLiBGcm9tIGhlcmUsIHRoZSBleGVjdXRpb24gZmxvdyBicmFuY2hlcyB0byBgbXdpZmlleF9xdWV1ZV9yeF93b3JrKGFkYXB0ZXIpYC4gVGhpcyBsb29rcyBsaWtlIGl0JiMzOTtzIGEgbWVjaGFuaXNtIGZvciBkZWZlcnJpbmcgdGhlIHJ4IHByb2Nlc3NpbmcsIHBsYWNpbmcgYG13aWZpZXhfcnhfd29ya19xdWV1ZWAgaW50byBhIHdvcmtxdWV1ZS4gVGhpcywgaW4gdHVybiwgY2FsbHMgYG13aWZpZXhfcHJvY2Vzc19yeChhZGFwdGVyKWAuIFRoYXQgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIGhlYXZ5IGxpZnRpbmcgb2YgYWN0dWFsbHkgaGFuZGxpbmcgdGhlIHJlY2VpdmVkIGRhdGEgbGlrZWx5IGhhcHBlbnMuCgpJJiMzOTttIG5vdyBnb2luZyB0byBkaWcgaW50byBgbXdpZmlleF9wcm9jZXNzX3J4YCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIHNob3VsZCBiZS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIHJlYWwgZGV0YWlscyBvbiBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZCwgZGUtcXVldWVkLCBhbmQgcHJvY2Vzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3NDpcdHN0YXRpYyBpbnQgbXdpZmlleF9wcm9jZXNzX3J4KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG4gMTc1Olx0e1xuIDE3NjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAxNzc6XHRcdHN0cnVjdCBtd2lmaWV4X3J4aW5mbyAqcnhfaW5mbztcbiAxNzg6XHRcbiAxNzk6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZXJ4X3Byb2NfbG9jayk7XG4gMTgwOlx0XHRpZiAoYWRhcHRlci1cdTAwM2VyeF9wcm9jZXNzaW5nIHx8IGFkYXB0ZXItXHUwMDNlcnhfbG9ja2VkKSB7XG4gMTgxOlx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlcnhfcHJvY19sb2NrKTtcbiAxODI6XHRcdFx0Z290byBleGl0X3J4X3Byb2M7XG4gMTgzOlx0XHR9IGVsc2Uge1xuIDE4NDpcdFx0XHRhZGFwdGVyLVx1MDAzZXJ4X3Byb2Nlc3NpbmcgPSB0cnVlO1xuIDE4NTpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZXJ4X3Byb2NfbG9jayk7XG4gMTg2Olx0XHR9XG4gMTg3Olx0XG4gMTg4Olx0XHQvKiBDaGVjayBmb3IgUnggZGF0YSAqL1xuIDE4OTpcdFx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZhZGFwdGVyLVx1MDAzZXJ4X2RhdGFfcSkpKSB7XG4gMTkwOlx0XHRcdGF0b21pY19kZWMoXHUwMDI2YWRhcHRlci1cdTAwM2VyeF9wZW5kaW5nKTtcbiAxOTE6XHRcdFx0aWYgKChhZGFwdGVyLVx1MDAzZWRlbGF5X21haW5fd29yayB8fFxuIDE5MjpcdFx0XHQgICAgIGFkYXB0ZXItXHUwMDNlaWZhY2VfdHlwZSA9PSBNV0lGSUVYX1VTQikgXHUwMDI2XHUwMDI2XG4gMTkzOlx0XHRcdCAgICAoYXRvbWljX3JlYWQoXHUwMDI2YWRhcHRlci1cdTAwM2VyeF9wZW5kaW5nKSBcdTAwM2MgTE9XX1JYX1BFTkRJTkcpKSB7XG4gMTk0Olx0XHRcdFx0aWYgKGFkYXB0ZXItXHUwMDNlaWZfb3BzLnN1Ym1pdF9yZW1fcnhfdXJicylcbiAxOTU6XHRcdFx0XHRcdGFkYXB0ZXItXHUwMDNlaWZfb3BzLnN1Ym1pdF9yZW1fcnhfdXJicyhhZGFwdGVyKTtcbiAxOTY6XHRcdFx0XHRhZGFwdGVyLVx1MDAzZWRlbGF5X21haW5fd29yayA9IGZhbHNlO1xuIDE5NzpcdFx0XHRcdG13aWZpZXhfcXVldWVfbWFpbl93b3JrKGFkYXB0ZXIpO1xuIDE5ODpcdFx0XHR9XG4gMTk5Olx0XHRcdHJ4X2luZm8gPSBNV0lGSUVYX1NLQl9SWENCKHNrYik7XG4gMjAwOlx0XHRcdGlmIChyeF9pbmZvLVx1MDAzZWJ1Zl90eXBlID09IE1XSUZJRVhfVFlQRV9BR0dSX0RBVEEpIHtcbiAyMDE6XHRcdFx0XHRpZiAoYWRhcHRlci1cdTAwM2VpZl9vcHMuZGVhZ2dyX3BrdClcbiAyMDI6XHRcdFx0XHRcdGFkYXB0ZXItXHUwMDNlaWZfb3BzLmRlYWdncl9wa3QoYWRhcHRlciwgc2tiKTtcbiAyMDM6XHRcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIDIwNDpcdFx0XHR9IGVsc2Uge1xuIDIwNTpcdFx0XHRcdG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChhZGFwdGVyLCBza2IpO1xuIDIwNjpcdFx0XHR9XG4gMjA3Olx0XHR9XG4gMjA4Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VyeF9wcm9jX2xvY2spO1xuIDIwOTpcdFx0YWRhcHRlci1cdTAwM2VyeF9wcm9jZXNzaW5nID0gZmFsc2U7XG4gMjEwOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZXJ4X3Byb2NfbG9jayk7XG4gMjExOlx0XG4gMjEyOlx0ZXhpdF9yeF9wcm9jOlxuIDIxMzpcdFx0cmV0dXJuIDA7XG4gMjE0Olx0fVxuIDIxNTpcdFxuIDIxNjpcdHN0YXRpYyB2b2lkIG1heWJlX3F1aXJrX2Z3X2Rpc2FibGVfZHMoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbiAyMTc6XHR7XG4gMjE4Olx0XHRzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLCBNV0lGSUVYX0JTU19ST0xFX1NUQSk7XG4gMjE5Olx0XHRzdHJ1Y3QgbXdpZmlleF92ZXJfZXh0IHZlcl9leHQ7XG4gMjIwOlx0XG4gMjIxOlx0XHRpZiAodGVzdF9hbmRfc2V0X2JpdChNV0lGSUVYX0lTX1JFUVVFU1RJTkdfRldfVkVSRVhULCBcdTAwMjZhZGFwdGVyLVx1MDAzZXdvcmtfZmxhZ3MpKVxuIDIyMjpcdFx0XHRyZXR1cm47XG4gMjIzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTYxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlJiMzOTtzIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBjYWxsIHN0YXJ0cyB3aXRoIGBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXRgLCBnb3QgaXQuIFRoYXQgdGhlbiBicmFuY2hlcyBvdXQgdG8gZWl0aGVyIGBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldGAgb3IgYG13aWZpZXhfcHJvY2Vzc191YXBfcnhfcGFja2V0YCwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBGcm9tIHRoZXJlLCB3ZSBoaXQgYG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0YCBhbmQgdGhlbiBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0YC4gRmluYWxseSwgd2UgZ2V0IHRvIHRoZSBjcml0aWNhbCBmdW5jdGlvbjogYG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdGAuIFRoYXQgaXMgZ29vZCEKClRoaXMgZmxvdyBjb25maXJtcyB0aGF0IHRoaXMgc2VjdGlvbiBvZiBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggYSBVU0IgZ2FkZ2V0IGZ1enppbmcgYXBwcm9hY2guIFdlIGhhdmUgYSBjbGVhciBwYXRoIG9mIGZ1bmN0aW9uIGNhbGxzIHRoYXQgbGVhZHMgcmlnaHQgdG8gaXQuIEV4Y2VsbGVudCEKCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZSBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3QuIFdlJiMzOTtsbCBuZWVkIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBlbmFibGVkIGluIHRoZSBidWlsZC4gV2FpdCwgYE1XSUZJRVhfVVNCYCAqZGVwZW5kcyogb24gYm90aCBgTVdJRklFWGAgYW5kIGBVU0JgLCBvZiBjb3Vyc2UuIFNvLCB5ZXMsIHdlIG5lZWQgYm90aCBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgdG8gZW5zdXJlIHRoaXMgY29kZSBpcyBidWlsdCBpbnRvIHRoZSBVU0IgZ2FkZ2V0LiBHb29kLgoKQmFjayB0byB0aGUgY29kZSwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgcmlnaHQ/IEkgcmVjYWxsIHRoYXQgaXQgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcGFja2V0IHR5cGUgaXMgYFBLVF9UWVBFX0FNU0RVYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGxlMTZfdG9fY3B1KGxvY2FsX3J4X3BkLSZndDtyeF9wa3RfdHlwZSkgPT0gUEtUX1RZUEVfQU1TRFVgLiBJdCBhbHNvIHByb2Nlc3NlcyBURExTIGFjdGlvbiBmcmFtZXMuIFJpZ2h0LCBhbmQgdGhlIHBhdGNoIGZpeGVzIHRoZSBhc3NpZ25tZW50IG9mIGBza2ItJmd0O2xlbmAgdG8gYHJ4X3NrYi0mZ3Q7bGVuYCBiZWZvcmUgY2FsbGluZyBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYC4KCk5leHQgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgYmVoYXZpb3VyIG9mIGBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVgIG5vdywgYnV0IHRoaXMgbG9va3MgbGlrZSBhIGdvb2Qgc3BvdCB0byBzdGFydCBvdXIgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz0yMD1zdGF0aWMgaW50IG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNDQtXHRcdFx0ICAgIG50b2hzKHJ4X2hkci1cdTAwM2VldGg4MDNfaGRyLmhfcHJvdG8pID09IEVUSF9QX1RETFMpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6NDU6XHRcdFx0XHRtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWUocHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNDYtXHRcdFx0XHRcdFx0XHRcdCAgKHU4ICopcnhfaGRyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg9MTYwMz1pbnQgbXdpZmlleF9zZW5kX3RkbHNfYWN0aW9uX2ZyYW1lKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNvbnN0IHU4ICpwZWVyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTYwNi1cdFx0XHRcdCAgIHNpemVfdCBleHRyYV9pZXNfbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTYwNzp2b2lkIG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNjA4LVx0XHRcdFx0ICAgICAgIHU4ICpidWYsIGludCBsZW4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYz03MT1pbnQgbXdpZmlleF9wcm9jZXNzX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0xNTAtXHRcdG9mZnNldCA9ICh1OCAqKWxvY2FsX3J4X3BkICYjNDM7IHJ4X3BrdF9vZmY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM6MTUxOlx0XHRtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWUocHJpdiwgb2Zmc2V0LCByeF9wa3RfbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0xNTItXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3RkbHMuYz04MDk9aW50IG13aWZpZXhfc2VuZF90ZGxzX2FjdGlvbl9mcmFtZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqcGVlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdGRscy5jLTg4OS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90ZGxzLmM6ODkwOnZvaWQgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdGRscy5jLTg5MS1cdFx0XHRcdCAgICAgICB1OCAqYnVmLCBpbnQgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY3MAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDM5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQcmlvcml0aXppbmcgRnV6emluZyBUYXJnZXRzIGluIHRoZSBtd2lmaWV4IERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBzb21lIGtleSBmdW5jdGlvbnMgaW4gdGhlIGBtd2lmaWV4YCBkcml2ZXIgZm9yIGZ1enppbmcuIEluaXRpYWxseSwgSSB0aG91Z2h0IGBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVgLCBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCwgYG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0YCwgYW5kIGBtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0YCB3ZXJlIHByb21pc2luZyBjYW5kaWRhdGVzLiBIb3dldmVyLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwcmVmZXJyZWQgZnV6emluZyB0YXJnZXRzOiBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgd2lsbCBiZSBtb3JlIGZydWl0ZnVsLgoKR2l2ZW4gdGhhdCwgSSYjMzk7bSBnb2luZyB0byByZXZpc2UgbXkgbGlzdC4gV2hpbGUgYG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdGAgbG9va2VkIGludGVyZXN0aW5nLCBpdCYjMzk7cyBzdGF0aWNhbGx5IGRlY2xhcmVkIHdoaWNoIHJlbmRlcnMgaXQgbGVzcyBzdWl0YWJsZSBmb3IgZnV6emluZy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlc2UgaW5zdGVhZCwgYXMgdGhleSBtZWV0IHRoZSBjcml0ZXJpYToKCiogICBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgCiogICBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYAoqICAgYG13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0YAoqICAgYG13aWZpZXhfcHJvY2Vzc191YXBfcnhfcGFja2V0YAoqICAgYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGAKClRvIGJlIGNlcnRhaW4sIGxldCBtZSB2ZXJpZnkgdGhlIHN0YXRpYyBzdGF0dXMgb2YgdGhvc2UgdGFyZ2V0cy4gQ2hlY2tpbmcgYG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0YCwgY29uZmlybWVkIGl0IGlzIG5vdCBzdGF0aWMuIFNpbWlsYXJseSwgYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAsIGBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldGAsIGBtd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldGAgYW5kIGBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXRgIGFyZSBhbHNvIG5vdCBzdGF0aWMuIFRoYXQmIzM5O3MgYSBzb2xpZCBsaXN0IHRvIHN0YXJ0IHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTUyMz1pbnQgbXdpZmlleF9jbWRfMTFuX2RlbGJhKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsIHZvaWQgKmRhdGFfYnVmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNTQ2LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo1NDc6aW50IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTU0OC1cdFx0XHRcdHUxNiBzZXFfbnVtLCB1MTYgdGlkLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9OTAyPXZvaWQgbXdpZmlleF8xMW5fcnhiYV9zeW5jX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy05NjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjk2NzpcdFx0XHRcdFx0cmV0ID0gbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtOTY4LVx0XHRcdFx0XHQocHJpdiwgc2VxX251bSwgdGx2X3J4YmEtXHUwMDNldGlkLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmg9Mzk9c3RhdGljIGlubGluZSB2b2lkIG13aWZpZXhfcmVzZXRfMTFuX3J4X3NlcV9udW0oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5oLTQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuaDo0NDppbnQgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuaC00NS1cdFx0XHQgICAgICAgdTE2IHNlcU51bSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM9MTg5PWludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0yNjAtXHQvKiBSZW9yZGVyIGFuZCBzZW5kIHRvIE9TICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM6MjYxOlx0cmV0ID0gbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3QocHJpdiwgc2VxX251bSwgbG9jYWxfcnhfcGQtXHUwMDNlcHJpb3JpdHksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtMjYyLVx0XHRcdFx0XHQgdGEsICh1OCkgcnhfcGt0X3R5cGUsIHNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmM9MzczPWludCBtd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jLTQ0Mi1cdHBrdF90eXBlID0gKHU4KWxlMTZfdG9fY3B1KHVhcF9yeF9wZC1cdTAwM2VyeF9wa3RfdHlwZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYzo0NDM6XHRyZXQgPSBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdChwcml2LCBsZTE2X3RvX2NwdSh1YXBfcnhfcGQtXHUwMDNlc2VxX251bSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYy00NDQtXHRcdFx0XHRcdCB1YXBfcnhfcGQtXHUwMDNlcHJpb3JpdHksIHRhLCBwa3RfdHlwZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MzkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIE1vZHVsZSBDb25maWd1cmF0aW9uIGZvciBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0YCAqaXMqIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBpdCBpc24mIzM5O3Qgc3RhdGljLCB3aGljaCBpcyBnb29kLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBrZXJuZWwgY29uZmlncyB0byBlbmFibGUgaXQuIEkga25vdyB0aGF0IGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBhcmUgZGVmaW5pdGVseSByZXF1aXJlZC4gQnV0IGxldCYjMzk7cyBiZSB0aG9yb3VnaCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVycy4gUmlnaHQsIGhlcmUgd2UgZ28sIGBDRkc4MDIxMWAgaXMgYSBkZXBlbmRlbmN5IG9mIGBNV0lGSUVYYCwgYW5kIGBVU0JgIGlzIGEgZGVwZW5kZW5jeSBvZiBgTVdJRklFWF9VU0JgLiBTbywgYXMgSSB0aG91Z2h0LCBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgYXJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byB3b3JyeSBhYm91dC4KCk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgaWYganVzdCBlbmFibGluZyBgTVdJRklFWF9VU0JgIGlzIHN1ZmZpY2llbnQuIFllcywgYE1XSUZJRVhfVVNCYCAqZG9lcyogc2VsZWN0IGBGV19MT0FERVJgIGFuZCwgaW1wb3J0YW50bHksIGRlcGVuZHMgb24gKmJvdGgqIGBNV0lGSUVYYCBhbmQgYFVTQmAuIEFuZCB3ZSBrbm93IHRoYXQgYE1XSUZJRVhgIGl0c2VsZiBkZXBlbmRzIG9uIGBDRkc4MDIxMWAuIFRoYXQgbG9va3MgbGlrZSBhIGNvbXBsZXRlIGFuZCB3ZWxsLWRlZmluZWQgc2V0IG9mIGRlcGVuZGVuY2llcy4KCkZpbmFsbHksIGp1c3QgZm9yIGdvb2QgbWVhc3VyZSwgbGV0JiMzOTtzIGNvbmZpcm0gd2hldGhlciBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYCBpcyBub24tc3RhdGljIGFzIHdlbGwuIFRoYXQgd2lsbCBoZWxwIHRvIGluZm9ybSB0aGUgd2lkZXIgdmlldyBvZiB3aGF0IGlzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNjAzPWludCBtd2lmaWV4X3NlbmRfdGRsc19hY3Rpb25fZnJhbWUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgY29uc3QgdTggKnBlZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNjA2LVx0XHRcdFx0ICAgc2l6ZV90IGV4dHJhX2llc19sZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxNjA3OnZvaWQgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE2MDgtXHRcdFx0XHQgICAgICAgdTggKmJ1ZiwgaW50IGxlbik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3RkbHMuYz04MDk9aW50IG13aWZpZXhfc2VuZF90ZGxzX2FjdGlvbl9mcmFtZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqcGVlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdGRscy5jLTg4OS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90ZGxzLmM6ODkwOnZvaWQgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdGRscy5jLTg5MS1cdFx0XHRcdCAgICAgICB1OCAqYnVmLCBpbnQgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM1MwoJCQkJCQkJb3V0cHV0OiAxOTgKCQkJCQkJCXRob3VnaHRzOiA1MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTWFydmVsbCBXaUZpLUV4IERyaXZlciBWdWxuZXJhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBjb25maXJtaW5nIHRoZSBvYnZpb3VzLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbm9uLXN0YXRpYyBpc3N1ZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgaW50ZXJuYWxzIG9mIHRoZSBwYWNrZXQgaGFuZGxpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGNoYWluIGFuZCBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGludm9sdmVkLgoKTXkgaW5pdGlhbCBjaGVjayBjb25maXJtcyB0aGF0IGJvdGggYG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdGAgYW5kIGBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3RgIGFyZSwgaW4gZmFjdCwgc3RhdGljIHdpdGhpbiBgMTFuX3J4cmVvcmRlci5jYC4gVGhpcyBzdWdnZXN0cyB0aGV5JiMzOTtyZSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIG1vZHVsZSwgd2hpY2ggbmFycm93cyB0aGUgc2NvcGUgb2YgdGhlIGludmVzdGlnYXRpb24uCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBjYWxsIGhpZXJhcmNoeSwgdGhlIHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uOgoKKiAgIGBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdGAKKiAgIGBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVgCiogICBgbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXRgCiogICBgbXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXRgCiogICBgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0YAoKYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGAgc2VlbXMgYSBiaXQgYnJvYWQsIGFjdGluZyBhcyBhbiBlbnRyeSBwb2ludCwgYnV0IGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgY29udGV4dC4gYG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0YCBzZWVtcyBtb3JlIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBBLU1TRFUgcHJvY2Vzc2luZywgYW5kIGBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVgIGlzIHNwZWNpZmljYWxseSB0YXJnZXRlZCBieSB0aGUgYnVnZ3kgY29kZS4KCkFoLCB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB3aXRoaW4gYG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdGAg4oCTIHByZWNpc2VseSBiZWNhdXNlIGl0JiMzOTtzIHN0YXRpYy4gVGhlIHBhdGNoIGNsZWFybHkgYWRkcmVzc2VzIHRoZSBsZW5ndGggZGlzY3JlcGFuY3ksIGNvcnJlY3RpbmcgdGhlIGluY29ycmVjdCB1c2FnZSBvZiBgc2tiLSZndDtsZW5gIHdpdGggYHJ4X3NrYi0mZ3Q7bGVuYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4LiBUaGUgZHJpdmVyIGlzIHJlYWNoYWJsZSBmb3IgdnVsbmVyYWJpbGl0eSBhbmFseXNpcyB1c2luZyBVU0IgZ2FkZ2V0IGZ1enppbmcsIGdpdmVuIHRoZSBwcmVzZW5jZSBvZiB0aGUgYE1XSUZJRVhfVVNCYCBjb25maWd1cmF0aW9uLgoKVGhlcmVmb3JlLCB0aGUgcmVzdWx0cyBhcmUgcmVhZHk6CgoqICAgKipXb3J0aEZ1enppbmc6IFRydWUqKiAoZHVlIHRvIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgVVNCIHN1cHBvcnQpCiogICAqKkZvY3VzU3ltYm9sczoqKiAoYXMgbGlzdGVkIGFib3ZlKQoqICAgKipFbmFibGVDb25maWdzOioqIGBNV0lGSUVYYCwgYE1XSUZJRVhfVVNCYAoKVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxlbmd0aC1yZWxhdGVkIGJ1ZyBpbiB0aGUgQS1NU0RVIHBhY2tldCBwcm9jZXNzaW5nIHBhdGggd2l0aGluIHRoZSBNYXJ2ZWxsIFdpRmktRXggZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2hlbiBjYWxsaW5nIGBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVgLiBUaGUgYnVnIGNhbiBiZSByZXByb2R1Y2VkIHVzaW5nIFVTQiBnYWRnZXQgZW11bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVdJRklFWCYjMzQ7LAogICAgJiMzNDtNV0lGSUVYX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O213aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0JiMzNDssCiAgICAmIzM0O213aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZSYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIE1hcnZlbGwgV2lGaS1FeCBkcml2ZXIgd2hlcmUgdGhlIHdyb25nIHNrYiBsZW5ndGggd2FzIHBhc3NlZCB0byBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYCB3aGVuIHByb2Nlc3NpbmcgQS1NU0RVIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gVGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgaW50ZXJmYWNlcyAoYE1XSUZJRVhfVVNCYCksIHNvIGl0IGNhbiBiZSBmdXp6ZWQgdXNpbmcgVVNCIGdhZGdldCBlbXVsYXRpb24gKHZoY2kpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNV0lGSUVYJiMzNDssCiAgICAmIzM0O01XSUZJRVhfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3QmIzM0OywKICAgICYjMzQ7bXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lJiMzNDssCiAgICAmIzM0O213aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0JiMzNDssCiAgICAmIzM0O213aWZpZXhfcHJvY2Vzc191YXBfcnhfcGFja2V0JiMzNDssCiAgICAmIzM0O213aWZpZXhfaGFuZGxlX3J4X3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgTWFydmVsbCBXaUZpLUV4IGRyaXZlciB3aGVyZSB0aGUgd3Jvbmcgc2tiIGxlbmd0aCB3YXMgcGFzc2VkIHRvIGBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVgIHdoZW4gcHJvY2Vzc2luZyBBLU1TRFUgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoLiBUaGUgZHJpdmVyIHN1cHBvcnRzIFVTQiBpbnRlcmZhY2VzIChgTVdJRklFWF9VU0JgKSwgc28gaXQgY2FuIGJlIGZ1enplZCB1c2luZyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiAodmhjaSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0NzozNC41MDU3NDcwMjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ4NTEzOTUwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVdJRklFWFwiLFxuICAgIFwiTVdJRklFWF9VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdFwiLFxuICAgIFwibXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lXCIsXG4gICAgXCJtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldFwiLFxuICAgIFwibXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXRcIixcbiAgICBcIm13aWZpZXhfaGFuZGxlX3J4X3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBNYXJ2ZWxsIFdpRmktRXggZHJpdmVyIHdoZXJlIHRoZSB3cm9uZyBza2IgbGVuZ3RoIHdhcyBwYXNzZWQgdG8gYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAgd2hlbiBwcm9jZXNzaW5nIEEtTVNEVSBwYWNrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIFRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGludGVyZmFjZXMgKGBNV0lGSUVYX1VTQmApLCBzbyBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIFVTQiBnYWRnZXQgZW11bGF0aW9uICh2aGNpKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDc6MzQuNTA1NzU0NjQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzYzNDQ1NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3OTM4NjcxYzc4Y2Y2ZWJhYmFkYmQxOGM2ZWQ5OTU5MmMzZmE5NGNmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDEwOjQ3OjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jXFxuaW5kZXggNjEwZWM4MzAyYWRmMi4uOWRlYjQ3ZjIyYTYxNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuY1xcbkBAIC00NCw3ICs0NCw3IEBAIHN0YXRpYyBpbnQgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuIFxcdFxcdFxcdCAgICBudG9ocyhyeF9oZHItXFx1MDAzZWV0aDgwM19oZHIuaF9wcm90bykgPT0gRVRIX1BfVERMUykge1xcbiBcXHRcXHRcXHRcXHRtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWUocHJpdixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAodTggKilyeF9oZHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHJ4X3NrYi1cXHUwMDNlbGVuKTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWJzc19yb2xlID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0NzozNS4wODI4NjczMjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjQyNzQyNTk1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVdJRklFWFwiLFxuICAgIFwiTVdJRklFWF9VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdFwiLFxuICAgIFwibXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lXCIsXG4gICAgXCJtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldFwiLFxuICAgIFwibXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXRcIixcbiAgICBcIm13aWZpZXhfaGFuZGxlX3J4X3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBNYXJ2ZWxsIFdpRmktRXggZHJpdmVyIHdoZXJlIHRoZSB3cm9uZyBza2IgbGVuZ3RoIHdhcyBwYXNzZWQgdG8gYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAgd2hlbiBwcm9jZXNzaW5nIEEtTVNEVSBwYWNrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIFRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGludGVyZmFjZXMgKGBNV0lGSUVYX1VTQmApLCBzbyBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIFVTQiBnYWRnZXQgZW11bGF0aW9uICh2aGNpKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzkzODY3MWM3OGNmNmViYWJhZGJkMThjNmVkOTk1OTJjM2ZhOTRjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDEwOjQ3OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmNcbmluZGV4IDYxMGVjODMwMmFkZjIuLjlkZWI0N2YyMmE2MTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jXG5AQCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgaW50IG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuIFx0XHRcdCAgICBudG9ocyhyeF9oZHItXHUwMDNlZXRoODAzX2hkci5oX3Byb3RvKSA9PSBFVEhfUF9URExTKSB7XG4gXHRcdFx0XHRtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWUocHJpdixcbiBcdFx0XHRcdFx0XHRcdFx0ICAodTggKilyeF9oZHIsXG4tXHRcdFx0XHRcdFx0XHRcdCAgc2tiLVx1MDAzZWxlbik7XG4rXHRcdFx0XHRcdFx0XHRcdCAgcnhfc2tiLVx1MDAzZWxlbik7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChwcml2LVx1MDAzZWJzc19yb2xlID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDc6MzUuMDgyODY4NjMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4Njc1MzkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIFN1c3BlY3QgUGF0Y2ggaW4gbXdpZmlleCoqXG5cbkFscmlnaHQsIGEgcGF0Y2ggaGFzIGJlZW4gZmxhZ2dlZCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuY2AuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBzd2FwcGVkIGBza2ItXHUwMDNlbGVuYCB3aXRoIGByeF9za2ItXHUwMDNlbGVuYCB3aXRoaW4gdGhlIGBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3RgIGZ1bmN0aW9uLiBIbW0sIHRoYXQncyBhIHByZXR0eSBsb3ctbGV2ZWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgKlNLQiogbGVuZ3RoLiBUaGF0J3MgaW1tZWRpYXRlbHkgcmFpc2luZyBzb21lIGZsYWdzIGZvciBtZTsgbWlzaGFuZGxpbmcgKlNLQiogbGVuZ3RocyBpcyBhIGNsYXNzaWMgc291cmNlIG9mIGFsbCBraW5kcyBvZiBuYXN0eSBpc3N1ZXMg4oCTIGJ1ZmZlciBvdmVyZmxvd3MsIHVuZGVyZmxvd3MsIGFuZCBqdXN0IGdlbmVyYWwgZGF0YSBjb3JydXB0aW9uLiBMZXQncyBkaWcgaW50byBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCBhbmQgc2VlIHdoYXQncyByZWFsbHkgZ29pbmcgb24gdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGhvdyB0aGUgKlNLQiogaXMgYmVpbmcgdXNlZCBhbmQgbW9kaWZpZWQsIGFuZCB3aGF0IHRoZXNlIHZhcmlhYmxlcyAqc2tiKiBhbmQgKnJ4X3NrYiogcmVwcmVzZW50IGluIHRoYXQgY29udGV4dC4gV2hhdCdzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlPyBDb3VsZCBpdCBiZSBiZW5pZ24sIGEgc2ltcGxlIHR5cG8sIG9yIGlzIHRoZXJlIGEgbW9yZSBmdW5kYW1lbnRhbCBtaXN1bmRlcnN0YW5kaW5nIG9mIHRoZSBBLU1TRFUgcmVhc3NlbWJseSBwcm9jZXNzIGF0IHBsYXk/IEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHZlcnkgY2FyZWZ1bGx5LCBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2l0IGFzc3VtcHRpb25zLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcg4oCTIGxldCdzIGhvcGUgdGhpcyBpc24ndCBzb21ldGhpbmcgdGhhdCBjYW4gY2F1c2UgbmV0d29yayBpbnN0YWJpbGl0eSwgb3Igd29yc2UsIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMSwiT3V0cHV0VG9rZW5zIjo1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDc6MzkuMjY5NjI1MjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUwMDkyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0xOS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjIwOnN0YXRpYyBpbnQgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0yMS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTY3PXN0YXRpYyBpbnQgbXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTc3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6Nzg6XFx0cmV0ID0gbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0KHByaXYsIHBheWxvYWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNzktXFx0aWYgKCFyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjQ3OjM5LjM2NDY2MTEyOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzM1MzQwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3RgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoaXMgTWFydmVsbCBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5J3JlIGhhbmRsaW5nIEEtTVNEVSBwYWNrZXQgZGlzcGF0Y2gsIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdGAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmNgLiBJJ20gc3BlY2lmaWNhbGx5IGN1cmlvdXMgYWJvdXQgaG93IHRoZXkncmUgbWFuYWdpbmcgdGhhdCAxMW4tc3BlY2lmaWMgcmVvcmRlcmluZy4gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgbG9naWMgZm9yIGhvdyB0aGV5IHRha2UgdGhvc2UgZnJhZ21lbnRlZCBNU0RVcyBhbmQgcHV0IHRoZW0gYmFjayB0b2dldGhlci4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3IgYSBjbGV2ZXIsIG9yIHBlcmhhcHMgY29tcGxleCwgbWV0aG9kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg1LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDc6NDIuNDk4MTk5MDc2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0c3RhdGljIGludCBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4gIDIxOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDIyOlxcdHtcXG4gIDIzOlxcdFxcdHN0cnVjdCByeHBkICpsb2NhbF9yeF9wZCA9IChzdHJ1Y3QgcnhwZCAqKShza2ItXFx1MDAzZWRhdGEpO1xcbiAgMjQ6XFx0XFx0aW50IHJldDtcXG4gIDI1OlxcdFxcbiAgMjY6XFx0XFx0aWYgKGxlMTZfdG9fY3B1KGxvY2FsX3J4X3BkLVxcdTAwM2VyeF9wa3RfdHlwZSkgPT0gUEtUX1RZUEVfQU1TRFUpIHtcXG4gIDI3OlxcdFxcdFxcdHN0cnVjdCBza19idWZmX2hlYWQgbGlzdDtcXG4gIDI4OlxcdFxcdFxcdHN0cnVjdCBza19idWZmICpyeF9za2I7XFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdFxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bGlzdCk7XFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgbGUxNl90b19jcHUobG9jYWxfcnhfcGQtXFx1MDAzZXJ4X3BrdF9vZmZzZXQpKTtcXG4gIDMzOlxcdFxcdFxcdHNrYl90cmltKHNrYiwgbGUxNl90b19jcHUobG9jYWxfcnhfcGQtXFx1MDAzZXJ4X3BrdF9sZW5ndGgpKTtcXG4gIDM0OlxcdFxcbiAgMzU6XFx0XFx0XFx0aWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKHNrYiwgXFx1MDAyNmxpc3QsIHByaXYtXFx1MDAzZWN1cnJfYWRkcixcXG4gIDM2OlxcdFxcdFxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2V3ZGV2LmlmdHlwZSwgMCwgTlVMTCwgTlVMTCwgZmFsc2UpO1xcbiAgMzc6XFx0XFxuICAzODpcXHRcXHRcXHR3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2bGlzdCkpIHtcXG4gIDM5OlxcdFxcdFxcdFxcdHN0cnVjdCByeF9wYWNrZXRfaGRyICpyeF9oZHI7XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdFxcdFxcdHJ4X3NrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmxpc3QpO1xcbiAgNDI6XFx0XFx0XFx0XFx0cnhfaGRyID0gKHN0cnVjdCByeF9wYWNrZXRfaGRyICopcnhfc2tiLVxcdTAwM2VkYXRhO1xcbiAgNDM6XFx0XFx0XFx0XFx0aWYgKElTU1VQUF9URExTX0VOQUJMRUQocHJpdi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlZndfY2FwX2luZm8pIFxcdTAwMjZcXHUwMDI2XFxuICA0NDpcXHRcXHRcXHRcXHQgICAgbnRvaHMocnhfaGRyLVxcdTAwM2VldGg4MDNfaGRyLmhfcHJvdG8pID09IEVUSF9QX1RETFMpIHtcXG4gIDQ1OlxcdFxcdFxcdFxcdFxcdG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZShwcml2LFxcbiAgNDY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAodTggKilyeF9oZHIsXFxuICA0NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHJ4X3NrYi1cXHUwMDNlbGVuKTtcXG4gIDQ4OlxcdFxcdFxcdFxcdH1cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWJzc19yb2xlID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQKVxcbiAgNTE6XFx0XFx0XFx0XFx0XFx0cmV0ID0gbXdpZmlleF91YXBfcmVjdl9wYWNrZXQocHJpdiwgcnhfc2tiKTtcXG4gIDUyOlxcdFxcdFxcdFxcdGVsc2VcXG4gIDUzOlxcdFxcdFxcdFxcdFxcdHJldCA9IG13aWZpZXhfcmVjdl9wYWNrZXQocHJpdiwgcnhfc2tiKTtcXG4gIDU0OlxcdFxcdFxcdFxcdGlmIChyZXQgPT0gLTEpXFxuICA1NTpcXHRcXHRcXHRcXHRcXHRtd2lmaWV4X2RiZyhwcml2LVxcdTAwM2VhZGFwdGVyLCBFUlJPUixcXG4gIDU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiUnggb2YgQS1NU0RVIGZhaWxlZFxcXCIpO1xcbiAgNTc6XFx0XFx0XFx0fVxcbiAgNTg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA1OTpcXHRcXHR9XFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdHJldHVybiAtMTtcXG4gIDYyOlxcdH1cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0LyogVGhpcyBmdW5jdGlvbiB3aWxsIHByb2Nlc3MgdGhlIHJ4IHBhY2tldCBhbmQgZm9yd2FyZCBpdCB0byBrZXJuZWwvdXBwZXJcXG4gIDY1OlxcdCAqIGxheWVyLlxcbiAgNjY6XFx0ICovXFxuICA2NzpcXHRzdGF0aWMgaW50IG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbiAgNjg6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpwYXlsb2FkKVxcbiAgNjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo0Mi40OTgzNTk2NzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA2NjQ0OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFdpcmVsZXNzIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGEgd2lyZWxlc3MgZHJpdmVyLCBhbmQgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgZml4LCB0aGFua2Z1bGx5LiBJdCBhZGRyZXNzZXMgYSBidWcgd2l0aGluIHRoZSBoYW5kbGluZyBvZiBURExTIGFjdGlvbiBmcmFtZXMgaW5zaWRlIGFuIEEtTVNEVSBwYWNrZXQuIEl0IHNlZW1zIHRoZSBjb2RlIHdhcyBtaXN0YWtlbmx5IHJlZmVyZW5jaW5nIGBza2ItXHUwMDNlbGVuYCBpbnN0ZWFkIG9mIHRoZSBjb3JyZWN0IGByeF9za2ItXHUwMDNlbGVuYCBkdXJpbmcgcHJvY2Vzc2luZy4gVGhhdCdzIGEgZnVuY3Rpb25hbCBidWcsIHdoaWNoIG1lYW5zIHdlIGNhbiBsaWtlbHkgZXhwZWN0IGltcHJvdmVkIHN0YWJpbGl0eSBvciBjb3JyZWN0IGJlaGF2aW9yIGFmdGVyIHRoaXMgaXMgYXBwbGllZC4gTm93LCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSBpZiB0aGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gTGV0J3MgZGlnIGludG8gdGhlIEtjb25maWcgZm9yIG13aWZpZXggdG8gZ2V0IHRoZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTc5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo0Ni4xMDUwMDc2OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY4ODQ4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1XSUZJRVhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoyOmNvbmZpZyBNV0lGSUVYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTExLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjEyOmNvbmZpZyBNV0lGSUVYX1NESU9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xMy1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgU0Q4Nzg2L1NEODc4Ny9TRDg3OTcvU0Q4ODg3L1NEODg5Ny9TRDg5NzcvU0Q4OTc4L1NEODk4Ny9TRDg5OTdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoyNTpjb25maWcgTVdJRklFWF9QQ0lFXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFBDSUUgODc2Ni84ODk3Lzg5OTdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzozNzpjb25maWcgTVdJRklFWF9VU0JcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zOC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgVVNCODc2Ni84Nzk3Lzg5OTdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjQ3OjQ2LjE4MTkwMDIyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mjc1NzMzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnYCBmaWxlLCBhcyBJIHVuZGVyc3RhbmQgaXQ6XG5cbioqRXhhbWluaW5nIHRoZSBNd2lmaWV4IEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgS2NvbmZpZ2AgZmlsZSBmb3IgdGhlIE1hcnZlbGwgbXdpZmlleCB3aXJlbGVzcyBkcml2ZXIuIEZpcnN0LCBJIGV4cGVjdCB0aGlzIHRvIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZHJpdmVyLCBkZXRhaWxpbmcgYWxsIHRoZSBmZWF0dXJlcyBhbmQgZnVuY3Rpb25hbGl0aWVzIHRoYXQgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZHVyaW5nIGtlcm5lbCBjb21waWxhdGlvbi4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSd2ZSBzdHJ1Y3R1cmVkIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCB3aGVyZSB0aGV5J3ZlIGhvb2tlZCBpbnRvIHRoZSBvdmVyYWxsIGtlcm5lbCBjb25maWd1cmF0aW9uIGhpZXJhcmNoeS4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkcml2ZXIncyBtb2R1bGFyaXR5LCB3aGljaCBtb2R1bGVzIGFyZSBjcml0aWNhbCwgYW5kIHdoYXQgbGV2ZWxzIG9mIHN1cHBvcnQgYXJlIGltcGxlbWVudGVkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhleSd2ZSBpbmNsdWRlZCBvcHRpb25zIGZvciBwb3dlciBtYW5hZ2VtZW50LCBzZWN1cml0eSBmZWF0dXJlcyBsaWtlIFdQQS9XUEEyL1dQQTMgc3VwcG9ydCwgYW5kIGRpZmZlcmVudCByZWd1bGF0b3J5IGRvbWFpbnMuIEknbGwgYmUgYXNzZXNzaW5nIGhvdyB3ZWxsIHRoZSBvcHRpb25zIGFyZSBkb2N1bWVudGVkLiBBcmUgdGhlIGhlbHAgdGV4dHMgY2xlYXIgYW5kIGNvbmNpc2U/IERvIHRoZXkgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgZm9yIGEgdXNlciB0byBtYWtlIGluZm9ybWVkIGNob2ljZXM/IEZpbmFsbHksIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB2ZW5kb3Itc3BlY2lmaWMgb3B0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIGRyaXZlciwgb3IgaWYgaXQgaXMgdGFpbG9yZWQgdG8gc3BlY2lmaWMgTWFydmVsbCBjaGlwc2V0cyBvciBoYXJkd2FyZSByZXZpc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo1MC4wMDk0Nzc2MDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTVdJRklFWFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXJcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBNYXJ2ZWxsXFxuICAgNzpcXHRcXHQgIDgwMi4xMW4vYWMgY2hpcHNldHMuXFxuICAgODpcXHRcXG4gICA5OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcXG4gIDEwOlxcdFxcdCAgbXdpZmlleC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0Y29uZmlnIE1XSUZJRVhfU0RJT1xcbiAgMTM6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFNEODc4Ni9TRDg3ODcvU0Q4Nzk3L1NEODg4Ny9TRDg4OTcvU0Q4OTc3L1NEODk3OC9TRDg5ODcvU0Q4OTk3XFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBNV0lGSUVYIFxcdTAwMjZcXHUwMDI2IE1NQ1xcbiAgMTU6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMTY6XFx0XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBNYXJ2ZWxsXFxuICAxOTpcXHRcXHQgIDg3ODYvODc4Ny84Nzk3Lzg4ODcvODg5Ny84OTc3Lzg5NzgvODk4Ny84OTk3IGNoaXBzZXRzIHdpdGhcXG4gIDIwOlxcdFxcdCAgU0RJTyBpbnRlcmZhY2UuIFNEODk3OCBpcyBhbHNvIGtub3duIGFzIE5YUCBJVzQxNi5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZFxcbiAgMjM6XFx0XFx0ICBtd2lmaWV4X3NkaW8uXFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBNV0lGSUVYX1BDSUVcXG4gIDI2OlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBQQ0lFIDg3NjYvODg5Ny84OTk3XFxcIlxcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBNV0lGSUVYIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiAgMjg6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjk6XFx0XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBNYXJ2ZWxsXFxuICAzMjpcXHRcXHQgIDg3NjYvODg5Ny84OTk3IGNoaXBzZXRzIHdpdGggUENJZSBpbnRlcmZhY2UuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcXG4gIDM1OlxcdFxcdCAgbXdpZmlleF9wY2llLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRjb25maWcgTVdJRklFWF9VU0JcXG4gIDM4OlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBVU0I4NzY2Lzg3OTcvODk5N1xcXCJcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gTVdJRklFWCBcXHUwMDI2XFx1MDAyNiBVU0JcXG4gIDQwOlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDQxOlxcdFxcdGhlbHBcXG4gIDQyOlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIE1hcnZlbGxcXG4gIDQzOlxcdFxcdCAgODc5Ny84OTk3IGNoaXBzZXQgd2l0aCBVU0IgaW50ZXJmYWNlLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXFxuICA0NjpcXHRcXHQgIG13aWZpZXhfdXNiLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo1MC4wMDk2MTk2OThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0NzIyNDIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTWFydmVsbCBXaUZpLUV4IERyaXZlciwgc3BlY2lmaWNhbGx5LiBJdCdzIGJ1aWx0IHRvIHN1cHBvcnQgU0RJTywgUENJZSwgKmFuZCogVVNCLiBUaGUgVVNCIGludGVyZmFjZSwgdGhhdCdzIGtleS4gVGhhdCBgTVdJRklFWF9VU0JgIGluZGljYXRlcyBpdCBjYW4gYmUgZnV6emVkIHZpYSBgdmhjaWAsIHdoaWNoIGlzIGEgZmFudGFzdGljIGFuZ2xlIOKAkyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiBvcGVucyB1cCBhIHdvcmxkIG9mIHBvc3NpYmlsaXRpZXMgZm9yIGluamVjdGluZyBtYWxpY2lvdXMgZGF0YS5cblxuUmlnaHQsIHNvIEkgc2VlIHRoaXMgZnVuY3Rpb24sIGBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3RgLCBiZWluZyBjYWxsZWQgZnJvbSBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0YC4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW4gYW5kIGRhdGEgZmxvdywgYW5kIGZpZ3VyaW5nIG91dCB3aGVyZSBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0YCBpcyBjYWxsZWQgd2lsbCBiZSB2aXRhbCBmb3IgZXhwbG9pdGF0aW9uLiBUaGlzIGlzIHdoZXJlIEkgd2FudCB0byBmb2N1cyBteSBhdHRlbnRpb24uIExldCdzIHNlZSBob3cgZGVlcCB3ZSBjYW4gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo1NC4zNTY4NDgyMTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3OTYxOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9MjA9c3RhdGljIGludCBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNjYtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo2NzpzdGF0aWMgaW50IG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNjgtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpwYXlsb2FkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz05Nj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6OTc6bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0X3VudGlsX3N0YXJ0X3dpbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtOTgtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBtd2lmaWV4X3J4X3Jlb3JkZXJfdGJsICp0YmwsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTEzMi1cXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmxpc3QpKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjEzMzpcXHRcXHRtd2lmaWV4XzExbl9kaXNwYXRjaF9wa3QocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTEzNC19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTE0NT1td2lmaWV4XzExbl9zY2FuX2FuZF9kaXNwYXRjaChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0xNzgtXFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFxcdTAwMjZsaXN0KSkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzoxNzk6XFx0XFx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0KHByaXYsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0xODAtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz0xODk9bXdpZmlleF9kZWxfcnhfcmVvcmRlcl9lbnRyeShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0yMDYtXFx0c3RhcnRfd2luID0gKHRibC1cXHUwMDNlc3RhcnRfd2luICsgdGJsLVxcdTAwM2V3aW5fc2l6ZSkgXFx1MDAyNiAoTUFYX1RJRF9WQUxVRSAtIDEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6MjA3OlxcdG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdF91bnRpbF9zdGFydF93aW4ocHJpdiwgdGJsLCBzdGFydF93aW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtMjA4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz0zMDA9bXdpZmlleF9mbHVzaF9kYXRhKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy0zMTMtXFx0c3RhcnRfd2luID0gKGN0eC1cXHUwMDNlcHRyLVxcdTAwM2VzdGFydF93aW4gKyBzZXFfbnVtICsgMSkgXFx1MDAyNiAoTUFYX1RJRF9WQUxVRSAtIDEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6MzE0OlxcdG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdF91bnRpbF9zdGFydF93aW4oY3R4LVxcdTAwM2Vwcml2LCBjdHgtXFx1MDAzZXB0cixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTMxNS1cXHRcXHRcXHRcXHRcXHRcXHQgc3RhcnRfd2luKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9MzI5PW13aWZpZXhfMTFuX2NyZWF0ZV9yeF9yZW9yZGVyX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqdGEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTM0Mi1cXHRpZiAodGJsKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzozNDM6XFx0XFx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0X3VudGlsX3N0YXJ0X3dpbihwcml2LCB0YmwsIHNlcV9udW0pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtMzQ0LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9NTQ3PWludCBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy01NTktXFx0XFx0aWYgKHBrdF90eXBlICE9IFBLVF9UWVBFX0JBUilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjU2MDpcXHRcXHRcXHRtd2lmaWV4XzExbl9kaXNwYXRjaF9wa3QocHJpdiwgcGF5bG9hZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy01NjEtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNTY0LVxcdGlmICgocGt0X3R5cGUgPT0gUEtUX1RZUEVfQU1TRFUpIFxcdTAwMjZcXHUwMDI2ICF0YmwtXFx1MDAzZWFtc2R1KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo1NjU6XFx0XFx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0KHByaXYsIHBheWxvYWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNTY2LVxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTYyMy1cXHRcXHRcXHRzdGFydF93aW4gPSAoTUFYX1RJRF9WQUxVRSAtICh3aW5fc2l6ZSAtIGVuZF93aW4pKSArIDE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo2MjQ6XFx0XFx0bXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0X3VudGlsX3N0YXJ0X3dpbihwcml2LCB0YmwsIHN0YXJ0X3dpbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy02MjUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo1NC40MzQ4MTcyOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ1Mjg2NjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgUGFja2V0IFJlb3JkZXJpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcGFja2V0IHJlY2VwdGlvbi4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyB0aGUgZ2F0ZXdheSBmb3IgaW5jb21pbmcgZnJhbWVzLiBOb3csIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGJyb2FkZXIgZGF0YSBmbG93LiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGguIFdoZXJlICpleGFjdGx5KiBpcyBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgIGludm9rZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBjYWxscywgdGhlIGNvbnRleHQsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgcGFja2V0IGRhdGEgZ2V0cyBoZXJlLiBJJ20gdGhpbmtpbmc6IEhvdyBpcyB0aGlzIGZ1bmN0aW9uIHRyaWdnZXJlZD8gSXMgaXQgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyIGRpcmVjdGx5PyBJcyBpdCBwYXJ0IG9mIGEgbG93ZXItbGV2ZWwgaGFyZHdhcmUgYWJzdHJhY3Rpb24/IElzIGl0IGludm9rZWQgYnkgc29tZSBkYXRhIHByb2Nlc3MgSSdtIGZhbWlsaWFyIHdpdGg/IEtub3dpbmcgdGhlIGNhbGxlciBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyJ3MgcmVjZWl2ZSBwYXRoIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBvdXQtb2Ytb3JkZXIgcGFja2V0cy4gU28sIGxldCdzIGdvIGZpbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MjQsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo1Ny44ODAxMDYzODJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NzExMDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz01MjM9aW50IG13aWZpZXhfY21kXzExbl9kZWxiYShzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCB2b2lkICpkYXRhX2J1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNTQ2LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6NTQ3OmludCBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtNTQ4LVxcdFxcdFxcdFxcdHUxNiBzZXFfbnVtLCB1MTYgdGlkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYz05MDI9dm9pZCBtd2lmaWV4XzExbl9yeGJhX3N5bmNfZXZlbnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtOTY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6OTY3OlxcdFxcdFxcdFxcdFxcdHJldCA9IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy05NjgtXFx0XFx0XFx0XFx0XFx0KHByaXYsIHNlcV9udW0sIHRsdl9yeGJhLVxcdTAwM2V0aWQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5oPTM5PXN0YXRpYyBpbmxpbmUgdm9pZCBtd2lmaWV4X3Jlc2V0XzExbl9yeF9zZXFfbnVtKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5oLTQzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmg6NDQ6aW50IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5oLTQ1LVxcdFxcdFxcdCAgICAgICB1MTYgc2VxTnVtLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jPTE4OT1pbnQgbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0yNjAtXFx0LyogUmVvcmRlciBhbmQgc2VuZCB0byBPUyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYzoyNjE6XFx0cmV0ID0gbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3QocHJpdiwgc2VxX251bSwgbG9jYWxfcnhfcGQtXFx1MDAzZXByaW9yaXR5LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0yNjItXFx0XFx0XFx0XFx0XFx0IHRhLCAodTgpIHJ4X3BrdF90eXBlLCBza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmM9MzczPWludCBtd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmMtNDQyLVxcdHBrdF90eXBlID0gKHU4KWxlMTZfdG9fY3B1KHVhcF9yeF9wZC1cXHUwMDNlcnhfcGt0X3R5cGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jOjQ0MzpcXHRyZXQgPSBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdChwcml2LCBsZTE2X3RvX2NwdSh1YXBfcnhfcGQtXFx1MDAzZXNlcV9udW0pLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jLTQ0NC1cXHRcXHRcXHRcXHRcXHQgdWFwX3J4X3BkLVxcdTAwM2Vwcmlvcml0eSwgdGEsIHBrdF90eXBlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0Nzo1Ny45NzU4Mjg1M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYwODAwNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgUGFja2V0IFJlY2VwdGlvbiBpbiB0aGUgTWFydmVsbCBXaS1GaSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIE1hcnZlbGwgV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgaW5jb21pbmcgcGFja2V0cy4gTXkgaW5pdGlhbCBodW5jaCBpcyBjb25maXJtZWQ6IGBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldGAgYW5kIGBtd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldGAgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIHBhcnNpbmcgYW5kIGhhbmRsaW5nIHJlY2VpdmVkIHBhY2tldHMuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBTVEEgKHN0YXRpb24vY2xpZW50KSBhbmQgVUFQIChVbml2ZXJzYWwgQWNjZXNzIFBvaW50KSByb2xlcy4gTm93LCB0aGUgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0cyBvZiB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlc2UgZW50cnkgcG9pbnRzIGFuZCBzZWUgd2hlcmUgdGhleSdyZSBpbnZva2VkIHRvIGZ1bGx5IGdyYXNwIHRoZSBwYWNrZXQgcmVjZXB0aW9uIGZsb3cuIEtub3dpbmcgdGhlaXIgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgZHJpdmVyIG9yY2hlc3RyYXRlcyB0aGUgcHJvY2Vzc2luZyBvZiB0aGVzZSBpbmNvbWluZyBmcmFtZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODowMS40MzY2MzQzNjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTk3Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMTM3PWludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2NtZHJlc3Aoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLCB1MTYgY21kcmVzcF9ubyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTExMzgtXFx0XFx0XFx0XFx0c3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTEzOTppbnQgbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTE0MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jPTcxPWludCBtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtMTg4LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYzoxODk6aW50IG13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jLTE5MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jPTI0PWludCBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmMtNTUtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmM6NTY6XFx0XFx0cmV0ID0gbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODowMS40OTc2Mzg3OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTI2OTg1NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGF0YSBGbG93OiBgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBVU0IgZHJpdmVyJ3MgZ290IHNvbWV0aGluZyB0cmlnZ2VyaW5nIGEgY2FsbCB0byBgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0YC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCB3ZSdyZSB0YWxraW5nIGFib3V0LCB0aGUgcmVjZWl2ZXIuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8gcGlucG9pbnQgKmV4YWN0bHkqIHdoZXJlIHRoYXQgY2FsbCBpcyBvcmlnaW5hdGluZyB3aXRoaW4gdGhlIFVTQiBkcml2ZXIuIFdlIG5lZWQgdG8gZm9sbG93IHRoaXMgY2hhaW4sIG1heWJlIHRvIGFuIGludGVycnVwdCBoYW5kbGVyIG9yIGEgc3BlY2lmaWMgcmVjZWl2ZSByb3V0aW5lLiBUaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgc3VnZ2VzdHMgdGhpcyBpcyB3aGVyZSB3ZSBuZWVkIHRvIHRyYWNlIHRoZSBpbmNvbWluZyBwYWNrZXQgaGFuZGxpbmcsIHNvIGxldCdzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCB0aGUgY29kZSdzIGdvdCBmb3IgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODowNS4wMjQ2Mjg1MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjU2ODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfaGFuZGxlX3J4X3BhY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MTc0PXN0YXRpYyBpbnQgbXdpZmlleF9wcm9jZXNzX3J4KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTIwNC1cXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MjA1OlxcdFxcdFxcdG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChhZGFwdGVyLCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMjA2LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg9MTEwMj12b2lkIG13aWZpZXhfcHJvY2Vzc19hc3NvY19yZXNwKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTEwMzppbnQgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMTA0LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvcGNpZS5jPTE1MjY9c3RhdGljIGludCBtd2lmaWV4X3BjaWVfcHJvY2Vzc19yZWN2X2RhdGEoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmMtMTU4OC1cXHRcXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmM6MTU4OTpcXHRcXHRcXHRcXHRtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQoYWRhcHRlciwgc2tiX2RhdGEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmMtMTU5MC1cXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jPTE1OTM9c3RhdGljIHZvaWQgbXdpZmlleF9kZWFnZ3Jfc2Rpb19wa3Qoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTYzMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjE2MzQ6XFx0XFx0bXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYl9kZWFnZ3IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTYzNS1cXHRcXHRkYXRhICs9IGJsa19zaXplO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYz0xNjQ3PXN0YXRpYyBpbnQgbXdpZmlleF9kZWNvZGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jLTE2ODQtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjE2ODU6XFx0XFx0XFx0bXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xNjg2LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmMtMjMtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYzoyNDppbnQgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYy0yNS1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTU5LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jOjYwOkVYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYy02MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDg6MDUuMDg1ODkzMjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NTk5MTM4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEluY29taW5nIFBhY2tldCBGbG93KipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGRhdGEgZmxvdyBmb3IgaW5jb21pbmcgcGFja2V0cyBpbiB0aGlzIFdpRmkgZHJpdmVyLiBJdCBsb29rcyBsaWtlIGBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXRgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGhlcmU7IGl0J3MgdGhlIG9uZSBhY3R1YWxseSBkb2luZyB0aGUgd29yayBvZiBwcm9jZXNzaW5nIHJlY2VpdmVkIHBhY2tldHMuIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYG13aWZpZXhfcHJvY2Vzc19yeGAsIHdoaWNoIG1ha2VzIHNlbnNlIOKAkyB0aGF0J3MgbGlrZWx5IHRoZSBjZW50cmFsIHJlY2VpdmVyIGxvb3AgaW4gYG1haW4uY2AuIEJ1dCBpdCdzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGZyb20gYHBjaWUuY2AgYW5kIGBzZGlvLmNgLiBUaGF0J3MgYW4gaW50ZXJlc3RpbmcgZGVzaWduIGNob2ljZSwgYnlwYXNzaW5nIHRoZSBtYWluIGxvb3AgZm9yIHNwZWNpZmljIGludGVyZmFjZXMuIEknbSBub3RpbmcgdGhlIGRpcmVjdCBjYWxscyBmb3IgbGF0ZXIuXG5cbldhaXQgYSBtaW51dGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBXaGF0IGFib3V0IHRoZSBVU0IgaW50ZXJmYWNlPyBJcyB0aGUgcGFja2V0IGhhbmRsaW5nIGRvbmUgYnkgYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGAgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyB2aWEgVVNCPyBJIG5lZWQgdG8gY2hlY2sgYHVzYi5jYCB0byBzZWUgaG93IGluY29taW5nIHBhY2tldHMgYXJlIGhhbmRsZWQgb24gdGhhdCBmcm9udC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODowOC45NjE4ODcyODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNzAxNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfcHJvY2Vzc19yeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9Njc9c3RhdGljIGludCBtd2lmaWV4XzExbl9kaXNwYXRjaF9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtODQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYzo4NTpcXHRyZXR1cm4gbXdpZmlleF9wcm9jZXNzX3J4X3BhY2tldChwcml2LCBwYXlsb2FkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTg2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MTYzPXN0YXRpYyB2b2lkIG13aWZpZXhfcXVldWVfcnhfd29yayhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0xNzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoxNzQ6c3RhdGljIGludCBtd2lmaWV4X3Byb2Nlc3Nfcngoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTE3NS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTE0MDM9c3RhdGljIHZvaWQgbXdpZmlleF9yeF93b3JrX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMTQwOS1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoxNDEwOlxcdG13aWZpZXhfcHJvY2Vzc19yeChhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTE0MTEtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMTI3PWludCBtd2lmaWV4X3JldF84MDJfMTFfaHNfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMTI4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjExMjk6aW50IG13aWZpZXhfcHJvY2Vzc19yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTExMzAtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM9MjM9bXdpZmlleF9kaXNjYXJkX2dyYXR1aXRvdXNfYXJwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtNzAtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jOjcxOmludCBtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jLTcyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM9MTg5PWludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jLTIzMy1cXHQgICAgIWV0aGVyX2FkZHJfZXF1YWxfdW5hbGlnbmVkKHByaXYtXFx1MDAzZWN1cnJfYWRkciwgcnhfcGt0X2hkci1cXHUwMDNlZXRoODAzX2hkci5oX2Rlc3QpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jOjIzNDpcXHRcXHRtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHByaXYsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jLTIzNS1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmM9MjMyPWludCBtd2lmaWV4X2hhbmRsZV91YXBfcnhfZm9yd2FyZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF90eHJ4LmMtMjczLVxcdC8qIEZvcndhcmQgdW5pY2F0L0ludGVyLUJTUyBwYWNrZXRzIHRvIGtlcm5lbC4gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYzoyNzQ6XFx0cmV0dXJuIG13aWZpZXhfcHJvY2Vzc19yeF9wYWNrZXQocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYy0yNzUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODowOS4wNTM1OTU5MTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxMTQwNzgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBtd2lmaWV4X3J4X3dvcmtfcXVldWVgIEVucXVldWVpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBtd2lmaWV4X3J4X3dvcmtfcXVldWVgIGFuZCB0aGUgbWVjaGFuaWNzIG9mICpob3cqIGl0J3MgYWN0dWFsbHkgZ2V0dGluZyBxdWV1ZWQuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgZmxvdyDigJMgdGhlIHRyaWdnZXJzLCB0aGUgY29udGV4dCwgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciwgZXZlbiBtb3JlIGxpa2VseSwgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzIHdpdGhpbiB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHdlIGFyZSB1dGlsaXppbmcgdGhlIHdvcmtxdWV1ZSBjb3JyZWN0bHkuIEFyZSB3ZSBzZWVpbmcgdW5kdWUgbGF0ZW5jeSwgc3RhcnZhdGlvbiwgb3IgbG9jayBjb250ZW50aW9uIGluIHRoZSByZWxldmFudCB3b3JrcXVldWUgY29udGV4dHMsIGluIHRoZSBjYXNlcyBvZiBjb25jdXJyZW50IGFjY2Vzcz8gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgc2NoZWR1bGluZyBvZiB0aGF0IHdvcmssIHNwZWNpZmljYWxseSB0aGUgd29yayBkb25lIGJ5IHRoZSBgbXdpZmlleF9yeF93b3JrX3F1ZXVlYCwgaXNuJ3QgY3JlYXRpbmcgYSBib3R0bGVuZWNrLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbmNyZWFzaW5nbHkgZGVtYW5kaW5nIHRocm91Z2hwdXQgcmVxdWlyZW1lbnRzIGFuZCB0aGUgbnVhbmNlcyBvZiB2YXJpb3VzIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIGFuZCB0cmFmZmljIHByb2ZpbGVzLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCByZWxldmFudCBjb2RlIHBhdGhzIOKAkyBpbnRlcnJ1cHQgaGFuZGxlcnMsIGRhdGEgcGF0aHMsIGFuZCBhbnkgYXNzb2NpYXRlZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gV2hhdCBzcGVjaWZpYyBlbGVtZW50cyBhcmUgdHJpZ2dlcmluZyB0aGUgZW5xdWV1ZWluZywgd2hlcmUgYXJlIHRoZXkgZGVmaW5lZCwgYW5kIHdoYXQgaXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBxdWV1ZSBzdGF0ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIFdMQU4gZHJpdmVyIGZsb3c/IEkgc2hvdWxkIGFsc28gZXhhbWluZSB0aGUgcXVldWUncyBjb25maWd1cmF0aW9uLCBhbnkgd29yayBpdGVtIHByaW9yaXRpZXMsIGFuZCB0aGUgdW5kZXJseWluZyB3b3JrcXVldWUgZmxhZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjM5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDg6MTIuNzY1MDA3MTY4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTc1Mjk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X3F1ZXVlX3J4X3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTE2MT1FWFBPUlRfU1lNQk9MX0dQTChtd2lmaWV4X3F1ZXVlX21haW5fd29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0xNjItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoxNjM6c3RhdGljIHZvaWQgbXdpZmlleF9xdWV1ZV9yeF93b3JrKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0xNjQte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz0yNDg9aW50IG13aWZpZXhfbWFpbl9wcm9jZXNzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTI3OC1cXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VkZWxheV9tYWluX3dvcmsgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6Mjc5OlxcdFxcdFxcdG13aWZpZXhfcXVldWVfcnhfd29yayhhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTI4MC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMjkxLVxcdFxcdGlmIChhZGFwdGVyLVxcdTAwM2VyeF93b3JrX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgYWRhcHRlci1cXHUwMDNlZGF0YV9yZWNlaXZlZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjI5MjpcXHRcXHRcXHRtd2lmaWV4X3F1ZXVlX3J4X3dvcmsoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0yOTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjQ4OjEyLjg1Njc2Njc0N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA0MTY2NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIERhdGEgRmxvdzogRm9jdXNpbmcgb24gUlggYW5kIFVTQioqXG5cbk9rYXksIHNvIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gcHJldHR5IHN1cmUgYG13aWZpZXhfbWFpbl9wcm9jZXNzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhhbmRsaW5nIGluY29taW5nLCByZWNlaXZlZCBkYXRhIOKAkyB0aGUgUlggc2lkZSBvZiB0aGluZ3MuIFRoYXQncyBteSBpbW1lZGlhdGUgaW1wcmVzc2lvbi4gTm93LCBJIG5lZWQgdG8gc2VlICpob3cqIHRoaXMgZGF0YSBpcyBhY3R1YWxseSBtYWtpbmcgaXRzIHdheSBpbnRvIHRoZSBzeXN0ZW0sIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBVU0IgaW50ZXJmYWNlLiBUaGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgdXNiLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgVVNCIGRhdGEgcmVjZXB0aW9uIGhvb2tzIGFyZSBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGlzIGBtd2lmaWV4X21haW5fcHJvY2Vzc2AgZnVuY3Rpb24uIEknbSB0aGlua2luZyB0aGUgYHVzYi5jYCBmaWxlIHdpbGwgZ2l2ZSBtZSB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgdGhlIFVTQiB0cmFuc2ZlciBhbmQgd2hlcmUgaXQgaGFuZHMgb2ZmIHRoZSByYXcgZGF0YSB0byB0aGUgaGlnaGVyLWxldmVsIFdpLUZpIHN0YWNrIGZvciBwcm9jZXNzaW5nLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTUxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDg6MTYuNzYwOTM1OTk5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODY0NzE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYz00Nj1zdGF0aWMgaW50IG13aWZpZXhfdXNiX3JlY3Yoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0xNTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jOjE1MjpzdGF0aWMgdm9pZCBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTE1My17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM9Mjg1PXN0YXRpYyBpbnQgbXdpZmlleF91c2Jfc3VibWl0X3J4X3VyYihzdHJ1Y3QgdXJiX2NvbnRleHQgKmN0eCwgaW50IHNpemUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMzE1LVxcdFxcdFxcdFxcdCB1c2JfcmN2aW50cGlwZShjYXJkLVxcdTAwM2V1ZGV2LCBjdHgtXFx1MDAzZWVwKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM6MzE2OlxcdFxcdFxcdFxcdCBjdHgtXFx1MDAzZXNrYi1cXHUwMDNlZGF0YSwgc2l6ZSwgbXdpZmlleF91c2JfcnhfY29tcGxldGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTMxNy1cXHRcXHRcXHRcXHQgKHZvaWQgKiljdHgsIGNhcmQtXFx1MDAzZXJ4X2NtZF9pbnRlcnZhbCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMzIwLVxcdFxcdFxcdFxcdCAgdXNiX3JjdmJ1bGtwaXBlKGNhcmQtXFx1MDAzZXVkZXYsIGN0eC1cXHUwMDNlZXApLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzozMjE6XFx0XFx0XFx0XFx0ICBjdHgtXFx1MDAzZXNrYi1cXHUwMDNlZGF0YSwgc2l6ZSwgbXdpZmlleF91c2JfcnhfY29tcGxldGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTMyMi1cXHRcXHRcXHRcXHQgICh2b2lkICopY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDg6MTYuODU5NTg4NzA3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTczOTM2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgbXdpZmlleF91c2JfcnhfY29tcGxldGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLCBzbyBJJ20gZ29pbmcgdG8gYnJlYWsgZG93biBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBVU0IgV2ktRmkgZnJhbWV3b3JrLiBGaXJzdCwgSSBleHBlY3QgaXQgaGFuZGxlcyB0aGUgY29tcGxldGlvbiBvZiBhIFVTQiByZWNlaXZlIG9wZXJhdGlvbiwgbGlrZWx5IGNhbGxlZCB3aGVuIGRhdGEgaXMgYXZhaWxhYmxlIG9uIHRoZSBVU0IgYnVzLiBUaGlzIHN1Z2dlc3RzIGl0J3MgYSBjcml0aWNhbCBwb2ludCBmb3IgZGF0YSBpbmdyZXNzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgYWZ0ZXIgdGhlIGRhdGEgaXMgcmVjZWl2ZWQg4oCTIGlzIGl0IGltbWVkaWF0ZWx5IHBhc3NlZCBvbiBmb3IgcHJvY2Vzc2luZywgYnVmZmVyZWQsIG9yIG1heWJlIGV2ZW4gZGlzY2FyZGVkIHVuZGVyIGNlcnRhaW4gZXJyb3IgY29uZGl0aW9ucz9cblxuSSBpbWFnaW5lIGl0IHdvdWxkIGludGVyYWN0IHdpdGggVVNCIGRlc2NyaXB0b3JzLCBwb3NzaWJseSBpbmNsdWRpbmcgdGhlIGB1cmJgIChVU0IgUmVxdWVzdCBCbG9jayksIGFuZCBwcm9iYWJseSBpbnZvbHZlcyBjaGVja2luZyB0aGUgc3RhdHVzIG9mIHRoZSB0cmFuc2ZlciBmb3Igc3VjY2VzcyBvciBmYWlsdXJlLiBFcnJvciBoYW5kbGluZyBpcyBhbHdheXMgYSBrZXkgYXNwZWN0IGluIHRoZXNlIGtpbmRzIG9mIHJvdXRpbmVzLCBzbyBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHNob3J0IHBhY2tldHMsIHRpbWVvdXRzLCBvciBvdGhlciBVU0ItcmVsYXRlZCBpc3N1ZXMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdXRpbGl6ZWQsIGFzIGNvbmN1cnJlbmN5IGlzIGEgc2lnbmlmaWNhbnQgY29uY2VybiB3aXRoaW4gZHJpdmVyIGNvZGUuIElzIHRoZXJlIGFuIGFzc29jaWF0ZWQgd29ya3F1ZXVlIHRvIG9mZmxvYWQgcHJvY2Vzc2luZywgb3IgaXMgaXQgaGFuZGxlZCBzeW5jaHJvbm91c2x5PyBGaW5hbGx5LCBJIGFudGljaXBhdGUgdGhpcyBmdW5jdGlvbiB3aWxsIGV2ZW50dWFsbHkgY2FsbCBvdGhlciBXaS1GaSBzcGVjaWZpYyBmdW5jdGlvbnMsIGxpa2VseSB0byBwcm9jZXNzIHRoZSByZWNlaXZlZCBwYWNrZXRzLiBNeSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGVudGlyZSBkYXRhIGZsb3cgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2NDEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODoyMC43MTY5ODY2OTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTI6XFx0c3RhdGljIHZvaWQgbXdpZmlleF91c2JfcnhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbiAxNTM6XFx0e1xcbiAxNTQ6XFx0XFx0c3RydWN0IHVyYl9jb250ZXh0ICpjb250ZXh0ID0gKHN0cnVjdCB1cmJfY29udGV4dCAqKXVyYi1cXHUwMDNlY29udGV4dDtcXG4gMTU1OlxcdFxcdHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250ZXh0LVxcdTAwM2VhZGFwdGVyO1xcbiAxNTY6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGNvbnRleHQtXFx1MDAzZXNrYjtcXG4gMTU3OlxcdFxcdHN0cnVjdCB1c2JfY2FyZF9yZWMgKmNhcmQ7XFxuIDE1ODpcXHRcXHRpbnQgcmVjdl9sZW5ndGggPSB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGg7XFxuIDE1OTpcXHRcXHRpbnQgc2l6ZSwgc3RhdHVzO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRpZiAoIWFkYXB0ZXIgfHwgIWFkYXB0ZXItXFx1MDAzZWNhcmQpIHtcXG4gMTYyOlxcdFxcdFxcdHByX2VycihcXFwibXdpZmlleCBhZGFwdGVyIG9yIGNhcmQgc3RydWN0dXJlIGlzIG5vdCB2YWxpZFxcXFxuXFxcIik7XFxuIDE2MzpcXHRcXHRcXHRyZXR1cm47XFxuIDE2NDpcXHRcXHR9XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdGNhcmQgPSAoc3RydWN0IHVzYl9jYXJkX3JlYyAqKWFkYXB0ZXItXFx1MDAzZWNhcmQ7XFxuIDE2NzpcXHRcXHRpZiAoY2FyZC1cXHUwMDNlcnhfY21kX2VwID09IGNvbnRleHQtXFx1MDAzZWVwKVxcbiAxNjg6XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2Y2FyZC1cXHUwMDNlcnhfY21kX3VyYl9wZW5kaW5nKTtcXG4gMTY5OlxcdFxcdGVsc2VcXG4gMTcwOlxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmNhcmQtXFx1MDAzZXJ4X2RhdGFfdXJiX3BlbmRpbmcpO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRpZiAocmVjdl9sZW5ndGgpIHtcXG4gMTczOlxcdFxcdFxcdGlmICh1cmItXFx1MDAzZXN0YXR1cyB8fFxcbiAxNzQ6XFx0XFx0XFx0ICAgIHRlc3RfYml0KE1XSUZJRVhfU1VSUFJJU0VfUkVNT1ZFRCwgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXdvcmtfZmxhZ3MpKSB7XFxuIDE3NTpcXHRcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gMTc2OlxcdFxcdFxcdFxcdFxcdCAgICBcXFwiVVJCIHN0YXR1cyBpcyBmYWlsZWQ6ICVkXFxcXG5cXFwiLCB1cmItXFx1MDAzZXN0YXR1cyk7XFxuIDE3NzpcXHRcXHRcXHRcXHQvKiBEbyBub3QgZnJlZSBza2IgaW4gY2FzZSBvZiBjb21tYW5kIGVwICovXFxuIDE3ODpcXHRcXHRcXHRcXHRpZiAoY2FyZC1cXHUwMDNlcnhfY21kX2VwICE9IGNvbnRleHQtXFx1MDAzZWVwKVxcbiAxNzk6XFx0XFx0XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gMTgwOlxcdFxcdFxcdFxcdGdvdG8gc2V0dXBfZm9yX25leHQ7XFxuIDE4MTpcXHRcXHRcXHR9XFxuIDE4MjpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSByZWN2X2xlbmd0aClcXG4gMTgzOlxcdFxcdFxcdFxcdHNrYl90cmltKHNrYiwgcmVjdl9sZW5ndGgpO1xcbiAxODQ6XFx0XFx0XFx0ZWxzZVxcbiAxODU6XFx0XFx0XFx0XFx0c2tiX3B1dChza2IsIHJlY3ZfbGVuZ3RoIC0gc2tiLVxcdTAwM2VsZW4pO1xcbiAxODY6XFx0XFxuIDE4NzpcXHRcXHRcXHRzdGF0dXMgPSBtd2lmaWV4X3VzYl9yZWN2KGFkYXB0ZXIsIHNrYiwgY29udGV4dC1cXHUwMDNlZXApO1xcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBJTkZPLFxcbiAxOTA6XFx0XFx0XFx0XFx0ICAgIFxcXCJpbmZvOiByZWN2X2xlbmd0aD0lZCwgc3RhdHVzPSVkXFxcXG5cXFwiLFxcbiAxOTE6XFx0XFx0XFx0XFx0ICAgIHJlY3ZfbGVuZ3RoLCBzdGF0dXMpO1xcbiAxOTI6XFx0XFx0XFx0aWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHtcXG4gMTkzOlxcdFxcdFxcdFxcdG13aWZpZXhfcXVldWVfbWFpbl93b3JrKGFkYXB0ZXIpO1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHRcXHRcXHRcXHQvKiB1cmIgZm9yIGRhdGFfZXAgaXMgcmUtc3VibWl0dGVkIG5vdztcXG4gMTk2OlxcdFxcdFxcdFxcdCAqIHVyYiBmb3IgY21kX2VwIHdpbGwgYmUgcmUtc3VibWl0dGVkIGluIGNhbGxiYWNrXFxuIDE5NzpcXHRcXHRcXHRcXHQgKiBtd2lmaWV4X3VzYl9yZWN2X2NvbXBsZXRlXFxuIDE5ODpcXHRcXHRcXHRcXHQgKi9cXG4gMTk5OlxcdFxcdFxcdFxcdGlmIChjYXJkLVxcdTAwM2VyeF9jbWRfZXAgPT0gY29udGV4dC1cXHUwMDNlZXApXFxuIDIwMDpcXHRcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDIwMTpcXHRcXHRcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODoyMC43MTcxNTEyNzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0ODMxNjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgbXdpZmlleF91c2JfcmVjdmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIHRhcmdldCBoZXJlIGlzIGBtd2lmaWV4X3VzYl9yZWN2YCwgc28gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBVU0Igd2lyZWxlc3MgaW50ZXJmYWNlIGNvbnRleHQuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJ4oCZbSBtZW50YWxseSBtYXBwaW5nIHRoaXMgZnVuY3Rpb24gdG8gdGhlIHR5cGljYWwgVVNCIHJlY2VpdmUgcGF0aCBmb3IgYSB3aXJlbGVzcyBkcml2ZXI6IGRhdGEgYXJyaXZpbmcgb3ZlciB0aGUgVVNCIGJ1cywgYmVpbmcgcGlja2VkIHVwIGJ5IHRoZSBkcml2ZXIsIHByb2Nlc3NlZCwgYW5kIHBhc3NlZCB1cCB0aGUgc3RhY2suIE15IGV4cGVjdGF0aW9uIGlzIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBpbmNvbWluZyBwYWNrZXRzIHZpYSBVU0IuXG5cbknigJlsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgVVNCIGhvc3QgY29udHJvbGxlcjsgaG93IGl0IGhhbmRsZXMgVVJCcyAoVVNCIFJlcXVlc3QgQmxvY2tzKSBhbmQgdGhlaXIgY29tcGxldGlvbjsgd2hhdCBraW5kIG9mIGJ1ZmZlcmluZyBzdHJhdGVneSBpdCBlbXBsb3lzOyBhbmQsIGNydWNpYWxseSwgaG93IGl0IHZlcmlmaWVzIHRoZSBkYXRhIGludGVncml0eSBhbmQgcG90ZW50aWFsbHkgdW5wYWNrcyB0aGUgODAyLjExIGZyYW1lcywgdGhlbiBwYXNzZXMgdGhvc2UgZnJhbWVzIHVwIHRvIHRoZSBwcm90b2NvbCBzdGFjay4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHF1ZXN0aW9ucyBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMgd2l0aGluIHRoZSBmdW5jdGlvbi4gSXMgaXQgaW50ZXJydXB0LWRyaXZlbj8gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCBVU0IgdHJhbnNmZXIgZXJyb3JzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgYnVmZmVyIG1hbmFnZW1lbnQgb3IgRE1BIHVzYWdlPyBJ4oCZbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGVycm9yIGhhbmRsaW5nLiBJIGhvcGUgdG8gc3BvdCB3ZWxsLWRlZmluZWQgZXJyb3IgY29kZXMgYW5kIHBlcmhhcHMgcmV0cnkgbWVjaGFuaXNtcy4gSeKAmW0gcHJlcGFyZWQgdG8gZGlnIGRlZXAuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3ODIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjQ4OjI0Ljc2NTQ3MTczMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ2OlxcdHN0YXRpYyBpbnQgbXdpZmlleF91c2JfcmVjdihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbiAgNDc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGVwKVxcbiAgNDg6XFx0e1xcbiAgNDk6XFx0XFx0dTMyIHJlY3ZfdHlwZTtcXG4gIDUwOlxcdFxcdF9fbGUzMiB0bXA7XFxuICA1MTpcXHRcXHRpbnQgcmV0O1xcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHRpZiAoYWRhcHRlci1cXHUwMDNlaHNfYWN0aXZhdGVkKVxcbiAgNTQ6XFx0XFx0XFx0bXdpZmlleF9wcm9jZXNzX2hzX2NvbmZpZyhhZGFwdGVyKTtcXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgSU5URl9IRUFERVJfTEVOKSB7XFxuICA1NzpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gIDU4OlxcdFxcdFxcdFxcdCAgICBcXFwiJXM6IGludmFsaWQgc2tiLVxcdTAwM2VsZW5cXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gIDU5OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gIDYwOlxcdFxcdH1cXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0c3dpdGNoIChlcCkge1xcbiAgNjM6XFx0XFx0Y2FzZSBNV0lGSUVYX1VTQl9FUF9DTURfRVZFTlQ6XFxuICA2NDpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFVkVOVCxcXG4gIDY1OlxcdFxcdFxcdFxcdCAgICBcXFwiJXM6IEVQX0NNRF9FVkVOVFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiAgNjY6XFx0XFx0XFx0c2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIFxcdTAwMjZ0bXAsIElOVEZfSEVBREVSX0xFTik7XFxuICA2NzpcXHRcXHRcXHRyZWN2X3R5cGUgPSBsZTMyX3RvX2NwdSh0bXApO1xcbiAgNjg6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBJTlRGX0hFQURFUl9MRU4pO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRcXHRzd2l0Y2ggKHJlY3ZfdHlwZSkge1xcbiAgNzE6XFx0XFx0XFx0Y2FzZSBNV0lGSUVYX1VTQl9UWVBFX0NNRDpcXG4gIDcyOlxcdFxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNlIE1XSUZJRVhfU0laRV9PRl9DTURfQlVGRkVSKSB7XFxuICA3MzpcXHRcXHRcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gIDc0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiQ01EOiBza2ItXFx1MDAzZWxlbiB0b28gbGFyZ2VcXFxcblxcXCIpO1xcbiAgNzU6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLTE7XFxuICA3NjpcXHRcXHRcXHRcXHRcXHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XFxuICA3NzpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKCFhZGFwdGVyLVxcdTAwM2VjdXJyX2NtZCkge1xcbiAgNzg6XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgV0FSTiwgXFxcIkNNRDogbm8gY3Vycl9jbWRcXFxcblxcXCIpO1xcbiAgNzk6XFx0XFx0XFx0XFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZXBzX3N0YXRlID09IFBTX1NUQVRFX1NMRUVQX0NGTSkge1xcbiAgODA6XFx0XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9wcm9jZXNzX3NsZWVwX2NvbmZpcm1fcmVzcChcXG4gIDgxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGFkYXB0ZXIsIHNrYi1cXHUwMDNlZGF0YSxcXG4gIDgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuKTtcXG4gIDgzOlxcdFxcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuICA4NDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XFxuICA4NTpcXHRcXHRcXHRcXHRcXHR9XFxuICA4NjpcXHRcXHRcXHRcXHRcXHRyZXQgPSAtMTtcXG4gIDg3OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcXG4gIDg4OlxcdFxcdFxcdFxcdH1cXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlY3Vycl9jbWQtXFx1MDAzZXJlc3Bfc2tiID0gc2tiO1xcbiAgOTE6XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlY21kX3Jlc3BfcmVjZWl2ZWQgPSB0cnVlO1xcbiAgOTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA5MzpcXHRcXHRcXHRjYXNlIE1XSUZJRVhfVVNCX1RZUEVfRVZFTlQ6XFxuICA5NDpcXHRcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBzaXplb2YodTMyKSkge1xcbiAgOTU6XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjQ4OjI0Ljc2NTYwNjUwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc2MzIwODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbXdpZmlleF91c2JfcmVjdmAgZnVuY3Rpb24uIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGhhbmRsZXMgZGF0YSByZWNlcHRpb24gb3ZlciBVU0IgZm9yIHRoaXMgTWFydmVsbCBXaS1GaSBkcml2ZXIuIFRoaXMgc2VlbXMgbGlrZSBhIGNvcmUgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIEknbSBndWVzc2luZyBpdCdzIHJlc3BvbnNpYmxlIGZvciB0aGUgY3JpdGljYWwgdGFzayBvZiBtYW5hZ2luZyBkYXRhIGZsb3cgZnJvbSB0aGUgVVNCIGludGVyZmFjZSB0byB0aGUgaGlnaGVyLWxldmVsIG5ldHdvcmtpbmcgc3RhY2suIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBrZXkgb3BlcmF0aW9uczogaG93IGl0IHJlY2VpdmVzIGRhdGEsIGhvdyBpdCBidWZmZXJzIGl0LCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLCBhbmQgaG93IGl0IHRoZW4gcGFzc2VzIHRoYXQgZGF0YSB1cHdhcmRzLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIHVzZWQgYW5kIHRoZSBlZmZpY2llbmN5IG9mIHRoZSBkYXRhIHRyYW5zZmVycyDigJMgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGhlcmUgY291bGQgaGF2ZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTE0LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0ODoyOS44NDE5MzI1NDFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcIkVWRU5UOiBza2ItXFx1MDAzZWxlbiB0b28gc21hbGxcXFxcblxcXCIpO1xcbiAgOTc6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLTE7XFxuICA5ODpcXHRcXHRcXHRcXHRcXHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XFxuICA5OTpcXHRcXHRcXHRcXHR9XFxuIDEwMDpcXHRcXHRcXHRcXHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgXFx1MDAyNnRtcCwgc2l6ZW9mKHUzMikpO1xcbiAxMDE6XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZXZlbnRfY2F1c2UgPSBsZTMyX3RvX2NwdSh0bXApO1xcbiAxMDI6XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsXFxuIDEwMzpcXHRcXHRcXHRcXHRcXHQgICAgXFxcImV2ZW50X2NhdXNlICUjeFxcXFxuXFxcIiwgYWRhcHRlci1cXHUwMDNlZXZlbnRfY2F1c2UpO1xcbiAxMDQ6XFx0XFxuIDEwNTpcXHRcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSBNQVhfRVZFTlRfU0laRSkge1xcbiAxMDY6XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcIkVWRU5UOiBldmVudCBib2R5IHRvbyBsYXJnZVxcXFxuXFxcIik7XFxuIDEwODpcXHRcXHRcXHRcXHRcXHRyZXQgPSAtMTtcXG4gMTA5OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcXG4gMTEwOlxcdFxcdFxcdFxcdH1cXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0XFx0XFx0bWVtY3B5KGFkYXB0ZXItXFx1MDAzZWV2ZW50X2JvZHksIHNrYi1cXHUwMDNlZGF0YSArXFxuIDExMzpcXHRcXHRcXHRcXHQgICAgICAgTVdJRklFWF9FVkVOVF9IRUFERVJfTEVOLCBza2ItXFx1MDAzZWxlbik7XFxuIDExNDpcXHRcXG4gMTE1OlxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZWV2ZW50X3JlY2VpdmVkID0gdHJ1ZTtcXG4gMTE2OlxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZWV2ZW50X3NrYiA9IHNrYjtcXG4gMTE3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMTg6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gMTE5OlxcdFxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiAxMjA6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJ1bmtub3duIHJlY3ZfdHlwZSAlI3hcXFxcblxcXCIsIHJlY3ZfdHlwZSk7XFxuIDEyMTpcXHRcXHRcXHRcXHRyZXQgPSAtMTtcXG4gMTIyOlxcdFxcdFxcdFxcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcXG4gMTIzOlxcdFxcdFxcdH1cXG4gMTI0OlxcdFxcdFxcdGJyZWFrO1xcbiAxMjU6XFx0XFx0Y2FzZSBNV0lGSUVYX1VTQl9FUF9EQVRBOlxcbiAxMjY6XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgREFUQSwgXFxcIiVzOiBFUF9EQVRBXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIDEyNzpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSBNV0lGSUVYX1JYX0RBVEFfQlVGX1NJWkUpIHtcXG4gMTI4OlxcdFxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiAxMjk6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJEQVRBOiBza2ItXFx1MDAzZWxlbiB0b28gbGFyZ2VcXFxcblxcXCIpO1xcbiAxMzA6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxMzE6XFx0XFx0XFx0fVxcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcnhfZGF0YV9xLCBza2IpO1xcbiAxMzQ6XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZGF0YV9yZWNlaXZlZCA9IHRydWU7XFxuIDEzNTpcXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VyeF9wZW5kaW5nKTtcXG4gMTM2OlxcdFxcdFxcdGJyZWFrO1xcbiAxMzc6XFx0XFx0ZGVmYXVsdDpcXG4gMTM4OlxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiAxMzk6XFx0XFx0XFx0XFx0ICAgIFxcXCIlczogdW5rbm93biBlbmRwb3J0ICUjeFxcXFxuXFxcIiwgX19mdW5jX18sIGVwKTtcXG4gMTQwOlxcdFxcdFxcdHJldHVybiAtMTtcXG4gMTQxOlxcdFxcdH1cXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0cmV0dXJuIC1FSU5QUk9HUkVTUztcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0ZXhpdF9yZXN0b3JlX3NrYjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDg6MjkuODQyMDk5NzgxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNjEyNDM4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIFdpLUZpIERyaXZlcidzIFJlY2VpdmUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSByZWNlaXZlIHBhdGggaW4gdGhpcyBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBmcm9tIHRoZSBVU0IgaW50ZXJmYWNlLiBJdCBzZWVtcyBsaWtlIHRoZSBgbXdpZmlleF91c2JfcmVjdmAgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGluY29taW5nIGRhdGEuIEl0IGxvb2tzIGxpa2UgaXQgcXVldWVzIHRoZSByZWNlaXZlZCBkYXRhIHRvIHRoZSBhZGFwdGVyJ3MgcmVjZWl2ZSBkYXRhIHF1ZXVlLCBzcGVjaWZpY2FsbHkgYGFkYXB0ZXItXHUwMDNlcnhfZGF0YV9xYCwgYW5kIHRoZW4gY3J1Y2lhbGx5IHNldHMgdGhlIGBhZGFwdGVyLVx1MDAzZWRhdGFfcmVjZWl2ZWRgIGZsYWcgdG8gYHRydWVgLiBUaGlzIGxpa2VseSBzaWduYWxzIHRoYXQgbmV3IGRhdGEgaXMgYXZhaWxhYmxlIGZvciBwcm9jZXNzaW5nLlxuXG5UaGUgbmV4dCBwaWVjZSBvZiB0aGUgcHV6emxlIGlzIGBtd2lmaWV4X21haW5fcHJvY2Vzc2AuIEZyb20gaGVyZSwgdGhlIGV4ZWN1dGlvbiBmbG93IGJyYW5jaGVzIHRvIGBtd2lmaWV4X3F1ZXVlX3J4X3dvcmsoYWRhcHRlcilgLiBUaGlzIGxvb2tzIGxpa2UgaXQncyBhIG1lY2hhbmlzbSBmb3IgZGVmZXJyaW5nIHRoZSByeCBwcm9jZXNzaW5nLCBwbGFjaW5nIGBtd2lmaWV4X3J4X3dvcmtfcXVldWVgIGludG8gYSB3b3JrcXVldWUuIFRoaXMsIGluIHR1cm4sIGNhbGxzIGBtd2lmaWV4X3Byb2Nlc3NfcngoYWRhcHRlcilgLiBUaGF0IGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBoZWF2eSBsaWZ0aW5nIG9mIGFjdHVhbGx5IGhhbmRsaW5nIHRoZSByZWNlaXZlZCBkYXRhIGxpa2VseSBoYXBwZW5zLlxuXG5JJ20gbm93IGdvaW5nIHRvIGRpZyBpbnRvIGBtd2lmaWV4X3Byb2Nlc3NfcnhgIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBzaG91bGQgYmUuIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgdGhlIHJlYWwgZGV0YWlscyBvbiBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZCwgZGUtcXVldWVkLCBhbmQgcHJvY2Vzc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg4MCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjQ4OjM3LjEwMzM0NjkyOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU5NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzQ6XFx0c3RhdGljIGludCBtd2lmaWV4X3Byb2Nlc3Nfcngoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG4gMTc1OlxcdHtcXG4gMTc2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDE3NzpcXHRcXHRzdHJ1Y3QgbXdpZmlleF9yeGluZm8gKnJ4X2luZm87XFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcnhfcHJvY19sb2NrKTtcXG4gMTgwOlxcdFxcdGlmIChhZGFwdGVyLVxcdTAwM2VyeF9wcm9jZXNzaW5nIHx8IGFkYXB0ZXItXFx1MDAzZXJ4X2xvY2tlZCkge1xcbiAxODE6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJ4X3Byb2NfbG9jayk7XFxuIDE4MjpcXHRcXHRcXHRnb3RvIGV4aXRfcnhfcHJvYztcXG4gMTgzOlxcdFxcdH0gZWxzZSB7XFxuIDE4NDpcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VyeF9wcm9jZXNzaW5nID0gdHJ1ZTtcXG4gMTg1OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VyeF9wcm9jX2xvY2spO1xcbiAxODY6XFx0XFx0fVxcbiAxODc6XFx0XFxuIDE4ODpcXHRcXHQvKiBDaGVjayBmb3IgUnggZGF0YSAqL1xcbiAxODk6XFx0XFx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlcnhfZGF0YV9xKSkpIHtcXG4gMTkwOlxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJ4X3BlbmRpbmcpO1xcbiAxOTE6XFx0XFx0XFx0aWYgKChhZGFwdGVyLVxcdTAwM2VkZWxheV9tYWluX3dvcmsgfHxcXG4gMTkyOlxcdFxcdFxcdCAgICAgYWRhcHRlci1cXHUwMDNlaWZhY2VfdHlwZSA9PSBNV0lGSUVYX1VTQikgXFx1MDAyNlxcdTAwMjZcXG4gMTkzOlxcdFxcdFxcdCAgICAoYXRvbWljX3JlYWQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJ4X3BlbmRpbmcpIFxcdTAwM2MgTE9XX1JYX1BFTkRJTkcpKSB7XFxuIDE5NDpcXHRcXHRcXHRcXHRpZiAoYWRhcHRlci1cXHUwMDNlaWZfb3BzLnN1Ym1pdF9yZW1fcnhfdXJicylcXG4gMTk1OlxcdFxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZWlmX29wcy5zdWJtaXRfcmVtX3J4X3VyYnMoYWRhcHRlcik7XFxuIDE5NjpcXHRcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VkZWxheV9tYWluX3dvcmsgPSBmYWxzZTtcXG4gMTk3OlxcdFxcdFxcdFxcdG13aWZpZXhfcXVldWVfbWFpbl93b3JrKGFkYXB0ZXIpO1xcbiAxOTg6XFx0XFx0XFx0fVxcbiAxOTk6XFx0XFx0XFx0cnhfaW5mbyA9IE1XSUZJRVhfU0tCX1JYQ0Ioc2tiKTtcXG4gMjAwOlxcdFxcdFxcdGlmIChyeF9pbmZvLVxcdTAwM2VidWZfdHlwZSA9PSBNV0lGSUVYX1RZUEVfQUdHUl9EQVRBKSB7XFxuIDIwMTpcXHRcXHRcXHRcXHRpZiAoYWRhcHRlci1cXHUwMDNlaWZfb3BzLmRlYWdncl9wa3QpXFxuIDIwMjpcXHRcXHRcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VpZl9vcHMuZGVhZ2dyX3BrdChhZGFwdGVyLCBza2IpO1xcbiAyMDM6XFx0XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gMjA0OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDIwNTpcXHRcXHRcXHRcXHRtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQoYWRhcHRlciwgc2tiKTtcXG4gMjA2OlxcdFxcdFxcdH1cXG4gMjA3OlxcdFxcdH1cXG4gMjA4OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcnhfcHJvY19sb2NrKTtcXG4gMjA5OlxcdFxcdGFkYXB0ZXItXFx1MDAzZXJ4X3Byb2Nlc3NpbmcgPSBmYWxzZTtcXG4gMjEwOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VyeF9wcm9jX2xvY2spO1xcbiAyMTE6XFx0XFxuIDIxMjpcXHRleGl0X3J4X3Byb2M6XFxuIDIxMzpcXHRcXHRyZXR1cm4gMDtcXG4gMjE0OlxcdH1cXG4gMjE1OlxcdFxcbiAyMTY6XFx0c3RhdGljIHZvaWQgbWF5YmVfcXVpcmtfZndfZGlzYWJsZV9kcyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxcbiAyMTc6XFx0e1xcbiAyMTg6XFx0XFx0c3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9TVEEpO1xcbiAyMTk6XFx0XFx0c3RydWN0IG13aWZpZXhfdmVyX2V4dCB2ZXJfZXh0O1xcbiAyMjA6XFx0XFxuIDIyMTpcXHRcXHRpZiAodGVzdF9hbmRfc2V0X2JpdChNV0lGSUVYX0lTX1JFUVVFU1RJTkdfRldfVkVSRVhULCBcXHUwMDI2YWRhcHRlci1cXHUwMDNld29ya19mbGFncykpXFxuIDIyMjpcXHRcXHRcXHRyZXR1cm47XFxuIDIyMzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NDg6MzcuMTAzNTU1MTg4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NjA0NjMzNjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlJ3MgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gdGhlIGluaXRpYWwgY2FsbCBzdGFydHMgd2l0aCBgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0YCwgZ290IGl0LiBUaGF0IHRoZW4gYnJhbmNoZXMgb3V0IHRvIGVpdGhlciBgbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXRgIG9yIGBtd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldGAsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gRnJvbSB0aGVyZSwgd2UgaGl0IGBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdGAgYW5kIHRoZW4gYG13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdGAuIEZpbmFsbHksIHdlIGdldCB0byB0aGUgY3JpdGljYWwgZnVuY3Rpb246IGBtd2lmaWV4XzExbl9kaXNwYXRjaF9hbXNkdV9wa3RgLiBUaGF0IGlzIGdvb2QhXG5cblRoaXMgZmxvdyBjb25maXJtcyB0aGF0IHRoaXMgc2VjdGlvbiBvZiBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggYSBVU0IgZ2FkZ2V0IGZ1enppbmcgYXBwcm9hY2guIFdlIGhhdmUgYSBjbGVhciBwYXRoIG9mIGZ1bmN0aW9uIGNhbGxzIHRoYXQgbGVhZHMgcmlnaHQgdG8gaXQuIEV4Y2VsbGVudCFcblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBjb3JyZWN0LiBXZSdsbCBuZWVkIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBlbmFibGVkIGluIHRoZSBidWlsZC4gV2FpdCwgYE1XSUZJRVhfVVNCYCAqZGVwZW5kcyogb24gYm90aCBgTVdJRklFWGAgYW5kIGBVU0JgLCBvZiBjb3Vyc2UuIFNvLCB5ZXMsIHdlIG5lZWQgYm90aCBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgdG8gZW5zdXJlIHRoaXMgY29kZSBpcyBidWlsdCBpbnRvIHRoZSBVU0IgZ2FkZ2V0LiBHb29kLlxuXG5CYWNrIHRvIHRoZSBjb2RlLCBsZXQncyBkb3VibGUtY2hlY2sgYG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdGAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJIHJlY2FsbCB0aGF0IGl0IGdldHMgY2FsbGVkIHdoZW4gdGhlIHBhY2tldCB0eXBlIGlzIGBQS1RfVFlQRV9BTVNEVWAsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBsZTE2X3RvX2NwdShsb2NhbF9yeF9wZC1cdTAwM2VyeF9wa3RfdHlwZSkgPT0gUEtUX1RZUEVfQU1TRFVgLiBJdCBhbHNvIHByb2Nlc3NlcyBURExTIGFjdGlvbiBmcmFtZXMuIFJpZ2h0LCBhbmQgdGhlIHBhdGNoIGZpeGVzIHRoZSBhc3NpZ25tZW50IG9mIGBza2ItXHUwMDNlbGVuYCB0byBgcnhfc2tiLVx1MDAzZWxlbmAgYmVmb3JlIGNhbGxpbmcgYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAuXG5cbk5leHQgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBiZWhhdmlvdXIgb2YgYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAgbm93LCBidXQgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBzcG90IHRvIHN0YXJ0IG91ciBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxNjEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo0OTo0My43MDgxOTM5NTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTk2MDQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jPTIwPXN0YXRpYyBpbnQgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTQ0LVxcdFxcdFxcdCAgICBudG9ocyhyeF9oZHItXFx1MDAzZWV0aDgwM19oZHIuaF9wcm90bykgPT0gRVRIX1BfVERMUykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM6NDU6XFx0XFx0XFx0XFx0bXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuYy00Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICh1OCAqKXJ4X2hkcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg9MTYwMz1pbnQgbXdpZmlleF9zZW5kX3RkbHNfYWN0aW9uX2ZyYW1lKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNvbnN0IHU4ICpwZWVyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNjA2LVxcdFxcdFxcdFxcdCAgIHNpemVfdCBleHRyYV9pZXNfbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjE2MDc6dm9pZCBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE2MDgtXFx0XFx0XFx0XFx0ICAgICAgIHU4ICpidWYsIGludCBsZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9yeC5jPTcxPWludCBtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtMTUwLVxcdFxcdG9mZnNldCA9ICh1OCAqKWxvY2FsX3J4X3BkICsgcnhfcGt0X29mZjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM6MTUxOlxcdFxcdG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZShwcml2LCBvZmZzZXQsIHJ4X3BrdF9sZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYy0xNTItXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3RkbHMuYz04MDk9aW50IG13aWZpZXhfc2VuZF90ZGxzX2FjdGlvbl9mcmFtZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqcGVlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90ZGxzLmMtODg5LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90ZGxzLmM6ODkwOnZvaWQgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3RkbHMuYy04OTEtXFx0XFx0XFx0XFx0ICAgICAgIHU4ICpidWYsIGludCBsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjQ5OjQ0LjI3ODE2MzM5MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODM0OTY1MDYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQcmlvcml0aXppbmcgRnV6emluZyBUYXJnZXRzIGluIHRoZSBtd2lmaWV4IERyaXZlcioqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gc29tZSBrZXkgZnVuY3Rpb25zIGluIHRoZSBgbXdpZmlleGAgZHJpdmVyIGZvciBmdXp6aW5nLiBJbml0aWFsbHksIEkgdGhvdWdodCBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYCwgYG13aWZpZXhfMTFuX2Rpc3BhdGNoX2Ftc2R1X3BrdGAsIGBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdGAsIGFuZCBgbXdpZmlleF9wcm9jZXNzX3J4X3BhY2tldGAgd2VyZSBwcm9taXNpbmcgY2FuZGlkYXRlcy4gSG93ZXZlciwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcHJlZmVycmVkIGZ1enppbmcgdGFyZ2V0czogbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IHdpbGwgYmUgbW9yZSBmcnVpdGZ1bC5cblxuR2l2ZW4gdGhhdCwgSSdtIGdvaW5nIHRvIHJldmlzZSBteSBsaXN0LiBXaGlsZSBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCBsb29rZWQgaW50ZXJlc3RpbmcsIGl0J3Mgc3RhdGljYWxseSBkZWNsYXJlZCB3aGljaCByZW5kZXJzIGl0IGxlc3Mgc3VpdGFibGUgZm9yIGZ1enppbmcuIEknbGwgZm9jdXMgb24gdGhlc2UgaW5zdGVhZCwgYXMgdGhleSBtZWV0IHRoZSBjcml0ZXJpYTpcblxuKiAgIGBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdGBcbiogICBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYFxuKiAgIGBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldGBcbiogICBgbXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXRgXG4qICAgYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGBcblxuVG8gYmUgY2VydGFpbiwgbGV0IG1lIHZlcmlmeSB0aGUgc3RhdGljIHN0YXR1cyBvZiB0aG9zZSB0YXJnZXRzLiBDaGVja2luZyBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgLCBjb25maXJtZWQgaXQgaXMgbm90IHN0YXRpYy4gU2ltaWxhcmx5LCBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYCwgYG13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0YCwgYG13aWZpZXhfcHJvY2Vzc191YXBfcnhfcGFja2V0YCBhbmQgYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGAgYXJlIGFsc28gbm90IHN0YXRpYy4gVGhhdCdzIGEgc29saWQgbGlzdCB0byBzdGFydCB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY3MCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo1MDowMi42Mjc4MTc5N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NTAzNTgyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9NTIzPWludCBtd2lmaWV4X2NtZF8xMW5fZGVsYmEoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwgdm9pZCAqZGF0YV9idWYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTU0Ni0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjU0NzppbnQgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTU0OC1cXHRcXHRcXHRcXHR1MTYgc2VxX251bSwgdTE2IHRpZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmM9OTAyPXZvaWQgbXdpZmlleF8xMW5fcnhiYV9zeW5jX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jLTk2Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5jOjk2NzpcXHRcXHRcXHRcXHRcXHRyZXQgPSBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMtOTY4LVxcdFxcdFxcdFxcdFxcdChwcml2LCBzZXFfbnVtLCB0bHZfcnhiYS1cXHUwMDNldGlkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuaD0zOT1zdGF0aWMgaW5saW5lIHZvaWQgbXdpZmlleF9yZXNldF8xMW5fcnhfc2VxX251bShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuaC00My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuX3J4cmVvcmRlci5oOjQ0OmludCBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbl9yeHJlb3JkZXIuaC00NS1cXHRcXHRcXHQgICAgICAgdTE2IHNlcU51bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfcnguYz0xODk9aW50IG13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtMjYwLVxcdC8qIFJlb3JkZXIgYW5kIHNlbmQgdG8gT1MgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmM6MjYxOlxcdHJldCA9IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0KHByaXYsIHNlcV9udW0sIGxvY2FsX3J4X3BkLVxcdTAwM2Vwcmlvcml0eSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX3J4LmMtMjYyLVxcdFxcdFxcdFxcdFxcdCB0YSwgKHU4KSByeF9wa3RfdHlwZSwgc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jPTM3Mz1pbnQgbXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfdHhyeC5jLTQ0Mi1cXHRwa3RfdHlwZSA9ICh1OClsZTE2X3RvX2NwdSh1YXBfcnhfcGQtXFx1MDAzZXJ4X3BrdF90eXBlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYzo0NDM6XFx0cmV0ID0gbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3QocHJpdiwgbGUxNl90b19jcHUodWFwX3J4X3BkLVxcdTAwM2VzZXFfbnVtKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX3R4cnguYy00NDQtXFx0XFx0XFx0XFx0XFx0IHVhcF9yeF9wZC1cXHUwMDNlcHJpb3JpdHksIHRhLCBwa3RfdHlwZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NTA6MDQuNDcyODU4NzY0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTY1MzI2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIE1vZHVsZSBDb25maWd1cmF0aW9uIGZvciBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgICppcyogZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IGl0IGlzbid0IHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3MgdG8gZW5hYmxlIGl0LiBJIGtub3cgdGhhdCBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgYXJlIGRlZmluaXRlbHkgcmVxdWlyZWQuIEJ1dCBsZXQncyBiZSB0aG9yb3VnaCwgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzLiBSaWdodCwgaGVyZSB3ZSBnbywgYENGRzgwMjExYCBpcyBhIGRlcGVuZGVuY3kgb2YgYE1XSUZJRVhgLCBhbmQgYFVTQmAgaXMgYSBkZXBlbmRlbmN5IG9mIGBNV0lGSUVYX1VTQmAuIFNvLCBhcyBJIHRob3VnaHQsIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBhcmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHdvcnJ5IGFib3V0LlxuXG5Ob3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyBkb3VibGUtY2hlY2sgaWYganVzdCBlbmFibGluZyBgTVdJRklFWF9VU0JgIGlzIHN1ZmZpY2llbnQuIFllcywgYE1XSUZJRVhfVVNCYCAqZG9lcyogc2VsZWN0IGBGV19MT0FERVJgIGFuZCwgaW1wb3J0YW50bHksIGRlcGVuZHMgb24gKmJvdGgqIGBNV0lGSUVYYCBhbmQgYFVTQmAuIEFuZCB3ZSBrbm93IHRoYXQgYE1XSUZJRVhgIGl0c2VsZiBkZXBlbmRzIG9uIGBDRkc4MDIxMWAuIFRoYXQgbG9va3MgbGlrZSBhIGNvbXBsZXRlIGFuZCB3ZWxsLWRlZmluZWQgc2V0IG9mIGRlcGVuZGVuY2llcy5cblxuRmluYWxseSwganVzdCBmb3IgZ29vZCBtZWFzdXJlLCBsZXQncyBjb25maXJtIHdoZXRoZXIgYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAgaXMgbm9uLXN0YXRpYyBhcyB3ZWxsLiBUaGF0IHdpbGwgaGVscCB0byBpbmZvcm0gdGhlIHdpZGVyIHZpZXcgb2Ygd2hhdCBpcyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MzksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTA6NTA6MDkuNDI5Mzk1NjI2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTU1MzYwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTE2MDM9aW50IG13aWZpZXhfc2VuZF90ZGxzX2FjdGlvbl9mcmFtZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqcGVlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTYwNi1cXHRcXHRcXHRcXHQgICBzaXplX3QgZXh0cmFfaWVzX2xlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxNjA3OnZvaWQgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNjA4LVxcdFxcdFxcdFxcdCAgICAgICB1OCAqYnVmLCBpbnQgbGVuKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90ZGxzLmM9ODA5PWludCBtd2lmaWV4X3NlbmRfdGRsc19hY3Rpb25fZnJhbWUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgY29uc3QgdTggKnBlZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdGRscy5jLTg4OS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdGRscy5jOjg5MDp2b2lkIG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90ZGxzLmMtODkxLVxcdFxcdFxcdFxcdCAgICAgICB1OCAqYnVmLCBpbnQgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMDo1MDowOS45ODQ5Mzc5MTVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIyMjgxNzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBjb25maXJtaW5nIHRoZSBvYnZpb3VzLCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBub24tc3RhdGljIGlzc3VlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBpbnRlcm5hbHMgb2YgdGhlIHBhY2tldCBoYW5kbGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW4gYW5kIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgaW52b2x2ZWQuXG5cbk15IGluaXRpYWwgY2hlY2sgY29uZmlybXMgdGhhdCBib3RoIGBtd2lmaWV4XzExbl9kaXNwYXRjaF9wa3RgIGFuZCBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCBhcmUsIGluIGZhY3QsIHN0YXRpYyB3aXRoaW4gYDExbl9yeHJlb3JkZXIuY2AuIFRoaXMgc3VnZ2VzdHMgdGhleSdyZSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIG1vZHVsZSwgd2hpY2ggbmFycm93cyB0aGUgc2NvcGUgb2YgdGhlIGludmVzdGlnYXRpb24uXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGNhbGwgaGllcmFyY2h5LCB0aGUgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb246XG5cbiogICBgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3RgXG4qICAgYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWBcbiogICBgbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXRgXG4qICAgYG13aWZpZXhfcHJvY2Vzc191YXBfcnhfcGFja2V0YFxuKiAgIGBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXRgXG5cbmBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXRgIHNlZW1zIGEgYml0IGJyb2FkLCBhY3RpbmcgYXMgYW4gZW50cnkgcG9pbnQsIGJ1dCBpdCdzIGVzc2VudGlhbCBmb3IgY29udGV4dC4gYG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0YCBzZWVtcyBtb3JlIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBBLU1TRFUgcHJvY2Vzc2luZywgYW5kIGBtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVgIGlzIHNwZWNpZmljYWxseSB0YXJnZXRlZCBieSB0aGUgYnVnZ3kgY29kZS5cblxuQWgsIHRoZSByb290IG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHdpdGhpbiBgbXdpZmlleF8xMW5fZGlzcGF0Y2hfYW1zZHVfcGt0YCDigJMgcHJlY2lzZWx5IGJlY2F1c2UgaXQncyBzdGF0aWMuIFRoZSBwYXRjaCBjbGVhcmx5IGFkZHJlc3NlcyB0aGUgbGVuZ3RoIGRpc2NyZXBhbmN5LCBjb3JyZWN0aW5nIHRoZSBpbmNvcnJlY3QgdXNhZ2Ugb2YgYHNrYi1cdTAwM2VsZW5gIHdpdGggYHJ4X3NrYi1cdTAwM2VsZW5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXguIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIGZvciB2dWxuZXJhYmlsaXR5IGFuYWx5c2lzIHVzaW5nIFVTQiBnYWRnZXQgZnV6emluZywgZ2l2ZW4gdGhlIHByZXNlbmNlIG9mIHRoZSBgTVdJRklFWF9VU0JgIGNvbmZpZ3VyYXRpb24uXG5cblRoZXJlZm9yZSwgdGhlIHJlc3VsdHMgYXJlIHJlYWR5OlxuXG4qICAgKipXb3J0aEZ1enppbmc6IFRydWUqKiAoZHVlIHRvIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgVVNCIHN1cHBvcnQpXG4qICAgKipGb2N1c1N5bWJvbHM6KiogKGFzIGxpc3RlZCBhYm92ZSlcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1XSUZJRVhgLCBgTVdJRklFWF9VU0JgXG5cblRoZSBwYXRjaCBhZGRyZXNzZXMgYSBsZW5ndGgtcmVsYXRlZCBidWcgaW4gdGhlIEEtTVNEVSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHdpdGhpbiB0aGUgTWFydmVsbCBXaUZpLUV4IGRyaXZlciwgc3BlY2lmaWNhbGx5IHdoZW4gY2FsbGluZyBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYC4gVGhlIGJ1ZyBjYW4gYmUgcmVwcm9kdWNlZCB1c2luZyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNTMsIk91dHB1dFRva2VucyI6MTk4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDEwOjUwOjE5LjIwNzc1OTQwNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTM2MjQ1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVdJRklFWFwiLFxuICAgIFwiTVdJRklFWF9VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdFwiLFxuICAgIFwibXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lXCIsXG4gICAgXCJtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldFwiLFxuICAgIFwibXdpZmlleF9wcm9jZXNzX3VhcF9yeF9wYWNrZXRcIixcbiAgICBcIm13aWZpZXhfaGFuZGxlX3J4X3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBNYXJ2ZWxsIFdpRmktRXggZHJpdmVyIHdoZXJlIHRoZSB3cm9uZyBza2IgbGVuZ3RoIHdhcyBwYXNzZWQgdG8gYG13aWZpZXhfcHJvY2Vzc190ZGxzX2FjdGlvbl9mcmFtZWAgd2hlbiBwcm9jZXNzaW5nIEEtTVNEVSBwYWNrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIFRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGludGVyZmFjZXMgKGBNV0lGSUVYX1VTQmApLCBzbyBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIFVTQiBnYWRnZXQgZW11bGF0aW9uICh2aGNpKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNV0lGSUVYXCIsXG4gICAgXCJNV0lGSUVYX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0XCIsXG4gICAgXCJtd2lmaWV4X3Byb2Nlc3NfdGRsc19hY3Rpb25fZnJhbWVcIixcbiAgICBcIm13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0XCIsXG4gICAgXCJtd2lmaWV4X3Byb2Nlc3NfdWFwX3J4X3BhY2tldFwiLFxuICAgIFwibXdpZmlleF9oYW5kbGVfcnhfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIE1hcnZlbGwgV2lGaS1FeCBkcml2ZXIgd2hlcmUgdGhlIHdyb25nIHNrYiBsZW5ndGggd2FzIHBhc3NlZCB0byBgbXdpZmlleF9wcm9jZXNzX3RkbHNfYWN0aW9uX2ZyYW1lYCB3aGVuIHByb2Nlc3NpbmcgQS1NU0RVIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gVGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgaW50ZXJmYWNlcyAoYE1XSUZJRVhfVVNCYCksIHNvIGl0IGNhbiBiZSBmdXp6ZWQgdXNpbmcgVVNCIGdhZGdldCBlbXVsYXRpb24gKHZoY2kpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhhcsn[1] Phase: Succeeded StartedAt: 2026-07-29 10:50:31 +0000 UTC FinishedAt: 2026-07-29 10:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 10:50:31 +0000 UTC FinishedAt: 2026-07-29 10:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2] Phase: Succeeded StartedAt: 2026-07-29 10:50:31 +0000 UTC FinishedAt: 2026-07-29 11:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-29 10:50:31 +0000 UTC FinishedAt: 2026-07-29 11:41:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-29 10:50:31 +0000 UTC FinishedAt: 2026-07-29 10:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-29 10:50:31 +0000 UTC FinishedAt: 2026-07-29 10:50:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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-workflowhhcsn/series-workflowhhcsn-convert-artifact-693692522/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-29 10:50:41 +0000 UTC FinishedAt: 2026-07-29 11:11:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-29 10:50:41 +0000 UTC FinishedAt: 2026-07-29 11:11:09 +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:*8847c3fa-3187-4928-a736-b916d7cfaac2,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-workflowhhcsn/series-workflowhhcsn-convert-artifact-693692522/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": "5492f224-f2db-453d-b46d-186bcadc2c1a", "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-workflowhhcsn/series-workflowhhcsn-build-action-3698826968/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-29 10:50:41 +0000 UTC FinishedAt: 2026-07-29 11:10: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:*8847c3fa-3187-4928-a736-b916d7cfaac2,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-workflowhhcsn/series-workflowhhcsn-convert-artifact-693692522/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": "5492f224-f2db-453d-b46d-186bcadc2c1a", "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-workflowhhcsn/series-workflowhhcsn-build-action-3698826968/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-29 11:11:09 +0000 UTC FinishedAt: 2026-07-29 11:11:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-29 11:11:09 +0000 UTC FinishedAt: 2026-07-29 11:11:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-29 11:11:09 +0000 UTC FinishedAt: 2026-07-29 11:11:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-29 11:11:09 +0000 UTC FinishedAt: 2026-07-29 11:11:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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-workflowhhcsn/series-workflowhhcsn-convert-artifact-1952213893/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-29 11:11:19 +0000 UTC FinishedAt: 2026-07-29 11:13:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-29 11:11:19 +0000 UTC FinishedAt: 2026-07-29 11:12:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5492f224-f2db-453d-b46d-186bcadc2c1a,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-workflowhhcsn/series-workflowhhcsn-build-action-3698826968/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-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-29 11:13:07 +0000 UTC FinishedAt: 2026-07-29 11:13:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-29 11:13:07 +0000 UTC FinishedAt: 2026-07-29 11:13:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-29 11:13:07 +0000 UTC FinishedAt: 2026-07-29 11:38:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-29 11:13:07 +0000 UTC FinishedAt: 2026-07-29 11:38:02 +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:*8847c3fa-3187-4928-a736-b916d7cfaac2,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-workflowhhcsn/series-workflowhhcsn-convert-artifact-1952213893/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": "269d88eb-28bf-4d60-89c7-434c126ba98f", "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-workflowhhcsn/series-workflowhhcsn-build-action-3314093777/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-29 11:13:07 +0000 UTC FinishedAt: 2026-07-29 11:37:52 +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:*8847c3fa-3187-4928-a736-b916d7cfaac2,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-workflowhhcsn/series-workflowhhcsn-convert-artifact-1952213893/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": "269d88eb-28bf-4d60-89c7-434c126ba98f", "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-workflowhhcsn/series-workflowhhcsn-build-action-3314093777/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-29 11:38:02 +0000 UTC FinishedAt: 2026-07-29 11:38:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-29 11:38:02 +0000 UTC FinishedAt: 2026-07-29 11:38:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-29 11:38:02 +0000 UTC FinishedAt: 2026-07-29 11:40:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-29 11:38:02 +0000 UTC FinishedAt: 2026-07-29 11:39:56 +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:*269d88eb-28bf-4d60-89c7-434c126ba98f,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-workflowhhcsn/series-workflowhhcsn-build-action-3314093777/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-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-29 11:40:08 +0000 UTC FinishedAt: 2026-07-29 11:40:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-29 11:40:09 +0000 UTC FinishedAt: 2026-07-29 11:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-29 11:40:09 +0000 UTC FinishedAt: 2026-07-29 11:41:41 +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":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"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:*5492f224-f2db-453d-b46d-186bcadc2c1a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*269d88eb-28bf-4d60-89c7-434c126ba98f,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-workflowhhcsn/series-workflowhhcsn-build-action-3698826968/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-workflowhhcsn/series-workflowhhcsn-build-action-3314093777/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-29 11:40:09 +0000 UTC FinishedAt: 2026-07-29 11:40:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-29 11:40:09 +0000 UTC FinishedAt: 2026-07-29 11:40:24 +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":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"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-workflowhhcsn/series-workflowhhcsn-convert-artifact-566244106/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-29 11:40:09 +0000 UTC FinishedAt: 2026-07-29 11:40:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-29 11:40:09 +0000 UTC FinishedAt: 2026-07-29 11:40:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-29 11:40:32 +0000 UTC FinishedAt: 2026-07-29 11:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhcsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_11n_rx_reorder_pkt","mwifiex_process_tdls_action_frame","mwifiex_process_sta_rx_packet","mwifiex_process_uap_rx_packet","mwifiex_handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"70c87716-e10f-41ba-a42e-6726ac77caca","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-29 11:40:32 +0000 UTC FinishedAt: 2026-07-29 11:41:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5492f224-f2db-453d-b46d-186bcadc2c1a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*269d88eb-28bf-4d60-89c7-434c126ba98f,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-workflowhhcsn/series-workflowhhcsn-build-action-3698826968/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-workflowhhcsn/series-workflowhhcsn-build-action-3314093777/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-workflowhhcsn/series-workflowhhcsn-convert-artifact-566244106/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,}