Name: series-workflowgj69g Phase: Succeeded StartedAt: 2026-07-29 00:20:38 +0000 UTC FinishedAt: 2026-07-29 02:56:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[0] Phase: Succeeded StartedAt: 2026-07-29 00:20:38 +0000 UTC FinishedAt: 2026-07-29 00:52:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 00:20:38 +0000 UTC FinishedAt: 2026-07-29 00:52:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b515dc54795ef370be3cb396e7c12ad91686b6d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_IPTFS", "XFRM", "XFRM_USER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b515dc54795ef370be3cb396e7c12ad91686b6d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_IPTFS", "XFRM", "XFRM_USER" ], "series_id": "7c5b8a00-1dd8-4088-a2ae-341cb7fead36" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "iptfs_input", "iptfs_output_collect", "iptfs_prepare_output", "iptfs_user_init" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OywKICAgICYjMzQ7WEZSTSYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHRmc19pbnB1dCYjMzQ7LAogICAgJiMzNDtpcHRmc19vdXRwdXRfY29sbGVjdCYjMzQ7LAogICAgJiMzNDtpcHRmc19wcmVwYXJlX291dHB1dCYjMzQ7LAogICAgJiMzNDtpcHRmc191c2VyX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGtgIGJ5IGFkZGluZyBhIGJvdW5kcyBjaGVjayBpbiBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtYWluIGVudHJ5IHBvaW50cyBvZiB0aGUgWEZSTSBJUFRGUyBtb2RlLCBzdWNoIGFzIGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRfY29sbGVjdGAsIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGFuZCBgaXB0ZnNfdXNlcl9pbml0YC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE3NTUyYzE5ZjhjN2MxNGE1ZGQ5NTVjYWUxMDJjNGNhNjNmMGNlZmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAwMDo1MDozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLjJjZTE1YzQ3MmNjNGQgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTQxNiw2ICYjNDM7NDE2LDE0IEBAIHN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSB8fCBza2ItXHUwMDNlcHBfcmVjeWNsZSAhPSB3YWxrLVx1MDAzZXBwX3JlY3ljbGUpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHQvKiBSZWplY3QgYW4gQG9mZnNldCB0aGF0IGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJiMzOTtzIGRhdGFcbiYjNDM7XHQgKiBiZWZvcmUgY2FsbGluZyBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKCksIHdob3NlIGZyYWdtZW50LWFkdmFuY2VcbiYjNDM7XHQgKiBsb29wIGlzIG90aGVyd2lzZSB1bmJvdW5kZWQgYW5kIHdvdWxkIGluZGV4IHBhc3Qgd2Fsay1cdTAwM2VmcmFnc1tdLlxuJiM0MztcdCAqIFRoaXMgbWlycm9ycyB0aGUgZ3VhcmQgYWxyZWFkeSBwcmVzZW50IGluIGlwdGZzX3NrYl9hZGRfZnJhZ3MoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXdhbGstXHUwMDNlbnJfZnJhZ3MgfHwgb2Zmc2V0IFx1MDAzZT0gd2Fsay1cdTAwM2V0b3RhbCAmIzQzOyB3YWxrLVx1MDAzZWluaXRpYWxfb2Zmc2V0KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdC8qIE1ha2Ugb2Zmc2V0IHJlbGF0aXZlIHRvIGN1cnJlbnQgZnJhZyBhZnRlciBzZXR0aW5nIHRoYXQgKi9cbiBcdG9mZnNldCA9IGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsod2Fsaywgb2Zmc2V0KTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTV9JUFRGUyYjMzQ7LAogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdGZzX2lucHV0JiMzNDssCiAgICAmIzM0O2lwdGZzX291dHB1dF9jb2xsZWN0JiMzNDssCiAgICAmIzM0O2lwdGZzX3ByZXBhcmVfb3V0cHV0JiMzNDssCiAgICAmIzM0O2lwdGZzX3VzZXJfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsa2AgYnkgYWRkaW5nIGEgYm91bmRzIGNoZWNrIGluIGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVAtVEZTL0FHR0ZSQUcgZW5jYXBzdWxhdGlvbiBzdXBwb3J0IGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1haW4gZW50cnkgcG9pbnRzIG9mIHRoZSBYRlJNIElQVEZTIG1vZGUsIHN1Y2ggYXMgYGlwdGZzX2lucHV0YCwgYGlwdGZzX291dHB1dF9jb2xsZWN0YCwgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCwgYW5kIGBpcHRmc191c2VyX2luaXRgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTc1NTJjMTlmOGM3YzE0YTVkZDk1NWNhZTEwMmM0Y2E2M2YwY2VmYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDI5IDAwOjUwOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pcHRmcy5jIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jCmluZGV4IDU5N2FlZGVhYzI2ZWIuLjJjZTE1YzQ3MmNjNGQgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2lwdGZzLmMKQEAgLTQxNiw2ICYjNDM7NDE2LDE0IEBAIHN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikgfHwgc2tiLSZndDtwcF9yZWN5Y2xlICE9IHdhbGstJmd0O3BwX3JlY3ljbGUpCiAJCXJldHVybiBmYWxzZTsKIAomIzQzOwkvKiBSZWplY3QgYW4gQG9mZnNldCB0aGF0IGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJiMzOTtzIGRhdGEKJiM0MzsJICogYmVmb3JlIGNhbGxpbmcgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2FsaygpLCB3aG9zZSBmcmFnbWVudC1hZHZhbmNlCiYjNDM7CSAqIGxvb3AgaXMgb3RoZXJ3aXNlIHVuYm91bmRlZCBhbmQgd291bGQgaW5kZXggcGFzdCB3YWxrLSZndDtmcmFnc1tdLgomIzQzOwkgKiBUaGlzIG1pcnJvcnMgdGhlIGd1YXJkIGFscmVhZHkgcHJlc2VudCBpbiBpcHRmc19za2JfYWRkX2ZyYWdzKCkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXdhbGstJmd0O25yX2ZyYWdzIHx8IG9mZnNldCAmZ3Q7PSB3YWxrLSZndDt0b3RhbCAmIzQzOyB3YWxrLSZndDtpbml0aWFsX29mZnNldCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAkvKiBNYWtlIG9mZnNldCByZWxhdGl2ZSB0byBjdXJyZW50IGZyYWcgYWZ0ZXIgc2V0dGluZyB0aGF0ICovCiAJb2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IFhGUk0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgYWRkZWQgYSBjcnVjaWFsIGNoZWNrIHdpdGhpbiBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgOiBhIGd1YXJkIGFnYWluc3QgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBjb2RlIHNuaXBwZXQgc3BlY2lmaWNhbGx5IGNoZWNrcyBpZiB0aGUgcHJvdmlkZWQgYEBvZmZzZXRgIGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJiMzOTtzIGRhdGEuIFRoaXMgcHJldmVudHMgYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGtgIGZyb20gZ29pbmcgaGF5d2lyZSB3aXRoIGl0cyBmcmFnbWVudCBpbmRleGluZywgd2hpY2ggY291bGQgbGVhZCB0byBtYWpvciBpc3N1ZXMuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBhIHZ1bG5lcmFiaWxpdHkuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgY2hhbmdlLCBhIGdvb2QgbmV4dCBzdGVwIGlzIHRvIGluaXRpYXRlIGEgZnV6emluZyBjYW1wYWlnbiBhZ2FpbnN0IGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgYW5kIHRoZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGludm9sdmVkLiBEaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZSBpcyBuZWNlc3NhcnkgdG8gZGlzY292ZXIgdGhlIGVudHJ5IHBvaW50cyB0byBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLCB3aGljaCYjMzk7bGwgaGVscCBtZSBidWlsZCB0YXJnZXRlZCBmdXp6IGlucHV0cy4gVGhlbiwgSSBjYW4gZm9jdXMgb24gaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCB0byB0cmlnZ2VyIHRoZSB2dWxuZXJhYmxlIGNvZGUgcGF0aC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUga2V5IHRvIGRlc2lnbmluZyBlZmZpY2llbnQgZnV6emluZyBzY2VuYXJpb3MgYW5kIHRob3JvdWdobHkgdGVzdGluZyB0aGUgcGF0Y2gmIzM5O3MgZWZmaWNhY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTM4MD1zdGF0aWMgdTMyIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwMC0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0MDE6ICogaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoKSAtIGNoZWNrIGlmIG9rIHRvIGFkZCBmcmFncyBmcm9tIHdhbGsgdG8gc2tiXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDAyLSAqIEBza2I6IHNrYiB0byBjaGVjayBmb3IgYWRkaW5nIGZyYWdzIHRvXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwOC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0MDk6c3RhdGljIGJvb2wgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MTAtXHRcdFx0XHQgICAgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ1OC0gKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ1OTogKiBpcHRmc19za2JfY2FuX2FkZF9mcmFncygpIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gdG8gdmVyaWZ5XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDYwLSAqIHRoYXQgdGhlIGRlc3RpbmF0aW9uIEBza2IgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSB3YWxrIGFuZCBoYXMgc3BhY2UgaW4gdGhlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTU0MT1pcHRmc19wc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2Fsayxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTUwLVx0LyogdGhpcyBzaG91bGQgbm90IG5vcm1hbGx5IGJlIGhhcHBlbmluZyAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjU1MTpcdGlmICghaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3Moc2tiLCB3YWxrLCBvZmYgJiM0MzsgY29weV9sZW4sXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTUyLVx0XHRcdFx0ICAgICBsZW4gLSBjb3B5X2xlbikpIHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzUwPXN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkwOS1cdGlmIChmcmFnd2FsayBcdTAwMjZcdTAwMjZcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5MTA6XHQgICAgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MobmV3c2tiLCBmcmFnd2FsaywgZGF0YSwgY29weWxlbikpIHtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MTEtXHRcdGlwdGZzX3NrYl9hZGRfZnJhZ3MobmV3c2tiLCBmcmFnd2FsaywgZGF0YSwgY29weWxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIGB4ZnJtX2lwdGZzLmNgIC0gYSBEZWVwZXIgTG9vayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYGlwdGZzYCBzeXN0ZW0gaGFuZGxlcyBwYWNrZXQgZnJhZ21lbnRhdGlvbi4gVGhlIGZ1bmN0aW9uIGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2AgaXMgY2xlYXJseSBhIGNyaXRpY2FsIGNvbXBvbmVudC4gSXTigJlzIGJlaW5nIGNhbGxlZCBmcm9tIGJvdGggYGlwdGZzX3Bza2JfYWRkX2ZyYWdzYCwgd2hpY2ggbGlrZWx5IGRlYWxzIHdpdGggcHJlLWV4aXN0aW5nIGZyYWdtZW50ZWQgcGFja2V0cywgYW5kIGBpcHRmc19yZWFzc2VtX2NvbnRgLCB3aGljaCBwcm9iYWJseSBoYW5kbGVzIHRoZSAqcmVhc3NlbWJseSogb2YgZnJhZ21lbnRzLiBUaGlzIHRlbGxzIG1lIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgY29kZSBpbiB0aGF0IGZpbGUsIGNoZWNraW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBvdmVyYWxsIGltcGFjdCBvZiB0aG9zZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBsZXZlcnMgSSBjYW4gdHdlYWshCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9pcHRmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgJiM0Mzs9IHhmcm1faW50ZXJmYWNlLm9cbm5ldC94ZnJtL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19YRlJNX0lQVEZTKSAmIzQzOz0geGZybV9pcHRmcy5vXG5uZXQveGZybS9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgJiM0Mzs9IGVzcGludGNwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFhGUk1fSVBURlMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgYFhGUk1fSVBURlNgIGNvbmZpZyBpcyBhY3RpdmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsaWVzIG9uLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzIG9yIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgKm11c3QqIGJlIGVuYWJsZWQgZm9yIGBYRlJNX0lQVEZTYCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFdoYXQgY291bGQgZ28gd3JvbmcgaWYgdGhvc2UgYXJlIG1pc3Npbmcgb3IgbWlzY29uZmlndXJlZD8gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHF1aWNrbHkgaWRlbnRpZnlpbmcgYW5kIGVsaW1pbmF0aW5nIGFueSBwb3RlbnRpYWwgcm9hZGJsb2NrcyBvciBjb21wYXRpYmlsaXR5IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uLCBzbyBJIHdhbnQgdG8ga25vdyBleGFjdGx5IHdoYXQgaXRzIGZ1bmN0aW9uYWwgcmVxdWlyZW1lbnRzIGFyZS4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhvc2UgcmVsYXRpb25zaGlwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9JUFRGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTQwLVxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcbm5ldC94ZnJtL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFhGUk0gS2NvbmZpZyBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQveGZybS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTQxLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBYRlJNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBzd2l0Y2hlcyB0aGF0IGRldGVybWluZSB3aGljaCBYRlJNIGZ1bmN0aW9uYWxpdGllcyBhcmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgbGlrZWx5IHRoZXJlJiMzOTtzIGEgZGVwZW5kZW5jeSBjaGFpbiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCB0aGlzIHNlY3Rpb24gaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgd2hpY2ggWEZSTSBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIG1vZHVsZXMuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGdyYW51bGFyIGNvbnRyb2xzLCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBvdGhlciBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgbmV3IG9wdGlvbnMgdGhhdCBtaWdodCBoYXZlIGJlZW4gYWRkZWQgc2luY2UgdGhlIGxhc3QgdGltZSBJIGR1ZyBpbnRvIHRoaXMgYXJlYS4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGtub2JzIGZvciBYRlJNIGluIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTM1Olx0XHQgIGNoYW5nZSB0aGVpciBhdHRhY2htZW50IHBvaW50IHRvIHRoZSBJbnRlcm5ldC4gIERldGFpbFxuIDEzNjpcdFx0ICBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIGludGVybmV0LWRyYWZ0XG4gMTM3Olx0XHQgIFx1MDAzY2RyYWZ0LXN1Z2ltb3RvLW1pcDYtcGZrZXktbWlncmF0ZVx1MDAzZS5cbiAxMzg6XHRcbiAxMzk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNDA6XHRcbiAxNDE6XHRjb25maWcgWEZSTV9JUFRGU1xuIDE0MjpcdFx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiAxNDM6XHRcdGRlcGVuZHMgb24gWEZSTVxuIDE0NDpcdFx0aGVscFxuIDE0NTpcdFx0ICBJbmZvcm1hdGlvbiBvbiB0aGUgSVAtVEZTL0FHR0ZSQUcgZW5jYXBzdWxhdGlvbiBjYW4gYmUgZm91bmRcbiAxNDY6XHRcdCAgaW4gUkZDIDkzNDcuIFRoaXMgZmVhdHVyZSBzdXBwb3J0cyBkZW1hbmQgZHJpdmVuIChpLmUuLFxuIDE0NzpcdFx0ICBub24tY29uc3RhbnQgc2VuZCByYXRlKSBJUC1URlMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlXG4gMTQ4Olx0XHQgIEFHR0ZSQUcgRVNQIHBheWxvYWQgZW5jYXBzdWxhdGlvbi4gVGhpcyBwYXlsb2FkIHR5cGVcbiAxNDk6XHRcdCAgc3VwcG9ydHMgYWdncmVnYXRpb24gYW5kIGZyYWdtZW50YXRpb24gb2YgdGhlIGlubmVyIElQXG4gMTUwOlx0XHQgIHBhY2tldCBzdHJlYW0gd2hpY2ggaW4gdHVybiB5aWVsZHMgaGlnaGVyIHNtYWxsLXBhY2tldFxuIDE1MTpcdFx0ICBiYW5kd2lkdGggYXMgd2VsbCBhcyByZWR1Y2luZyBNVFUvUE1UVSBpc3N1ZXMuIENvbmdlc3Rpb25cbiAxNTI6XHRcdCAgY29udHJvbCBpcyB1bmltcGxlbWVudGF0ZWQgYXMgdGhlIHNlbmQgcmF0ZSBpcyBkZW1hbmQgZHJpdmVuXG4gMTUzOlx0XHQgIHJhdGhlciB0aGFuIGNvbnN0YW50LlxuIDE1NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjYxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlhGUk0gJmFtcDsgSVBURlMgRnV6emluZyBTdHJhdGVneSoqCgpSaWdodCwgdGhpcyBoaW5nZXMgb24gYFhGUk1gLiBUaGF0JiMzOTtzIHRoZSBjb3JlLiBTbyBJJiMzOTttIHRoaW5raW5nLCBzcGVjaWZpY2FsbHksIEkgbmVlZCBib3RoIGBYRlJNX0lQVEZTYCBhbmQgYFhGUk1gIGVuYWJsZWQgdG8gZXZlbiBiZWdpbi4gVGhvc2UgYXJlIHRoZSBwcmVyZXF1aXNpdGVzLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGF0dGFjayBwb2ludHMgZm9yIGZ1enppbmcuIFdoZXJlIGRvIEkgZmluZCB0aGUgZW50cnkgcG9pbnRzIHRvIHN0YXJ0IHRocm93aW5nIGp1bmsgYXQgdGhlIHN5c3RlbT8KCk9rYXksIGBpcHRmc19yZWFzc2VtX2NvbnRgIGxvb2tzIHByb21pc2luZy4gVGhhdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggb2Z0ZW4gbWVhbnMgaXQmIzM5O3MgcHJldHR5IGNvbnRhaW5lZC4gVGhhdCYjMzk7cyBnb29kIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlIC0gbWFrZXMgaXQgZWFzaWVyIHRvIHRyYWNrLiBOb3cgSSBqdXN0IG5lZWQgdG8gZmluZCBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGlwdGZzX3JlYXNzZW1fY29udGAuIFNlZSB3aGVyZSB0aGF0IGNhbiBnZXQgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdGZzX3JlYXNzZW1fY29udCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9NzMwPXN0YXRpYyB2b2lkIGlwdGZzX3JlYXNzZW1fZG9uZShzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzUtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzM2OiAqIGlwdGZzX3JlYXNzZW1fY29udCgpIC0gQ29udGludWUgdGhlIHJlYXNzZW1ibHkgb2YgYW4gaW5uZXIgcGFja2V0cy5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzctICogQHh0ZnM6IHh0ZnMgc3RhdGVcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzQ5LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1MDpzdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc1MS1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTEyMjY9c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfb3JkZXJlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI4Ny1cdFx0aWYgKGJsa29mZiB8fCB4dGZzLVx1MDAzZXJhX3J1bnRsZW4gfHwgeHRmcy1cdTAwM2VyYV9uZXdza2IpIHtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjg4Olx0XHRcdGRhdGEgPSBpcHRmc19yZWFzc2VtX2NvbnQoeHRmcywgc2VxLCBcdTAwMjZza2JzZXEsIHNrYiwgZGF0YSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjg5LVx0XHRcdFx0XHRcdCAgYmxrb2ZmLCBcdTAwMjZzdWJsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBpcHRmc2AgTmV0d29yayBGbG93KioKCk9rYXksIHNvIGBpcHRmc19pbnB1dF9vcmRlcmVkYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyB0aGluZ3Mgb2ZmLCBhbmQgZnJvbSB3aGF0IEkgc2VlLCBpdCBpbW1lZGlhdGVseSBoYW5kcyB0aGluZ3Mgb3ZlciB0byBgaXB0ZnNfcmVhc3NlbV9jb250YC4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyAqY2FsbGluZyogYGlwdGZzX2lucHV0X29yZGVyZWRgLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgZmlyc3Qgc3RlcCB3aGVuIHRyeWluZyB0byBmb2xsb3cgYSBzaWduYWwsIHJpZ2h0PyBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGl0IGJhY2sgdXAgdGhlIGNhbGwgc3RhY2sgdG8gc2VlIHdoZXJlIHRoZSBkYXRhIG9yIHRoZSB0cmlnZ2VyIGlzIG9yaWdpbmF0aW5nLiBLbm93aW5nIGl0cyBwYXJlbnRzIHdpbGwgcHJvdmlkZSBpbXBvcnRhbnQgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBmZWVkaW5nIGRhdGEgaW50byB0aGlzIHByb2Nlc3MgYW5kIHdoYXQgdGhlIHVsdGltYXRlIGdvYWxzIG9mIHRoaXMgZmxvdyBhcmUuIFNvLCBsZXQmIzM5O3MgZXhwbG9yZSB0aGUgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfaW5wdXRfb3JkZXJlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9OTUxPXN0YXRpYyBib29sIF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgZGF0YSxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIxOS0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjIwOiAqIGlwdGZzX2lucHV0X29yZGVyZWQoKSAtIGhhbmRsZSBuZXh0IGluIG9yZGVyIElQVEZTIHBheWxvYWQuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIyMS0gKiBAeDogeGZybSBzdGF0ZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjI1LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMjY6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfb3JkZXJlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjI3LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTY3Nj1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZHJvcF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDctXHRcdFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzA4Olx0XHRcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzA5LVx0XHR9XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE3MjU9c3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczMi1cdGlmICh4dGZzLVx1MDAzZWNmZy5yZW9yZGVyX3dpbl9zaXplID09IDApIHtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzMzOlx0XHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczNC1cdFx0Z290byBkb25lO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ4LVx0XHRza2JfbGlzdF9kZWxfaW5pdChza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDk6XHRcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzUwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTc1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqRGl2aW5nIGludG8gYGlwdGZzX2lucHV0YCoqCgpPa2F5LCBzbyBgaXB0ZnNfaW5wdXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBJdCYjMzk7cyB0aGUgZnJvbnQgZG9vciwgdGhlIGZpcnN0IGZ1bmN0aW9uIHRoYXQmIzM5O3MgbGlrZWx5IGNhbGxlZCB3aGVuIGEgY2VydGFpbiBwcm9jZXNzIGlzIGFjdGl2ZS4gVG8gdHJ1bHkgdW5kZXJzdGFuZCBpdHMgcm9sZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBfY2FsbHNfIGBpcHRmc19pbnB1dGAuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBpbGx1bWluYXRlIGl0cyBwdXJwb3NlLCBpdHMgY29udGV4dCwgYW5kIHdoYXQgZGF0YSBpdCYjMzk7cyBsaWtlbHkgb3BlcmF0aW5nIG9uLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIGNhbGxlZCBzbyB0aGF0IEkgY2FuIGZpZ3VyZSBvdXQgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9NTg2PWlwdGZzX3Bza2JfZXh0cmFjdF9zZXEodTMyIHNrYmxlbiwgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCB1MzIgb2ZmLCBpbnQgbGVuKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MDAtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjAxOiAqIGlwdGZzX2lucHV0X3NhdmVfcnVudCgpIC0gc2F2ZSBkYXRhIGluIHh0ZnMgcnVudCBzcGFjZS5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MDItICogQHh0ZnM6IHh0ZnMgc3RhdGVcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjA5LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjYxMDpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9zYXZlX3J1bnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MTEtXHRcdFx0XHQgIHU4ICpidWYsIGludCBsZW4pXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTk1MT1zdGF0aWMgYm9vbCBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIGRhdGEsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMDEtXHRcdFx0XHQvKiBzYXZlIHRoZSBieXRlcyB3ZSBoYXZlLCBhZHZhbmNlIGRhdGEgYW5kIGV4aXQgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDAyOlx0XHRcdFx0aXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHh0ZnMsIHNlcSwgaGJ5dGVzLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMDMtXHRcdFx0XHRcdFx0ICAgICAgcmVtYWluaW5nKTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAyMC1cdFx0XHRcdC8qIHNhdmUgdGhlIGJ5dGVzIHdlIGhhdmUsIGFkdmFuY2UgZGF0YSBhbmQgZXhpdCAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjEwMjE6XHRcdFx0XHRpcHRmc19pbnB1dF9zYXZlX3J1bnQoeHRmcywgc2VxLCBoYnl0ZXMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAyMi1cdFx0XHRcdFx0XHQgICAgICByZW1haW5pbmcpO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjE5LS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMjA6ICogaXB0ZnNfaW5wdXRfb3JkZXJlZCgpIC0gaGFuZGxlIG5leHQgaW4gb3JkZXIgSVBURlMgcGF5bG9hZC5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjIxLSAqIEB4OiB4ZnJtIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjUtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTIyNjpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjcte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xNDgyPXN0YXRpYyB2b2lkIF9fcmVvcmRlcl9mdXR1cmVfc2hpZnRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MjctICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTYyODpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9yZW9yZGVyKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYyOS1cdFx0XHRcdHN0cnVjdCBza19idWZmICppbnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTY3Nj1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZHJvcF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDctXHRcdFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzA4Olx0XHRcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzA5LVx0XHR9XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MTUtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcxNjogKiBpcHRmc19pbnB1dCgpIC0gaGFuZGxlIHJlY2VpcHQgb2YgaXB0ZnMgcGF5bG9hZFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MTctICogQHg6IHhmcm0gc3RhdGVcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcyNC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzI1OnN0YXRpYyBpbnQgaXB0ZnNfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcyNi17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzItXHRpZiAoeHRmcy1cdTAwM2VjZmcucmVvcmRlcl93aW5fc2l6ZSA9PSAwKSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTczMzpcdFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzQtXHRcdGdvdG8gZG9uZTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc0My1cdHNwaW5fbG9jayhcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfbG9jayk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc0NDpcdGlwdGZzX2lucHV0X3Jlb3JkZXIoeHRmcywgc2tiLCBcdTAwMjZsaXN0LCBcdTAwMjZmcmVlbGlzdCk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc0NS1cdHNwaW5fdW5sb2NrKFx1MDAyNnh0ZnMtXHUwMDNlZHJvcF9sb2NrKTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc0OC1cdFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzQ5Olx0XHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc1MC1cdH1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc2OD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzYtXHQuZ2V0X2lubmVyX210dSA9IGlwdGZzX2dldF9pbm5lcl9tdHUsXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3NzpcdC5pbnB1dCA9IGlwdGZzX2lucHV0LFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzgtXHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIElQVEZTIENhbGxiYWNrIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBgaXB0ZnNfaW5wdXRgIGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aGluIGBpcHRmc19tb2RlX2Nic2AuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMgaW50ZXJhY3Rpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKndoYXQgZWxzZSogaXMgaGFuZ2luZyBvdXQgaW4gYGlwdGZzX21vZGVfY2JzYD8gVW5kZXJzdGFuZGluZyB0aGUgZW50aXJlIGNvbnRleHQgb2YgdGhhdCBjYWxsYmFjayBzdHJ1Y3R1cmUgaXMgdGhlIGtleSB0byBzZWVpbmcgaG93IHRoaXMgYGlwdGZzX2lucHV0YCBmdW5jdGlvbiBmaXRzIGluIGFuZCB3aGF0IGl0cyByZWxhdGlvbnNoaXBzIGFyZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gZ2V0IGEgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIHRoYXQgc3RydWN0dXJlIGNvbnRhaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19tb2RlX2NicyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9MjczMj1zdGF0aWMgdm9pZCBpcHRmc19kZXN0cm95X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzY3LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3Njg6c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NjktXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc4Mj1zdGF0aWMgaW50IF9faW5pdCB4ZnJtX2lwdGZzX2luaXQodm9pZClcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc4Ny1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzg4Olx0ZXJyID0geGZybV9yZWdpc3Rlcl9tb2RlX2NicyhYRlJNX01PREVfSVBURlMsIFx1MDAyNmlwdGZzX21vZGVfY2JzKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzg5LVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkZvY3VzaW5nIEZ1enppbmcgRWZmb3J0cyBmb3IgWEZSTV9NT0RFX0lQVEZTKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCBzZWVtcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIGBYRlJNX01PREVfSVBURlNgIGFyZSB0aGUgaW5wdXQgYW5kIG91dHB1dCBjYWxsYmFja3M6IHNwZWNpZmljYWxseSwgYGlwdGZzX2lucHV0YCBhbmQgYGlwdGZzX291dHB1dF9jb2xsZWN0YC4gR2l2ZW4gdGhhdCwgZnV6emluZyB0aG9zZSB0d28gZnVuY3Rpb25zIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBhcHByb2FjaCB0byB1bmNvdmVyIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRoZXkmIzM5O3JlIGxpa2VseSB0aGUgYXJlYXMgd2hlcmUgdGhlIG1vc3QgY29tcGxleCBsb2dpYyByZXNpZGVzIHJlbGF0ZWQgdG8gdGhpcyBtb2RlLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBJJiMzOTttIG92ZXJsb29raW5nLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBidXQgdGhlc2UgYXJlIHRoZSBvYnZpb3VzIGluaXRpYWwgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfb3V0cHV0X2NvbGxlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTE4MTY9c3RhdGljIGludCBpcHRmc19pc190b29fYmlnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBtdHUpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4NDAtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTg0MTpzdGF0aWMgaW50IGlwdGZzX291dHB1dF9jb2xsZWN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4NDIte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3Ny1cdC5pbnB1dCA9IGlwdGZzX2lucHV0LFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3Nzg6XHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3OS1cdC5wcmVwYXJlX291dHB1dCA9IGlwdGZzX3ByZXBhcmVfb3V0cHV0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTE5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBBbm90aGVyIE9uZSEqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgY29kZSwgdHJ5aW5nIHRvIGdldCBhIGdyYXNwIG9uIGl0cyBmdW5jdGlvbi4gSSYjMzk7dmUgYWxyZWFkeSB0YWNrbGVkIGEgZmV3IG90aGVyIGNvbXBvbmVudHMsIGFuZCBub3csICYjMzQ7aXB0ZnNcX3ByZXBhcmVcX291dHB1dCYjMzQ7IGNhdGNoZXMgbXkgZXllLiBUaGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gbmFtZSBnaXZlcyBtZSBhIGhpbnQ7IGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgcHJlcGFyaW5nIHRoZSBvdXRwdXQgZGF0YSwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgSVBGUyBwcm9jZXNzLiBJdCBzb3VuZHMgbGlrZSBhIGNvcmUgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIHdoYXQmIzM5O3MgbmVlZGVkIGZvciB0aGUgZXZlbnR1YWwgcmVzcG9uc2Ugb3IgZGF0YSBzdHJ1Y3R1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoaXMgb25lIGZpdHMgaW50byB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGZvcm1hdHRpbmcgb3Igc3RydWN0dXJpbmcgaW5mb3JtYXRpb24gYmVmb3JlIGl0JiMzOTtzIGRlbGl2ZXJlZCBlbHNld2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdGZzX3ByZXBhcmVfb3V0cHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNDI2PXN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjAtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ2MTogKiBpcHRmc19wcmVwYXJlX291dHB1dCgpIC0gIHByZXBhcmUgdGhlIHNrYiBmb3Igb3V0cHV0XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2Mi0gKiBAeDogeGZybSBzdGF0ZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY5LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0NzA6c3RhdGljIGludCBpcHRmc19wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDcxLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc2OD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzgtXHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3OTpcdC5wcmVwYXJlX291dHB1dCA9IGlwdGZzX3ByZXBhcmVfb3V0cHV0LFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3ODAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ4MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgaXB0ZnNfbW9kZV9jYnNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaXB0ZnNfbW9kZV9jYnNgIHRoaW5nLiBJJiMzOTt2ZSBnb3QgYSBzcGVjaWZpYyB0YXNrIGluIG1pbmQgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGNvbXBvbmVudCBmaXRzIGludG8gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIFNvLCBteSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvICYjMzQ7V2hhdCBlbHNlIGlzIGluIHRoaXM/JiMzNDsuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSwgYW5kIGVmZmljaWVudGx5IGJlZ2luIHRvIGV4cGxvcmUgdGhlIGNvbnRlbnRzIG9mIGBpcHRmc19tb2RlX2Nic2AsIGhvcGVmdWxseSB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBmdW5jdGlvbi4gTXkgbWFpbiBnb2FsIHdpbGwgYmUgdG8gZGV2ZWxvcCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuY3Rpb25hbGl0eSBwcmVzZW50IHdpdGhpbiB0aGlzIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc2OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzY4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xuMjc2OTpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4yNzcwOlx0XHQuaW5pdF9zdGF0ZSA9IGlwdGZzX2luaXRfc3RhdGUsXG4yNzcxOlx0XHQuY2xvbmVfc3RhdGUgPSBpcHRmc19jbG9uZV9zdGF0ZSxcbjI3NzI6XHRcdC5kZXN0cm95X3N0YXRlID0gaXB0ZnNfZGVzdHJveV9zdGF0ZSxcbjI3NzM6XHRcdC51c2VyX2luaXQgPSBpcHRmc191c2VyX2luaXQsXG4yNzc0Olx0XHQuY29weV90b191c2VyID0gaXB0ZnNfY29weV90b191c2VyLFxuMjc3NTpcdFx0LnNhX2xlbiA9IGlwdGZzX3NhX2xlbixcbjI3NzY6XHRcdC5nZXRfaW5uZXJfbXR1ID0gaXB0ZnNfZ2V0X2lubmVyX210dSxcbjI3Nzc6XHRcdC5pbnB1dCA9IGlwdGZzX2lucHV0LFxuMjc3ODpcdFx0Lm91dHB1dCA9IGlwdGZzX291dHB1dF9jb2xsZWN0LFxuMjc3OTpcdFx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXG4yNzgwOlx0fTtcbjI3ODE6XHRcbjI3ODI6XHRzdGF0aWMgaW50IF9faW5pdCB4ZnJtX2lwdGZzX2luaXQodm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk3NQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvcmUgSVBURlMgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIFRoaW5raW5nIGFib3V0IHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGxpa2VseSBsaWUsIGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRfY29sbGVjdGAsIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGFuZCBgaXB0ZnNfdXNlcl9pbml0YCBsb29rIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgcmV2aWV3LiBUaGV5IGFsbCBzZWVtIHRvIHRvdWNoIHVwb24ga2V5IGFyZWFzLiBIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2gsIGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2AgaXMgdXNlZCB3aXRoaW4gYGlwdGZzX3Bza2JfYWRkX2ZyYWdzYCwgYW5kIHRoYXQgaW4gdHVybiBpcyBhbHNvIHVzZWQgYnkgYGlwdGZzX3JlYXNzZW1fY29udGAuCgpOb3csIGlmIEkgdHJhY2UgdGhhdCwgYGlwdGZzX3JlYXNzZW1fY29udGAgaXMgY2FsbGVkIGZyb20gYGlwdGZzX2lucHV0X29yZGVyZWRgLCBhbmQgdGhhdCYjMzk7cyAqYWxzbyogY2FsbGVkIGZyb20gYGlwdGZzX2lucHV0YC4gVGhlcmVmb3JlLCBhZnRlciB0aGlzIGFuYWx5c2lzLCBpdCBzZWVtcyBsaWtlIGBpcHRmc19pbnB1dGAgaXMgbGlrZWx5IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIHRoaXMgd2hvbGUgbW9kaWZpZWQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTWFrZXMgc2Vuc2UuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG15IGltbWVkaWF0ZSBhdHRlbnRpb24gb24gYGlwdGZzX3Bza2JfYWRkX2ZyYWdzYCB0byBzZWUgaG93IGl0IHVzZXMgYGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzYCwgZ2l2ZW4gdGhlIGNhbGwgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfcHNrYl9hZGRfZnJhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTQ2Nj1zdGF0aWMgaW50IGlwdGZzX3NrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTIyLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjUyMzogKiBpcHRmc19wc2tiX2FkZF9mcmFncygpIC0gQ3JlYXRlIGFuZCBhZGQgZnJhZ3MgaW50byBhIG5ldyBza19idWZmLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTUyNC0gKiBAdHBsOiB0ZW1wbGF0ZSB0byBjcmVhdGUgbmV3IHNrYiBmcm9tLlxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01NDA9c3RhdGljIHN0cnVjdCBza19idWZmICpcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1NDE6aXB0ZnNfcHNrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRwbCwgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTQyLVx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgdTMyIGNvcHlfbGVuKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz05NTE9c3RhdGljIGJvb2wgX19pbnB1dF9wcm9jZXNzX3BheWxvYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBkYXRhLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTM2LVx0XHRcdCAgICAvKiBUcnkgY3JlYXRpbmcgc2tiIGFuZCBhZGRpbmcgZnJhZ3MgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMTM3Olx0XHRcdCAgICAhKHNrYiA9IGlwdGZzX3Bza2JfYWRkX2ZyYWdzKGZpcnN0X3NrYiwgZnJhZ3dhbGssXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTEzOC1cdFx0XHRcdFx0XHRcdCBkYXRhLCBjYXB0dXJlbGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgxOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGlzIHBhY2tldCBwcm9jZXNzaW5nIHNjZW5hcmlvOgoKKipJbnB1dCBQYXRoIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBzbyB0aGUgYF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkYCBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoaXMgd2hvbGUgdGhpbmcuIEl0IGFwcGVhcnMgdG8gYmUgdGhlIHdvcmtob3JzZSB0aGF0IGNhbGxzIGBpcHRmc19wc2tiX2FkZF9mcmFnc2AuIEFuZCBJIHNlZSB0aGF0IGBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZGAgaXRzZWxmIGlzIGNhbGxlZCBieSBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAuIEl0IGFsbCBwb2ludHMgdG8gdGhpcyBiZWluZyBzcXVhcmVseSB3aXRoaW4gdGhlIGlucHV0IHBhdGgsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdG8gdGhlIHBhY2tldHMgYXMgdGhleSBjb21lIGluLgoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIG91ciBkdWNrcyBpbiBhIHJvdyBjb25maWd1cmF0aW9uLXdpc2UuIFRoZSBgWEZSTV9JUFRGU2AgZmVhdHVyZSBkZWZpbml0ZWx5IHJlbGllcyBvbiBgWEZSTWAsIHdoaWNoIEkmIzM5O20gZmFtaWxpYXIgd2l0aC4gQnV0IEkmIzM5O20gZ29pbmcgdG8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCBwZXJoYXBzIGxlc3Mgb2J2aW91cywgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgaW4gYSBjcml0aWNhbCBwYXRoIGxpa2UgdGhpcy4gVGltZSBmb3IgYW5vdGhlciBsb29rIGF0IGBuZXQveGZybS9LY29uZmlnYCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBjb3ZlciBhbGwgYmFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0XG4gMTQxOlx0Y29uZmlnIFhGUk1fSVBURlNcbiAxNDI6XHRcdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gMTQzOlx0XHRkZXBlbmRzIG9uIFhGUk1cbiAxNDQ6XHRcdGhlbHBcbiAxNDU6XHRcdCAgSW5mb3JtYXRpb24gb24gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gY2FuIGJlIGZvdW5kXG4gMTQ2Olx0XHQgIGluIFJGQyA5MzQ3LiBUaGlzIGZlYXR1cmUgc3VwcG9ydHMgZGVtYW5kIGRyaXZlbiAoaS5lLixcbiAxNDc6XHRcdCAgbm9uLWNvbnN0YW50IHNlbmQgcmF0ZSkgSVAtVEZTIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZVxuIDE0ODpcdFx0ICBBR0dGUkFHIEVTUCBwYXlsb2FkIGVuY2Fwc3VsYXRpb24uIFRoaXMgcGF5bG9hZCB0eXBlXG4gMTQ5Olx0XHQgIHN1cHBvcnRzIGFnZ3JlZ2F0aW9uIGFuZCBmcmFnbWVudGF0aW9uIG9mIHRoZSBpbm5lciBJUFxuIDE1MDpcdFx0ICBwYWNrZXQgc3RyZWFtIHdoaWNoIGluIHR1cm4geWllbGRzIGhpZ2hlciBzbWFsbC1wYWNrZXRcbiAxNTE6XHRcdCAgYmFuZHdpZHRoIGFzIHdlbGwgYXMgcmVkdWNpbmcgTVRVL1BNVFUgaXNzdWVzLiBDb25nZXN0aW9uXG4gMTUyOlx0XHQgIGNvbnRyb2wgaXMgdW5pbXBsZW1lbnRhdGVkIGFzIHRoZSBzZW5kIHJhdGUgaXMgZGVtYW5kIGRyaXZlblxuIDE1MzpcdFx0ICByYXRoZXIgdGhhbiBjb25zdGFudC5cbiAxNTQ6XHRcbiAxNTU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNTY6XHRcbiAxNTc6XHRjb25maWcgWEZSTV9FU1BJTlRDUFxuIDE1ODpcdFx0Ym9vbFxuIDE1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUyNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIGlwdGZzIE1vZHVsZSoqCgpSaWdodCwgc28sIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGUgYFhGUk1fSVBURlNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNlZW1zIHRvIGJlIHRoZSBvbmx5IG9uZSBJIGFic29sdXRlbHkgbmVlZCB0byBlbmFibGUgZm9yIHRoaXMgbW9kdWxlLiBHb29kLiBOb3csIGxldCYjMzk7cyBtYXAgb3V0IHRoZSBlbnRyeSBwb2ludHMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgaGFuZ3MgdG9nZXRoZXIuIEkgc2VlOiBgaXB0ZnNfaW5wdXRgLCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgLCBhbmQgYGlwdGZzX3VzZXJfaW5pdGAuIE9rYXksIG1ha2VzIHNlbnNlIHNvIGZhci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgaXB0ZnNfdXNlcl9pbml0YC4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG1vZHVsZSBpcyBpbml0aWFsaXplZCBhbmQsIHBvc3NpYmx5LCBob3cgaXQgaG9va3MgaW50byB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc191c2VyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTI1MTM9c3RhdGljIHUzMiBpcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTIzLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1MjQ6ICogaXB0ZnNfdXNlcl9pbml0KCkgLSBpbml0aWFsaXplIHRoZSBTQSB3aXRoIElQVEZTIG9wdGlvbnMgZnJvbSBuZXRsaW5rLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MjUtICogQG5ldDogdGhlIG5ldCBkYXRhXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MzEtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjUzMjpzdGF0aWMgaW50IGlwdGZzX3VzZXJfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MzMtXHRcdFx0ICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3Mi1cdC5kZXN0cm95X3N0YXRlID0gaXB0ZnNfZGVzdHJveV9zdGF0ZSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzczOlx0LnVzZXJfaW5pdCA9IGlwdGZzX3VzZXJfaW5pdCxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc0LVx0LmNvcHlfdG9fdXNlciA9IGlwdGZzX2NvcHlfdG9fdXNlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBJbml0aWFsaXphdGlvbiBvZiBpcHRmcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBgaXB0ZnNfdXNlcl9pbml0YCBpcyBhIHJlYWxseSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBvZiB0aGlzIHRoaW5nLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlIGZvY3VzIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGlucHV0IGFuZCBvdXRwdXQsIG5hbWVseSBgaXB0ZnNfaW5wdXRgLCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBhbmQgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCwgaW4gYWRkaXRpb24gdG8gYGlwdGZzX3VzZXJfaW5pdGAgb2YgY291cnNlLgoKQmVmb3JlIHdlIGRpdmUgdG9vIGRlZXAgdGhvdWdoLCBJIHdhbnQgdG8gY29uZmlybSBzb21ldGhpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgYFhGUk1gIGlzIGVuYWJsZWQuIEFoLCB5ZXMsIGl0IHNlZW1zIGBYRlJNYCBpcyB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLCBhcyBleHBlY3RlZC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gUmlnaHQsIGFuZCBJIHNlZSBgWEZSTV9JUFRGU2Agc3BlY2lmaWNhbGx5IGRlcGVuZHMgb24gYFhGUk1gLiBBbHJpZ2h0LCBJJiMzOTtsbCBnbyB0YWtlIGEgbG9vayBhdCB0aGUgYFhGUk1gIGNvbmZpZ3VyYXRpb24gdG8gbWFrZSBzdXJlIHRoYXQgaXMgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWctNC0jXG5uZXQveGZybS9LY29uZmlnOjU6Y29uZmlnIFhGUk1cbm5ldC94ZnJtL0tjb25maWctNi1cdGJvb2xcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwLVxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXG5uZXQveGZybS9LY29uZmlnLTEyLVx0Ym9vbFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cbm5ldC94ZnJtL0tjb25maWc6MTQ6Y29uZmlnIFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy0xNS1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcbm5ldC94ZnJtL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0zMS1cbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbm5ldC94ZnJtL0tjb25maWctMzMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wYXRpYmxlIEFCSSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy00Mi1cbm5ldC94ZnJtL0tjb25maWc6NDM6Y29uZmlnIFhGUk1fSU5URVJGQUNFXG5uZXQveGZybS9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTUwLVxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy03MS1cbm5ldC94ZnJtL0tjb25maWc6NzI6Y29uZmlnIFhGUk1fU1RBVElTVElDU1xubmV0L3hmcm0vS2NvbmZpZy03My1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1wmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctODMtIyBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxubmV0L3hmcm0vS2NvbmZpZy04NS1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZy05Mi0jIGFsZ29yaXRobXMgdGhhdCBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxubmV0L3hmcm0vS2NvbmZpZzo5Mzpjb25maWcgWEZSTV9FU1Bcbm5ldC94ZnJtL0tjb25maWctOTQtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTA1LVxubmV0L3hmcm0vS2NvbmZpZzoxMDY6Y29uZmlnIFhGUk1fSVBDT01QXG5uZXQveGZybS9LY29uZmlnLTEwNy1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTQwLVxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcbm5ldC94ZnJtL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTE1Ni1cbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXG5uZXQveGZybS9LY29uZmlnLTE1OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMTQKCQkJCQkJCW91dHB1dDogMjA2CgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVjaXNpb24gZm9yIFhGUk0sIFhGUk1fVVNFUiwgYW5kIFhGUk1fSVBURlMqKgoKT2theSwgc28gYFhGUk1gIGlzIGEgY29yZSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0eXBpY2FsbHkgZW5hYmxlZCBieSBvdGhlciBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdXNlciBjYW4gaW50ZXJhY3Qgd2l0aCBpdC4gTGV0JiMzOTtzIHNlZS4uLiBBaCwgeWVzLCBgWEZSTV9VU0VSYCBpcyBpbmRlZWQgdGhlIE5ldGxpbmsgaW50ZXJmYWNlIHdlIG5lZWQgdG8gY29uZmlndXJlIFhGUk0gZnJvbSB1c2Vyc3BhY2UuIFNvLCBpdCBtYWtlcyBzZW5zZSB0byBlbmFibGUgYFhGUk1fVVNFUmAgYWxvbmcgd2l0aCBgWEZSTWAuCgpOb3csIGxldCYjMzk7cyByZXZpc2l0IGBYRlJNX0lQVEZTYC4gSG1tLCBsZXQgbWUgY2hlY2sgdGhlIGRlZmluaXRpb24uLi4gT2theSwgc28gYFhGUk1fSVBURlNgJiMzOTtzIGRlcGVuZGVuY2llcyBjb25maXJtIHRoYXQgaXQgaXMgZW5vdWdoIHRvIGVuYWJsZSB0aGUgY29kZS4gVGhlcmVmb3JlLCBJJiMzOTtsbCBpbmNsdWRlIGBYRlJNX0lQVEZTYCwgYWxvbmcgd2l0aCBgWEZSTWAgYW5kIGBYRlJNX1VTRVJgIGluIG15IGNvbmZpZ3VyYXRpb24uIEl0IHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGFjY2Vzcy4KClJlZ2FyZGluZyB0aGUgcGF0Y2gsIGl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaXNzdWUgd2l0aGluIGBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrYC4gVGhlIGZpeCBpbnZvbHZlcyBhIGNoZWNrIHdpdGhpbiBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBzaG91bGQgYWx3YXlzIGJlIGZ1enplZCB0aG9yb3VnaGx5LiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGZvciBmdXR1cmUgdGVzdGluZy4KCkkgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHMgZHVyaW5nIGZ1enppbmc6IGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRfY29sbGVjdGAsIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGFuZCBgaXB0ZnNfdXNlcl9pbml0YC4gVGhleSBhcmUgbW9zdCBsaWtlbHkgdG8gYmUgYWZmZWN0ZWQgYnkgdGhpcyBmaXguCgpBbHJpZ2h0LCBJJiMzOTtsbCByZWNvcmQgdGhpcyBkZWNpc2lvbiBub3cgd2l0aCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OywKICAgICYjMzQ7WEZSTSYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHRmc19pbnB1dCYjMzQ7LAogICAgJiMzNDtpcHRmc19vdXRwdXRfY29sbGVjdCYjMzQ7LAogICAgJiMzNDtpcHRmc19wcmVwYXJlX291dHB1dCYjMzQ7LAogICAgJiMzNDtpcHRmc191c2VyX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGtgIGJ5IGFkZGluZyBhIGJvdW5kcyBjaGVjayBpbiBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtYWluIGVudHJ5IHBvaW50cyBvZiB0aGUgWEZSTSBJUFRGUyBtb2RlLCBzdWNoIGFzIGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRfY29sbGVjdGAsIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGFuZCBgaXB0ZnNfdXNlcl9pbml0YC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTV9JUFRGUyYjMzQ7LAogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdGZzX2lucHV0JiMzNDssCiAgICAmIzM0O2lwdGZzX291dHB1dF9jb2xsZWN0JiMzNDssCiAgICAmIzM0O2lwdGZzX3ByZXBhcmVfb3V0cHV0JiMzNDssCiAgICAmIzM0O2lwdGZzX3VzZXJfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsa2AgYnkgYWRkaW5nIGEgYm91bmRzIGNoZWNrIGluIGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVAtVEZTL0FHR0ZSQUcgZW5jYXBzdWxhdGlvbiBzdXBwb3J0IGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1haW4gZW50cnkgcG9pbnRzIG9mIHRoZSBYRlJNIElQVEZTIG1vZGUsIHN1Y2ggYXMgYGlwdGZzX2lucHV0YCwgYGlwdGZzX291dHB1dF9jb2xsZWN0YCwgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCwgYW5kIGBpcHRmc191c2VyX2luaXRgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6MzQuNTk4NzcyNDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc0NTMyOTI2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9JUFRGU1wiLFxuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB0ZnNfaW5wdXRcIixcbiAgICBcImlwdGZzX291dHB1dF9jb2xsZWN0XCIsXG4gICAgXCJpcHRmc19wcmVwYXJlX291dHB1dFwiLFxuICAgIFwiaXB0ZnNfdXNlcl9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGtgIGJ5IGFkZGluZyBhIGJvdW5kcyBjaGVjayBpbiBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtYWluIGVudHJ5IHBvaW50cyBvZiB0aGUgWEZSTSBJUFRGUyBtb2RlLCBzdWNoIGFzIGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRfY29sbGVjdGAsIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGFuZCBgaXB0ZnNfdXNlcl9pbml0YC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6MzQuNTk4NzgzMjk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjkwMDU0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNzU1MmMxOWY4YzdjMTRhNWRkOTU1Y2FlMTAyYzRjYTYzZjBjZWZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDAwOjUwOjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLjJjZTE1YzQ3MmNjNGQgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9pcHRmcy5jXFxuKysrIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXFxuQEAgLTQxNiw2ICs0MTYsMTQgQEAgc3RhdGljIGJvb2wgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikgfHwgc2tiLVxcdTAwM2VwcF9yZWN5Y2xlICE9IHdhbGstXFx1MDAzZXBwX3JlY3ljbGUpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuK1xcdC8qIFJlamVjdCBhbiBAb2Zmc2V0IHRoYXQgaXMgYXQgb3IgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHdhbGsncyBkYXRhXFxuK1xcdCAqIGJlZm9yZSBjYWxsaW5nIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKSwgd2hvc2UgZnJhZ21lbnQtYWR2YW5jZVxcbitcXHQgKiBsb29wIGlzIG90aGVyd2lzZSB1bmJvdW5kZWQgYW5kIHdvdWxkIGluZGV4IHBhc3Qgd2Fsay1cXHUwMDNlZnJhZ3NbXS5cXG4rXFx0ICogVGhpcyBtaXJyb3JzIHRoZSBndWFyZCBhbHJlYWR5IHByZXNlbnQgaW4gaXB0ZnNfc2tiX2FkZF9mcmFncygpLlxcbitcXHQgKi9cXG4rXFx0aWYgKCF3YWxrLVxcdTAwM2Vucl9mcmFncyB8fCBvZmZzZXQgXFx1MDAzZT0gd2Fsay1cXHUwMDNldG90YWwgKyB3YWxrLVxcdTAwM2Vpbml0aWFsX29mZnNldClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0LyogTWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqL1xcbiBcXHRvZmZzZXQgPSBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKHdhbGssIG9mZnNldCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDozNS4zMzEwNzYwMzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTY3MjA5NjgwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9JUFRGU1wiLFxuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB0ZnNfaW5wdXRcIixcbiAgICBcImlwdGZzX291dHB1dF9jb2xsZWN0XCIsXG4gICAgXCJpcHRmc19wcmVwYXJlX291dHB1dFwiLFxuICAgIFwiaXB0ZnNfdXNlcl9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGtgIGJ5IGFkZGluZyBhIGJvdW5kcyBjaGVjayBpbiBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtYWluIGVudHJ5IHBvaW50cyBvZiB0aGUgWEZSTSBJUFRGUyBtb2RlLCBzdWNoIGFzIGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRfY29sbGVjdGAsIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGFuZCBgaXB0ZnNfdXNlcl9pbml0YC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTc1NTJjMTlmOGM3YzE0YTVkZDk1NWNhZTEwMmM0Y2E2M2YwY2VmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDAwOjUwOjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pcHRmcy5jIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXG5pbmRleCA1OTdhZWRlYWMyNmViLi4yY2UxNWM0NzJjYzRkIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9pcHRmcy5jXG4rKysgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbkBAIC00MTYsNiArNDE2LDE0IEBAIHN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSB8fCBza2ItXHUwMDNlcHBfcmVjeWNsZSAhPSB3YWxrLVx1MDAzZXBwX3JlY3ljbGUpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdC8qIFJlamVjdCBhbiBAb2Zmc2V0IHRoYXQgaXMgYXQgb3IgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHdhbGsncyBkYXRhXG4rXHQgKiBiZWZvcmUgY2FsbGluZyBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKCksIHdob3NlIGZyYWdtZW50LWFkdmFuY2VcbitcdCAqIGxvb3AgaXMgb3RoZXJ3aXNlIHVuYm91bmRlZCBhbmQgd291bGQgaW5kZXggcGFzdCB3YWxrLVx1MDAzZWZyYWdzW10uXG4rXHQgKiBUaGlzIG1pcnJvcnMgdGhlIGd1YXJkIGFscmVhZHkgcHJlc2VudCBpbiBpcHRmc19za2JfYWRkX2ZyYWdzKCkuXG4rXHQgKi9cbitcdGlmICghd2Fsay1cdTAwM2Vucl9mcmFncyB8fCBvZmZzZXQgXHUwMDNlPSB3YWxrLVx1MDAzZXRvdGFsICsgd2Fsay1cdTAwM2Vpbml0aWFsX29mZnNldClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0LyogTWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqL1xuIFx0b2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6MzUuMzMxMDc5NTQ0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMTQwNzU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgWEZSTSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gSXQgc2VlbXMgdGhleSd2ZSBhZGRlZCBhIGNydWNpYWwgY2hlY2sgd2l0aGluIGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2A6IGEgZ3VhcmQgYWdhaW5zdCBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGNvZGUgc25pcHBldCBzcGVjaWZpY2FsbHkgY2hlY2tzIGlmIHRoZSBwcm92aWRlZCBgQG9mZnNldGAgaXMgYXQgb3IgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHdhbGsncyBkYXRhLiBUaGlzIHByZXZlbnRzIGBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrYCBmcm9tIGdvaW5nIGhheXdpcmUgd2l0aCBpdHMgZnJhZ21lbnQgaW5kZXhpbmcsIHdoaWNoIGNvdWxkIGxlYWQgdG8gbWFqb3IgaXNzdWVzLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSB2dWxuZXJhYmlsaXR5LlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgY2hhbmdlLCBhIGdvb2QgbmV4dCBzdGVwIGlzIHRvIGluaXRpYXRlIGEgZnV6emluZyBjYW1wYWlnbiBhZ2FpbnN0IGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgYW5kIHRoZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGludm9sdmVkLiBEaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZSBpcyBuZWNlc3NhcnkgdG8gZGlzY292ZXIgdGhlIGVudHJ5IHBvaW50cyB0byBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLCB3aGljaCdsbCBoZWxwIG1lIGJ1aWxkIHRhcmdldGVkIGZ1enogaW5wdXRzLiBUaGVuLCBJIGNhbiBmb2N1cyBvbiBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHRyaWdnZXIgdGhlIHZ1bG5lcmFibGUgY29kZSBwYXRoLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBrZXkgdG8gZGVzaWduaW5nIGVmZmljaWVudCBmdXp6aW5nIHNjZW5hcmlvcyBhbmQgdGhvcm91Z2hseSB0ZXN0aW5nIHRoZSBwYXRjaCdzIGVmZmljYWN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6MzkuNDYyNDkwNTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMzNzAzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0zODA9c3RhdGljIHUzMiBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwMC0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDAxOiAqIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKCkgLSBjaGVjayBpZiBvayB0byBhZGQgZnJhZ3MgZnJvbSB3YWxrIHRvIHNrYlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MDItICogQHNrYjogc2tiIHRvIGNoZWNrIGZvciBhZGRpbmcgZnJhZ3MgdG9cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MDgtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQwOTpzdGF0aWMgYm9vbCBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MTAtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ1OC0gKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0NTk6ICogaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoKSBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHRvIHZlcmlmeVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NjAtICogdGhhdCB0aGUgZGVzdGluYXRpb24gQHNrYiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHdhbGsgYW5kIGhhcyBzcGFjZSBpbiB0aGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01NDE9aXB0ZnNfcHNrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRwbCwgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTUwLVxcdC8qIHRoaXMgc2hvdWxkIG5vdCBub3JtYWxseSBiZSBoYXBwZW5pbmcgKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTUxOlxcdGlmICghaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3Moc2tiLCB3YWxrLCBvZmYgKyBjb3B5X2xlbixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTUyLVxcdFxcdFxcdFxcdCAgICAgbGVuIC0gY29weV9sZW4pKSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzUwPXN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTA5LVxcdGlmIChmcmFnd2FsayBcXHUwMDI2XFx1MDAyNlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5MTA6XFx0ICAgIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKG5ld3NrYiwgZnJhZ3dhbGssIGRhdGEsIGNvcHlsZW4pKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkxMS1cXHRcXHRpcHRmc19za2JfYWRkX2ZyYWdzKG5ld3NrYiwgZnJhZ3dhbGssIGRhdGEsIGNvcHlsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDozOS41NTU4NjY3NjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM3OTI3OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldDpcblxuKipEaXZpbmcgaW50byBgeGZybV9pcHRmcy5jYCAtIGEgRGVlcGVyIExvb2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBgaXB0ZnNgIHN5c3RlbSBoYW5kbGVzIHBhY2tldCBmcmFnbWVudGF0aW9uLiBUaGUgZnVuY3Rpb24gYGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzYCBpcyBjbGVhcmx5IGEgY3JpdGljYWwgY29tcG9uZW50LiBJdOKAmXMgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgLCB3aGljaCBsaWtlbHkgZGVhbHMgd2l0aCBwcmUtZXhpc3RpbmcgZnJhZ21lbnRlZCBwYWNrZXRzLCBhbmQgYGlwdGZzX3JlYXNzZW1fY29udGAsIHdoaWNoIHByb2JhYmx5IGhhbmRsZXMgdGhlICpyZWFzc2VtYmx5KiBvZiBmcmFnbWVudHMuIFRoaXMgdGVsbHMgbWUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIGNvZGUgaW4gdGhhdCBmaWxlLCBjaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgbGV2ZXJzIEkgY2FuIHR3ZWFrIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMzY3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6NDIuNjkzODAyMDcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwODI4MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1faXB0ZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX1hGUk1fSU5URVJGQUNFKSArPSB4ZnJtX2ludGVyZmFjZS5vXFxubmV0L3hmcm0vTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX1hGUk1fSVBURlMpICs9IHhmcm1faXB0ZnMub1xcbm5ldC94ZnJtL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSArPSBlc3BpbnRjcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUwOjQyLjc3NDYzODQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc4MzcxNjc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFhGUk1fSVBURlMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBgWEZSTV9JUFRGU2AgY29uZmlnIGlzIGFjdGl2ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxpZXMgb24uIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMga2VybmVsIG1vZHVsZXMgb3Igb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCAqbXVzdCogYmUgZW5hYmxlZCBmb3IgYFhGUk1fSVBURlNgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gV2hhdCBjb3VsZCBnbyB3cm9uZyBpZiB0aG9zZSBhcmUgbWlzc2luZyBvciBtaXNjb25maWd1cmVkPyBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgcXVpY2tseSBpZGVudGlmeWluZyBhbmQgZWxpbWluYXRpbmcgYW55IHBvdGVudGlhbCByb2FkYmxvY2tzIG9yIGNvbXBhdGliaWxpdHkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24sIHNvIEkgd2FudCB0byBrbm93IGV4YWN0bHkgd2hhdCBpdHMgZnVuY3Rpb25hbCByZXF1aXJlbWVudHMgYXJlLiBMZXQncyBkZWx2ZSBpbnRvIHRob3NlIHJlbGF0aW9uc2hpcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDo0NS41NTgzNTk0MzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1Mzc0MTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX0lQVEZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUwOjQ2LjA2Mzc0MDY0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDkzNjY3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBYRlJNIEtjb25maWcgT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNDEuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIFhGUk0gY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgc3dpdGNoZXMgdGhhdCBkZXRlcm1pbmUgd2hpY2ggWEZSTSBmdW5jdGlvbmFsaXRpZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXTigJlzIGxpa2VseSB0aGVyZSdzIGEgZGVwZW5kZW5jeSBjaGFpbiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCB0aGlzIHNlY3Rpb24gaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgd2hpY2ggWEZSTSBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIG1vZHVsZXMuIEknbSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZ3JhbnVsYXIgY29udHJvbHMsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIG90aGVyIGRlcGVuZGVuY2llcywgYW5kIGFueSBuZXcgb3B0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBhZGRlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIEkgZHVnIGludG8gdGhpcyBhcmVhLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBhdmFpbGFibGUga25vYnMgZm9yIFhGUk0gaW4gdGhlIGN1cnJlbnQga2VybmVsIGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUwOjQ4Ljk3MzExMTgyNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzNTpcXHRcXHQgIGNoYW5nZSB0aGVpciBhdHRhY2htZW50IHBvaW50IHRvIHRoZSBJbnRlcm5ldC4gIERldGFpbFxcbiAxMzY6XFx0XFx0ICBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIGludGVybmV0LWRyYWZ0XFxuIDEzNzpcXHRcXHQgIFxcdTAwM2NkcmFmdC1zdWdpbW90by1taXA2LXBma2V5LW1pZ3JhdGVcXHUwMDNlLlxcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0MDpcXHRcXG4gMTQxOlxcdGNvbmZpZyBYRlJNX0lQVEZTXFxuIDE0MjpcXHRcXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuIDE0MzpcXHRcXHRkZXBlbmRzIG9uIFhGUk1cXG4gMTQ0OlxcdFxcdGhlbHBcXG4gMTQ1OlxcdFxcdCAgSW5mb3JtYXRpb24gb24gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gY2FuIGJlIGZvdW5kXFxuIDE0NjpcXHRcXHQgIGluIFJGQyA5MzQ3LiBUaGlzIGZlYXR1cmUgc3VwcG9ydHMgZGVtYW5kIGRyaXZlbiAoaS5lLixcXG4gMTQ3OlxcdFxcdCAgbm9uLWNvbnN0YW50IHNlbmQgcmF0ZSkgSVAtVEZTIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZVxcbiAxNDg6XFx0XFx0ICBBR0dGUkFHIEVTUCBwYXlsb2FkIGVuY2Fwc3VsYXRpb24uIFRoaXMgcGF5bG9hZCB0eXBlXFxuIDE0OTpcXHRcXHQgIHN1cHBvcnRzIGFnZ3JlZ2F0aW9uIGFuZCBmcmFnbWVudGF0aW9uIG9mIHRoZSBpbm5lciBJUFxcbiAxNTA6XFx0XFx0ICBwYWNrZXQgc3RyZWFtIHdoaWNoIGluIHR1cm4geWllbGRzIGhpZ2hlciBzbWFsbC1wYWNrZXRcXG4gMTUxOlxcdFxcdCAgYmFuZHdpZHRoIGFzIHdlbGwgYXMgcmVkdWNpbmcgTVRVL1BNVFUgaXNzdWVzLiBDb25nZXN0aW9uXFxuIDE1MjpcXHRcXHQgIGNvbnRyb2wgaXMgdW5pbXBsZW1lbnRhdGVkIGFzIHRoZSBzZW5kIHJhdGUgaXMgZGVtYW5kIGRyaXZlblxcbiAxNTM6XFx0XFx0ICByYXRoZXIgdGhhbiBjb25zdGFudC5cXG4gMTU0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDo0OC45NzMxODc4MTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4NzAyMTExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlhGUk0gXHUwMDI2IElQVEZTIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5SaWdodCwgdGhpcyBoaW5nZXMgb24gYFhGUk1gLiBUaGF0J3MgdGhlIGNvcmUuIFNvIEknbSB0aGlua2luZywgc3BlY2lmaWNhbGx5LCBJIG5lZWQgYm90aCBgWEZSTV9JUFRGU2AgYW5kIGBYRlJNYCBlbmFibGVkIHRvIGV2ZW4gYmVnaW4uIFRob3NlIGFyZSB0aGUgcHJlcmVxdWlzaXRlcy4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhdHRhY2sgcG9pbnRzIGZvciBmdXp6aW5nLiBXaGVyZSBkbyBJIGZpbmQgdGhlIGVudHJ5IHBvaW50cyB0byBzdGFydCB0aHJvd2luZyBqdW5rIGF0IHRoZSBzeXN0ZW0/XG5cbk9rYXksIGBpcHRmc19yZWFzc2VtX2NvbnRgIGxvb2tzIHByb21pc2luZy4gVGhhdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBvZnRlbiBtZWFucyBpdCdzIHByZXR0eSBjb250YWluZWQuIFRoYXQncyBnb29kIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlIC0gbWFrZXMgaXQgZWFzaWVyIHRvIHRyYWNrLiBOb3cgSSBqdXN0IG5lZWQgdG8gZmluZCBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGlwdGZzX3JlYXNzZW1fY29udGAuIFNlZSB3aGVyZSB0aGF0IGNhbiBnZXQgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUwOjUyLjM2MDIxMzc3N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDk0ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdGZzX3JlYXNzZW1fY29udFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTczMD1zdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzUtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczNjogKiBpcHRmc19yZWFzc2VtX2NvbnQoKSAtIENvbnRpbnVlIHRoZSByZWFzc2VtYmx5IG9mIGFuIGlubmVyIHBhY2tldHMuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTczNy0gKiBAeHRmczogeHRmcyBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc0OS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzUwOnN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc1MS1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTIyNj1zdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyODctXFx0XFx0aWYgKGJsa29mZiB8fCB4dGZzLVxcdTAwM2VyYV9ydW50bGVuIHx8IHh0ZnMtXFx1MDAzZXJhX25ld3NrYikge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjg4OlxcdFxcdFxcdGRhdGEgPSBpcHRmc19yZWFzc2VtX2NvbnQoeHRmcywgc2VxLCBcXHUwMDI2c2tic2VxLCBza2IsIGRhdGEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyODktXFx0XFx0XFx0XFx0XFx0XFx0ICBibGtvZmYsIFxcdTAwMjZzdWJsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6NTIuNDcxMzIyNzI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzk1OTk2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBpcHRmc2AgTmV0d29yayBGbG93KipcblxuT2theSwgc28gYGlwdGZzX2lucHV0X29yZGVyZWRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGtpY2tzIHRoaW5ncyBvZmYsIGFuZCBmcm9tIHdoYXQgSSBzZWUsIGl0IGltbWVkaWF0ZWx5IGhhbmRzIHRoaW5ncyBvdmVyIHRvIGBpcHRmc19yZWFzc2VtX2NvbnRgLiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHdoYXQncyBoYXBwZW5pbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyAqY2FsbGluZyogYGlwdGZzX2lucHV0X29yZGVyZWRgLiBJdCdzIHRoZSBzdGFuZGFyZCBmaXJzdCBzdGVwIHdoZW4gdHJ5aW5nIHRvIGZvbGxvdyBhIHNpZ25hbCwgcmlnaHQ/IEknbSBnb2luZyB0byB0cmFjayBpdCBiYWNrIHVwIHRoZSBjYWxsIHN0YWNrIHRvIHNlZSB3aGVyZSB0aGUgZGF0YSBvciB0aGUgdHJpZ2dlciBpcyBvcmlnaW5hdGluZy4gS25vd2luZyBpdHMgcGFyZW50cyB3aWxsIHByb3ZpZGUgaW1wb3J0YW50IGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBmZWVkaW5nIGRhdGEgaW50byB0aGlzIHByb2Nlc3MgYW5kIHdoYXQgdGhlIHVsdGltYXRlIGdvYWxzIG9mIHRoaXMgZmxvdyBhcmUuIFNvLCBsZXQncyBleHBsb3JlIHRoZSBjYWxsZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzQ3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6NTUuNTEwOTI2NjY5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTM2Mzg0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc19pbnB1dF9vcmRlcmVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9OTUxPXN0YXRpYyBib29sIF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgZGF0YSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjE5LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjIwOiAqIGlwdGZzX2lucHV0X29yZGVyZWQoKSAtIGhhbmRsZSBuZXh0IGluIG9yZGVyIElQVEZTIHBheWxvYWQuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjEtICogQHg6IHhmcm0gc3RhdGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjI1LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjI2OnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X29yZGVyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjcte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE2NzY9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2Ryb3BfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDctXFx0XFx0XFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcwODpcXHRcXHRcXHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDktXFx0XFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE3MjU9c3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzMyLVxcdGlmICh4dGZzLVxcdTAwM2VjZmcucmVvcmRlcl93aW5fc2l6ZSA9PSAwKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MzM6XFx0XFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzM0LVxcdFxcdGdvdG8gZG9uZTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ4LVxcdFxcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDk6XFx0XFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzUwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6NTUuNTg2Mjk4MTgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjkwODUyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGBpcHRmc19pbnB1dGAqKlxuXG5Pa2F5LCBzbyBgaXB0ZnNfaW5wdXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0J3MgdGhlIGZyb250IGRvb3IsIHRoZSBmaXJzdCBmdW5jdGlvbiB0aGF0J3MgbGlrZWx5IGNhbGxlZCB3aGVuIGEgY2VydGFpbiBwcm9jZXNzIGlzIGFjdGl2ZS4gVG8gdHJ1bHkgdW5kZXJzdGFuZCBpdHMgcm9sZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBfY2FsbHNfIGBpcHRmc19pbnB1dGAuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBpbGx1bWluYXRlIGl0cyBwdXJwb3NlLCBpdHMgY29udGV4dCwgYW5kIHdoYXQgZGF0YSBpdCdzIGxpa2VseSBvcGVyYXRpbmcgb24uIExldCdzIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCBjYWxsZWQgc28gdGhhdCBJIGNhbiBmaWd1cmUgb3V0IGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE3NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUwOjU4LjY1NTM4NjE3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTYzMDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdGZzX2lucHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9NTg2PWlwdGZzX3Bza2JfZXh0cmFjdF9zZXEodTMyIHNrYmxlbiwgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCB1MzIgb2ZmLCBpbnQgbGVuKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYwMC0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjAxOiAqIGlwdGZzX2lucHV0X3NhdmVfcnVudCgpIC0gc2F2ZSBkYXRhIGluIHh0ZnMgcnVudCBzcGFjZS5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjAyLSAqIEB4dGZzOiB4dGZzIHN0YXRlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjA5LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2MTA6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYxMS1cXHRcXHRcXHRcXHQgIHU4ICpidWYsIGludCBsZW4pXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9OTUxPXN0YXRpYyBib29sIF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgZGF0YSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDAxLVxcdFxcdFxcdFxcdC8qIHNhdmUgdGhlIGJ5dGVzIHdlIGhhdmUsIGFkdmFuY2UgZGF0YSBhbmQgZXhpdCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDAyOlxcdFxcdFxcdFxcdGlwdGZzX2lucHV0X3NhdmVfcnVudCh4dGZzLCBzZXEsIGhieXRlcyxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAwMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZW1haW5pbmcpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMjAtXFx0XFx0XFx0XFx0Lyogc2F2ZSB0aGUgYnl0ZXMgd2UgaGF2ZSwgYWR2YW5jZSBkYXRhIGFuZCBleGl0ICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEwMjE6XFx0XFx0XFx0XFx0aXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHh0ZnMsIHNlcSwgaGJ5dGVzLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDIyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHJlbWFpbmluZyk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIxOS0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTIyMDogKiBpcHRmc19pbnB1dF9vcmRlcmVkKCkgLSBoYW5kbGUgbmV4dCBpbiBvcmRlciBJUFRGUyBwYXlsb2FkLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjIxLSAqIEB4OiB4ZnJtIHN0YXRlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIyNS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTIyNjpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjI3LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xNDgyPXN0YXRpYyB2b2lkIF9fcmVvcmRlcl9mdXR1cmVfc2hpZnRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYyNy0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTYyODpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9yZW9yZGVyKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MjktXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmluc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE2NzY9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2Ryb3BfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDctXFx0XFx0XFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcwODpcXHRcXHRcXHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDktXFx0XFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MTUtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MTY6ICogaXB0ZnNfaW5wdXQoKSAtIGhhbmRsZSByZWNlaXB0IG9mIGlwdGZzIHBheWxvYWRcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcxNy0gKiBAeDogeGZybSBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MjQtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MjU6c3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcyNi17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczMi1cXHRpZiAoeHRmcy1cXHUwMDNlY2ZnLnJlb3JkZXJfd2luX3NpemUgPT0gMCkge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzMzOlxcdFxcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczNC1cXHRcXHRnb3RvIGRvbmU7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc0My1cXHRzcGluX2xvY2soXFx1MDAyNnh0ZnMtXFx1MDAzZWRyb3BfbG9jayk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDQ6XFx0aXB0ZnNfaW5wdXRfcmVvcmRlcih4dGZzLCBza2IsIFxcdTAwMjZsaXN0LCBcXHUwMDI2ZnJlZWxpc3QpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ1LVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ4dGZzLVxcdTAwM2Vkcm9wX2xvY2spO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDgtXFx0XFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc0OTpcXHRcXHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NTAtXFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI3Njg9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzYtXFx0LmdldF9pbm5lcl9tdHUgPSBpcHRmc19nZXRfaW5uZXJfbXR1LFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzc3OlxcdC5pbnB1dCA9IGlwdGZzX2lucHV0LFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc4LVxcdC5vdXRwdXQgPSBpcHRmc19vdXRwdXRfY29sbGVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6NTguNzcxNTYzMzQzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjI4MjY4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSVBURlMgQ2FsbGJhY2sgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gYGlwdGZzX2lucHV0YCBoYXMgYmVlbiByZWdpc3RlcmVkIHdpdGhpbiBgaXB0ZnNfbW9kZV9jYnNgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMgaW50ZXJhY3Rpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKndoYXQgZWxzZSogaXMgaGFuZ2luZyBvdXQgaW4gYGlwdGZzX21vZGVfY2JzYD8gVW5kZXJzdGFuZGluZyB0aGUgZW50aXJlIGNvbnRleHQgb2YgdGhhdCBjYWxsYmFjayBzdHJ1Y3R1cmUgaXMgdGhlIGtleSB0byBzZWVpbmcgaG93IHRoaXMgYGlwdGZzX2lucHV0YCBmdW5jdGlvbiBmaXRzIGluIGFuZCB3aGF0IGl0cyByZWxhdGlvbnNoaXBzIGFyZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gZ2V0IGEgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIExldCdzIHNlZSB3aGF0IGVsc2UgdGhhdCBzdHJ1Y3R1cmUgY29udGFpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4OTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MTowMS44MzQzOTc4NDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTU0ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdGZzX21vZGVfY2JzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9MjczMj1zdGF0aWMgdm9pZCBpcHRmc19kZXN0cm95X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NjctXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3Njg6c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzY5LVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI3ODI9c3RhdGljIGludCBfX2luaXQgeGZybV9pcHRmc19pbml0KHZvaWQpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc4Ny1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc4ODpcXHRlcnIgPSB4ZnJtX3JlZ2lzdGVyX21vZGVfY2JzKFhGUk1fTU9ERV9JUFRGUywgXFx1MDAyNmlwdGZzX21vZGVfY2JzKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc4OS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTE6MDEuOTA3MzYyMzc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjc3MTk5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkZvY3VzaW5nIEZ1enppbmcgRWZmb3J0cyBmb3IgWEZSTV9NT0RFX0lQVEZTKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0IHNlZW1zIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3IgYFhGUk1fTU9ERV9JUFRGU2AgYXJlIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGNhbGxiYWNrczogc3BlY2lmaWNhbGx5LCBgaXB0ZnNfaW5wdXRgIGFuZCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLiBHaXZlbiB0aGF0LCBmdXp6aW5nIHRob3NlIHR3byBmdW5jdGlvbnMgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIGFwcHJvYWNoIHRvIHVuY292ZXIgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhleSdyZSBsaWtlbHkgdGhlIGFyZWFzIHdoZXJlIHRoZSBtb3N0IGNvbXBsZXggbG9naWMgcmVzaWRlcyByZWxhdGVkIHRvIHRoaXMgbW9kZS4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBJJ20gb3Zlcmxvb2tpbmcsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIGJ1dCB0aGVzZSBhcmUgdGhlIG9idmlvdXMgaW5pdGlhbCB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzc4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTE6MDUuMTc1MDg1ODA3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI5OTMxNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfb3V0cHV0X2NvbGxlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xODE2PXN0YXRpYyBpbnQgaXB0ZnNfaXNfdG9vX2JpZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwbXR1KVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4NDAtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4NDE6c3RhdGljIGludCBpcHRmc19vdXRwdXRfY29sbGVjdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTg0Mi17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc2OD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3Ny1cXHQuaW5wdXQgPSBpcHRmc19pbnB1dCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3ODpcXHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzktXFx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUxOjA1LjI5ODA4NTg4OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTAxOTAzMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGU6IEFub3RoZXIgT25lISoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlLCB0cnlpbmcgdG8gZ2V0IGEgZ3Jhc3Agb24gaXRzIGZ1bmN0aW9uLiBJJ3ZlIGFscmVhZHkgdGFja2xlZCBhIGZldyBvdGhlciBjb21wb25lbnRzLCBhbmQgbm93LCBcImlwdGZzXFxfcHJlcGFyZVxcX291dHB1dFwiIGNhdGNoZXMgbXkgZXllLiBUaGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gbmFtZSBnaXZlcyBtZSBhIGhpbnQ7IGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBwcmVwYXJpbmcgdGhlIG91dHB1dCBkYXRhLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBJUEZTIHByb2Nlc3MuIEl0IHNvdW5kcyBsaWtlIGEgY29yZSBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgd2hhdCdzIG5lZWRlZCBmb3IgdGhlIGV2ZW50dWFsIHJlc3BvbnNlIG9yIGRhdGEgc3RydWN0dXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGlzIG9uZSBmaXRzIGludG8gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGZvcm1hdHRpbmcgb3Igc3RydWN0dXJpbmcgaW5mb3JtYXRpb24gYmVmb3JlIGl0J3MgZGVsaXZlcmVkIGVsc2V3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkxOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUxOjA4LjE5OTk5NTI3OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NzgyMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdGZzX3ByZXBhcmVfb3V0cHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9MjQyNj1zdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjAtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0NjE6ICogaXB0ZnNfcHJlcGFyZV9vdXRwdXQoKSAtICBwcmVwYXJlIHRoZSBza2IgZm9yIG91dHB1dFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDYyLSAqIEB4OiB4ZnJtIHN0YXRlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2OS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ3MDpzdGF0aWMgaW50IGlwdGZzX3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDcxLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc4LVxcdC5vdXRwdXQgPSBpcHRmc19vdXRwdXRfY29sbGVjdCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3OTpcXHQucHJlcGFyZV9vdXRwdXQgPSBpcHRmc19wcmVwYXJlX291dHB1dCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc4MC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MTowOC4zNDY3OTExOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgwNzUwNzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgaXB0ZnNfbW9kZV9jYnNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGlwdGZzX21vZGVfY2JzYCB0aGluZy4gSSd2ZSBnb3QgYSBzcGVjaWZpYyB0YXNrIGluIG1pbmQgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGNvbXBvbmVudCBmaXRzIGludG8gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIFNvLCBteSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIFwiV2hhdCBlbHNlIGlzIGluIHRoaXM/XCIuIEknbSBnb2luZyB0byBxdWlja2x5LCBhbmQgZWZmaWNpZW50bHkgYmVnaW4gdG8gZXhwbG9yZSB0aGUgY29udGVudHMgb2YgYGlwdGZzX21vZGVfY2JzYCwgaG9wZWZ1bGx5IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGZ1bmN0aW9uLiBNeSBtYWluIGdvYWwgd2lsbCBiZSB0byBkZXZlbG9wIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5jdGlvbmFsaXR5IHByZXNlbnQgd2l0aGluIHRoaXMgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ4MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUxOjExLjQyNzU0Njg1M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NjgsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3Njg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xcbjI3Njk6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuMjc3MDpcXHRcXHQuaW5pdF9zdGF0ZSA9IGlwdGZzX2luaXRfc3RhdGUsXFxuMjc3MTpcXHRcXHQuY2xvbmVfc3RhdGUgPSBpcHRmc19jbG9uZV9zdGF0ZSxcXG4yNzcyOlxcdFxcdC5kZXN0cm95X3N0YXRlID0gaXB0ZnNfZGVzdHJveV9zdGF0ZSxcXG4yNzczOlxcdFxcdC51c2VyX2luaXQgPSBpcHRmc191c2VyX2luaXQsXFxuMjc3NDpcXHRcXHQuY29weV90b191c2VyID0gaXB0ZnNfY29weV90b191c2VyLFxcbjI3NzU6XFx0XFx0LnNhX2xlbiA9IGlwdGZzX3NhX2xlbixcXG4yNzc2OlxcdFxcdC5nZXRfaW5uZXJfbXR1ID0gaXB0ZnNfZ2V0X2lubmVyX210dSxcXG4yNzc3OlxcdFxcdC5pbnB1dCA9IGlwdGZzX2lucHV0LFxcbjI3Nzg6XFx0XFx0Lm91dHB1dCA9IGlwdGZzX291dHB1dF9jb2xsZWN0LFxcbjI3Nzk6XFx0XFx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXFxuMjc4MDpcXHR9O1xcbjI3ODE6XFx0XFxuMjc4MjpcXHRzdGF0aWMgaW50IF9faW5pdCB4ZnJtX2lwdGZzX2luaXQodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTE6MTEuNDI3Nzc3NTAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mzc4Nzg5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb3JlIElQVEZTIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gVGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhlIG1vZGlmaWNhdGlvbnMgbGlrZWx5IGxpZSwgYGlwdGZzX2lucHV0YCwgYGlwdGZzX291dHB1dF9jb2xsZWN0YCwgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCwgYW5kIGBpcHRmc191c2VyX2luaXRgIGxvb2sgbGlrZSBwcmltZSBjYW5kaWRhdGVzIGZvciByZXZpZXcuIFRoZXkgYWxsIHNlZW0gdG8gdG91Y2ggdXBvbiBrZXkgYXJlYXMuIEhvbGQgb24gYSBzZWNvbmQsIHRob3VnaCwgYGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzYCBpcyB1c2VkIHdpdGhpbiBgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgLCBhbmQgdGhhdCBpbiB0dXJuIGlzIGFsc28gdXNlZCBieSBgaXB0ZnNfcmVhc3NlbV9jb250YC5cblxuTm93LCBpZiBJIHRyYWNlIHRoYXQsIGBpcHRmc19yZWFzc2VtX2NvbnRgIGlzIGNhbGxlZCBmcm9tIGBpcHRmc19pbnB1dF9vcmRlcmVkYCwgYW5kIHRoYXQncyAqYWxzbyogY2FsbGVkIGZyb20gYGlwdGZzX2lucHV0YC4gVGhlcmVmb3JlLCBhZnRlciB0aGlzIGFuYWx5c2lzLCBpdCBzZWVtcyBsaWtlIGBpcHRmc19pbnB1dGAgaXMgbGlrZWx5IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIHRoaXMgd2hvbGUgbW9kaWZpZWQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTWFrZXMgc2Vuc2UuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG15IGltbWVkaWF0ZSBhdHRlbnRpb24gb24gYGlwdGZzX3Bza2JfYWRkX2ZyYWdzYCB0byBzZWUgaG93IGl0IHVzZXMgYGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzYCwgZ2l2ZW4gdGhlIGNhbGwgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk3NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUxOjE1LjM2NTY2MDQ3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg2MTg1ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfcHNrYl9hZGRfZnJhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz00NjY9c3RhdGljIGludCBpcHRmc19za2JfYWRkX2ZyYWdzKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTIyLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1MjM6ICogaXB0ZnNfcHNrYl9hZGRfZnJhZ3MoKSAtIENyZWF0ZSBhbmQgYWRkIGZyYWdzIGludG8gYSBuZXcgc2tfYnVmZi5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTI0LSAqIEB0cGw6IHRlbXBsYXRlIHRvIGNyZWF0ZSBuZXcgc2tiIGZyb20uXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NTQwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU0MTppcHRmc19wc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2FsayxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTQyLVxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCB1MzIgY29weV9sZW4pXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9OTUxPXN0YXRpYyBib29sIF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgZGF0YSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTM2LVxcdFxcdFxcdCAgICAvKiBUcnkgY3JlYXRpbmcgc2tiIGFuZCBhZGRpbmcgZnJhZ3MgKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTEzNzpcXHRcXHRcXHQgICAgIShza2IgPSBpcHRmc19wc2tiX2FkZF9mcmFncyhmaXJzdF9za2IsIGZyYWd3YWxrLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTM4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBkYXRhLCBjYXB0dXJlbGVuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MToxNS40NzQyODgzODVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3MjYzMjk1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2Ygd2hhdCdzIGdvaW5nIG9uIGluIHRoaXMgcGFja2V0IHByb2Nlc3Npbmcgc2NlbmFyaW86XG5cbioqSW5wdXQgUGF0aCBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkYCBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoaXMgd2hvbGUgdGhpbmcuIEl0IGFwcGVhcnMgdG8gYmUgdGhlIHdvcmtob3JzZSB0aGF0IGNhbGxzIGBpcHRmc19wc2tiX2FkZF9mcmFnc2AuIEFuZCBJIHNlZSB0aGF0IGBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZGAgaXRzZWxmIGlzIGNhbGxlZCBieSBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAuIEl0IGFsbCBwb2ludHMgdG8gdGhpcyBiZWluZyBzcXVhcmVseSB3aXRoaW4gdGhlIGlucHV0IHBhdGgsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgd2hhdCdzIGhhcHBlbmluZyB0byB0aGUgcGFja2V0cyBhcyB0aGV5IGNvbWUgaW4uXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGdvdCBhbGwgb3VyIGR1Y2tzIGluIGEgcm93IGNvbmZpZ3VyYXRpb24td2lzZS4gVGhlIGBYRlJNX0lQVEZTYCBmZWF0dXJlIGRlZmluaXRlbHkgcmVsaWVzIG9uIGBYRlJNYCwgd2hpY2ggSSdtIGZhbWlsaWFyIHdpdGguIEJ1dCBJJ20gZ29pbmcgdG8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCBwZXJoYXBzIGxlc3Mgb2J2aW91cywgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgaW4gYSBjcml0aWNhbCBwYXRoIGxpa2UgdGhpcy4gVGltZSBmb3IgYW5vdGhlciBsb29rIGF0IGBuZXQveGZybS9LY29uZmlnYCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gR290dGEgbWFrZSBzdXJlIHdlIGNvdmVyIGFsbCBiYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6MTkuMjAwNjI1NzZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcbiAxNDE6XFx0Y29uZmlnIFhGUk1fSVBURlNcXG4gMTQyOlxcdFxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4gMTQzOlxcdFxcdGRlcGVuZHMgb24gWEZSTVxcbiAxNDQ6XFx0XFx0aGVscFxcbiAxNDU6XFx0XFx0ICBJbmZvcm1hdGlvbiBvbiB0aGUgSVAtVEZTL0FHR0ZSQUcgZW5jYXBzdWxhdGlvbiBjYW4gYmUgZm91bmRcXG4gMTQ2OlxcdFxcdCAgaW4gUkZDIDkzNDcuIFRoaXMgZmVhdHVyZSBzdXBwb3J0cyBkZW1hbmQgZHJpdmVuIChpLmUuLFxcbiAxNDc6XFx0XFx0ICBub24tY29uc3RhbnQgc2VuZCByYXRlKSBJUC1URlMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlXFxuIDE0ODpcXHRcXHQgIEFHR0ZSQUcgRVNQIHBheWxvYWQgZW5jYXBzdWxhdGlvbi4gVGhpcyBwYXlsb2FkIHR5cGVcXG4gMTQ5OlxcdFxcdCAgc3VwcG9ydHMgYWdncmVnYXRpb24gYW5kIGZyYWdtZW50YXRpb24gb2YgdGhlIGlubmVyIElQXFxuIDE1MDpcXHRcXHQgIHBhY2tldCBzdHJlYW0gd2hpY2ggaW4gdHVybiB5aWVsZHMgaGlnaGVyIHNtYWxsLXBhY2tldFxcbiAxNTE6XFx0XFx0ICBiYW5kd2lkdGggYXMgd2VsbCBhcyByZWR1Y2luZyBNVFUvUE1UVSBpc3N1ZXMuIENvbmdlc3Rpb25cXG4gMTUyOlxcdFxcdCAgY29udHJvbCBpcyB1bmltcGxlbWVudGF0ZWQgYXMgdGhlIHNlbmQgcmF0ZSBpcyBkZW1hbmQgZHJpdmVuXFxuIDE1MzpcXHRcXHQgIHJhdGhlciB0aGFuIGNvbnN0YW50LlxcbiAxNTQ6XFx0XFxuIDE1NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE1NjpcXHRcXG4gMTU3OlxcdGNvbmZpZyBYRlJNX0VTUElOVENQXFxuIDE1ODpcXHRcXHRib29sXFxuIDE1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6MTkuMjAwODEzNDJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2NTU5NzQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgaXB0ZnMgTW9kdWxlKipcblxuUmlnaHQsIHNvLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgdGhlIGBYRlJNX0lQVEZTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBzZWVtcyB0byBiZSB0aGUgb25seSBvbmUgSSBhYnNvbHV0ZWx5IG5lZWQgdG8gZW5hYmxlIGZvciB0aGlzIG1vZHVsZS4gR29vZC4gTm93LCBsZXQncyBtYXAgb3V0IHRoZSBlbnRyeSBwb2ludHMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgaGFuZ3MgdG9nZXRoZXIuIEkgc2VlOiBgaXB0ZnNfaW5wdXRgLCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgLCBhbmQgYGlwdGZzX3VzZXJfaW5pdGAuIE9rYXksIG1ha2VzIHNlbnNlIHNvIGZhci4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBpcHRmc191c2VyX2luaXRgLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbW9kdWxlIGlzIGluaXRpYWxpemVkIGFuZCwgcG9zc2libHksIGhvdyBpdCBob29rcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTI2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MjoyMi4yNjY0MTU1ODdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTg5MzIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc191c2VyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNTEzPXN0YXRpYyB1MzIgaXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTIzLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTI0OiAqIGlwdGZzX3VzZXJfaW5pdCgpIC0gaW5pdGlhbGl6ZSB0aGUgU0Egd2l0aCBJUFRGUyBvcHRpb25zIGZyb20gbmV0bGluay5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUyNS0gKiBAbmV0OiB0aGUgbmV0IGRhdGFcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTMxLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTMyOnN0YXRpYyBpbnQgaXB0ZnNfdXNlcl9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fc3RhdGUgKngsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MzMtXFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI3Njg9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzItXFx0LmRlc3Ryb3lfc3RhdGUgPSBpcHRmc19kZXN0cm95X3N0YXRlLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzczOlxcdC51c2VyX2luaXQgPSBpcHRmc191c2VyX2luaXQsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzQtXFx0LmNvcHlfdG9fdXNlciA9IGlwdGZzX2NvcHlfdG9fdXNlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6MjIuMzgyMzE2Mjg1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTM0MDQxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBJbml0aWFsaXphdGlvbiBvZiBpcHRmcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgYGlwdGZzX3VzZXJfaW5pdGAgaXMgYSByZWFsbHkgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgb2YgdGhpcyB0aGluZy4gTGV0J3MgbWFrZSBzdXJlIHdlIGZvY3VzIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGlucHV0IGFuZCBvdXRwdXQsIG5hbWVseSBgaXB0ZnNfaW5wdXRgLCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBhbmQgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCwgaW4gYWRkaXRpb24gdG8gYGlwdGZzX3VzZXJfaW5pdGAgb2YgY291cnNlLlxuXG5CZWZvcmUgd2UgZGl2ZSB0b28gZGVlcCB0aG91Z2gsIEkgd2FudCB0byBjb25maXJtIHNvbWV0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgWEZSTWAgaXMgZW5hYmxlZC4gQWgsIHllcywgaXQgc2VlbXMgYFhGUk1gIGlzIHRoZSBwYXJlbnQgY29uZmlndXJhdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZSwgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gUmlnaHQsIGFuZCBJIHNlZSBgWEZSTV9JUFRGU2Agc3BlY2lmaWNhbGx5IGRlcGVuZHMgb24gYFhGUk1gLiBBbHJpZ2h0LCBJJ2xsIGdvIHRha2UgYSBsb29rIGF0IHRoZSBgWEZSTWAgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgdGhhdCBpcyBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE2NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MjoyNi4wMzU3MjU0MzNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjY0NTMzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNDItXFxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNTAtXFxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0vS2NvbmZpZy01Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNzEtXFxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxubmV0L3hmcm0vS2NvbmZpZy03My1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxcbm5ldC94ZnJtL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTA1LVxcbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE0MC1cXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xcbm5ldC94ZnJtL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTU2LVxcbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MjoyNi4xNjIzODA3NTFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcyMDc5NTQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIERlY2lzaW9uIGZvciBYRlJNLCBYRlJNX1VTRVIsIGFuZCBYRlJNX0lQVEZTKipcblxuT2theSwgc28gYFhGUk1gIGlzIGEgY29yZSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0eXBpY2FsbHkgZW5hYmxlZCBieSBvdGhlciBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdXNlciBjYW4gaW50ZXJhY3Qgd2l0aCBpdC4gTGV0J3Mgc2VlLi4uIEFoLCB5ZXMsIGBYRlJNX1VTRVJgIGlzIGluZGVlZCB0aGUgTmV0bGluayBpbnRlcmZhY2Ugd2UgbmVlZCB0byBjb25maWd1cmUgWEZSTSBmcm9tIHVzZXJzcGFjZS4gU28sIGl0IG1ha2VzIHNlbnNlIHRvIGVuYWJsZSBgWEZSTV9VU0VSYCBhbG9uZyB3aXRoIGBYRlJNYC5cblxuTm93LCBsZXQncyByZXZpc2l0IGBYRlJNX0lQVEZTYC4gSG1tLCBsZXQgbWUgY2hlY2sgdGhlIGRlZmluaXRpb24uLi4gT2theSwgc28gYFhGUk1fSVBURlNgJ3MgZGVwZW5kZW5jaWVzIGNvbmZpcm0gdGhhdCBpdCBpcyBlbm91Z2ggdG8gZW5hYmxlIHRoZSBjb2RlLiBUaGVyZWZvcmUsIEknbGwgaW5jbHVkZSBgWEZSTV9JUFRGU2AsIGFsb25nIHdpdGggYFhGUk1gIGFuZCBgWEZSTV9VU0VSYCBpbiBteSBjb25maWd1cmF0aW9uLiBJdCB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBhY2Nlc3MuXG5cblJlZ2FyZGluZyB0aGUgcGF0Y2gsIGl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaXNzdWUgd2l0aGluIGBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrYC4gVGhlIGZpeCBpbnZvbHZlcyBhIGNoZWNrIHdpdGhpbiBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBzaG91bGQgYWx3YXlzIGJlIGZ1enplZCB0aG9yb3VnaGx5LiBJJ2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgZm9yIGZ1dHVyZSB0ZXN0aW5nLlxuXG5JIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzIGR1cmluZyBmdXp6aW5nOiBgaXB0ZnNfaW5wdXRgLCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgLCBhbmQgYGlwdGZzX3VzZXJfaW5pdGAuIFRoZXkgYXJlIG1vc3QgbGlrZWx5IHRvIGJlIGFmZmVjdGVkIGJ5IHRoaXMgZml4LlxuXG5BbHJpZ2h0LCBJJ2xsIHJlY29yZCB0aGlzIGRlY2lzaW9uIG5vdyB3aXRoIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMxNCwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6MzEuODgzMTc5NzM2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODU2ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX0lQVEZTXCIsXG4gICAgXCJYRlJNXCIsXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHRmc19pbnB1dFwiLFxuICAgIFwiaXB0ZnNfb3V0cHV0X2NvbGxlY3RcIixcbiAgICBcImlwdGZzX3ByZXBhcmVfb3V0cHV0XCIsXG4gICAgXCJpcHRmc191c2VyX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsa2AgYnkgYWRkaW5nIGEgYm91bmRzIGNoZWNrIGluIGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVAtVEZTL0FHR0ZSQUcgZW5jYXBzdWxhdGlvbiBzdXBwb3J0IGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1haW4gZW50cnkgcG9pbnRzIG9mIHRoZSBYRlJNIElQVEZTIG1vZGUsIHN1Y2ggYXMgYGlwdGZzX2lucHV0YCwgYGlwdGZzX291dHB1dF9jb2xsZWN0YCwgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCwgYW5kIGBpcHRmc191c2VyX2luaXRgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fSVBURlNcIixcbiAgICBcIlhGUk1cIixcbiAgICBcIlhGUk1fVVNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwdGZzX2lucHV0XCIsXG4gICAgXCJpcHRmc19vdXRwdXRfY29sbGVjdFwiLFxuICAgIFwiaXB0ZnNfcHJlcGFyZV9vdXRwdXRcIixcbiAgICBcImlwdGZzX3VzZXJfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIGBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrYCBieSBhZGRpbmcgYSBib3VuZHMgY2hlY2sgaW4gYGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUC1URlMvQUdHRlJBRyBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbWFpbiBlbnRyeSBwb2ludHMgb2YgdGhlIFhGUk0gSVBURlMgbW9kZSwgc3VjaCBhcyBgaXB0ZnNfaW5wdXRgLCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgLCBhbmQgYGlwdGZzX3VzZXJfaW5pdGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgj69g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 00:20:38 +0000 UTC FinishedAt: 2026-07-29 00:52:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b515dc54795ef370be3cb396e7c12ad91686b6d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_IPTFS", "XFRM", "XFRM_USER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b515dc54795ef370be3cb396e7c12ad91686b6d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_IPTFS", "XFRM", "XFRM_USER" ], "series_id": "7c5b8a00-1dd8-4088-a2ae-341cb7fead36" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "iptfs_input", "iptfs_output_collect", "iptfs_prepare_output", "iptfs_user_init" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OywKICAgICYjMzQ7WEZSTSYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHRmc19pbnB1dCYjMzQ7LAogICAgJiMzNDtpcHRmc19vdXRwdXRfY29sbGVjdCYjMzQ7LAogICAgJiMzNDtpcHRmc19wcmVwYXJlX291dHB1dCYjMzQ7LAogICAgJiMzNDtpcHRmc191c2VyX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGtgIGJ5IGFkZGluZyBhIGJvdW5kcyBjaGVjayBpbiBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtYWluIGVudHJ5IHBvaW50cyBvZiB0aGUgWEZSTSBJUFRGUyBtb2RlLCBzdWNoIGFzIGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRfY29sbGVjdGAsIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGFuZCBgaXB0ZnNfdXNlcl9pbml0YC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE3NTUyYzE5ZjhjN2MxNGE1ZGQ5NTVjYWUxMDJjNGNhNjNmMGNlZmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAwMDo1MDozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLjJjZTE1YzQ3MmNjNGQgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTQxNiw2ICYjNDM7NDE2LDE0IEBAIHN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSB8fCBza2ItXHUwMDNlcHBfcmVjeWNsZSAhPSB3YWxrLVx1MDAzZXBwX3JlY3ljbGUpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHQvKiBSZWplY3QgYW4gQG9mZnNldCB0aGF0IGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJiMzOTtzIGRhdGFcbiYjNDM7XHQgKiBiZWZvcmUgY2FsbGluZyBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKCksIHdob3NlIGZyYWdtZW50LWFkdmFuY2VcbiYjNDM7XHQgKiBsb29wIGlzIG90aGVyd2lzZSB1bmJvdW5kZWQgYW5kIHdvdWxkIGluZGV4IHBhc3Qgd2Fsay1cdTAwM2VmcmFnc1tdLlxuJiM0MztcdCAqIFRoaXMgbWlycm9ycyB0aGUgZ3VhcmQgYWxyZWFkeSBwcmVzZW50IGluIGlwdGZzX3NrYl9hZGRfZnJhZ3MoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXdhbGstXHUwMDNlbnJfZnJhZ3MgfHwgb2Zmc2V0IFx1MDAzZT0gd2Fsay1cdTAwM2V0b3RhbCAmIzQzOyB3YWxrLVx1MDAzZWluaXRpYWxfb2Zmc2V0KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdC8qIE1ha2Ugb2Zmc2V0IHJlbGF0aXZlIHRvIGN1cnJlbnQgZnJhZyBhZnRlciBzZXR0aW5nIHRoYXQgKi9cbiBcdG9mZnNldCA9IGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsod2Fsaywgb2Zmc2V0KTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTV9JUFRGUyYjMzQ7LAogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdGZzX2lucHV0JiMzNDssCiAgICAmIzM0O2lwdGZzX291dHB1dF9jb2xsZWN0JiMzNDssCiAgICAmIzM0O2lwdGZzX3ByZXBhcmVfb3V0cHV0JiMzNDssCiAgICAmIzM0O2lwdGZzX3VzZXJfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsa2AgYnkgYWRkaW5nIGEgYm91bmRzIGNoZWNrIGluIGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVAtVEZTL0FHR0ZSQUcgZW5jYXBzdWxhdGlvbiBzdXBwb3J0IGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1haW4gZW50cnkgcG9pbnRzIG9mIHRoZSBYRlJNIElQVEZTIG1vZGUsIHN1Y2ggYXMgYGlwdGZzX2lucHV0YCwgYGlwdGZzX291dHB1dF9jb2xsZWN0YCwgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCwgYW5kIGBpcHRmc191c2VyX2luaXRgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTc1NTJjMTlmOGM3YzE0YTVkZDk1NWNhZTEwMmM0Y2E2M2YwY2VmYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDI5IDAwOjUwOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pcHRmcy5jIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jCmluZGV4IDU5N2FlZGVhYzI2ZWIuLjJjZTE1YzQ3MmNjNGQgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2lwdGZzLmMKQEAgLTQxNiw2ICYjNDM7NDE2LDE0IEBAIHN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikgfHwgc2tiLSZndDtwcF9yZWN5Y2xlICE9IHdhbGstJmd0O3BwX3JlY3ljbGUpCiAJCXJldHVybiBmYWxzZTsKIAomIzQzOwkvKiBSZWplY3QgYW4gQG9mZnNldCB0aGF0IGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJiMzOTtzIGRhdGEKJiM0MzsJICogYmVmb3JlIGNhbGxpbmcgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2FsaygpLCB3aG9zZSBmcmFnbWVudC1hZHZhbmNlCiYjNDM7CSAqIGxvb3AgaXMgb3RoZXJ3aXNlIHVuYm91bmRlZCBhbmQgd291bGQgaW5kZXggcGFzdCB3YWxrLSZndDtmcmFnc1tdLgomIzQzOwkgKiBUaGlzIG1pcnJvcnMgdGhlIGd1YXJkIGFscmVhZHkgcHJlc2VudCBpbiBpcHRmc19za2JfYWRkX2ZyYWdzKCkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXdhbGstJmd0O25yX2ZyYWdzIHx8IG9mZnNldCAmZ3Q7PSB3YWxrLSZndDt0b3RhbCAmIzQzOyB3YWxrLSZndDtpbml0aWFsX29mZnNldCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAkvKiBNYWtlIG9mZnNldCByZWxhdGl2ZSB0byBjdXJyZW50IGZyYWcgYWZ0ZXIgc2V0dGluZyB0aGF0ICovCiAJb2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IFhGUk0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgYWRkZWQgYSBjcnVjaWFsIGNoZWNrIHdpdGhpbiBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgOiBhIGd1YXJkIGFnYWluc3QgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBjb2RlIHNuaXBwZXQgc3BlY2lmaWNhbGx5IGNoZWNrcyBpZiB0aGUgcHJvdmlkZWQgYEBvZmZzZXRgIGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJiMzOTtzIGRhdGEuIFRoaXMgcHJldmVudHMgYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGtgIGZyb20gZ29pbmcgaGF5d2lyZSB3aXRoIGl0cyBmcmFnbWVudCBpbmRleGluZywgd2hpY2ggY291bGQgbGVhZCB0byBtYWpvciBpc3N1ZXMuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBhIHZ1bG5lcmFiaWxpdHkuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgY2hhbmdlLCBhIGdvb2QgbmV4dCBzdGVwIGlzIHRvIGluaXRpYXRlIGEgZnV6emluZyBjYW1wYWlnbiBhZ2FpbnN0IGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgYW5kIHRoZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGludm9sdmVkLiBEaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZSBpcyBuZWNlc3NhcnkgdG8gZGlzY292ZXIgdGhlIGVudHJ5IHBvaW50cyB0byBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLCB3aGljaCYjMzk7bGwgaGVscCBtZSBidWlsZCB0YXJnZXRlZCBmdXp6IGlucHV0cy4gVGhlbiwgSSBjYW4gZm9jdXMgb24gaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCB0byB0cmlnZ2VyIHRoZSB2dWxuZXJhYmxlIGNvZGUgcGF0aC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUga2V5IHRvIGRlc2lnbmluZyBlZmZpY2llbnQgZnV6emluZyBzY2VuYXJpb3MgYW5kIHRob3JvdWdobHkgdGVzdGluZyB0aGUgcGF0Y2gmIzM5O3MgZWZmaWNhY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTM4MD1zdGF0aWMgdTMyIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwMC0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0MDE6ICogaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoKSAtIGNoZWNrIGlmIG9rIHRvIGFkZCBmcmFncyBmcm9tIHdhbGsgdG8gc2tiXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDAyLSAqIEBza2I6IHNrYiB0byBjaGVjayBmb3IgYWRkaW5nIGZyYWdzIHRvXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwOC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0MDk6c3RhdGljIGJvb2wgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MTAtXHRcdFx0XHQgICAgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ1OC0gKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ1OTogKiBpcHRmc19za2JfY2FuX2FkZF9mcmFncygpIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gdG8gdmVyaWZ5XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDYwLSAqIHRoYXQgdGhlIGRlc3RpbmF0aW9uIEBza2IgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSB3YWxrIGFuZCBoYXMgc3BhY2UgaW4gdGhlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTU0MT1pcHRmc19wc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2Fsayxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTUwLVx0LyogdGhpcyBzaG91bGQgbm90IG5vcm1hbGx5IGJlIGhhcHBlbmluZyAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjU1MTpcdGlmICghaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3Moc2tiLCB3YWxrLCBvZmYgJiM0MzsgY29weV9sZW4sXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTUyLVx0XHRcdFx0ICAgICBsZW4gLSBjb3B5X2xlbikpIHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzUwPXN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkwOS1cdGlmIChmcmFnd2FsayBcdTAwMjZcdTAwMjZcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5MTA6XHQgICAgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MobmV3c2tiLCBmcmFnd2FsaywgZGF0YSwgY29weWxlbikpIHtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MTEtXHRcdGlwdGZzX3NrYl9hZGRfZnJhZ3MobmV3c2tiLCBmcmFnd2FsaywgZGF0YSwgY29weWxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIGB4ZnJtX2lwdGZzLmNgIC0gYSBEZWVwZXIgTG9vayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYGlwdGZzYCBzeXN0ZW0gaGFuZGxlcyBwYWNrZXQgZnJhZ21lbnRhdGlvbi4gVGhlIGZ1bmN0aW9uIGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2AgaXMgY2xlYXJseSBhIGNyaXRpY2FsIGNvbXBvbmVudC4gSXTigJlzIGJlaW5nIGNhbGxlZCBmcm9tIGJvdGggYGlwdGZzX3Bza2JfYWRkX2ZyYWdzYCwgd2hpY2ggbGlrZWx5IGRlYWxzIHdpdGggcHJlLWV4aXN0aW5nIGZyYWdtZW50ZWQgcGFja2V0cywgYW5kIGBpcHRmc19yZWFzc2VtX2NvbnRgLCB3aGljaCBwcm9iYWJseSBoYW5kbGVzIHRoZSAqcmVhc3NlbWJseSogb2YgZnJhZ21lbnRzLiBUaGlzIHRlbGxzIG1lIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgY29kZSBpbiB0aGF0IGZpbGUsIGNoZWNraW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBvdmVyYWxsIGltcGFjdCBvZiB0aG9zZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBsZXZlcnMgSSBjYW4gdHdlYWshCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9pcHRmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgJiM0Mzs9IHhmcm1faW50ZXJmYWNlLm9cbm5ldC94ZnJtL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19YRlJNX0lQVEZTKSAmIzQzOz0geGZybV9pcHRmcy5vXG5uZXQveGZybS9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgJiM0Mzs9IGVzcGludGNwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFhGUk1fSVBURlMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgYFhGUk1fSVBURlNgIGNvbmZpZyBpcyBhY3RpdmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsaWVzIG9uLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzIG9yIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgKm11c3QqIGJlIGVuYWJsZWQgZm9yIGBYRlJNX0lQVEZTYCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFdoYXQgY291bGQgZ28gd3JvbmcgaWYgdGhvc2UgYXJlIG1pc3Npbmcgb3IgbWlzY29uZmlndXJlZD8gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHF1aWNrbHkgaWRlbnRpZnlpbmcgYW5kIGVsaW1pbmF0aW5nIGFueSBwb3RlbnRpYWwgcm9hZGJsb2NrcyBvciBjb21wYXRpYmlsaXR5IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uLCBzbyBJIHdhbnQgdG8ga25vdyBleGFjdGx5IHdoYXQgaXRzIGZ1bmN0aW9uYWwgcmVxdWlyZW1lbnRzIGFyZS4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhvc2UgcmVsYXRpb25zaGlwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9JUFRGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTQwLVxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcbm5ldC94ZnJtL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFhGUk0gS2NvbmZpZyBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQveGZybS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTQxLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBYRlJNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBzd2l0Y2hlcyB0aGF0IGRldGVybWluZSB3aGljaCBYRlJNIGZ1bmN0aW9uYWxpdGllcyBhcmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgbGlrZWx5IHRoZXJlJiMzOTtzIGEgZGVwZW5kZW5jeSBjaGFpbiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCB0aGlzIHNlY3Rpb24gaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgd2hpY2ggWEZSTSBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIG1vZHVsZXMuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGdyYW51bGFyIGNvbnRyb2xzLCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBvdGhlciBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgbmV3IG9wdGlvbnMgdGhhdCBtaWdodCBoYXZlIGJlZW4gYWRkZWQgc2luY2UgdGhlIGxhc3QgdGltZSBJIGR1ZyBpbnRvIHRoaXMgYXJlYS4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGtub2JzIGZvciBYRlJNIGluIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTM1Olx0XHQgIGNoYW5nZSB0aGVpciBhdHRhY2htZW50IHBvaW50IHRvIHRoZSBJbnRlcm5ldC4gIERldGFpbFxuIDEzNjpcdFx0ICBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIGludGVybmV0LWRyYWZ0XG4gMTM3Olx0XHQgIFx1MDAzY2RyYWZ0LXN1Z2ltb3RvLW1pcDYtcGZrZXktbWlncmF0ZVx1MDAzZS5cbiAxMzg6XHRcbiAxMzk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNDA6XHRcbiAxNDE6XHRjb25maWcgWEZSTV9JUFRGU1xuIDE0MjpcdFx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiAxNDM6XHRcdGRlcGVuZHMgb24gWEZSTVxuIDE0NDpcdFx0aGVscFxuIDE0NTpcdFx0ICBJbmZvcm1hdGlvbiBvbiB0aGUgSVAtVEZTL0FHR0ZSQUcgZW5jYXBzdWxhdGlvbiBjYW4gYmUgZm91bmRcbiAxNDY6XHRcdCAgaW4gUkZDIDkzNDcuIFRoaXMgZmVhdHVyZSBzdXBwb3J0cyBkZW1hbmQgZHJpdmVuIChpLmUuLFxuIDE0NzpcdFx0ICBub24tY29uc3RhbnQgc2VuZCByYXRlKSBJUC1URlMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlXG4gMTQ4Olx0XHQgIEFHR0ZSQUcgRVNQIHBheWxvYWQgZW5jYXBzdWxhdGlvbi4gVGhpcyBwYXlsb2FkIHR5cGVcbiAxNDk6XHRcdCAgc3VwcG9ydHMgYWdncmVnYXRpb24gYW5kIGZyYWdtZW50YXRpb24gb2YgdGhlIGlubmVyIElQXG4gMTUwOlx0XHQgIHBhY2tldCBzdHJlYW0gd2hpY2ggaW4gdHVybiB5aWVsZHMgaGlnaGVyIHNtYWxsLXBhY2tldFxuIDE1MTpcdFx0ICBiYW5kd2lkdGggYXMgd2VsbCBhcyByZWR1Y2luZyBNVFUvUE1UVSBpc3N1ZXMuIENvbmdlc3Rpb25cbiAxNTI6XHRcdCAgY29udHJvbCBpcyB1bmltcGxlbWVudGF0ZWQgYXMgdGhlIHNlbmQgcmF0ZSBpcyBkZW1hbmQgZHJpdmVuXG4gMTUzOlx0XHQgIHJhdGhlciB0aGFuIGNvbnN0YW50LlxuIDE1NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjYxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlhGUk0gJmFtcDsgSVBURlMgRnV6emluZyBTdHJhdGVneSoqCgpSaWdodCwgdGhpcyBoaW5nZXMgb24gYFhGUk1gLiBUaGF0JiMzOTtzIHRoZSBjb3JlLiBTbyBJJiMzOTttIHRoaW5raW5nLCBzcGVjaWZpY2FsbHksIEkgbmVlZCBib3RoIGBYRlJNX0lQVEZTYCBhbmQgYFhGUk1gIGVuYWJsZWQgdG8gZXZlbiBiZWdpbi4gVGhvc2UgYXJlIHRoZSBwcmVyZXF1aXNpdGVzLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGF0dGFjayBwb2ludHMgZm9yIGZ1enppbmcuIFdoZXJlIGRvIEkgZmluZCB0aGUgZW50cnkgcG9pbnRzIHRvIHN0YXJ0IHRocm93aW5nIGp1bmsgYXQgdGhlIHN5c3RlbT8KCk9rYXksIGBpcHRmc19yZWFzc2VtX2NvbnRgIGxvb2tzIHByb21pc2luZy4gVGhhdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggb2Z0ZW4gbWVhbnMgaXQmIzM5O3MgcHJldHR5IGNvbnRhaW5lZC4gVGhhdCYjMzk7cyBnb29kIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlIC0gbWFrZXMgaXQgZWFzaWVyIHRvIHRyYWNrLiBOb3cgSSBqdXN0IG5lZWQgdG8gZmluZCBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGlwdGZzX3JlYXNzZW1fY29udGAuIFNlZSB3aGVyZSB0aGF0IGNhbiBnZXQgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdGZzX3JlYXNzZW1fY29udCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9NzMwPXN0YXRpYyB2b2lkIGlwdGZzX3JlYXNzZW1fZG9uZShzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzUtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzM2OiAqIGlwdGZzX3JlYXNzZW1fY29udCgpIC0gQ29udGludWUgdGhlIHJlYXNzZW1ibHkgb2YgYW4gaW5uZXIgcGFja2V0cy5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzctICogQHh0ZnM6IHh0ZnMgc3RhdGVcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzQ5LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1MDpzdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc1MS1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTEyMjY9c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfb3JkZXJlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI4Ny1cdFx0aWYgKGJsa29mZiB8fCB4dGZzLVx1MDAzZXJhX3J1bnRsZW4gfHwgeHRmcy1cdTAwM2VyYV9uZXdza2IpIHtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjg4Olx0XHRcdGRhdGEgPSBpcHRmc19yZWFzc2VtX2NvbnQoeHRmcywgc2VxLCBcdTAwMjZza2JzZXEsIHNrYiwgZGF0YSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjg5LVx0XHRcdFx0XHRcdCAgYmxrb2ZmLCBcdTAwMjZzdWJsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBpcHRmc2AgTmV0d29yayBGbG93KioKCk9rYXksIHNvIGBpcHRmc19pbnB1dF9vcmRlcmVkYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyB0aGluZ3Mgb2ZmLCBhbmQgZnJvbSB3aGF0IEkgc2VlLCBpdCBpbW1lZGlhdGVseSBoYW5kcyB0aGluZ3Mgb3ZlciB0byBgaXB0ZnNfcmVhc3NlbV9jb250YC4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyAqY2FsbGluZyogYGlwdGZzX2lucHV0X29yZGVyZWRgLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgZmlyc3Qgc3RlcCB3aGVuIHRyeWluZyB0byBmb2xsb3cgYSBzaWduYWwsIHJpZ2h0PyBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGl0IGJhY2sgdXAgdGhlIGNhbGwgc3RhY2sgdG8gc2VlIHdoZXJlIHRoZSBkYXRhIG9yIHRoZSB0cmlnZ2VyIGlzIG9yaWdpbmF0aW5nLiBLbm93aW5nIGl0cyBwYXJlbnRzIHdpbGwgcHJvdmlkZSBpbXBvcnRhbnQgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBmZWVkaW5nIGRhdGEgaW50byB0aGlzIHByb2Nlc3MgYW5kIHdoYXQgdGhlIHVsdGltYXRlIGdvYWxzIG9mIHRoaXMgZmxvdyBhcmUuIFNvLCBsZXQmIzM5O3MgZXhwbG9yZSB0aGUgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfaW5wdXRfb3JkZXJlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9OTUxPXN0YXRpYyBib29sIF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgZGF0YSxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIxOS0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjIwOiAqIGlwdGZzX2lucHV0X29yZGVyZWQoKSAtIGhhbmRsZSBuZXh0IGluIG9yZGVyIElQVEZTIHBheWxvYWQuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIyMS0gKiBAeDogeGZybSBzdGF0ZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjI1LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMjY6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfb3JkZXJlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjI3LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTY3Nj1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZHJvcF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDctXHRcdFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzA4Olx0XHRcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzA5LVx0XHR9XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE3MjU9c3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczMi1cdGlmICh4dGZzLVx1MDAzZWNmZy5yZW9yZGVyX3dpbl9zaXplID09IDApIHtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzMzOlx0XHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczNC1cdFx0Z290byBkb25lO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ4LVx0XHRza2JfbGlzdF9kZWxfaW5pdChza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDk6XHRcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzUwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTc1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqRGl2aW5nIGludG8gYGlwdGZzX2lucHV0YCoqCgpPa2F5LCBzbyBgaXB0ZnNfaW5wdXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBJdCYjMzk7cyB0aGUgZnJvbnQgZG9vciwgdGhlIGZpcnN0IGZ1bmN0aW9uIHRoYXQmIzM5O3MgbGlrZWx5IGNhbGxlZCB3aGVuIGEgY2VydGFpbiBwcm9jZXNzIGlzIGFjdGl2ZS4gVG8gdHJ1bHkgdW5kZXJzdGFuZCBpdHMgcm9sZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBfY2FsbHNfIGBpcHRmc19pbnB1dGAuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBpbGx1bWluYXRlIGl0cyBwdXJwb3NlLCBpdHMgY29udGV4dCwgYW5kIHdoYXQgZGF0YSBpdCYjMzk7cyBsaWtlbHkgb3BlcmF0aW5nIG9uLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIGNhbGxlZCBzbyB0aGF0IEkgY2FuIGZpZ3VyZSBvdXQgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9NTg2PWlwdGZzX3Bza2JfZXh0cmFjdF9zZXEodTMyIHNrYmxlbiwgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCB1MzIgb2ZmLCBpbnQgbGVuKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MDAtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjAxOiAqIGlwdGZzX2lucHV0X3NhdmVfcnVudCgpIC0gc2F2ZSBkYXRhIGluIHh0ZnMgcnVudCBzcGFjZS5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MDItICogQHh0ZnM6IHh0ZnMgc3RhdGVcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjA5LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjYxMDpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9zYXZlX3J1bnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MTEtXHRcdFx0XHQgIHU4ICpidWYsIGludCBsZW4pXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTk1MT1zdGF0aWMgYm9vbCBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIGRhdGEsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMDEtXHRcdFx0XHQvKiBzYXZlIHRoZSBieXRlcyB3ZSBoYXZlLCBhZHZhbmNlIGRhdGEgYW5kIGV4aXQgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDAyOlx0XHRcdFx0aXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHh0ZnMsIHNlcSwgaGJ5dGVzLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMDMtXHRcdFx0XHRcdFx0ICAgICAgcmVtYWluaW5nKTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAyMC1cdFx0XHRcdC8qIHNhdmUgdGhlIGJ5dGVzIHdlIGhhdmUsIGFkdmFuY2UgZGF0YSBhbmQgZXhpdCAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjEwMjE6XHRcdFx0XHRpcHRmc19pbnB1dF9zYXZlX3J1bnQoeHRmcywgc2VxLCBoYnl0ZXMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAyMi1cdFx0XHRcdFx0XHQgICAgICByZW1haW5pbmcpO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjE5LS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMjA6ICogaXB0ZnNfaW5wdXRfb3JkZXJlZCgpIC0gaGFuZGxlIG5leHQgaW4gb3JkZXIgSVBURlMgcGF5bG9hZC5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjIxLSAqIEB4OiB4ZnJtIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjUtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTIyNjpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjcte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xNDgyPXN0YXRpYyB2b2lkIF9fcmVvcmRlcl9mdXR1cmVfc2hpZnRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MjctICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTYyODpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9yZW9yZGVyKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYyOS1cdFx0XHRcdHN0cnVjdCBza19idWZmICppbnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTY3Nj1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZHJvcF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDctXHRcdFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzA4Olx0XHRcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzA5LVx0XHR9XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MTUtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcxNjogKiBpcHRmc19pbnB1dCgpIC0gaGFuZGxlIHJlY2VpcHQgb2YgaXB0ZnMgcGF5bG9hZFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MTctICogQHg6IHhmcm0gc3RhdGVcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcyNC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzI1OnN0YXRpYyBpbnQgaXB0ZnNfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcyNi17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzItXHRpZiAoeHRmcy1cdTAwM2VjZmcucmVvcmRlcl93aW5fc2l6ZSA9PSAwKSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTczMzpcdFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzQtXHRcdGdvdG8gZG9uZTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc0My1cdHNwaW5fbG9jayhcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfbG9jayk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc0NDpcdGlwdGZzX2lucHV0X3Jlb3JkZXIoeHRmcywgc2tiLCBcdTAwMjZsaXN0LCBcdTAwMjZmcmVlbGlzdCk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc0NS1cdHNwaW5fdW5sb2NrKFx1MDAyNnh0ZnMtXHUwMDNlZHJvcF9sb2NrKTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc0OC1cdFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzQ5Olx0XHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc1MC1cdH1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc2OD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzYtXHQuZ2V0X2lubmVyX210dSA9IGlwdGZzX2dldF9pbm5lcl9tdHUsXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3NzpcdC5pbnB1dCA9IGlwdGZzX2lucHV0LFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzgtXHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIElQVEZTIENhbGxiYWNrIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBgaXB0ZnNfaW5wdXRgIGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aGluIGBpcHRmc19tb2RlX2Nic2AuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMgaW50ZXJhY3Rpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKndoYXQgZWxzZSogaXMgaGFuZ2luZyBvdXQgaW4gYGlwdGZzX21vZGVfY2JzYD8gVW5kZXJzdGFuZGluZyB0aGUgZW50aXJlIGNvbnRleHQgb2YgdGhhdCBjYWxsYmFjayBzdHJ1Y3R1cmUgaXMgdGhlIGtleSB0byBzZWVpbmcgaG93IHRoaXMgYGlwdGZzX2lucHV0YCBmdW5jdGlvbiBmaXRzIGluIGFuZCB3aGF0IGl0cyByZWxhdGlvbnNoaXBzIGFyZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gZ2V0IGEgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIHRoYXQgc3RydWN0dXJlIGNvbnRhaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19tb2RlX2NicyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9MjczMj1zdGF0aWMgdm9pZCBpcHRmc19kZXN0cm95X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzY3LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3Njg6c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NjktXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc4Mj1zdGF0aWMgaW50IF9faW5pdCB4ZnJtX2lwdGZzX2luaXQodm9pZClcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc4Ny1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzg4Olx0ZXJyID0geGZybV9yZWdpc3Rlcl9tb2RlX2NicyhYRlJNX01PREVfSVBURlMsIFx1MDAyNmlwdGZzX21vZGVfY2JzKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzg5LVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkZvY3VzaW5nIEZ1enppbmcgRWZmb3J0cyBmb3IgWEZSTV9NT0RFX0lQVEZTKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCBzZWVtcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIGBYRlJNX01PREVfSVBURlNgIGFyZSB0aGUgaW5wdXQgYW5kIG91dHB1dCBjYWxsYmFja3M6IHNwZWNpZmljYWxseSwgYGlwdGZzX2lucHV0YCBhbmQgYGlwdGZzX291dHB1dF9jb2xsZWN0YC4gR2l2ZW4gdGhhdCwgZnV6emluZyB0aG9zZSB0d28gZnVuY3Rpb25zIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBhcHByb2FjaCB0byB1bmNvdmVyIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRoZXkmIzM5O3JlIGxpa2VseSB0aGUgYXJlYXMgd2hlcmUgdGhlIG1vc3QgY29tcGxleCBsb2dpYyByZXNpZGVzIHJlbGF0ZWQgdG8gdGhpcyBtb2RlLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBJJiMzOTttIG92ZXJsb29raW5nLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBidXQgdGhlc2UgYXJlIHRoZSBvYnZpb3VzIGluaXRpYWwgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfb3V0cHV0X2NvbGxlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTE4MTY9c3RhdGljIGludCBpcHRmc19pc190b29fYmlnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBtdHUpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4NDAtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTg0MTpzdGF0aWMgaW50IGlwdGZzX291dHB1dF9jb2xsZWN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4NDIte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3Ny1cdC5pbnB1dCA9IGlwdGZzX2lucHV0LFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3Nzg6XHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3OS1cdC5wcmVwYXJlX291dHB1dCA9IGlwdGZzX3ByZXBhcmVfb3V0cHV0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTE5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBBbm90aGVyIE9uZSEqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgY29kZSwgdHJ5aW5nIHRvIGdldCBhIGdyYXNwIG9uIGl0cyBmdW5jdGlvbi4gSSYjMzk7dmUgYWxyZWFkeSB0YWNrbGVkIGEgZmV3IG90aGVyIGNvbXBvbmVudHMsIGFuZCBub3csICYjMzQ7aXB0ZnNcX3ByZXBhcmVcX291dHB1dCYjMzQ7IGNhdGNoZXMgbXkgZXllLiBUaGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gbmFtZSBnaXZlcyBtZSBhIGhpbnQ7IGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgcHJlcGFyaW5nIHRoZSBvdXRwdXQgZGF0YSwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgSVBGUyBwcm9jZXNzLiBJdCBzb3VuZHMgbGlrZSBhIGNvcmUgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIHdoYXQmIzM5O3MgbmVlZGVkIGZvciB0aGUgZXZlbnR1YWwgcmVzcG9uc2Ugb3IgZGF0YSBzdHJ1Y3R1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoaXMgb25lIGZpdHMgaW50byB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGZvcm1hdHRpbmcgb3Igc3RydWN0dXJpbmcgaW5mb3JtYXRpb24gYmVmb3JlIGl0JiMzOTtzIGRlbGl2ZXJlZCBlbHNld2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdGZzX3ByZXBhcmVfb3V0cHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNDI2PXN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjAtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ2MTogKiBpcHRmc19wcmVwYXJlX291dHB1dCgpIC0gIHByZXBhcmUgdGhlIHNrYiBmb3Igb3V0cHV0XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2Mi0gKiBAeDogeGZybSBzdGF0ZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY5LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0NzA6c3RhdGljIGludCBpcHRmc19wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDcxLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc2OD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzgtXHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3OTpcdC5wcmVwYXJlX291dHB1dCA9IGlwdGZzX3ByZXBhcmVfb3V0cHV0LFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3ODAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ4MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgaXB0ZnNfbW9kZV9jYnNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaXB0ZnNfbW9kZV9jYnNgIHRoaW5nLiBJJiMzOTt2ZSBnb3QgYSBzcGVjaWZpYyB0YXNrIGluIG1pbmQgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGNvbXBvbmVudCBmaXRzIGludG8gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIFNvLCBteSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvICYjMzQ7V2hhdCBlbHNlIGlzIGluIHRoaXM/JiMzNDsuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSwgYW5kIGVmZmljaWVudGx5IGJlZ2luIHRvIGV4cGxvcmUgdGhlIGNvbnRlbnRzIG9mIGBpcHRmc19tb2RlX2Nic2AsIGhvcGVmdWxseSB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBmdW5jdGlvbi4gTXkgbWFpbiBnb2FsIHdpbGwgYmUgdG8gZGV2ZWxvcCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuY3Rpb25hbGl0eSBwcmVzZW50IHdpdGhpbiB0aGlzIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc2OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzY4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xuMjc2OTpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4yNzcwOlx0XHQuaW5pdF9zdGF0ZSA9IGlwdGZzX2luaXRfc3RhdGUsXG4yNzcxOlx0XHQuY2xvbmVfc3RhdGUgPSBpcHRmc19jbG9uZV9zdGF0ZSxcbjI3NzI6XHRcdC5kZXN0cm95X3N0YXRlID0gaXB0ZnNfZGVzdHJveV9zdGF0ZSxcbjI3NzM6XHRcdC51c2VyX2luaXQgPSBpcHRmc191c2VyX2luaXQsXG4yNzc0Olx0XHQuY29weV90b191c2VyID0gaXB0ZnNfY29weV90b191c2VyLFxuMjc3NTpcdFx0LnNhX2xlbiA9IGlwdGZzX3NhX2xlbixcbjI3NzY6XHRcdC5nZXRfaW5uZXJfbXR1ID0gaXB0ZnNfZ2V0X2lubmVyX210dSxcbjI3Nzc6XHRcdC5pbnB1dCA9IGlwdGZzX2lucHV0LFxuMjc3ODpcdFx0Lm91dHB1dCA9IGlwdGZzX291dHB1dF9jb2xsZWN0LFxuMjc3OTpcdFx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXG4yNzgwOlx0fTtcbjI3ODE6XHRcbjI3ODI6XHRzdGF0aWMgaW50IF9faW5pdCB4ZnJtX2lwdGZzX2luaXQodm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk3NQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvcmUgSVBURlMgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIFRoaW5raW5nIGFib3V0IHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGxpa2VseSBsaWUsIGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRfY29sbGVjdGAsIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGFuZCBgaXB0ZnNfdXNlcl9pbml0YCBsb29rIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgcmV2aWV3LiBUaGV5IGFsbCBzZWVtIHRvIHRvdWNoIHVwb24ga2V5IGFyZWFzLiBIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2gsIGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2AgaXMgdXNlZCB3aXRoaW4gYGlwdGZzX3Bza2JfYWRkX2ZyYWdzYCwgYW5kIHRoYXQgaW4gdHVybiBpcyBhbHNvIHVzZWQgYnkgYGlwdGZzX3JlYXNzZW1fY29udGAuCgpOb3csIGlmIEkgdHJhY2UgdGhhdCwgYGlwdGZzX3JlYXNzZW1fY29udGAgaXMgY2FsbGVkIGZyb20gYGlwdGZzX2lucHV0X29yZGVyZWRgLCBhbmQgdGhhdCYjMzk7cyAqYWxzbyogY2FsbGVkIGZyb20gYGlwdGZzX2lucHV0YC4gVGhlcmVmb3JlLCBhZnRlciB0aGlzIGFuYWx5c2lzLCBpdCBzZWVtcyBsaWtlIGBpcHRmc19pbnB1dGAgaXMgbGlrZWx5IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIHRoaXMgd2hvbGUgbW9kaWZpZWQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTWFrZXMgc2Vuc2UuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG15IGltbWVkaWF0ZSBhdHRlbnRpb24gb24gYGlwdGZzX3Bza2JfYWRkX2ZyYWdzYCB0byBzZWUgaG93IGl0IHVzZXMgYGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzYCwgZ2l2ZW4gdGhlIGNhbGwgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfcHNrYl9hZGRfZnJhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTQ2Nj1zdGF0aWMgaW50IGlwdGZzX3NrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTIyLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjUyMzogKiBpcHRmc19wc2tiX2FkZF9mcmFncygpIC0gQ3JlYXRlIGFuZCBhZGQgZnJhZ3MgaW50byBhIG5ldyBza19idWZmLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTUyNC0gKiBAdHBsOiB0ZW1wbGF0ZSB0byBjcmVhdGUgbmV3IHNrYiBmcm9tLlxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01NDA9c3RhdGljIHN0cnVjdCBza19idWZmICpcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1NDE6aXB0ZnNfcHNrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRwbCwgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTQyLVx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgdTMyIGNvcHlfbGVuKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz05NTE9c3RhdGljIGJvb2wgX19pbnB1dF9wcm9jZXNzX3BheWxvYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBkYXRhLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTM2LVx0XHRcdCAgICAvKiBUcnkgY3JlYXRpbmcgc2tiIGFuZCBhZGRpbmcgZnJhZ3MgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMTM3Olx0XHRcdCAgICAhKHNrYiA9IGlwdGZzX3Bza2JfYWRkX2ZyYWdzKGZpcnN0X3NrYiwgZnJhZ3dhbGssXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTEzOC1cdFx0XHRcdFx0XHRcdCBkYXRhLCBjYXB0dXJlbGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgxOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGlzIHBhY2tldCBwcm9jZXNzaW5nIHNjZW5hcmlvOgoKKipJbnB1dCBQYXRoIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBzbyB0aGUgYF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkYCBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoaXMgd2hvbGUgdGhpbmcuIEl0IGFwcGVhcnMgdG8gYmUgdGhlIHdvcmtob3JzZSB0aGF0IGNhbGxzIGBpcHRmc19wc2tiX2FkZF9mcmFnc2AuIEFuZCBJIHNlZSB0aGF0IGBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZGAgaXRzZWxmIGlzIGNhbGxlZCBieSBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAuIEl0IGFsbCBwb2ludHMgdG8gdGhpcyBiZWluZyBzcXVhcmVseSB3aXRoaW4gdGhlIGlucHV0IHBhdGgsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdG8gdGhlIHBhY2tldHMgYXMgdGhleSBjb21lIGluLgoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIG91ciBkdWNrcyBpbiBhIHJvdyBjb25maWd1cmF0aW9uLXdpc2UuIFRoZSBgWEZSTV9JUFRGU2AgZmVhdHVyZSBkZWZpbml0ZWx5IHJlbGllcyBvbiBgWEZSTWAsIHdoaWNoIEkmIzM5O20gZmFtaWxpYXIgd2l0aC4gQnV0IEkmIzM5O20gZ29pbmcgdG8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCBwZXJoYXBzIGxlc3Mgb2J2aW91cywgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgaW4gYSBjcml0aWNhbCBwYXRoIGxpa2UgdGhpcy4gVGltZSBmb3IgYW5vdGhlciBsb29rIGF0IGBuZXQveGZybS9LY29uZmlnYCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBjb3ZlciBhbGwgYmFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0XG4gMTQxOlx0Y29uZmlnIFhGUk1fSVBURlNcbiAxNDI6XHRcdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gMTQzOlx0XHRkZXBlbmRzIG9uIFhGUk1cbiAxNDQ6XHRcdGhlbHBcbiAxNDU6XHRcdCAgSW5mb3JtYXRpb24gb24gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gY2FuIGJlIGZvdW5kXG4gMTQ2Olx0XHQgIGluIFJGQyA5MzQ3LiBUaGlzIGZlYXR1cmUgc3VwcG9ydHMgZGVtYW5kIGRyaXZlbiAoaS5lLixcbiAxNDc6XHRcdCAgbm9uLWNvbnN0YW50IHNlbmQgcmF0ZSkgSVAtVEZTIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZVxuIDE0ODpcdFx0ICBBR0dGUkFHIEVTUCBwYXlsb2FkIGVuY2Fwc3VsYXRpb24uIFRoaXMgcGF5bG9hZCB0eXBlXG4gMTQ5Olx0XHQgIHN1cHBvcnRzIGFnZ3JlZ2F0aW9uIGFuZCBmcmFnbWVudGF0aW9uIG9mIHRoZSBpbm5lciBJUFxuIDE1MDpcdFx0ICBwYWNrZXQgc3RyZWFtIHdoaWNoIGluIHR1cm4geWllbGRzIGhpZ2hlciBzbWFsbC1wYWNrZXRcbiAxNTE6XHRcdCAgYmFuZHdpZHRoIGFzIHdlbGwgYXMgcmVkdWNpbmcgTVRVL1BNVFUgaXNzdWVzLiBDb25nZXN0aW9uXG4gMTUyOlx0XHQgIGNvbnRyb2wgaXMgdW5pbXBsZW1lbnRhdGVkIGFzIHRoZSBzZW5kIHJhdGUgaXMgZGVtYW5kIGRyaXZlblxuIDE1MzpcdFx0ICByYXRoZXIgdGhhbiBjb25zdGFudC5cbiAxNTQ6XHRcbiAxNTU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNTY6XHRcbiAxNTc6XHRjb25maWcgWEZSTV9FU1BJTlRDUFxuIDE1ODpcdFx0Ym9vbFxuIDE1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUyNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIGlwdGZzIE1vZHVsZSoqCgpSaWdodCwgc28sIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGUgYFhGUk1fSVBURlNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNlZW1zIHRvIGJlIHRoZSBvbmx5IG9uZSBJIGFic29sdXRlbHkgbmVlZCB0byBlbmFibGUgZm9yIHRoaXMgbW9kdWxlLiBHb29kLiBOb3csIGxldCYjMzk7cyBtYXAgb3V0IHRoZSBlbnRyeSBwb2ludHMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgaGFuZ3MgdG9nZXRoZXIuIEkgc2VlOiBgaXB0ZnNfaW5wdXRgLCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgLCBhbmQgYGlwdGZzX3VzZXJfaW5pdGAuIE9rYXksIG1ha2VzIHNlbnNlIHNvIGZhci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgaXB0ZnNfdXNlcl9pbml0YC4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG1vZHVsZSBpcyBpbml0aWFsaXplZCBhbmQsIHBvc3NpYmx5LCBob3cgaXQgaG9va3MgaW50byB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc191c2VyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTI1MTM9c3RhdGljIHUzMiBpcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTIzLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1MjQ6ICogaXB0ZnNfdXNlcl9pbml0KCkgLSBpbml0aWFsaXplIHRoZSBTQSB3aXRoIElQVEZTIG9wdGlvbnMgZnJvbSBuZXRsaW5rLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MjUtICogQG5ldDogdGhlIG5ldCBkYXRhXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MzEtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjUzMjpzdGF0aWMgaW50IGlwdGZzX3VzZXJfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MzMtXHRcdFx0ICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3Mi1cdC5kZXN0cm95X3N0YXRlID0gaXB0ZnNfZGVzdHJveV9zdGF0ZSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzczOlx0LnVzZXJfaW5pdCA9IGlwdGZzX3VzZXJfaW5pdCxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc0LVx0LmNvcHlfdG9fdXNlciA9IGlwdGZzX2NvcHlfdG9fdXNlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBJbml0aWFsaXphdGlvbiBvZiBpcHRmcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBgaXB0ZnNfdXNlcl9pbml0YCBpcyBhIHJlYWxseSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBvZiB0aGlzIHRoaW5nLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlIGZvY3VzIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGlucHV0IGFuZCBvdXRwdXQsIG5hbWVseSBgaXB0ZnNfaW5wdXRgLCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBhbmQgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCwgaW4gYWRkaXRpb24gdG8gYGlwdGZzX3VzZXJfaW5pdGAgb2YgY291cnNlLgoKQmVmb3JlIHdlIGRpdmUgdG9vIGRlZXAgdGhvdWdoLCBJIHdhbnQgdG8gY29uZmlybSBzb21ldGhpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgYFhGUk1gIGlzIGVuYWJsZWQuIEFoLCB5ZXMsIGl0IHNlZW1zIGBYRlJNYCBpcyB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLCBhcyBleHBlY3RlZC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gUmlnaHQsIGFuZCBJIHNlZSBgWEZSTV9JUFRGU2Agc3BlY2lmaWNhbGx5IGRlcGVuZHMgb24gYFhGUk1gLiBBbHJpZ2h0LCBJJiMzOTtsbCBnbyB0YWtlIGEgbG9vayBhdCB0aGUgYFhGUk1gIGNvbmZpZ3VyYXRpb24gdG8gbWFrZSBzdXJlIHRoYXQgaXMgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWctNC0jXG5uZXQveGZybS9LY29uZmlnOjU6Y29uZmlnIFhGUk1cbm5ldC94ZnJtL0tjb25maWctNi1cdGJvb2xcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwLVxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXG5uZXQveGZybS9LY29uZmlnLTEyLVx0Ym9vbFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cbm5ldC94ZnJtL0tjb25maWc6MTQ6Y29uZmlnIFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy0xNS1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcbm5ldC94ZnJtL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0zMS1cbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbm5ldC94ZnJtL0tjb25maWctMzMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wYXRpYmxlIEFCSSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy00Mi1cbm5ldC94ZnJtL0tjb25maWc6NDM6Y29uZmlnIFhGUk1fSU5URVJGQUNFXG5uZXQveGZybS9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTUwLVxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy03MS1cbm5ldC94ZnJtL0tjb25maWc6NzI6Y29uZmlnIFhGUk1fU1RBVElTVElDU1xubmV0L3hmcm0vS2NvbmZpZy03My1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1wmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctODMtIyBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxubmV0L3hmcm0vS2NvbmZpZy04NS1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZy05Mi0jIGFsZ29yaXRobXMgdGhhdCBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxubmV0L3hmcm0vS2NvbmZpZzo5Mzpjb25maWcgWEZSTV9FU1Bcbm5ldC94ZnJtL0tjb25maWctOTQtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTA1LVxubmV0L3hmcm0vS2NvbmZpZzoxMDY6Y29uZmlnIFhGUk1fSVBDT01QXG5uZXQveGZybS9LY29uZmlnLTEwNy1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTQwLVxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcbm5ldC94ZnJtL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTE1Ni1cbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXG5uZXQveGZybS9LY29uZmlnLTE1OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMTQKCQkJCQkJCW91dHB1dDogMjA2CgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVjaXNpb24gZm9yIFhGUk0sIFhGUk1fVVNFUiwgYW5kIFhGUk1fSVBURlMqKgoKT2theSwgc28gYFhGUk1gIGlzIGEgY29yZSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0eXBpY2FsbHkgZW5hYmxlZCBieSBvdGhlciBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdXNlciBjYW4gaW50ZXJhY3Qgd2l0aCBpdC4gTGV0JiMzOTtzIHNlZS4uLiBBaCwgeWVzLCBgWEZSTV9VU0VSYCBpcyBpbmRlZWQgdGhlIE5ldGxpbmsgaW50ZXJmYWNlIHdlIG5lZWQgdG8gY29uZmlndXJlIFhGUk0gZnJvbSB1c2Vyc3BhY2UuIFNvLCBpdCBtYWtlcyBzZW5zZSB0byBlbmFibGUgYFhGUk1fVVNFUmAgYWxvbmcgd2l0aCBgWEZSTWAuCgpOb3csIGxldCYjMzk7cyByZXZpc2l0IGBYRlJNX0lQVEZTYC4gSG1tLCBsZXQgbWUgY2hlY2sgdGhlIGRlZmluaXRpb24uLi4gT2theSwgc28gYFhGUk1fSVBURlNgJiMzOTtzIGRlcGVuZGVuY2llcyBjb25maXJtIHRoYXQgaXQgaXMgZW5vdWdoIHRvIGVuYWJsZSB0aGUgY29kZS4gVGhlcmVmb3JlLCBJJiMzOTtsbCBpbmNsdWRlIGBYRlJNX0lQVEZTYCwgYWxvbmcgd2l0aCBgWEZSTWAgYW5kIGBYRlJNX1VTRVJgIGluIG15IGNvbmZpZ3VyYXRpb24uIEl0IHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGFjY2Vzcy4KClJlZ2FyZGluZyB0aGUgcGF0Y2gsIGl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaXNzdWUgd2l0aGluIGBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrYC4gVGhlIGZpeCBpbnZvbHZlcyBhIGNoZWNrIHdpdGhpbiBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBzaG91bGQgYWx3YXlzIGJlIGZ1enplZCB0aG9yb3VnaGx5LiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGZvciBmdXR1cmUgdGVzdGluZy4KCkkgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHMgZHVyaW5nIGZ1enppbmc6IGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRfY29sbGVjdGAsIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGFuZCBgaXB0ZnNfdXNlcl9pbml0YC4gVGhleSBhcmUgbW9zdCBsaWtlbHkgdG8gYmUgYWZmZWN0ZWQgYnkgdGhpcyBmaXguCgpBbHJpZ2h0LCBJJiMzOTtsbCByZWNvcmQgdGhpcyBkZWNpc2lvbiBub3cgd2l0aCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OywKICAgICYjMzQ7WEZSTSYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHRmc19pbnB1dCYjMzQ7LAogICAgJiMzNDtpcHRmc19vdXRwdXRfY29sbGVjdCYjMzQ7LAogICAgJiMzNDtpcHRmc19wcmVwYXJlX291dHB1dCYjMzQ7LAogICAgJiMzNDtpcHRmc191c2VyX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGtgIGJ5IGFkZGluZyBhIGJvdW5kcyBjaGVjayBpbiBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtYWluIGVudHJ5IHBvaW50cyBvZiB0aGUgWEZSTSBJUFRGUyBtb2RlLCBzdWNoIGFzIGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRfY29sbGVjdGAsIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGFuZCBgaXB0ZnNfdXNlcl9pbml0YC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTV9JUFRGUyYjMzQ7LAogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdGZzX2lucHV0JiMzNDssCiAgICAmIzM0O2lwdGZzX291dHB1dF9jb2xsZWN0JiMzNDssCiAgICAmIzM0O2lwdGZzX3ByZXBhcmVfb3V0cHV0JiMzNDssCiAgICAmIzM0O2lwdGZzX3VzZXJfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsa2AgYnkgYWRkaW5nIGEgYm91bmRzIGNoZWNrIGluIGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVAtVEZTL0FHR0ZSQUcgZW5jYXBzdWxhdGlvbiBzdXBwb3J0IGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1haW4gZW50cnkgcG9pbnRzIG9mIHRoZSBYRlJNIElQVEZTIG1vZGUsIHN1Y2ggYXMgYGlwdGZzX2lucHV0YCwgYGlwdGZzX291dHB1dF9jb2xsZWN0YCwgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCwgYW5kIGBpcHRmc191c2VyX2luaXRgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6MzQuNTk4NzcyNDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc0NTMyOTI2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9JUFRGU1wiLFxuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB0ZnNfaW5wdXRcIixcbiAgICBcImlwdGZzX291dHB1dF9jb2xsZWN0XCIsXG4gICAgXCJpcHRmc19wcmVwYXJlX291dHB1dFwiLFxuICAgIFwiaXB0ZnNfdXNlcl9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGtgIGJ5IGFkZGluZyBhIGJvdW5kcyBjaGVjayBpbiBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtYWluIGVudHJ5IHBvaW50cyBvZiB0aGUgWEZSTSBJUFRGUyBtb2RlLCBzdWNoIGFzIGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRfY29sbGVjdGAsIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGFuZCBgaXB0ZnNfdXNlcl9pbml0YC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6MzQuNTk4NzgzMjk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjkwMDU0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNzU1MmMxOWY4YzdjMTRhNWRkOTU1Y2FlMTAyYzRjYTYzZjBjZWZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDAwOjUwOjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLjJjZTE1YzQ3MmNjNGQgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9pcHRmcy5jXFxuKysrIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXFxuQEAgLTQxNiw2ICs0MTYsMTQgQEAgc3RhdGljIGJvb2wgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikgfHwgc2tiLVxcdTAwM2VwcF9yZWN5Y2xlICE9IHdhbGstXFx1MDAzZXBwX3JlY3ljbGUpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuK1xcdC8qIFJlamVjdCBhbiBAb2Zmc2V0IHRoYXQgaXMgYXQgb3IgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHdhbGsncyBkYXRhXFxuK1xcdCAqIGJlZm9yZSBjYWxsaW5nIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKSwgd2hvc2UgZnJhZ21lbnQtYWR2YW5jZVxcbitcXHQgKiBsb29wIGlzIG90aGVyd2lzZSB1bmJvdW5kZWQgYW5kIHdvdWxkIGluZGV4IHBhc3Qgd2Fsay1cXHUwMDNlZnJhZ3NbXS5cXG4rXFx0ICogVGhpcyBtaXJyb3JzIHRoZSBndWFyZCBhbHJlYWR5IHByZXNlbnQgaW4gaXB0ZnNfc2tiX2FkZF9mcmFncygpLlxcbitcXHQgKi9cXG4rXFx0aWYgKCF3YWxrLVxcdTAwM2Vucl9mcmFncyB8fCBvZmZzZXQgXFx1MDAzZT0gd2Fsay1cXHUwMDNldG90YWwgKyB3YWxrLVxcdTAwM2Vpbml0aWFsX29mZnNldClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0LyogTWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqL1xcbiBcXHRvZmZzZXQgPSBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKHdhbGssIG9mZnNldCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDozNS4zMzEwNzYwMzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTY3MjA5NjgwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9JUFRGU1wiLFxuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB0ZnNfaW5wdXRcIixcbiAgICBcImlwdGZzX291dHB1dF9jb2xsZWN0XCIsXG4gICAgXCJpcHRmc19wcmVwYXJlX291dHB1dFwiLFxuICAgIFwiaXB0ZnNfdXNlcl9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGtgIGJ5IGFkZGluZyBhIGJvdW5kcyBjaGVjayBpbiBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtYWluIGVudHJ5IHBvaW50cyBvZiB0aGUgWEZSTSBJUFRGUyBtb2RlLCBzdWNoIGFzIGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRfY29sbGVjdGAsIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGFuZCBgaXB0ZnNfdXNlcl9pbml0YC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTc1NTJjMTlmOGM3YzE0YTVkZDk1NWNhZTEwMmM0Y2E2M2YwY2VmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDAwOjUwOjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pcHRmcy5jIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXG5pbmRleCA1OTdhZWRlYWMyNmViLi4yY2UxNWM0NzJjYzRkIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9pcHRmcy5jXG4rKysgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbkBAIC00MTYsNiArNDE2LDE0IEBAIHN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSB8fCBza2ItXHUwMDNlcHBfcmVjeWNsZSAhPSB3YWxrLVx1MDAzZXBwX3JlY3ljbGUpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdC8qIFJlamVjdCBhbiBAb2Zmc2V0IHRoYXQgaXMgYXQgb3IgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHdhbGsncyBkYXRhXG4rXHQgKiBiZWZvcmUgY2FsbGluZyBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKCksIHdob3NlIGZyYWdtZW50LWFkdmFuY2VcbitcdCAqIGxvb3AgaXMgb3RoZXJ3aXNlIHVuYm91bmRlZCBhbmQgd291bGQgaW5kZXggcGFzdCB3YWxrLVx1MDAzZWZyYWdzW10uXG4rXHQgKiBUaGlzIG1pcnJvcnMgdGhlIGd1YXJkIGFscmVhZHkgcHJlc2VudCBpbiBpcHRmc19za2JfYWRkX2ZyYWdzKCkuXG4rXHQgKi9cbitcdGlmICghd2Fsay1cdTAwM2Vucl9mcmFncyB8fCBvZmZzZXQgXHUwMDNlPSB3YWxrLVx1MDAzZXRvdGFsICsgd2Fsay1cdTAwM2Vpbml0aWFsX29mZnNldClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0LyogTWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqL1xuIFx0b2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6MzUuMzMxMDc5NTQ0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMTQwNzU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgWEZSTSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gSXQgc2VlbXMgdGhleSd2ZSBhZGRlZCBhIGNydWNpYWwgY2hlY2sgd2l0aGluIGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2A6IGEgZ3VhcmQgYWdhaW5zdCBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGNvZGUgc25pcHBldCBzcGVjaWZpY2FsbHkgY2hlY2tzIGlmIHRoZSBwcm92aWRlZCBgQG9mZnNldGAgaXMgYXQgb3IgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHdhbGsncyBkYXRhLiBUaGlzIHByZXZlbnRzIGBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrYCBmcm9tIGdvaW5nIGhheXdpcmUgd2l0aCBpdHMgZnJhZ21lbnQgaW5kZXhpbmcsIHdoaWNoIGNvdWxkIGxlYWQgdG8gbWFqb3IgaXNzdWVzLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSB2dWxuZXJhYmlsaXR5LlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgY2hhbmdlLCBhIGdvb2QgbmV4dCBzdGVwIGlzIHRvIGluaXRpYXRlIGEgZnV6emluZyBjYW1wYWlnbiBhZ2FpbnN0IGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgYW5kIHRoZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGludm9sdmVkLiBEaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZSBpcyBuZWNlc3NhcnkgdG8gZGlzY292ZXIgdGhlIGVudHJ5IHBvaW50cyB0byBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLCB3aGljaCdsbCBoZWxwIG1lIGJ1aWxkIHRhcmdldGVkIGZ1enogaW5wdXRzLiBUaGVuLCBJIGNhbiBmb2N1cyBvbiBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHRyaWdnZXIgdGhlIHZ1bG5lcmFibGUgY29kZSBwYXRoLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBrZXkgdG8gZGVzaWduaW5nIGVmZmljaWVudCBmdXp6aW5nIHNjZW5hcmlvcyBhbmQgdGhvcm91Z2hseSB0ZXN0aW5nIHRoZSBwYXRjaCdzIGVmZmljYWN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6MzkuNDYyNDkwNTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMzNzAzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0zODA9c3RhdGljIHUzMiBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwMC0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDAxOiAqIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKCkgLSBjaGVjayBpZiBvayB0byBhZGQgZnJhZ3MgZnJvbSB3YWxrIHRvIHNrYlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MDItICogQHNrYjogc2tiIHRvIGNoZWNrIGZvciBhZGRpbmcgZnJhZ3MgdG9cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MDgtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQwOTpzdGF0aWMgYm9vbCBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MTAtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ1OC0gKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0NTk6ICogaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoKSBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHRvIHZlcmlmeVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NjAtICogdGhhdCB0aGUgZGVzdGluYXRpb24gQHNrYiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHdhbGsgYW5kIGhhcyBzcGFjZSBpbiB0aGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01NDE9aXB0ZnNfcHNrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRwbCwgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTUwLVxcdC8qIHRoaXMgc2hvdWxkIG5vdCBub3JtYWxseSBiZSBoYXBwZW5pbmcgKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTUxOlxcdGlmICghaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3Moc2tiLCB3YWxrLCBvZmYgKyBjb3B5X2xlbixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTUyLVxcdFxcdFxcdFxcdCAgICAgbGVuIC0gY29weV9sZW4pKSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzUwPXN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTA5LVxcdGlmIChmcmFnd2FsayBcXHUwMDI2XFx1MDAyNlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5MTA6XFx0ICAgIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKG5ld3NrYiwgZnJhZ3dhbGssIGRhdGEsIGNvcHlsZW4pKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkxMS1cXHRcXHRpcHRmc19za2JfYWRkX2ZyYWdzKG5ld3NrYiwgZnJhZ3dhbGssIGRhdGEsIGNvcHlsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDozOS41NTU4NjY3NjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM3OTI3OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldDpcblxuKipEaXZpbmcgaW50byBgeGZybV9pcHRmcy5jYCAtIGEgRGVlcGVyIExvb2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBgaXB0ZnNgIHN5c3RlbSBoYW5kbGVzIHBhY2tldCBmcmFnbWVudGF0aW9uLiBUaGUgZnVuY3Rpb24gYGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzYCBpcyBjbGVhcmx5IGEgY3JpdGljYWwgY29tcG9uZW50LiBJdOKAmXMgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgLCB3aGljaCBsaWtlbHkgZGVhbHMgd2l0aCBwcmUtZXhpc3RpbmcgZnJhZ21lbnRlZCBwYWNrZXRzLCBhbmQgYGlwdGZzX3JlYXNzZW1fY29udGAsIHdoaWNoIHByb2JhYmx5IGhhbmRsZXMgdGhlICpyZWFzc2VtYmx5KiBvZiBmcmFnbWVudHMuIFRoaXMgdGVsbHMgbWUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIGNvZGUgaW4gdGhhdCBmaWxlLCBjaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgbGV2ZXJzIEkgY2FuIHR3ZWFrIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMzY3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6NDIuNjkzODAyMDcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwODI4MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1faXB0ZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX1hGUk1fSU5URVJGQUNFKSArPSB4ZnJtX2ludGVyZmFjZS5vXFxubmV0L3hmcm0vTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX1hGUk1fSVBURlMpICs9IHhmcm1faXB0ZnMub1xcbm5ldC94ZnJtL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSArPSBlc3BpbnRjcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUwOjQyLjc3NDYzODQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc4MzcxNjc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFhGUk1fSVBURlMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBgWEZSTV9JUFRGU2AgY29uZmlnIGlzIGFjdGl2ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxpZXMgb24uIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMga2VybmVsIG1vZHVsZXMgb3Igb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCAqbXVzdCogYmUgZW5hYmxlZCBmb3IgYFhGUk1fSVBURlNgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gV2hhdCBjb3VsZCBnbyB3cm9uZyBpZiB0aG9zZSBhcmUgbWlzc2luZyBvciBtaXNjb25maWd1cmVkPyBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgcXVpY2tseSBpZGVudGlmeWluZyBhbmQgZWxpbWluYXRpbmcgYW55IHBvdGVudGlhbCByb2FkYmxvY2tzIG9yIGNvbXBhdGliaWxpdHkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24sIHNvIEkgd2FudCB0byBrbm93IGV4YWN0bHkgd2hhdCBpdHMgZnVuY3Rpb25hbCByZXF1aXJlbWVudHMgYXJlLiBMZXQncyBkZWx2ZSBpbnRvIHRob3NlIHJlbGF0aW9uc2hpcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDo0NS41NTgzNTk0MzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1Mzc0MTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX0lQVEZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUwOjQ2LjA2Mzc0MDY0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDkzNjY3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBYRlJNIEtjb25maWcgT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNDEuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIFhGUk0gY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgc3dpdGNoZXMgdGhhdCBkZXRlcm1pbmUgd2hpY2ggWEZSTSBmdW5jdGlvbmFsaXRpZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXTigJlzIGxpa2VseSB0aGVyZSdzIGEgZGVwZW5kZW5jeSBjaGFpbiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCB0aGlzIHNlY3Rpb24gaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgd2hpY2ggWEZSTSBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIG1vZHVsZXMuIEknbSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZ3JhbnVsYXIgY29udHJvbHMsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIG90aGVyIGRlcGVuZGVuY2llcywgYW5kIGFueSBuZXcgb3B0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBhZGRlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIEkgZHVnIGludG8gdGhpcyBhcmVhLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBhdmFpbGFibGUga25vYnMgZm9yIFhGUk0gaW4gdGhlIGN1cnJlbnQga2VybmVsIGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUwOjQ4Ljk3MzExMTgyNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzNTpcXHRcXHQgIGNoYW5nZSB0aGVpciBhdHRhY2htZW50IHBvaW50IHRvIHRoZSBJbnRlcm5ldC4gIERldGFpbFxcbiAxMzY6XFx0XFx0ICBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIGludGVybmV0LWRyYWZ0XFxuIDEzNzpcXHRcXHQgIFxcdTAwM2NkcmFmdC1zdWdpbW90by1taXA2LXBma2V5LW1pZ3JhdGVcXHUwMDNlLlxcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0MDpcXHRcXG4gMTQxOlxcdGNvbmZpZyBYRlJNX0lQVEZTXFxuIDE0MjpcXHRcXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuIDE0MzpcXHRcXHRkZXBlbmRzIG9uIFhGUk1cXG4gMTQ0OlxcdFxcdGhlbHBcXG4gMTQ1OlxcdFxcdCAgSW5mb3JtYXRpb24gb24gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gY2FuIGJlIGZvdW5kXFxuIDE0NjpcXHRcXHQgIGluIFJGQyA5MzQ3LiBUaGlzIGZlYXR1cmUgc3VwcG9ydHMgZGVtYW5kIGRyaXZlbiAoaS5lLixcXG4gMTQ3OlxcdFxcdCAgbm9uLWNvbnN0YW50IHNlbmQgcmF0ZSkgSVAtVEZTIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZVxcbiAxNDg6XFx0XFx0ICBBR0dGUkFHIEVTUCBwYXlsb2FkIGVuY2Fwc3VsYXRpb24uIFRoaXMgcGF5bG9hZCB0eXBlXFxuIDE0OTpcXHRcXHQgIHN1cHBvcnRzIGFnZ3JlZ2F0aW9uIGFuZCBmcmFnbWVudGF0aW9uIG9mIHRoZSBpbm5lciBJUFxcbiAxNTA6XFx0XFx0ICBwYWNrZXQgc3RyZWFtIHdoaWNoIGluIHR1cm4geWllbGRzIGhpZ2hlciBzbWFsbC1wYWNrZXRcXG4gMTUxOlxcdFxcdCAgYmFuZHdpZHRoIGFzIHdlbGwgYXMgcmVkdWNpbmcgTVRVL1BNVFUgaXNzdWVzLiBDb25nZXN0aW9uXFxuIDE1MjpcXHRcXHQgIGNvbnRyb2wgaXMgdW5pbXBsZW1lbnRhdGVkIGFzIHRoZSBzZW5kIHJhdGUgaXMgZGVtYW5kIGRyaXZlblxcbiAxNTM6XFx0XFx0ICByYXRoZXIgdGhhbiBjb25zdGFudC5cXG4gMTU0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDo0OC45NzMxODc4MTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4NzAyMTExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlhGUk0gXHUwMDI2IElQVEZTIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5SaWdodCwgdGhpcyBoaW5nZXMgb24gYFhGUk1gLiBUaGF0J3MgdGhlIGNvcmUuIFNvIEknbSB0aGlua2luZywgc3BlY2lmaWNhbGx5LCBJIG5lZWQgYm90aCBgWEZSTV9JUFRGU2AgYW5kIGBYRlJNYCBlbmFibGVkIHRvIGV2ZW4gYmVnaW4uIFRob3NlIGFyZSB0aGUgcHJlcmVxdWlzaXRlcy4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhdHRhY2sgcG9pbnRzIGZvciBmdXp6aW5nLiBXaGVyZSBkbyBJIGZpbmQgdGhlIGVudHJ5IHBvaW50cyB0byBzdGFydCB0aHJvd2luZyBqdW5rIGF0IHRoZSBzeXN0ZW0/XG5cbk9rYXksIGBpcHRmc19yZWFzc2VtX2NvbnRgIGxvb2tzIHByb21pc2luZy4gVGhhdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBvZnRlbiBtZWFucyBpdCdzIHByZXR0eSBjb250YWluZWQuIFRoYXQncyBnb29kIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlIC0gbWFrZXMgaXQgZWFzaWVyIHRvIHRyYWNrLiBOb3cgSSBqdXN0IG5lZWQgdG8gZmluZCBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGlwdGZzX3JlYXNzZW1fY29udGAuIFNlZSB3aGVyZSB0aGF0IGNhbiBnZXQgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUwOjUyLjM2MDIxMzc3N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDk0ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdGZzX3JlYXNzZW1fY29udFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTczMD1zdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzUtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczNjogKiBpcHRmc19yZWFzc2VtX2NvbnQoKSAtIENvbnRpbnVlIHRoZSByZWFzc2VtYmx5IG9mIGFuIGlubmVyIHBhY2tldHMuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTczNy0gKiBAeHRmczogeHRmcyBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc0OS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzUwOnN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc1MS1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTIyNj1zdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyODctXFx0XFx0aWYgKGJsa29mZiB8fCB4dGZzLVxcdTAwM2VyYV9ydW50bGVuIHx8IHh0ZnMtXFx1MDAzZXJhX25ld3NrYikge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjg4OlxcdFxcdFxcdGRhdGEgPSBpcHRmc19yZWFzc2VtX2NvbnQoeHRmcywgc2VxLCBcXHUwMDI2c2tic2VxLCBza2IsIGRhdGEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyODktXFx0XFx0XFx0XFx0XFx0XFx0ICBibGtvZmYsIFxcdTAwMjZzdWJsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6NTIuNDcxMzIyNzI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzk1OTk2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBpcHRmc2AgTmV0d29yayBGbG93KipcblxuT2theSwgc28gYGlwdGZzX2lucHV0X29yZGVyZWRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGtpY2tzIHRoaW5ncyBvZmYsIGFuZCBmcm9tIHdoYXQgSSBzZWUsIGl0IGltbWVkaWF0ZWx5IGhhbmRzIHRoaW5ncyBvdmVyIHRvIGBpcHRmc19yZWFzc2VtX2NvbnRgLiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHdoYXQncyBoYXBwZW5pbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyAqY2FsbGluZyogYGlwdGZzX2lucHV0X29yZGVyZWRgLiBJdCdzIHRoZSBzdGFuZGFyZCBmaXJzdCBzdGVwIHdoZW4gdHJ5aW5nIHRvIGZvbGxvdyBhIHNpZ25hbCwgcmlnaHQ/IEknbSBnb2luZyB0byB0cmFjayBpdCBiYWNrIHVwIHRoZSBjYWxsIHN0YWNrIHRvIHNlZSB3aGVyZSB0aGUgZGF0YSBvciB0aGUgdHJpZ2dlciBpcyBvcmlnaW5hdGluZy4gS25vd2luZyBpdHMgcGFyZW50cyB3aWxsIHByb3ZpZGUgaW1wb3J0YW50IGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBmZWVkaW5nIGRhdGEgaW50byB0aGlzIHByb2Nlc3MgYW5kIHdoYXQgdGhlIHVsdGltYXRlIGdvYWxzIG9mIHRoaXMgZmxvdyBhcmUuIFNvLCBsZXQncyBleHBsb3JlIHRoZSBjYWxsZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzQ3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6NTUuNTEwOTI2NjY5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTM2Mzg0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc19pbnB1dF9vcmRlcmVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9OTUxPXN0YXRpYyBib29sIF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgZGF0YSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjE5LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjIwOiAqIGlwdGZzX2lucHV0X29yZGVyZWQoKSAtIGhhbmRsZSBuZXh0IGluIG9yZGVyIElQVEZTIHBheWxvYWQuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjEtICogQHg6IHhmcm0gc3RhdGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjI1LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjI2OnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X29yZGVyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjcte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE2NzY9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2Ryb3BfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDctXFx0XFx0XFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcwODpcXHRcXHRcXHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDktXFx0XFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE3MjU9c3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzMyLVxcdGlmICh4dGZzLVxcdTAwM2VjZmcucmVvcmRlcl93aW5fc2l6ZSA9PSAwKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MzM6XFx0XFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzM0LVxcdFxcdGdvdG8gZG9uZTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ4LVxcdFxcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDk6XFx0XFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzUwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6NTUuNTg2Mjk4MTgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjkwODUyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGBpcHRmc19pbnB1dGAqKlxuXG5Pa2F5LCBzbyBgaXB0ZnNfaW5wdXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0J3MgdGhlIGZyb250IGRvb3IsIHRoZSBmaXJzdCBmdW5jdGlvbiB0aGF0J3MgbGlrZWx5IGNhbGxlZCB3aGVuIGEgY2VydGFpbiBwcm9jZXNzIGlzIGFjdGl2ZS4gVG8gdHJ1bHkgdW5kZXJzdGFuZCBpdHMgcm9sZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBfY2FsbHNfIGBpcHRmc19pbnB1dGAuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBpbGx1bWluYXRlIGl0cyBwdXJwb3NlLCBpdHMgY29udGV4dCwgYW5kIHdoYXQgZGF0YSBpdCdzIGxpa2VseSBvcGVyYXRpbmcgb24uIExldCdzIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCBjYWxsZWQgc28gdGhhdCBJIGNhbiBmaWd1cmUgb3V0IGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE3NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUwOjU4LjY1NTM4NjE3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTYzMDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdGZzX2lucHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9NTg2PWlwdGZzX3Bza2JfZXh0cmFjdF9zZXEodTMyIHNrYmxlbiwgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCB1MzIgb2ZmLCBpbnQgbGVuKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYwMC0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjAxOiAqIGlwdGZzX2lucHV0X3NhdmVfcnVudCgpIC0gc2F2ZSBkYXRhIGluIHh0ZnMgcnVudCBzcGFjZS5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjAyLSAqIEB4dGZzOiB4dGZzIHN0YXRlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjA5LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2MTA6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYxMS1cXHRcXHRcXHRcXHQgIHU4ICpidWYsIGludCBsZW4pXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9OTUxPXN0YXRpYyBib29sIF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgZGF0YSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDAxLVxcdFxcdFxcdFxcdC8qIHNhdmUgdGhlIGJ5dGVzIHdlIGhhdmUsIGFkdmFuY2UgZGF0YSBhbmQgZXhpdCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDAyOlxcdFxcdFxcdFxcdGlwdGZzX2lucHV0X3NhdmVfcnVudCh4dGZzLCBzZXEsIGhieXRlcyxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAwMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZW1haW5pbmcpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMjAtXFx0XFx0XFx0XFx0Lyogc2F2ZSB0aGUgYnl0ZXMgd2UgaGF2ZSwgYWR2YW5jZSBkYXRhIGFuZCBleGl0ICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEwMjE6XFx0XFx0XFx0XFx0aXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHh0ZnMsIHNlcSwgaGJ5dGVzLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDIyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHJlbWFpbmluZyk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIxOS0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTIyMDogKiBpcHRmc19pbnB1dF9vcmRlcmVkKCkgLSBoYW5kbGUgbmV4dCBpbiBvcmRlciBJUFRGUyBwYXlsb2FkLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjIxLSAqIEB4OiB4ZnJtIHN0YXRlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIyNS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTIyNjpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjI3LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xNDgyPXN0YXRpYyB2b2lkIF9fcmVvcmRlcl9mdXR1cmVfc2hpZnRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYyNy0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTYyODpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9yZW9yZGVyKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MjktXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmluc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE2NzY9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2Ryb3BfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDctXFx0XFx0XFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcwODpcXHRcXHRcXHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDktXFx0XFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MTUtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MTY6ICogaXB0ZnNfaW5wdXQoKSAtIGhhbmRsZSByZWNlaXB0IG9mIGlwdGZzIHBheWxvYWRcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcxNy0gKiBAeDogeGZybSBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MjQtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MjU6c3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcyNi17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczMi1cXHRpZiAoeHRmcy1cXHUwMDNlY2ZnLnJlb3JkZXJfd2luX3NpemUgPT0gMCkge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzMzOlxcdFxcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczNC1cXHRcXHRnb3RvIGRvbmU7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc0My1cXHRzcGluX2xvY2soXFx1MDAyNnh0ZnMtXFx1MDAzZWRyb3BfbG9jayk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDQ6XFx0aXB0ZnNfaW5wdXRfcmVvcmRlcih4dGZzLCBza2IsIFxcdTAwMjZsaXN0LCBcXHUwMDI2ZnJlZWxpc3QpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ1LVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ4dGZzLVxcdTAwM2Vkcm9wX2xvY2spO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDgtXFx0XFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc0OTpcXHRcXHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NTAtXFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI3Njg9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzYtXFx0LmdldF9pbm5lcl9tdHUgPSBpcHRmc19nZXRfaW5uZXJfbXR1LFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzc3OlxcdC5pbnB1dCA9IGlwdGZzX2lucHV0LFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc4LVxcdC5vdXRwdXQgPSBpcHRmc19vdXRwdXRfY29sbGVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6NTguNzcxNTYzMzQzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjI4MjY4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSVBURlMgQ2FsbGJhY2sgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gYGlwdGZzX2lucHV0YCBoYXMgYmVlbiByZWdpc3RlcmVkIHdpdGhpbiBgaXB0ZnNfbW9kZV9jYnNgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMgaW50ZXJhY3Rpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKndoYXQgZWxzZSogaXMgaGFuZ2luZyBvdXQgaW4gYGlwdGZzX21vZGVfY2JzYD8gVW5kZXJzdGFuZGluZyB0aGUgZW50aXJlIGNvbnRleHQgb2YgdGhhdCBjYWxsYmFjayBzdHJ1Y3R1cmUgaXMgdGhlIGtleSB0byBzZWVpbmcgaG93IHRoaXMgYGlwdGZzX2lucHV0YCBmdW5jdGlvbiBmaXRzIGluIGFuZCB3aGF0IGl0cyByZWxhdGlvbnNoaXBzIGFyZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gZ2V0IGEgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIExldCdzIHNlZSB3aGF0IGVsc2UgdGhhdCBzdHJ1Y3R1cmUgY29udGFpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4OTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MTowMS44MzQzOTc4NDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTU0ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdGZzX21vZGVfY2JzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9MjczMj1zdGF0aWMgdm9pZCBpcHRmc19kZXN0cm95X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NjctXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3Njg6c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzY5LVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI3ODI9c3RhdGljIGludCBfX2luaXQgeGZybV9pcHRmc19pbml0KHZvaWQpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc4Ny1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc4ODpcXHRlcnIgPSB4ZnJtX3JlZ2lzdGVyX21vZGVfY2JzKFhGUk1fTU9ERV9JUFRGUywgXFx1MDAyNmlwdGZzX21vZGVfY2JzKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc4OS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTE6MDEuOTA3MzYyMzc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjc3MTk5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkZvY3VzaW5nIEZ1enppbmcgRWZmb3J0cyBmb3IgWEZSTV9NT0RFX0lQVEZTKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0IHNlZW1zIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3IgYFhGUk1fTU9ERV9JUFRGU2AgYXJlIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGNhbGxiYWNrczogc3BlY2lmaWNhbGx5LCBgaXB0ZnNfaW5wdXRgIGFuZCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLiBHaXZlbiB0aGF0LCBmdXp6aW5nIHRob3NlIHR3byBmdW5jdGlvbnMgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIGFwcHJvYWNoIHRvIHVuY292ZXIgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhleSdyZSBsaWtlbHkgdGhlIGFyZWFzIHdoZXJlIHRoZSBtb3N0IGNvbXBsZXggbG9naWMgcmVzaWRlcyByZWxhdGVkIHRvIHRoaXMgbW9kZS4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBJJ20gb3Zlcmxvb2tpbmcsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIGJ1dCB0aGVzZSBhcmUgdGhlIG9idmlvdXMgaW5pdGlhbCB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzc4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTE6MDUuMTc1MDg1ODA3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI5OTMxNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfb3V0cHV0X2NvbGxlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xODE2PXN0YXRpYyBpbnQgaXB0ZnNfaXNfdG9vX2JpZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwbXR1KVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4NDAtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4NDE6c3RhdGljIGludCBpcHRmc19vdXRwdXRfY29sbGVjdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTg0Mi17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc2OD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3Ny1cXHQuaW5wdXQgPSBpcHRmc19pbnB1dCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3ODpcXHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzktXFx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUxOjA1LjI5ODA4NTg4OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTAxOTAzMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGU6IEFub3RoZXIgT25lISoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlLCB0cnlpbmcgdG8gZ2V0IGEgZ3Jhc3Agb24gaXRzIGZ1bmN0aW9uLiBJJ3ZlIGFscmVhZHkgdGFja2xlZCBhIGZldyBvdGhlciBjb21wb25lbnRzLCBhbmQgbm93LCBcImlwdGZzXFxfcHJlcGFyZVxcX291dHB1dFwiIGNhdGNoZXMgbXkgZXllLiBUaGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gbmFtZSBnaXZlcyBtZSBhIGhpbnQ7IGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBwcmVwYXJpbmcgdGhlIG91dHB1dCBkYXRhLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBJUEZTIHByb2Nlc3MuIEl0IHNvdW5kcyBsaWtlIGEgY29yZSBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgd2hhdCdzIG5lZWRlZCBmb3IgdGhlIGV2ZW50dWFsIHJlc3BvbnNlIG9yIGRhdGEgc3RydWN0dXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGlzIG9uZSBmaXRzIGludG8gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGZvcm1hdHRpbmcgb3Igc3RydWN0dXJpbmcgaW5mb3JtYXRpb24gYmVmb3JlIGl0J3MgZGVsaXZlcmVkIGVsc2V3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkxOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUxOjA4LjE5OTk5NTI3OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NzgyMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdGZzX3ByZXBhcmVfb3V0cHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9MjQyNj1zdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjAtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0NjE6ICogaXB0ZnNfcHJlcGFyZV9vdXRwdXQoKSAtICBwcmVwYXJlIHRoZSBza2IgZm9yIG91dHB1dFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDYyLSAqIEB4OiB4ZnJtIHN0YXRlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2OS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ3MDpzdGF0aWMgaW50IGlwdGZzX3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDcxLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc4LVxcdC5vdXRwdXQgPSBpcHRmc19vdXRwdXRfY29sbGVjdCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3OTpcXHQucHJlcGFyZV9vdXRwdXQgPSBpcHRmc19wcmVwYXJlX291dHB1dCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc4MC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MTowOC4zNDY3OTExOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgwNzUwNzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgaXB0ZnNfbW9kZV9jYnNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGlwdGZzX21vZGVfY2JzYCB0aGluZy4gSSd2ZSBnb3QgYSBzcGVjaWZpYyB0YXNrIGluIG1pbmQgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGNvbXBvbmVudCBmaXRzIGludG8gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIFNvLCBteSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIFwiV2hhdCBlbHNlIGlzIGluIHRoaXM/XCIuIEknbSBnb2luZyB0byBxdWlja2x5LCBhbmQgZWZmaWNpZW50bHkgYmVnaW4gdG8gZXhwbG9yZSB0aGUgY29udGVudHMgb2YgYGlwdGZzX21vZGVfY2JzYCwgaG9wZWZ1bGx5IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGZ1bmN0aW9uLiBNeSBtYWluIGdvYWwgd2lsbCBiZSB0byBkZXZlbG9wIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5jdGlvbmFsaXR5IHByZXNlbnQgd2l0aGluIHRoaXMgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ4MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUxOjExLjQyNzU0Njg1M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NjgsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3Njg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xcbjI3Njk6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuMjc3MDpcXHRcXHQuaW5pdF9zdGF0ZSA9IGlwdGZzX2luaXRfc3RhdGUsXFxuMjc3MTpcXHRcXHQuY2xvbmVfc3RhdGUgPSBpcHRmc19jbG9uZV9zdGF0ZSxcXG4yNzcyOlxcdFxcdC5kZXN0cm95X3N0YXRlID0gaXB0ZnNfZGVzdHJveV9zdGF0ZSxcXG4yNzczOlxcdFxcdC51c2VyX2luaXQgPSBpcHRmc191c2VyX2luaXQsXFxuMjc3NDpcXHRcXHQuY29weV90b191c2VyID0gaXB0ZnNfY29weV90b191c2VyLFxcbjI3NzU6XFx0XFx0LnNhX2xlbiA9IGlwdGZzX3NhX2xlbixcXG4yNzc2OlxcdFxcdC5nZXRfaW5uZXJfbXR1ID0gaXB0ZnNfZ2V0X2lubmVyX210dSxcXG4yNzc3OlxcdFxcdC5pbnB1dCA9IGlwdGZzX2lucHV0LFxcbjI3Nzg6XFx0XFx0Lm91dHB1dCA9IGlwdGZzX291dHB1dF9jb2xsZWN0LFxcbjI3Nzk6XFx0XFx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXFxuMjc4MDpcXHR9O1xcbjI3ODE6XFx0XFxuMjc4MjpcXHRzdGF0aWMgaW50IF9faW5pdCB4ZnJtX2lwdGZzX2luaXQodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTE6MTEuNDI3Nzc3NTAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mzc4Nzg5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb3JlIElQVEZTIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gVGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhlIG1vZGlmaWNhdGlvbnMgbGlrZWx5IGxpZSwgYGlwdGZzX2lucHV0YCwgYGlwdGZzX291dHB1dF9jb2xsZWN0YCwgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCwgYW5kIGBpcHRmc191c2VyX2luaXRgIGxvb2sgbGlrZSBwcmltZSBjYW5kaWRhdGVzIGZvciByZXZpZXcuIFRoZXkgYWxsIHNlZW0gdG8gdG91Y2ggdXBvbiBrZXkgYXJlYXMuIEhvbGQgb24gYSBzZWNvbmQsIHRob3VnaCwgYGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzYCBpcyB1c2VkIHdpdGhpbiBgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgLCBhbmQgdGhhdCBpbiB0dXJuIGlzIGFsc28gdXNlZCBieSBgaXB0ZnNfcmVhc3NlbV9jb250YC5cblxuTm93LCBpZiBJIHRyYWNlIHRoYXQsIGBpcHRmc19yZWFzc2VtX2NvbnRgIGlzIGNhbGxlZCBmcm9tIGBpcHRmc19pbnB1dF9vcmRlcmVkYCwgYW5kIHRoYXQncyAqYWxzbyogY2FsbGVkIGZyb20gYGlwdGZzX2lucHV0YC4gVGhlcmVmb3JlLCBhZnRlciB0aGlzIGFuYWx5c2lzLCBpdCBzZWVtcyBsaWtlIGBpcHRmc19pbnB1dGAgaXMgbGlrZWx5IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIHRoaXMgd2hvbGUgbW9kaWZpZWQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTWFrZXMgc2Vuc2UuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG15IGltbWVkaWF0ZSBhdHRlbnRpb24gb24gYGlwdGZzX3Bza2JfYWRkX2ZyYWdzYCB0byBzZWUgaG93IGl0IHVzZXMgYGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzYCwgZ2l2ZW4gdGhlIGNhbGwgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk3NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUxOjE1LjM2NTY2MDQ3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg2MTg1ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfcHNrYl9hZGRfZnJhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz00NjY9c3RhdGljIGludCBpcHRmc19za2JfYWRkX2ZyYWdzKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTIyLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1MjM6ICogaXB0ZnNfcHNrYl9hZGRfZnJhZ3MoKSAtIENyZWF0ZSBhbmQgYWRkIGZyYWdzIGludG8gYSBuZXcgc2tfYnVmZi5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTI0LSAqIEB0cGw6IHRlbXBsYXRlIHRvIGNyZWF0ZSBuZXcgc2tiIGZyb20uXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NTQwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU0MTppcHRmc19wc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2FsayxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTQyLVxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCB1MzIgY29weV9sZW4pXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9OTUxPXN0YXRpYyBib29sIF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgZGF0YSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTM2LVxcdFxcdFxcdCAgICAvKiBUcnkgY3JlYXRpbmcgc2tiIGFuZCBhZGRpbmcgZnJhZ3MgKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTEzNzpcXHRcXHRcXHQgICAgIShza2IgPSBpcHRmc19wc2tiX2FkZF9mcmFncyhmaXJzdF9za2IsIGZyYWd3YWxrLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTM4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBkYXRhLCBjYXB0dXJlbGVuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MToxNS40NzQyODgzODVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3MjYzMjk1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2Ygd2hhdCdzIGdvaW5nIG9uIGluIHRoaXMgcGFja2V0IHByb2Nlc3Npbmcgc2NlbmFyaW86XG5cbioqSW5wdXQgUGF0aCBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkYCBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoaXMgd2hvbGUgdGhpbmcuIEl0IGFwcGVhcnMgdG8gYmUgdGhlIHdvcmtob3JzZSB0aGF0IGNhbGxzIGBpcHRmc19wc2tiX2FkZF9mcmFnc2AuIEFuZCBJIHNlZSB0aGF0IGBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZGAgaXRzZWxmIGlzIGNhbGxlZCBieSBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAuIEl0IGFsbCBwb2ludHMgdG8gdGhpcyBiZWluZyBzcXVhcmVseSB3aXRoaW4gdGhlIGlucHV0IHBhdGgsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgd2hhdCdzIGhhcHBlbmluZyB0byB0aGUgcGFja2V0cyBhcyB0aGV5IGNvbWUgaW4uXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGdvdCBhbGwgb3VyIGR1Y2tzIGluIGEgcm93IGNvbmZpZ3VyYXRpb24td2lzZS4gVGhlIGBYRlJNX0lQVEZTYCBmZWF0dXJlIGRlZmluaXRlbHkgcmVsaWVzIG9uIGBYRlJNYCwgd2hpY2ggSSdtIGZhbWlsaWFyIHdpdGguIEJ1dCBJJ20gZ29pbmcgdG8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCBwZXJoYXBzIGxlc3Mgb2J2aW91cywgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgaW4gYSBjcml0aWNhbCBwYXRoIGxpa2UgdGhpcy4gVGltZSBmb3IgYW5vdGhlciBsb29rIGF0IGBuZXQveGZybS9LY29uZmlnYCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gR290dGEgbWFrZSBzdXJlIHdlIGNvdmVyIGFsbCBiYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6MTkuMjAwNjI1NzZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcbiAxNDE6XFx0Y29uZmlnIFhGUk1fSVBURlNcXG4gMTQyOlxcdFxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4gMTQzOlxcdFxcdGRlcGVuZHMgb24gWEZSTVxcbiAxNDQ6XFx0XFx0aGVscFxcbiAxNDU6XFx0XFx0ICBJbmZvcm1hdGlvbiBvbiB0aGUgSVAtVEZTL0FHR0ZSQUcgZW5jYXBzdWxhdGlvbiBjYW4gYmUgZm91bmRcXG4gMTQ2OlxcdFxcdCAgaW4gUkZDIDkzNDcuIFRoaXMgZmVhdHVyZSBzdXBwb3J0cyBkZW1hbmQgZHJpdmVuIChpLmUuLFxcbiAxNDc6XFx0XFx0ICBub24tY29uc3RhbnQgc2VuZCByYXRlKSBJUC1URlMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlXFxuIDE0ODpcXHRcXHQgIEFHR0ZSQUcgRVNQIHBheWxvYWQgZW5jYXBzdWxhdGlvbi4gVGhpcyBwYXlsb2FkIHR5cGVcXG4gMTQ5OlxcdFxcdCAgc3VwcG9ydHMgYWdncmVnYXRpb24gYW5kIGZyYWdtZW50YXRpb24gb2YgdGhlIGlubmVyIElQXFxuIDE1MDpcXHRcXHQgIHBhY2tldCBzdHJlYW0gd2hpY2ggaW4gdHVybiB5aWVsZHMgaGlnaGVyIHNtYWxsLXBhY2tldFxcbiAxNTE6XFx0XFx0ICBiYW5kd2lkdGggYXMgd2VsbCBhcyByZWR1Y2luZyBNVFUvUE1UVSBpc3N1ZXMuIENvbmdlc3Rpb25cXG4gMTUyOlxcdFxcdCAgY29udHJvbCBpcyB1bmltcGxlbWVudGF0ZWQgYXMgdGhlIHNlbmQgcmF0ZSBpcyBkZW1hbmQgZHJpdmVuXFxuIDE1MzpcXHRcXHQgIHJhdGhlciB0aGFuIGNvbnN0YW50LlxcbiAxNTQ6XFx0XFxuIDE1NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE1NjpcXHRcXG4gMTU3OlxcdGNvbmZpZyBYRlJNX0VTUElOVENQXFxuIDE1ODpcXHRcXHRib29sXFxuIDE1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6MTkuMjAwODEzNDJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2NTU5NzQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgaXB0ZnMgTW9kdWxlKipcblxuUmlnaHQsIHNvLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgdGhlIGBYRlJNX0lQVEZTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBzZWVtcyB0byBiZSB0aGUgb25seSBvbmUgSSBhYnNvbHV0ZWx5IG5lZWQgdG8gZW5hYmxlIGZvciB0aGlzIG1vZHVsZS4gR29vZC4gTm93LCBsZXQncyBtYXAgb3V0IHRoZSBlbnRyeSBwb2ludHMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgaGFuZ3MgdG9nZXRoZXIuIEkgc2VlOiBgaXB0ZnNfaW5wdXRgLCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgLCBhbmQgYGlwdGZzX3VzZXJfaW5pdGAuIE9rYXksIG1ha2VzIHNlbnNlIHNvIGZhci4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBpcHRmc191c2VyX2luaXRgLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbW9kdWxlIGlzIGluaXRpYWxpemVkIGFuZCwgcG9zc2libHksIGhvdyBpdCBob29rcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTI2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MjoyMi4yNjY0MTU1ODdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTg5MzIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc191c2VyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNTEzPXN0YXRpYyB1MzIgaXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTIzLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTI0OiAqIGlwdGZzX3VzZXJfaW5pdCgpIC0gaW5pdGlhbGl6ZSB0aGUgU0Egd2l0aCBJUFRGUyBvcHRpb25zIGZyb20gbmV0bGluay5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUyNS0gKiBAbmV0OiB0aGUgbmV0IGRhdGFcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTMxLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTMyOnN0YXRpYyBpbnQgaXB0ZnNfdXNlcl9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fc3RhdGUgKngsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MzMtXFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI3Njg9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzItXFx0LmRlc3Ryb3lfc3RhdGUgPSBpcHRmc19kZXN0cm95X3N0YXRlLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzczOlxcdC51c2VyX2luaXQgPSBpcHRmc191c2VyX2luaXQsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzQtXFx0LmNvcHlfdG9fdXNlciA9IGlwdGZzX2NvcHlfdG9fdXNlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6MjIuMzgyMzE2Mjg1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTM0MDQxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBJbml0aWFsaXphdGlvbiBvZiBpcHRmcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgYGlwdGZzX3VzZXJfaW5pdGAgaXMgYSByZWFsbHkgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgb2YgdGhpcyB0aGluZy4gTGV0J3MgbWFrZSBzdXJlIHdlIGZvY3VzIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGlucHV0IGFuZCBvdXRwdXQsIG5hbWVseSBgaXB0ZnNfaW5wdXRgLCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBhbmQgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCwgaW4gYWRkaXRpb24gdG8gYGlwdGZzX3VzZXJfaW5pdGAgb2YgY291cnNlLlxuXG5CZWZvcmUgd2UgZGl2ZSB0b28gZGVlcCB0aG91Z2gsIEkgd2FudCB0byBjb25maXJtIHNvbWV0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgWEZSTWAgaXMgZW5hYmxlZC4gQWgsIHllcywgaXQgc2VlbXMgYFhGUk1gIGlzIHRoZSBwYXJlbnQgY29uZmlndXJhdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZSwgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gUmlnaHQsIGFuZCBJIHNlZSBgWEZSTV9JUFRGU2Agc3BlY2lmaWNhbGx5IGRlcGVuZHMgb24gYFhGUk1gLiBBbHJpZ2h0LCBJJ2xsIGdvIHRha2UgYSBsb29rIGF0IHRoZSBgWEZSTWAgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgdGhhdCBpcyBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE2NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MjoyNi4wMzU3MjU0MzNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjY0NTMzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNDItXFxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNTAtXFxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0vS2NvbmZpZy01Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNzEtXFxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxubmV0L3hmcm0vS2NvbmZpZy03My1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxcbm5ldC94ZnJtL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTA1LVxcbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE0MC1cXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xcbm5ldC94ZnJtL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTU2LVxcbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MjoyNi4xNjIzODA3NTFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcyMDc5NTQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIERlY2lzaW9uIGZvciBYRlJNLCBYRlJNX1VTRVIsIGFuZCBYRlJNX0lQVEZTKipcblxuT2theSwgc28gYFhGUk1gIGlzIGEgY29yZSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0eXBpY2FsbHkgZW5hYmxlZCBieSBvdGhlciBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdXNlciBjYW4gaW50ZXJhY3Qgd2l0aCBpdC4gTGV0J3Mgc2VlLi4uIEFoLCB5ZXMsIGBYRlJNX1VTRVJgIGlzIGluZGVlZCB0aGUgTmV0bGluayBpbnRlcmZhY2Ugd2UgbmVlZCB0byBjb25maWd1cmUgWEZSTSBmcm9tIHVzZXJzcGFjZS4gU28sIGl0IG1ha2VzIHNlbnNlIHRvIGVuYWJsZSBgWEZSTV9VU0VSYCBhbG9uZyB3aXRoIGBYRlJNYC5cblxuTm93LCBsZXQncyByZXZpc2l0IGBYRlJNX0lQVEZTYC4gSG1tLCBsZXQgbWUgY2hlY2sgdGhlIGRlZmluaXRpb24uLi4gT2theSwgc28gYFhGUk1fSVBURlNgJ3MgZGVwZW5kZW5jaWVzIGNvbmZpcm0gdGhhdCBpdCBpcyBlbm91Z2ggdG8gZW5hYmxlIHRoZSBjb2RlLiBUaGVyZWZvcmUsIEknbGwgaW5jbHVkZSBgWEZSTV9JUFRGU2AsIGFsb25nIHdpdGggYFhGUk1gIGFuZCBgWEZSTV9VU0VSYCBpbiBteSBjb25maWd1cmF0aW9uLiBJdCB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBhY2Nlc3MuXG5cblJlZ2FyZGluZyB0aGUgcGF0Y2gsIGl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaXNzdWUgd2l0aGluIGBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrYC4gVGhlIGZpeCBpbnZvbHZlcyBhIGNoZWNrIHdpdGhpbiBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBzaG91bGQgYWx3YXlzIGJlIGZ1enplZCB0aG9yb3VnaGx5LiBJJ2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgZm9yIGZ1dHVyZSB0ZXN0aW5nLlxuXG5JIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzIGR1cmluZyBmdXp6aW5nOiBgaXB0ZnNfaW5wdXRgLCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgLCBhbmQgYGlwdGZzX3VzZXJfaW5pdGAuIFRoZXkgYXJlIG1vc3QgbGlrZWx5IHRvIGJlIGFmZmVjdGVkIGJ5IHRoaXMgZml4LlxuXG5BbHJpZ2h0LCBJJ2xsIHJlY29yZCB0aGlzIGRlY2lzaW9uIG5vdyB3aXRoIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMxNCwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6MzEuODgzMTc5NzM2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODU2ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX0lQVEZTXCIsXG4gICAgXCJYRlJNXCIsXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHRmc19pbnB1dFwiLFxuICAgIFwiaXB0ZnNfb3V0cHV0X2NvbGxlY3RcIixcbiAgICBcImlwdGZzX3ByZXBhcmVfb3V0cHV0XCIsXG4gICAgXCJpcHRmc191c2VyX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsa2AgYnkgYWRkaW5nIGEgYm91bmRzIGNoZWNrIGluIGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVAtVEZTL0FHR0ZSQUcgZW5jYXBzdWxhdGlvbiBzdXBwb3J0IGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1haW4gZW50cnkgcG9pbnRzIG9mIHRoZSBYRlJNIElQVEZTIG1vZGUsIHN1Y2ggYXMgYGlwdGZzX2lucHV0YCwgYGlwdGZzX291dHB1dF9jb2xsZWN0YCwgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCwgYW5kIGBpcHRmc191c2VyX2luaXRgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fSVBURlNcIixcbiAgICBcIlhGUk1cIixcbiAgICBcIlhGUk1fVVNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwdGZzX2lucHV0XCIsXG4gICAgXCJpcHRmc19vdXRwdXRfY29sbGVjdFwiLFxuICAgIFwiaXB0ZnNfcHJlcGFyZV9vdXRwdXRcIixcbiAgICBcImlwdGZzX3VzZXJfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIGBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrYCBieSBhZGRpbmcgYSBib3VuZHMgY2hlY2sgaW4gYGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUC1URlMvQUdHRlJBRyBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbWFpbiBlbnRyeSBwb2ludHMgb2YgdGhlIFhGUk0gSVBURlMgbW9kZSwgc3VjaCBhcyBgaXB0ZnNfaW5wdXRgLCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgLCBhbmQgYGlwdGZzX3VzZXJfaW5pdGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgj69g[1] Phase: Succeeded StartedAt: 2026-07-29 00:52:43 +0000 UTC FinishedAt: 2026-07-29 00:52:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 00:52:43 +0000 UTC FinishedAt: 2026-07-29 00:52:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2] Phase: Succeeded StartedAt: 2026-07-29 00:52:43 +0000 UTC FinishedAt: 2026-07-29 02:56:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-29 00:52:43 +0000 UTC FinishedAt: 2026-07-29 02:56:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-29 00:52:43 +0000 UTC FinishedAt: 2026-07-29 00:52:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-29 00:52:43 +0000 UTC FinishedAt: 2026-07-29 00:52:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowgj69g/series-workflowgj69g-convert-artifact-563605536/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-29 00:52:53 +0000 UTC FinishedAt: 2026-07-29 01:23:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-29 00:52:53 +0000 UTC FinishedAt: 2026-07-29 01:23:48 +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:*804dc2eb-89d8-4295-813b-fe94c00767d8,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-workflowgj69g/series-workflowgj69g-convert-artifact-563605536/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": "cfe68d3a-e3ad-4b51-b272-7d8fa928588b", "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-workflowgj69g/series-workflowgj69g-build-action-956878566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-29 00:52:53 +0000 UTC FinishedAt: 2026-07-29 01:23:38 +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:*804dc2eb-89d8-4295-813b-fe94c00767d8,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-workflowgj69g/series-workflowgj69g-convert-artifact-563605536/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": "cfe68d3a-e3ad-4b51-b272-7d8fa928588b", "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-workflowgj69g/series-workflowgj69g-build-action-956878566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-29 01:23:48 +0000 UTC FinishedAt: 2026-07-29 01:23:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-29 01:23:48 +0000 UTC FinishedAt: 2026-07-29 01:23:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-29 01:23:48 +0000 UTC FinishedAt: 2026-07-29 01:24:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-29 01:23:48 +0000 UTC FinishedAt: 2026-07-29 01:23:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowgj69g/series-workflowgj69g-convert-artifact-1576136775/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-29 01:24:09 +0000 UTC FinishedAt: 2026-07-29 01:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-29 01:24:09 +0000 UTC FinishedAt: 2026-07-29 01:26:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cfe68d3a-e3ad-4b51-b272-7d8fa928588b,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-workflowgj69g/series-workflowgj69g-build-action-956878566/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-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-29 01:26:18 +0000 UTC FinishedAt: 2026-07-29 01:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-29 01:26:18 +0000 UTC FinishedAt: 2026-07-29 01:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-29 01:26:18 +0000 UTC FinishedAt: 2026-07-29 01:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-29 01:26:18 +0000 UTC FinishedAt: 2026-07-29 01:57:47 +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:*804dc2eb-89d8-4295-813b-fe94c00767d8,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-workflowgj69g/series-workflowgj69g-convert-artifact-1576136775/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": "3204f0e9-f5aa-4dbf-a6bd-3d7f94431899", "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-workflowgj69g/series-workflowgj69g-build-action-1053700043/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-29 01:26:18 +0000 UTC FinishedAt: 2026-07-29 01:57:21 +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:*804dc2eb-89d8-4295-813b-fe94c00767d8,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-workflowgj69g/series-workflowgj69g-convert-artifact-1576136775/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": "3204f0e9-f5aa-4dbf-a6bd-3d7f94431899", "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-workflowgj69g/series-workflowgj69g-build-action-1053700043/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-29 01:57:47 +0000 UTC FinishedAt: 2026-07-29 01:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-29 01:57:47 +0000 UTC FinishedAt: 2026-07-29 01:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-29 01:57:47 +0000 UTC FinishedAt: 2026-07-29 01:59:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-29 01:57:47 +0000 UTC FinishedAt: 2026-07-29 01:59:47 +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:*3204f0e9-f5aa-4dbf-a6bd-3d7f94431899,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-workflowgj69g/series-workflowgj69g-build-action-1053700043/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-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-29 01:59:57 +0000 UTC FinishedAt: 2026-07-29 02:56:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-29 01:59:57 +0000 UTC FinishedAt: 2026-07-29 02:56:38 +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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"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:*cfe68d3a-e3ad-4b51-b272-7d8fa928588b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3204f0e9-f5aa-4dbf-a6bd-3d7f94431899,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-workflowgj69g/series-workflowgj69g-build-action-956878566/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-workflowgj69g/series-workflowgj69g-build-action-1053700043/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-29 01:59:57 +0000 UTC FinishedAt: 2026-07-29 02:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-29 01:59:57 +0000 UTC FinishedAt: 2026-07-29 02:00:02 +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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"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-workflowgj69g/series-workflowgj69g-convert-artifact-1749874464/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-29 01:59:57 +0000 UTC FinishedAt: 2026-07-29 01:59:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-29 01:59:57 +0000 UTC FinishedAt: 2026-07-29 01:59:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-29 01:59:57 +0000 UTC FinishedAt: 2026-07-29 01:59:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-29 02:00:07 +0000 UTC FinishedAt: 2026-07-29 02:56:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgj69g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["iptfs_input","iptfs_output_collect","iptfs_prepare_output","iptfs_user_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM","XFRM_USER"],"series_id":"7c5b8a00-1dd8-4088-a2ae-341cb7fead36","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-29 02:00:07 +0000 UTC FinishedAt: 2026-07-29 02:56:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cfe68d3a-e3ad-4b51-b272-7d8fa928588b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3204f0e9-f5aa-4dbf-a6bd-3d7f94431899,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-workflowgj69g/series-workflowgj69g-build-action-956878566/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-workflowgj69g/series-workflowgj69g-build-action-1053700043/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-workflowgj69g/series-workflowgj69g-convert-artifact-1749874464/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,}