Name: series-workflowb9nhz Phase: Succeeded StartedAt: 2026-06-25 06:27:25 +0000 UTC FinishedAt: 2026-06-25 07:43:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[0] Phase: Succeeded StartedAt: 2026-06-25 06:27:25 +0000 UTC FinishedAt: 2026-06-25 06:39:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[0].run-triage Phase: Succeeded StartedAt: 2026-06-25 06:27:25 +0000 UTC FinishedAt: 2026-06-25 06:39:22 +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": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "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": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "ef2725d9-7028-4a7e-8258-3ed856e7cd6b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "iucv_sock_create", "iucv_sock_bind", "iucv_sock_connect", "iucv_sock_sendmsg", "iucv_sock_recvmsg", "afiucv_hs_rcv", "afiucv_hs_send" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2l1Y3Zfc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX2JpbmQmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7YWZpdWN2X2hzX3JjdiYjMzQ7LAogICAgJiMzNDthZml1Y3ZfaHNfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXQvTWFrZWZpbGUgdG8gYWx3YXlzIGRlc2NlbmQgaW50byB0aGUgbmV0L2l1Y3YvIGRpcmVjdG9yeSwgYWxsb3dpbmcgdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSAoYWZfaXVjdi5vKSB0byBiZSBidWlsdCBldmVuIHdoZW4gQ09ORklHX0lVQ1YgaXMgZGlzYWJsZWQgYnV0IENPTkZJR19BRklVQ1YgaXMgZW5hYmxlZC4gVGhpcyBleHBvc2VzIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHkgKHVzaW5nIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpIHRvIHVzZXJzcGFjZSBpbiBjb25maWd1cmF0aW9ucyB3aGVyZSBpdCB3YXMgcHJldmlvdXNseSB1bnJlYWNoYWJsZSBkdWUgdG8gYSBidWlsZCBkZXBlbmRlbmN5IGJ1Zy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMyMWE4MTQ4YzBmODQyZDhjZjIxNTdjZjAzMDM4NGZjOGM1ODlmMmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAwNjozNzoyMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvTWFrZWZpbGUgYi9uZXQvTWFrZWZpbGVcbmluZGV4IDViMmRkN2YwN2E4NWU5Li5jMGRhOTQ2YjI4MWUxZCAxMDA2NDRcbi0tLSBhL25ldC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L01ha2VmaWxlXG5AQCAtNDUsNyAmIzQzOzQ1LDcgQEAgb2JqLSQoQ09ORklHX1dJUkVMRVNTKVx0XHQmIzQzOz0gd2lyZWxlc3MvXG4gb2JqLSQoQ09ORklHX01BQzgwMjExKVx0XHQmIzQzOz0gbWFjODAyMTEvXG4gb2JqLSQoQ09ORklHX1RJUEMpXHRcdCYjNDM7PSB0aXBjL1xuIG9iai0kKENPTkZJR19ORVRMQUJFTClcdFx0JiM0Mzs9IG5ldGxhYmVsL1xuLW9iai0kKENPTkZJR19JVUNWKVx0XHQmIzQzOz0gaXVjdi9cbiYjNDM7b2JqLXlcdFx0XHRcdCYjNDM7PSBpdWN2L1xuIG9iai0kKENPTkZJR19TTUMpXHRcdCYjNDM7PSBzbWMvXG4gb2JqLSQoQ09ORklHX1JGS0lMTClcdFx0JiM0Mzs9IHJma2lsbC9cbiBvYmotJChDT05GSUdfTkVUXzlQKVx0XHQmIzQzOz0gOXAvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZJVUNWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXVjdl9zb2NrX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfYmluZCYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDthZml1Y3ZfaHNfcmN2JiMzNDssCiAgICAmIzM0O2FmaXVjdl9oc19zZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldC9NYWtlZmlsZSB0byBhbHdheXMgZGVzY2VuZCBpbnRvIHRoZSBuZXQvaXVjdi8gZGlyZWN0b3J5LCBhbGxvd2luZyB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5IChhZl9pdWN2Lm8pIHRvIGJlIGJ1aWx0IGV2ZW4gd2hlbiBDT05GSUdfSVVDViBpcyBkaXNhYmxlZCBidXQgQ09ORklHX0FGSVVDViBpcyBlbmFibGVkLiBUaGlzIGV4cG9zZXMgdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSAodXNpbmcgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCkgdG8gdXNlcnNwYWNlIGluIGNvbmZpZ3VyYXRpb25zIHdoZXJlIGl0IHdhcyBwcmV2aW91c2x5IHVucmVhY2hhYmxlIGR1ZSB0byBhIGJ1aWxkIGRlcGVuZGVuY3kgYnVnLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMjFhODE0OGMwZjg0MmQ4Y2YyMTU3Y2YwMzAzODRmYzhjNTg5ZjJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdW4gMjUgMDY6Mzc6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvTWFrZWZpbGUgYi9uZXQvTWFrZWZpbGUKaW5kZXggNWIyZGQ3ZjA3YTg1ZTkuLmMwZGE5NDZiMjgxZTFkIDEwMDY0NAotLS0gYS9uZXQvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L01ha2VmaWxlCkBAIC00NSw3ICYjNDM7NDUsNyBAQCBvYmotJChDT05GSUdfV0lSRUxFU1MpCQkmIzQzOz0gd2lyZWxlc3MvCiBvYmotJChDT05GSUdfTUFDODAyMTEpCQkmIzQzOz0gbWFjODAyMTEvCiBvYmotJChDT05GSUdfVElQQykJCSYjNDM7PSB0aXBjLwogb2JqLSQoQ09ORklHX05FVExBQkVMKQkJJiM0Mzs9IG5ldGxhYmVsLwotb2JqLSQoQ09ORklHX0lVQ1YpCQkmIzQzOz0gaXVjdi8KJiM0MztvYmoteQkJCQkmIzQzOz0gaXVjdi8KIG9iai0kKENPTkZJR19TTUMpCQkmIzQzOz0gc21jLwogb2JqLSQoQ09ORklHX1JGS0lMTCkJCSYjNDM7PSByZmtpbGwvCiBvYmotJChDT05GSUdfTkVUXzlQKQkJJiM0Mzs9IDlwLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJVUNWIE5ldHdvcmsgRHJpdmVyIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgbmV0d29yayBjb2RlLCBhbmQgaXQmIzM5O3MgbWFraW5nIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGBuZXQvTWFrZWZpbGVgLiBJIHNlZSB0aGV5JiMzOTtyZSBzd2l0Y2hpbmcgYG9iai0kKENPTkZJR19JVUNWKSAmIzQzOz0gaXVjdi9gIHRvIGBvYmoteSAmIzQzOz0gaXVjdi9gLiBSaWdodCwgdGhhdCYjMzk7cyBhIGJpZyBkZWFsLiBUaGF0IG1lYW5zIHRoZSBgbmV0L2l1Y3YvYCBkaXJlY3RvcnkgaXMgZ29pbmcgdG8gYmUgKmFsd2F5cyogY29tcGlsZWQgbm93LCByZWdhcmRsZXNzIG9mIHRoZSBgQ09ORklHX0lVQ1ZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOb3csIHdoeSB3b3VsZCB0aGV5IGRvIHRoYXQ/IFRoYXQmIzM5O3MgdGhlIHF1ZXN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIG1ha2luZyB0aGlzIGRyaXZlciBhIGJ1aWx0LWluIG1vZHVsZS4gSSBzdXNwZWN0IHRoZXJlIGlzIHNvbWV0aGluZyBpbiB0aGUgYG5ldC9pdWN2L01ha2VmaWxlYCB0aGF0IGlzIHdvcnRoIGxvb2tpbmcgYXQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBJVUNWXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19JVUNWKVx0JiM0Mzs9IGl1Y3Yub1xuICAgNzpcdG9iai0kKENPTkZJR19BRklVQ1YpXHQmIzQzOz0gYWZfaXVjdi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5ldC9pdWN2IEJ1aWxkIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvaXVjdi9NYWtlZmlsZWAsIGFuZCBpdCYjMzk7cyBzdGlsbCByZWx5aW5nIG9uIGBDT05GSUdfSVVDVmAgYW5kIGBDT05GSUdfQUZJVUNWYC4gVGhhdCBmZWVscy4uLm5vdCBpZGVhbC4gSGFuZyBvbiwgdGhlIGBuZXQvTWFrZWZpbGVgIGl0c2VsZiBoYXMgYG9iai15ICYjNDM7PSBpdWN2L2AsIHdoaWNoIG1lYW5zIHRoZSBidWlsZCAqYWx3YXlzKiBkZXNjZW5kcyBpbnRvIGBuZXQvaXVjdi9gLCBpcnJlc3BlY3RpdmUgb2Ygd2hldGhlciBgQ09ORklHX0lVQ1ZgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgZmluZSBmb3IgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCgpCdXQgdGhlIHJlYWwga2lja2VyIGlzIHRoYXQgd2l0aGluIGBuZXQvaXVjdi9NYWtlZmlsZWAsIHRoZSBhY3R1YWwgb2JqZWN0IGZpbGVzLCBgaXVjdi5vYCBhbmQgYGFmX2l1Y3Yub2AsIGFyZSAqc3RpbGwqIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgYmFzZWQgb24gYENPTkZJR19JVUNWYCBhbmQgYENPTkZJR19BRklVQ1ZgLiBUaGF0IHNlZW1zIHJlZHVuZGFudCwgZG9lc24mIzM5O3QgaXQ/IElmIHRoZSBkaXJlY3RvcnkgaXMgYmVpbmcgZW50ZXJlZCByZWdhcmRsZXNzLCB3aHkgdGhlIGV4dHJhIGNvbmRpdGlvbmFsIGNoZWNrcyB3aXRoaW4/CgpOb3csIEkmIzM5O20gdHJ5aW5nIHRvIHJlbWVtYmVyIHdoeSB0aGlzIHBhdGNoIHdhcyBtYWRlIGluIHRoZSBmaXJzdCBwbGFjZS4gV2hhdCB3YXMgdGhlIHJhdGlvbmFsZT8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb250ZXh0IGhlcmUuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgZmlsZXMgaW4gYG5ldC9pdWN2L01ha2VmaWxlYC4gSnVzdCB0aG9zZSB0d28gb2JqZWN0IGZpbGUgZGVmaW5pdGlvbnMsIG5vdGhpbmcgZWxzZS4gU28gaWYgYENPTkZJR19JVUNWYCBpcyAqbm90KiBzZXQsIHRoZSBidWlsZCBzdGlsbCB2aXNpdHMgYG5ldC9pdWN2L2AsIGJ1dCBiZWNhdXNlIG9mIHRoZSBjb25kaXRpb25hbHMsIGl0IHdvbiYjMzk7dCBhY3R1YWxseSBidWlsZCBhbnl0aGluZy4gSW50ZXJlc3RpbmcuCgpBbmQgaWYgYENPTkZJR19BRklVQ1ZgIGlzIHNldCwgYnV0IGBDT05GSUdfSVVDVmAgaXMgKm5vdCosIHdlJiMzOTtsbCBzdGlsbCBidWlsZCBgYWZfaXVjdi5vYC4gQWxyaWdodCwgdGltZSB0byBjaGVjayB0aGUgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2l1Y3YvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgSVVDVlxuICAgMzpcdFx0ZGVwZW5kcyBvbiBTMzkwXG4gICA0Olx0XHRkZWZfdHJpc3RhdGUgeSBpZiBTMzkwXG4gICA1Olx0XHRwcm9tcHQgXCYjMzQ7SVVDViBzdXBwb3J0IChTMzkwIC0gei9WTSBvbmx5KVwmIzM0O1xuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGludGVyLXVzZXIgY29tbXVuaWNhdGlvblxuICAgODpcdFx0ICB1bmRlciBWTSBvciBWSUYuIElmIHlvdSBydW4gb24gei9WTSwgc2F5IFwmIzM0O1lcJiMzNDsgdG8gZW5hYmxlIGEgZmFzdFxuICAgOTpcdFx0ICBjb21tdW5pY2F0aW9uIGxpbmsgYmV0d2VlbiBWTSBndWVzdHMuXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIEFGSVVDVlxuICAxMjpcdFx0ZGVwZW5kcyBvbiBTMzkwXG4gIDEzOlx0XHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcbiAgMTQ6XHRcdHByb21wdCBcJiMzNDtBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydClcJiMzNDtcbiAgMTU6XHRcdGhlbHBcbiAgMTY6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBBRl9JVUNWIHNvY2tldCBhcHBsaWNhdGlvbnNcbiAgMTc6XHRcdCAgYmFzZWQgb24gei9WTSBpbnRlci11c2VyIGNvbW11bmljYXRpb24gdmVoaWNsZSBvciBiYXNlZCBvblxuICAxODpcdFx0ICBIaXBlclNvY2tldHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBhIE1ha2VmaWxlIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIGFib3V0IGBBRklVQ1ZgLiBSaWdodCwgYEFGSVVDVmAgZGVwZW5kcyBvbiBgUzM5MGAgYW5kLCBieSBkZWZhdWx0LCB0YWtlcyBgbWAgaWYgZWl0aGVyIGBRRVRIX0wzYCBvciBgSVVDVmAgYXJlIGVuYWJsZWQuIENydWNpYWxseSwgaXQgZG9lc24mIzM5O3QgKnN0cmljdGx5KiBkZXBlbmQgb24gYElVQ1ZgLiBCZWZvcmUgdGhpcywgdGhlIGBuZXQvTWFrZWZpbGVgIGhhZCB0aGlzIGRlcGVuZGVuY3k6IGBvYmotJChDT05GSUdfSVVDVikgJiM0Mzs9IGl1Y3YvYC4gVGhpcyBtZWFudCBpZiBgQ09ORklHX0lVQ1ZgIHdhc24mIzM5O3Qgc2V0LCB0aGUgYG5ldC9pdWN2L2AgZGlyZWN0b3J5IHdhc24mIzM5O3QgZXZlbiBsb29rZWQgYXQsIGFuZCB0aHVzIGBhZl9pdWN2Lm9gIHdvdWxkbiYjMzk7dCBiZSBidWlsdCwgZXZlbiBpZiBgQ09ORklHX0FGSVVDVmAgKndhcyogc2V0LiBUaGlzIHBhdGNoIHNlZW1zIHRvIGZpeCB0aGF0LCBhbHdheXMgdmlzaXRpbmcgYG5ldC9pdWN2L2Agc28gYGFmX2l1Y3Yub2AgY2FuIGJlIGJ1aWx0IHdoZW4gYENPTkZJR19BRklVQ1ZgIGlzIGVuYWJsZWQgZXZlbiBpZiBgQ09ORklHX0lVQ1ZgIGlzIG5vdC4KClNpbmNlIGl0JiMzOTtzIGp1c3QgYSBNYWtlZmlsZSBjaGFuZ2UsIEkgaGF2ZSB0byBhc2sgbXlzZWxmOiBkb2VzIHRoaXMgY2hhbmdlIGhvdyB0aGluZ3MgZXhlY3V0ZSBhdCBhbGw/IEl0JiMzOTtzIHJlYWxseSBqdXN0IGVuYWJsaW5nIHRoZSBidWlsZCBvZiBgYWZfaXVjdmAgd2l0aG91dCB0aGUgbmVlZCBmb3IgYElVQ1ZgLiBUaGlua2luZyBhYm91dCB0aGlzIGZ1cnRoZXIsIGBBRklVQ1ZgIGRlcGVuZHMgb24gYFMzOTBgLiBBIHRob3VnaHQ6IGNhbiB3ZSBmdXp6IHRoaXM/IGBBRklVQ1ZgIGlzIGFuIGFkZHJlc3MgZmFtaWx5IChgQUZfSVVDVmApLCBhbmQgaWYgd2Ugd2FudCB0byBmdXp6IHRoaXMsIHRoZSBmaXJzdCBzdGVwIGlzIHRvIGVuYWJsZSBgQUZJVUNWYC4gSG93ZXZlciwgYEFGSVVDVmAgaXMgKnNwZWNpZmljKiB0byBgUzM5MGAuIFNvIG5vdyBJJiMzOTttIHRoaW5raW5nLCBjYW4gd2UgZnV6eiBgUzM5MGAtc3BlY2lmaWMgY29kZT8KClN5emthbGxlciBkb2VzbiYjMzk7dCBmdXp6IGBTMzkwYCBieSBkZWZhdWx0LCBkb2VzIGl0PyBNYXliZSB3ZSBjYW4gZmlndXJlIG91dCBhIHdheSB0byBtYWtlIGl0LiBCdXQsIHdhaXQuLi4gc2luY2UgdGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyB0aGUgTWFrZWZpbGUsIGl0IGRvZXNuJiMzOTt0IGNoYW5nZSB0aGUgQyBjb2RlIGl0c2VsZi4gSG93ZXZlciwgaXQgKmRvZXMqIGVuYWJsZSBidWlsZGluZyBhIG1vZHVsZSwgdGhhdCwgdW5kZXIgc3BlY2lmaWMgY29uZmlncywgd291bGQgaGF2ZSBiZWVuIHVucmVhY2hhYmxlLiBTbyB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gWWVzLCBpdCBlbmFibGVzIGBBRl9JVUNWYCBzb2NrZXRzIHdpdGhvdXQgYElVQ1ZgLiBOb3csIHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBsb29rIGF0IGBhZl9pdWN2LmNgIGFuZCBzZWUgaWYgdGhlcmUgaXMgYW55IGBBRl9JVUNWYCBzb2NrZXQgcmVnaXN0cmF0aW9uIHRoYXQgaXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZfaXVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JVUNWKVx0JiM0Mzs9IGl1Y3Yub1xubmV0L2l1Y3YvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfQUZJVUNWKVx0JiM0Mzs9IGFmX2l1Y3Yub1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMi1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzojZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2FmX2l1Y3Y6IFwmIzM0OyBmbXRcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNC1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzY6I2luY2x1ZGUgXHUwMDNjbmV0L2l1Y3YvYWZfaXVjdi5oXHUwMDNlXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzctXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ4PXN0YXRpYyBzdHJ1Y3QgaXVjdl9pbnRlcmZhY2UgKnByX2l1Y3Y7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk6c3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTUwLVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xOTc9c3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjAwLVx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc29jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjAxOlx0c3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyICpwaHNfaGRyO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIwMi1cdGludCBlcnIsIGNvbmZpcm1fcmVjdiA9IDA7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTM1NT1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9jdHJsKHN0cnVjdCBzb2NrICpzaywgdTggZmxhZ3MpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTM2Mi1cbm5ldC9pdWN2L2FmX2l1Y3YuYzozNjM6XHRibGVuID0gc2l6ZW9mKHN0cnVjdCBhZl9pdWN2X3RyYW5zX2hkcikgJiM0Mztcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNjQtXHQgICAgICAgTExfUkVTRVJWRURfU1BBQ0UoaXVjdi1cdTAwM2Voc19kZXYpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02NzM9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTEtXHR9XG5uZXQvaXVjdi9hZl9pdWN2LmM6NjkyOlx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX2Nvbm5lY3QoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZhZl9pdWN2X2hhbmRsZXIsXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjkzLVx0XHRcdFx0ICAgIHNhLVx1MDAzZXNpdWN2X3VzZXJfaWQsIE5VTEwsIHVzZXJfZGF0YSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTAyPXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy05ODUtXHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjk4NjpcdFx0aGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSAmIzQzO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTk4Ny1cdFx0XHQgICBMTF9SRVNFUlZFRF9TUEFDRShpdWN2LVx1MDAzZWhzX2Rldik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE1Mzg9c3RhdGljIGludCBpdWN2X3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNTcxLVx0XHR2YWwgPSAoaXVjdi1cdTAwM2Voc19kZXYpID8gaXVjdi1cdTAwM2Voc19kZXYtXHUwMDNlbXR1IC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNTcyOlx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBhZl9pdWN2X3RyYW5zX2hkcikgLSBFVEhfSExFTiA6XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTU3My1cdFx0XHRcdDB4N2ZmZmZmZmY7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE1OTM9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYwNC1cdEVCQ0FTQyhzcmNfbmFtZSwgOCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTYwNTpcdC8qIEZpbmQgb3V0IGlmIHRoaXMgcGF0aCBiZWxvbmdzIHRvIGFmX2l1Y3YuICovXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYwNi1cdHJlYWRfbG9jayhcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzEtXHRwYXRoLVx1MDAzZW1zZ2xpbSA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY3MjpcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9hY2NlcHQocGF0aCwgXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCBudXNlcl9kYXRhLCBuc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzMtXHRpZiAoZXJyKSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4MDU9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja19zaHV0ZG93bihzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCB1OCBpcHVzZXJbMTZdKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODE2LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4MTc6c3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyID0ge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE4MTgtXHQucGF0aF9wZW5kaW5nXHRcdD0gaXVjdl9jYWxsYmFja19jb25ucmVxLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xODI3PXN0YXRpYyB2b2lkIGFmaXVjdl9zd2FwX3NyY19kZXN0KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTgyOC17XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTgyOTpcdHN0cnVjdCBhZl9pdWN2X3RyYW5zX2hkciAqdHJhbnNfaGRyID0gaXVjdl90cmFuc19oZHIoc2tiKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODMwLVx0Y2hhciB0bXBJRFs4XTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTg1MD1zdGF0aWMgaW50IGFmaXVjdl9oc19jYWxsYmFja19zeW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4NTEte1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE4NTI6XHRzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIgKnRyYW5zX2hkciA9IGl1Y3ZfdHJhbnNfaGRyKHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg1My1cdHN0cnVjdCBzb2NrICpuc2s7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE5OTc9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDE2LVx0Lyogd3JpdGUgc3R1ZmYgZnJvbSBpdWN2X21zZyB0byBza2IgY2IgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDE3Olx0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjAxOC1cdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIwNDM9c3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNDctXHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2O1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIwNDg6XHRzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIgKnRyYW5zX2hkcjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDQ5LVx0aW50IGVyciA9IE5FVF9SWF9TVUNDRVNTO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTIzLVx0XHRlcnIgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfd2luKHNrLCBza2IpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMjQ6XHRcdGlmIChza2ItXHUwMDNlbGVuID09IHNpemVvZihzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIpKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEyNS1cdFx0XHRjb25zdW1lX3NrYihza2IpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjgwPXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDUtXHRpZiAocHJfaXVjdikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDY6XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlaXVjdl9yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDctXHRcdGlmIChlcnIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTktXHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzIwOlx0XHRwcl9pdWN2LVx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMjEtb3V0X3NvY2s6XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMjk9c3RhdGljIHZvaWQgX19leGl0IGFmaXVjdl9leGl0KHZvaWQpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMzEtXHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzMyOlx0XHRwcl9pdWN2LVx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMzMtXG4tLVxubmV0L2l1Y3YvaXVjdi5jLTEyLSAqXHRGcml0eiBFbGZlcnQgKGVsZmVydEBkZS5pYm0uY29tLCBmZWxmZXJ0QG1pbGxlbnV4LmNvbSlcbm5ldC9pdWN2L2l1Y3YuYzoxMzogKiAgICBSZXdyaXR0ZW4gZm9yIGFmX2l1Y3Y6XG5uZXQvaXVjdi9pdWN2LmMtMTQtICpcdE1hcnRpbiBTY2h3aWRlZnNreSBcdTAwM2NzY2h3aWRlZnNreUBkZS5pYm0uY29tXHUwMDNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBhbmQgSW1wYWN0IG9mIGFuIEFGX0lVQ1YgQnVpbGQgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGBhZl9pdWN2YCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgdGhlIGFkZHJlc3MgZmFtaWx5IGZvciBJVUNWIGNvbW11bmljYXRpb24uIFRoZSBwYXRjaCBpcyBzaW1wbGUsIGp1c3QgdHdlYWtpbmcgdGhlIGBuZXQvTWFrZWZpbGVgIHRvIGVuc3VyZSBgYWZfaXVjdi5vYCBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19BRklVQ1ZgIGlzIHNldCBidXQgYENPTkZJR19JVUNWYCBpcyAqbm90Ki4gTXkgZmlyc3QgdGhvdWdodCBpczogSXMgdGhpcyBldmVuIHJlbGV2YW50IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlIHZlcnkgZW52aXJvbm1lbnRzIG15IGZ1enppbmcgdGFyZ2V0cyBhcmUgc3VwcG9zZWQgdG8gY292ZXI/CgpgQ09ORklHX0FGSVVDVmAgZGVwZW5kcyBvbiBgUzM5MGAsIHdoaWNoIHRocm93cyB1cCBhIGZsYWcuIFN5emthbGxlciwgbXkgZ28tdG8gZnV6emluZyB0b29sLCBydW5zIG9uIHg4Nl82NCwgYXJtNjQsIGFuZCBvdGhlcnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSB0YWtpbmcgc3l6a2FsbGVyJiMzOTtzIFMzOTB4IHN1cHBvcnQgaW50byBhY2NvdW50LiAqRG9lcyogaXQgcnVuIG9uIFMzOTA/IFllcywgaXQgZG9lcy4gU28sIHRvIHRlc3QgdGhpcyBwYXRjaCBwcm9wZXJseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfQUZJVUNWYCBpcyBlbmFibGVkIGFuZCB0aGF0IGBDT05GSUdfSVVDVmAgaXMgZWl0aGVyIGRpc2FibGVkIG9yIGVuYWJsZWQsIGJ1dCB0aGUgcGF0Y2ggZml4ZXMgdGhlIHNjZW5hcmlvIHdoZXJlIElVQ1YgaXMgZGlzYWJsZWQuIFNpbmNlIGBDT05GSUdfQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYCwgY2FuIEkgZXZlbiBjb21waWxlIHRoaXMgb24geDg2XzY0PyBOby4KClRoZSBwcm9tcHQsIGhvd2V2ZXIsIHNwZWNpZmljYWxseSBjYWxscyBvdXQgaW1wb3NzaWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEFuZCBRRU1VICpkb2VzKiBzdXBwb3J0IHMzOTB4IGVtdWxhdGlvbiwgc28gdGhlIGNvZGUgcGF0aCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlLiBCdXQgaXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBvciBqdXN0IGEgYnVpbGQgZml4PyBUaGUgY2hhbmdlIGl0c2VsZiBqdXN0IG1ha2VzIHRoZSBgYWZfaXVjdmAgbW9kdWxlIGJ1aWxkYWJsZSB3aGVuIGBDT05GSUdfSVVDVmAgaXMgZGlzYWJsZWQuIFByZXZpb3VzbHksIGlmIGBDT05GSUdfSVVDVmAgd2FzIG9mZiwgYGFmX2l1Y3ZgIHdvdWxkbiYjMzk7dCBiZSBidWlsdC4gTm93IGl0ICp3aWxsKiBiZS4KClNvLCBpdCYjMzk7cyBub3QganVzdCBhIHR3ZWFrOyBpdCAqZW5hYmxlcyogYSBtb2R1bGUsIGBhZl9pdWN2YCwgdG8gYmUgYnVpbHQgYW5kLCBjcml0aWNhbGx5LCBsb2FkZWQuIFRoYXQgbWVhbnMgc29ja2V0cyBvZiB0aGUgYEFGX0lVQ1ZgIGZhbWlseSB3aWxsIGJlY29tZSBhdmFpbGFibGUuIE5vdywgaXMgdGhpcyAqd29ydGgqIGZ1enppbmc/IEFic29sdXRlbHkhIEVuYWJsaW5nIGEgbmV3IGFkZHJlc3MgZmFtaWx5IGZvciBwb3RlbnRpYWwgZnV6emVyIGludGVyYWN0aW9uIGlzIHZhbHVhYmxlLgoKSG93ZXZlciwgYSBuYWdnaW5nIHRob3VnaHQ6IElmIGBDT05GSUdfSVVDVmAgaXMgKmRpc2FibGVkKiwgYHByX2l1Y3ZgICh0aGUgSVVDViBpbnRlcmZhY2UsIHByZXN1bWFibHkgYSBmdW5jdGlvbiBwb2ludGVyKSB3aWxsIGJlIE5VTEwuIExldCYjMzk7cyBkaWcgaW50byBgYWZfaXVjdi5jYCB0byBzZWUgaG93IGl0IGhhbmRsZXMgYSBOVUxMIGBwcl9pdWN2YCBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHBvdGVudGlhbCBpc3N1ZSBub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBpZiBhIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcgSVVDViBmdW5jdGlvbnMgaXMgbWFkZSB3aGVuIHRoZXkgYXJlIG5vdCBpbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJfaXVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9NDI9c3RhdGljIHN0cnVjdCBwcm90byBpdWN2X3Byb3RvID0ge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy00Ny1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo0ODpzdGF0aWMgc3RydWN0IGl1Y3ZfaW50ZXJmYWNlICpwcl9pdWN2O1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5LXN0YXRpYyBzdHJ1Y3QgaXVjdl9oYW5kbGVyIGFmX2l1Y3ZfaGFuZGxlcjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzM1PXN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ2LVx0XHRcdEFTQ0VCQyh1c2VyX2RhdGEsIHNpemVvZih1c2VyX2RhdGEpKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNDc6XHRcdFx0cHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ4LVx0XHR9IGVsc2Vcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNDk6XHRcdFx0cHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIE5VTEwpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTM1MC1cdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ1Mj1zdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy00NzgtXHRtZW1zZXQoXHUwMDI2aXVjdi1cdTAwM2Vpbml0LCAwLCBzaXplb2YoaXVjdi1cdTAwM2Vpbml0KSk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDc5Olx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDgwLVx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NTY4PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTU5OS1cdC8qIEJpbmQgdGhlIHNvY2tldCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjYwMDpcdGlmIChwcl9pdWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jLTYwMS1cdFx0aWYgKCFtZW1jbXAoc2EtXHUwMDNlc2l1Y3ZfdXNlcl9pZCwgaXVjdl91c2VyaWQsIDgpKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02Mjgtdm1fYmluZDpcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2Mjk6XHRpZiAocHJfaXVjdikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTYzMC1cdFx0LyogdXNlIGxvY2FsIHVzZXJpZCBmb3IgYmFja3dhcmQgY29tcGF0ICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTY1MT1zdGF0aWMgaW50IGl1Y3Zfc29ja19hdXRvYmluZChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY1NS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NTY6XHRpZiAodW5saWtlbHkoIXByX2l1Y3YpKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY1Ny1cdFx0cmV0dXJuIC1FUFJPVE87XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTY3Mz1zdGF0aWMgaW50IGFmaXVjdl9wYXRoX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY5MS1cdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo2OTI6XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfY29ubmVjdChpdWN2LVx1MDAzZXBhdGgsIFx1MDAyNmFmX2l1Y3ZfaGFuZGxlcixcbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTMtXHRcdFx0XHQgICAgc2EtXHUwMDNlc2l1Y3ZfdXNlcl9pZCwgTlVMTCwgdXNlcl9kYXRhLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz04OTE9c3RhdGljIGludCBpdWN2X3NlbmRfaXBybShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2csXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTg5Ny1cdHBybWRhdGFbN10gPSAweGZmIC0gKHU4KSBza2ItXHUwMDNlbGVuO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjg5ODpcdHJldHVybiBwcl9pdWN2LVx1MDAzZW1lc3NhZ2Vfc2VuZChwYXRoLCBtc2csIElVQ1ZfSVBSTURBVEEsIDAsXG5uZXQvaXVjdi9hZl9pdWN2LmMtODk5LVx0XHRcdFx0ICh2b2lkICopIHBybWRhdGEsIDgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz05MDI9c3RhdGljIGludCBpdWN2X3NvY2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTUtXHRcdFx0aWYgKGVyciA9PSAweDE1KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA1NjpcdFx0XHRcdHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihpdWN2LVx1MDAzZXBhdGgsIE5VTEwpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTctXHRcdFx0XHRhdG9taWNfZGVjKFx1MDAyNml1Y3YtXHUwMDNlc2tic19pbl94bWl0KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA3NC1cdFx0XHR9XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA3NTpcdFx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVx1MDAzZXBhdGgsIFx1MDAyNnR4bXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNzYtXHRcdFx0XHRcdFx0ICAgIElVQ1ZfSVBCVUZMU1QsIDAsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNzgtXHRcdH0gZWxzZSB7IC8qIG5vbi1JUFJNIExpbmVhciBza2IgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDc5Olx0XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXHUwMDNlcGF0aCwgXHUwMDI2dHhtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA4MC1cdFx0XHRcdFx0MCwgMCwgKHZvaWQgKilza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTExNDQ9c3RhdGljIHZvaWQgaXVjdl9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTc1LVx0XHRcdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTc2Olx0XHRcdHJjID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3JlY2VpdmUocGF0aCwgbXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExNzctXHRcdFx0XHRcdCAgICAgIElVQ1ZfSVBCVUZMU1QsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTExNzktXHRcdH0gZWxzZSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE4MDpcdFx0XHRyYyA9IHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9yZWNlaXZlKHBhdGgsIG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTgxLVx0XHRcdFx0XHQgICAgICBtc2ctXHUwMDNlZmxhZ3MgXHUwMDI2IElVQ1ZfSVBSTURBVEEsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MDQ9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQzMi1cdFx0XHR0eG1zZy50YWcgPSAwO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE0MzM6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZ0eG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDM0LVx0XHRcdFx0SVVDVl9JUFJNREFUQSwgMCwgKHZvaWQgKikgaXBybV9zaHV0ZG93biwgOCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTUtXHRcdCAgICBpdWN2LVx1MDAzZXBhdGgpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDU2Olx0XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9xdWllc2NlKGl1Y3YtXHUwMDNlcGF0aCwgTlVMTCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1Ny1cdFx0XHRpZiAoZXJyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNTkzPXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MzAtXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gSVVDVl9MSVNURU4pIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjMxOlx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjMyLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYzNy1cdGlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTYzODpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYzOS1cdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NDUtXHRpZiAoIW5zaykge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NDY6XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NDctXHRcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjcxLVx0cGF0aC1cdTAwM2Vtc2dsaW0gPSBpdWN2LVx1MDAzZW1zZ2xpbWl0O1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NzI6XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfYWNjZXB0KHBhdGgsIFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgbnVzZXJfZGF0YSwgbnNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjczLVx0aWYgKGVycikge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjk4PXN0YXRpYyB2b2lkIGl1Y3ZfY2FsbGJhY2tfcngoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzA2LVx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzA3Olx0XHRwcl9pdWN2LVx1MDAzZW1lc3NhZ2VfcmVqZWN0KHBhdGgsIG1zZyk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcwOC1cdFx0cmV0dXJuO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjgwPXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTEtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5MjpcdFx0cHJfaXVjdiA9IFx1MDAyNml1Y3ZfaWY7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5My1cdH0gZWxzZSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5NC1cdFx0bWVtc2V0KFx1MDAyNml1Y3ZfdXNlcmlkLCAwLCBzaXplb2YoaXVjdl91c2VyaWQpKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjk1Olx0XHRwcl9pdWN2ID0gTlVMTDtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk2LVx0fVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA0LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDU6XHRpZiAocHJfaXVjdikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDY6XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlaXVjdl9yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDctXHRcdGlmIChlcnIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTgtb3V0X25vdGlmaWVyOlxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMTk6XHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzIwOlx0XHRwcl9pdWN2LVx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMjEtb3V0X3NvY2s6XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMjk9c3RhdGljIHZvaWQgX19leGl0IGFmaXVjdl9leGl0KHZvaWQpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzMC17XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMzMTpcdGlmIChwcl9pdWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMzI6XHRcdHByX2l1Y3YtXHUwMDNlaXVjdl91bnJlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMDEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYHByX2l1Y3ZgIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBgcHJfaXVjdmAgdmFyaWFibGUgZ2V0cyBzZXQgdXAuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g6IGl0JiMzOTtzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvIGAmYW1wO2l1Y3ZfaWZgLCBhc3N1bWluZyBgaXVjdl9pZmAgaXMgYWN0dWFsbHkgYXZhaWxhYmxlLiBJIGtub3cgZnJvbSBwYXN0IGV4cGVyaWVuY2UgdGhhdCBgaXVjdl9pZmAgaXMgZGVmaW5lZCBhbmQgZXhwb3J0ZWQgYnkgdGhlIGBpdWN2LmNgIG1vZHVsZSwgc28gdGhhdCBtYWtlcyBzZW5zZS4KCkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIHdoYXQgaGFwcGVucyBpZiBgQ09ORklHX0lVQ1ZgIGlzbiYjMzk7dCBlbmFibGVkPyBJZiBgQ09ORklHX0lVQ1ZgIGlzIGRpc2FibGVkLCB0aGUgYnVpbGQgc3lzdGVtIHdvbiYjMzk7dCBjcmVhdGUgYGl1Y3Yub2AsIGFuZCB0aGVyZWZvcmUsIGBpdWN2X2lmYCB3b24mIzM5O3QgYmUgZGVmaW5lZC4gU28sIGluIHRoYXQgc2NlbmFyaW8sIGBwcl9pdWN2YCBzaG91bGQgbmV2ZXIgZ2V0IGluaXRpYWxpemVkLCByaWdodD8KClRoZSByZWFsbHkgaW50ZXJlc3RpbmcgcXVlc3Rpb24gaXM6IGhvdyBkb2VzIHRoZSBgYWZfaXVjdi5jYCBtb2R1bGUgKmtub3cqIHdoZXRoZXIgb3Igbm90IGBpdWN2X2lmYCBleGlzdHM/IEl0IGNhbiYjMzk7dCBqdXN0IGJsaW5kbHkgdXNlIGl0LiBJdCBtdXN0IGJlIGNoZWNraW5nIHNvbWVob3cuIExldCBtZSBkaWcgaW50byBgYWZpdWN2X2luaXRgIHRvIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtIHRoYXQgZW5zdXJlcyB0aGlzIGRlcGVuZGVuY3kgaXMgaGFuZGxlZCBncmFjZWZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyODA6XHRzdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxuMjI4MTpcdHtcbjIyODI6XHRcdGludCBlcnI7XG4yMjgzOlx0XG4yMjg0Olx0XHRpZiAobWFjaGluZV9pc192bSgpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19JVUNWKSkge1xuMjI4NTpcdFx0XHRjcGNtZChcJiMzNDtRVUVSWSBVU0VSSURcJiMzNDssIGl1Y3ZfdXNlcmlkLCBzaXplb2YoaXVjdl91c2VyaWQpLCBcdTAwMjZlcnIpO1xuMjI4NjpcdFx0XHRpZiAodW5saWtlbHkoZXJyKSkge1xuMjI4NzpcdFx0XHRcdFdBUk5fT04oZXJyKTtcbjIyODg6XHRcdFx0XHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xuMjI4OTpcdFx0XHRcdGdvdG8gb3V0O1xuMjI5MDpcdFx0XHR9XG4yMjkxOlx0XG4yMjkyOlx0XHRcdHByX2l1Y3YgPSBcdTAwMjZpdWN2X2lmO1xuMjI5MzpcdFx0fSBlbHNlIHtcbjIyOTQ6XHRcdFx0bWVtc2V0KFx1MDAyNml1Y3ZfdXNlcmlkLCAwLCBzaXplb2YoaXVjdl91c2VyaWQpKTtcbjIyOTU6XHRcdFx0cHJfaXVjdiA9IE5VTEw7XG4yMjk2Olx0XHR9XG4yMjk3Olx0XG4yMjk4Olx0XHRlcnIgPSBwcm90b19yZWdpc3RlcihcdTAwMjZpdWN2X3Byb3RvLCAwKTtcbjIyOTk6XHRcdGlmIChlcnIpXG4yMzAwOlx0XHRcdGdvdG8gb3V0O1xuMjMwMTpcdFx0ZXJyID0gc29ja19yZWdpc3RlcihcdTAwMjZpdWN2X3NvY2tfZmFtaWx5X29wcyk7XG4yMzAyOlx0XHRpZiAoZXJyKVxuMjMwMzpcdFx0XHRnb3RvIG91dF9wcm90bztcbjIzMDQ6XHRcbjIzMDU6XHRcdGlmIChwcl9pdWN2KSB7XG4yMzA2Olx0XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlaXVjdl9yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xuMjMwNzpcdFx0XHRpZiAoZXJyKVxuMjMwODpcdFx0XHRcdGdvdG8gb3V0X3NvY2s7XG4yMzA5Olx0XHR9XG4yMzEwOlx0XG4yMzExOlx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2YWZpdWN2X25ldGRldl9ub3RpZmllcik7XG4yMzEyOlx0XHRpZiAoZXJyKVxuMjMxMzpcdFx0XHRnb3RvIG91dF9ub3RpZmllcjtcbjIzMTQ6XHRcbjIzMTU6XHRcdGRldl9hZGRfcGFjayhcdTAwMjZpdWN2X3BhY2tldF90eXBlKTtcbjIzMTY6XHRcdHJldHVybiAwO1xuMjMxNzpcdFxuMjMxODpcdG91dF9ub3RpZmllcjpcbjIzMTk6XHRcdGlmIChwcl9pdWN2KVxuMjMyMDpcdFx0XHRwcl9pdWN2LVx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xuMjMyMTpcdG91dF9zb2NrOlxuMjMyMjpcdFx0c29ja191bnJlZ2lzdGVyKFBGX0lVQ1YpO1xuMjMyMzpcdG91dF9wcm90bzpcbjIzMjQ6XHRcdHByb3RvX3VucmVnaXN0ZXIoXHUwMDI2aXVjdl9wcm90byk7XG4yMzI1Olx0b3V0OlxuMjMyNjpcdFx0cmV0dXJuIGVycjtcbjIzMjc6XHR9XG4yMzI4Olx0XG4yMzI5Olx0c3RhdGljIHZvaWQgX19leGl0IGFmaXVjdl9leGl0KHZvaWQpXG4yMzMwOlx0e1xuMjMzMTpcdFx0aWYgKHByX2l1Y3YpXG4yMzMyOlx0XHRcdHByX2l1Y3YtXHUwMDNlaXVjdl91bnJlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG4yMzMzOlx0XG4yMzM0Olx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZhZml1Y3ZfbmV0ZGV2X25vdGlmaWVyKTtcbjIzMzU6XHRcdGRldl9yZW1vdmVfcGFjayhcdTAwMjZpdWN2X3BhY2tldF90eXBlKTtcbjIzMzY6XHRcdHNvY2tfdW5yZWdpc3RlcihQRl9JVUNWKTtcbjIzMzc6XHRcdHByb3RvX3VucmVnaXN0ZXIoXHUwMDI2aXVjdl9wcm90byk7XG4yMzM4Olx0fVxuMjMzOTpcdFxuMjM0MDpcdG1vZHVsZV9pbml0KGFmaXVjdl9pbml0KTtcbjIzNDE6XHRtb2R1bGVfZXhpdChhZml1Y3ZfZXhpdCk7XG4yMzQyOlx0XG4yMzQzOlx0TU9EVUxFX0FVVEhPUihcJiMzNDtKZW5uaWZlciBIdW50IFx1MDAzY2plbmh1bnRAdXMuaWJtLmNvbVx1MDAzZVwmIzM0Oyk7XG4yMzQ0Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0lVQ1YgU29ja2V0cyB2ZXIgXCYjMzQ7IFZFUlNJT04pO1xuMjM0NTpcdE1PRFVMRV9WRVJTSU9OKFZFUlNJT04pO1xuMjM0NjpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4yMzQ3Olx0TU9EVUxFX0FMSUFTX05FVFBST1RPKFBGX0lVQ1YpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqTmF2aWdhdGluZyB0aGUgSVVDViBDb25maWd1cmF0aW9uKioKCk9rYXksIHRoZSBjb2RlJiMzOTtzIHVzaW5nIGBJU19FTkFCTEVEKENPTkZJR19JVUNWKWAuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBrZXkuIElmIGBDT05GSUdfSVVDVmAgaXNuJiMzOTt0IGZsaXBwZWQgb24gaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIHRoZW4gYHByX2l1Y3ZgIGdldHMgc2V0IHRvIGBOVUxMYC4gQnV0IHRoYXQgZG9lc24mIzM5O3QgbWVhbiBJIGNhbiYjMzk7dCB1c2UgSGlwZXJTb2NrZXRzIHRocm91Z2ggYGFmX2l1Y3ZgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gV2FpdCBhIG1pbnV0ZS4uLiBJIHNlZSB0aGF0IHRoZSBgQUZfSVVDVmAgc29ja2V0IGZhbWlseSAqaXMqIHJlZ2lzdGVyZWQgd2l0aCBgc29ja19yZWdpc3RlcigmYW1wO2l1Y3Zfc29ja19mYW1pbHlfb3BzKWAuIFRoaXMgaXMgZ29vZCwgd2hpY2ggbWVhbnMgYHNvY2tldChBRl9JVUNWLCAuLi4pYCBjYWxscyB3aWxsIGZ1bmN0aW9uIGV2ZW4gaWYgYENPTkZJR19JVUNWYCBpcyBub3QgZW5hYmxlZCEgT2theSwgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSB3YW50ZWQgdG8gY29uZmlybS4gU28sIHRob3NlIHNvY2tldCBjYWxscyB3aWxsIHRoZW4gdXNlIHRoZSBgaXVjdl9zb2NrX2ZhbWlseV9vcHNgIHN0cnVjdHVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGl1Y3Zfc29ja19mYW1pbHlfb3BzYCBhbmQgdW5kZXJzdGFuZCBob3cgdGhhdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9zb2NrX2ZhbWlseV9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTIyNDA9c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjY4LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNjk6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGl1Y3Zfc29ja19mYW1pbHlfb3BzID0ge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNzAtXHQuZmFtaWx5XHQ9IEFGX0lVQ1YsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyODA9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwMC1cdFx0Z290byBvdXQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMwMTpcdGVyciA9IHNvY2tfcmVnaXN0ZXIoXHUwMDI2aXVjdl9zb2NrX2ZhbWlseV9vcHMpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDItXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQxMgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEltcGxpY2F0aW9ucyBvZiBBRl9JVUNWIFNvY2tldCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggYWxsb3dzIGBBRl9JVUNWYCBzb2NrZXRzIHRvIGJlIGJ1aWx0IGV2ZW4gd2hlbiBgQ09ORklHX0lVQ1ZgIGlzIGRpc2FibGVkLCBidXQgYENPTkZJR19BRklVQ1ZgIGlzIGVuYWJsZWQuIFRoaXMgbWFrZXMgdGhlIHNvY2tldCBmYW1pbHkgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSwgd2hpY2ggaW1tZWRpYXRlbHkgdHJpZ2dlcnMgdGhlIGZ1enppbmcgYWxhcm0gYmVsbHMuIElzIHRoaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkhIEl0IG9wZW5zIHVwIGEgd2hvbGUgbmV3IHNvY2tldCBmYW1pbHkgdGhhdCB3YXMgcHJldmlvdXNseSBwb3RlbnRpYWxseSB1bnJlYWNoYWJsZSB1bmRlciBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMuCgpCdXQgd2FpdCwgaG9sZCBvbi4gSWYgYENPTkZJR19JVUNWYCB3YXMgKmFscmVhZHkqIGVuYWJsZWQsIGBhZl9pdWN2YCB3YXMgYWxyZWFkeSBiZWluZyBidWlsdCBhbmQgdGhlb3JldGljYWxseSBmdXp6ZWQuIFRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIGFueSBuZXcgY29kZSwganVzdCBmaXhpbmcgYSBidWlsZCBkZXBlbmRlbmN5IGluIHRoZSBNYWtlZmlsZS4KCkFoYSwgYnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlciEgSWYgYENPTkZJR19JVUNWYCBpcyBkaXNhYmxlZCwgdGhlIGBwcl9pdWN2YCBmdW5jdGlvbiBwb2ludGVyIGlzIGdvaW5nIHRvIGJlIE5VTEwuIERvZXMgYGFmX2l1Y3ZgIGV2ZW4gKndvcmsqIHByb3Blcmx5IGluIHRoYXQgc2NlbmFyaW8/IFllcywgaXQgZmFsbHMgYmFjayB0byBIaXBlclNvY2tldHMuIEJ1dCB0aGF0IGZhbGxiYWNrIHBhdGguLi4gd2FzIGl0ICpldmVyKiBhY3R1YWxseSB0ZXN0ZWQgb3IgZnV6emVkPyBJZiBgQ09ORklHX0lVQ1ZgIHdhcyBkaXNhYmxlZCwgYGFmX2l1Y3ZgIHdhc24mIzM5O3QgYnVpbHQgYXQgYWxsLCBzbyB0aGUgZmFsbGJhY2sgcGF0aCB3aGVyZSBgcHJfaXVjdmAgaXMgTlVMTCAqZGVmaW5pdGVseSogd2FzbiYjMzk7dCBmdXp6ZWQsIGF0IGxlYXN0IG5vdCBpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBjb25maWdzLgoKT2theSwgbGV0JiMzOTtzIHRoaW5rIHRoaXMgdGhyb3VnaC4gRXZlbiBpZiBgQ09ORklHX0lVQ1ZgICp3YXMqIGVuYWJsZWQsIGBwcl9pdWN2YCBpcyBvbmx5IHNldCB0byBgJmFtcDtpdWN2X2lmYCAqaWYqIGBtYWNoaW5lX2lzX3ZtKClgIGlzIHRydWUuIEFuZCB3aGF0IGlmIHRoZSBmdXp6ZXIgaXMgcnVubmluZyBvbiBzb21ldGhpbmcgbGlrZSBRRU1VICh3aGljaCBpcyBOT1Qgei9WTSwgYnV0IGNvdWxkIGJlIEtWTSwgb3Igc29tZXRoaW5nIHNpbWlsYXIpPyBJbiB0aGF0IGNhc2UsIGBtYWNoaW5lX2lzX3ZtKClgIG1pZ2h0IGJlIGZhbHNlISBTbywgaW4gc29tZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLCB0aGUgZmFsbGJhY2sgcGF0aCBtaWdodCBzdGlsbCBiZSBlbmdhZ2VkIGV2ZW4gd2hlbiBgQ09ORklHX0lVQ1ZgIGlzIGVuYWJsZWQsIGFuZCB0aGF0JiMzOTtzICpjcml0aWNhbCouIEkgbmVlZCB0byBjaGVjayBob3cgYG1hY2hpbmVfaXNfdm0oKWAgaXMgYmVpbmcgZXZhbHVhdGVkIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBUaGlzIGNvdWxkIGJlIGEgbmV3LCB1bmV4cGxvcmVkIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNoaW5lX2lzX3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9ib290L3N0YXJ0dXAuYz03MT1zdGF0aWMgdm9pZCBkZXRlY3RfZGlhZzI4OCh2b2lkKVxuLS1cbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy03Ni1cbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo3NzpcdGFjdGlvbiA9IG1hY2hpbmVfaXNfdm0oKSA/ICh1bnNpZ25lZCBsb25nKWNtZCA6IExQQVJXRFRfUkVTVEFSVDtcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo3ODpcdGxlbiA9IG1hY2hpbmVfaXNfdm0oKSA/IHNpemVvZihjbWQpIDogMDtcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy03OS1cdGlmIChfX2RpYWcyODgoV0RUX0ZVTkNfSU5JVCwgTUlOX0lOVEVSVkFMLCBhY3Rpb24sIGxlbikpXG4tLVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jPTEwOD1pbnQgX19pbml0IGh5cGZzX2RpYWcwY19pbml0KHZvaWQpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTA5LXtcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYzoxMTA6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMTEtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0xMTk9dm9pZCBoeXBmc19kaWFnMGNfZXhpdCh2b2lkKVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTEyMC17XG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6MTIxOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTIyLVx0XHRyZXR1cm47XG4tLVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM9MTIzPWludCBoeXBmc192bV9pbml0KHZvaWQpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xMjQte1xuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM6MTI1Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xMjYtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jPTEzNz12b2lkIGh5cGZzX3ZtX2V4aXQodm9pZClcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTEzOC17XG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYzoxMzk6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTE0MC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jPTE0OD1zdGF0aWMgc3NpemVfdCBoeXBmc193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTE3MC1cdGh5cGZzX2RlbGV0ZV90cmVlKCk7XG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYzoxNzE6XHRpZiAobWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMTcyLVx0XHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhzYi1cdTAwM2VzX3Jvb3QpO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jPTI0MD1zdGF0aWMgaW50IGh5cGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTI1OS1cdFx0cmV0dXJuIC1FTk9NRU07XG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYzoyNjA6XHRpZiAobWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMjYxLVx0XHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhyb290X2RlbnRyeSk7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwcGxkYXRhLmg9NDU9c3RhdGljIGlubGluZSBpbnQgYXBwbGRhdGFfYXNtKHN0cnVjdCBhcHBsZGF0YV9wYXJhbWV0ZXJfbGlzdCAqcGFybV9saXN0LFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oLTUxLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwcGxkYXRhLmg6NTI6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oLTUzLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaD05Nz1ERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShscGFyLCBNRkVBVFVSRV9MUEFSKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC05OC1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTk6I2RlZmluZSBtYWNoaW5lX2lzX3ZtXHRtYWNoaW5lX2hhc192bVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC0xMDAtI2RlZmluZSBtYWNoaW5lX2lzX2t2bVx0bWFjaGluZV9oYXNfa3ZtXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jPTExMD1zdGF0aWMgbm9pbmxpbmUgX19pbml0IHZvaWQgc2V0dXBfYXJjaF9zdHJpbmcodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMtMTMyLVx0XHRcdCAgbWFjaGluZV9pc19scGFyKCkgPyBcJiMzNDtMUEFSXCYjMzQ7IDpcbmFyY2gvczM5MC9rZXJuZWwvZWFybHkuYzoxMzM6XHRcdFx0ICBtYWNoaW5lX2lzX3ZtKCkgPyBcJiMzNDt6L1ZNXCYjMzQ7IDpcbmFyY2gvczM5MC9rZXJuZWwvZWFybHkuYy0xMzQtXHRcdFx0ICBtYWNoaW5lX2lzX2t2bSgpID8gXCYjMzQ7S1ZNXCYjMzQ7IDogXCYjMzQ7dW5rbm93blwmIzM0Oyk7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz02OTQ9c3RhdGljIGludCBfX2luaXQgaXBsX2luaXQodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTcwNy1cdGNhc2UgSVBMX1RZUEVfQ0NXOlxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzo3MDg6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTcwOS1cdFx0XHRyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcdTAwMjZpcGxfa3NldC1cdTAwM2Vrb2JqLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MTI4Nj1zdGF0aWMgdm9pZCByZWlwbF9ibG9ja19jY3dfZmlsbF9wYXJtcyhzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqaXBiKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTI5Ny1cdC8qIFZNIFBBUk0gKi9cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MTI5ODpcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXHUwMDI2XHUwMDI2IGlwbF9ibG9ja192YWxpZCBcdTAwMjZcdTAwMjZcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTI5OS1cdCAgICAoaXBsX2Jsb2NrLmNjdy52bV9mbGFncyBcdTAwMjYgSVBMX1BCMF9DQ1dfVk1fRkxBR19WUCkpIHtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEzMDg9c3RhdGljIGludCBfX2luaXQgcmVpcGxfbnNzX2luaXQodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEzMTEtXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjEzMTI6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMxMy1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0xMzI4PXN0YXRpYyBpbnQgX19pbml0IHJlaXBsX2Njd19pbml0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMzM2LVx0cmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXHUwMDI2cmVpcGxfa3NldC1cdTAwM2Vrb2JqLFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoxMzM3Olx0XHRcdFx0bWFjaGluZV9pc192bSgpID8gXHUwMDI2cmVpcGxfY2N3X2F0dHJfZ3JvdXBfdm1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMzOC1cdFx0XHRcdFx0XHQ6IFx1MDAyNnJlaXBsX2Njd19hdHRyX2dyb3VwX2xwYXIpO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjAxND1zdGF0aWMgaW50IHZtY21kX2luaXQodm9pZClcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjAxNS17XG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIwMTY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjAxNy1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjI5ND1zdGF0aWMgaW50IF9faW5pdCB2bWNtZF9vbl9yZWJvb3Rfc2V0dXAoY2hhciAqc3RyKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk1LXtcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjI5NjpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk3LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMDQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25fcGFuaWNfc2V0dXAoY2hhciAqc3RyKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzA1LXtcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjMwNjpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzA3LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMTQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25faGFsdF9zZXR1cChjaGFyICpzdHIpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMTUte1xuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMzE2Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMTctXHRcdHJldHVybiAxO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjMyND1zdGF0aWMgaW50IF9faW5pdCB2bWNtZF9vbl9wb2ZmX3NldHVwKGNoYXIgKnN0cilcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNS17XG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIzMjY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNy1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmM9MTgwPXN0YXRpYyBpbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlX2tkdW1wKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMtMTgyLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUFxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmM6MTgzOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jLTE4NC1cdFx0ZGlhZzEwX3JhbmdlKFBGTl9ET1dOKGNyYXNoa19yZXMuc3RhcnQpLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz0yNDY9c3RhdGljIHZvaWQgX19pbml0IGNvbm1vZGVfZGVmYXVsdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy0yNTAtXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6MjUxOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTI1Mi1cdFx0Y3BjbWQoXCYjMzQ7UVVFUlkgQ09OU09MRVwmIzM0OywgcXVlcnlfYnVmZmVyLCAxMDI0LCBOVUxMKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9NTk4PXN0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2NyYXNoa2VybmVsKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTY1MC1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYzo2NTE6XHRpZiAoIW9sZG1lbV9kYXRhLnN0YXJ0IFx1MDAyNlx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtNjUyLVx0XHRkaWFnMTBfcmFuZ2UoUEZOX0RPV04oY3Jhc2hfYmFzZSksIFBGTl9ET1dOKGNyYXNoX3NpemUpKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9ODk3PXZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtOTAxLSAgICAgICAgICovXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6OTAyOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy05MDMtXHRcdHByX2luZm8oXCYjMzQ7TGludXggaXMgcnVubmluZyBhcyBhIHovVk0gXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmM9Mzc5PXN0YXRpYyBfX2luaXQgaW50IGNyZWF0ZV9wcm9jX3NlcnZpY2VfbGV2ZWwodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYy0zODEtXHRwcm9jX2NyZWF0ZV9zZXEoXCYjMzQ7c2VydmljZV9sZXZlbHNcJiMzNDssIDAsIE5VTEwsIFx1MDAyNnNlcnZpY2VfbGV2ZWxfc2VxX29wcyk7XG5hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYzozODI6XHRpZiAobWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMtMzgzLVx0XHRyZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKFx1MDAyNnNlcnZpY2VfbGV2ZWxfdm0pO1xuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYz0yNTM9c2VnbWVudF90eXBlIChjaGFyKiBuYW1lKVxuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYy0yNTctXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6MjU4Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtMjU5LVx0XHRyZXR1cm4gLUVOT1NZUztcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM9NDE1PXNlZ21lbnRfbG9hZCAoY2hhciAqbmFtZSwgaW50IGRvX25vbnNoYXJlZCwgdW5zaWduZWQgbG9uZyAqYWRkcixcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNDIwLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjQyMTpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTQyMi1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU0Nj1zZWdtZW50X3VubG9hZChjaGFyICpuYW1lKVxuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYy01NDktXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6NTUwOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTUxLVx0XHRyZXR1cm47XG4tLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU4Mj1zZWdtZW50X3NhdmUoY2hhciAqbmFtZSlcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTg4LVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjU4OTpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU5MC1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM9MzMzOT1pbnQgZGFzZF9kZXZpY2VfaXNfcm8oc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zMzQ0LVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozMzQ1Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jLTMzNDYtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jPTIyND1zdGF0aWMgaW50IF9faW5pdCBkYXNkX3BhcnNlX2tleXdvcmQoY2hhciAqa2V5d29yZClcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0yMzgtXHRpZiAoc3RybmNtcChcJiMzNDtub3BhdlwmIzM0Oywga2V5d29yZCwgbGVuZ3RoKSA9PSAwKSB7XG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYzoyMzk6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0yNDAtXHRcdFx0cHJfaW5mbyhcJiMzNDsmIzM5O25vcGF2JiMzOTsgaXMgbm90IHN1cHBvcnRlZCBvbiB6L1ZNXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmM9NjU2PWRhc2RfZGlhZ19pbml0KHZvaWQpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMtNjU3LXtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYzo2NTg6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jLTY1OS1cdFx0cHJfaW5mbyhcJiMzNDtEaXNjaXBsaW5lICVzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgei9WTVxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmM9MTk0Nz1zdGF0aWMgaW50IGRhc2RfZWNrZF92YWxpZGF0ZV9zZXJ2ZXIoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jLTE5NTUtXHRcdHJldHVybiAwO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jOjE5NTY6XHRpZiAoZGFzZF9ub3BhdiB8fCBtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMtMTk1Ny1cdFx0ZW5hYmxlX3BhdiA9IDA7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jPTg5OT1zdGF0aWMgaW50IF9faW5pdCBjb24zMjE1X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmMtOTEwLVx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmM6OTExOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTkxMi1cdFx0Y3BjbWQoXCYjMzQ7VEVSTSBDT05NT0RFIDMyMTVcJiMzNDssIE5VTEwsIDAsIE5VTEwpO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYz0yMTM0PWNvbjMyNzBfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYy0yMTQ1LVx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmM6MjE0NjpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYy0yMTQ3LVx0XHRjcGNtZChcJiMzNDtURVJNIENPTk1PREUgMzI3MFwmIzM0OywgTlVMTCwgMCwgTlVMTCk7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jPTI5Mz1pbnQgaG1jZHJ2X2Z0cF9zdGFydHVwKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jLTMxMS1cdGlmIChobWNkcnZfZnRwX3JlZmNudCA9PSAwKSB7XG5kcml2ZXJzL3MzOTAvY2hhci9obWNkcnZfZnRwLmM6MzEyOlx0XHRpZiAobWFjaGluZV9pc192bSgpKVxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jLTMxMy1cdFx0XHRobWNkcnZfZnRwX2Z1bmNzID0gXHUwMDI2aG1jZHJ2X2Z0cF96dm07XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmM9NDU0PXN0YXRpYyBpbnQgX19pbml0IG1vbl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMtNDU3LVxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmM6NDU4Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jLTQ1OS1cdFx0cHJfZXJyKFwmIzM0O1RoZSB6L1ZNICpNT05JVE9SIHJlY29yZCBkZXZpY2UgZHJpdmVyIGNhbm5vdCBiZSBcJiMzNDtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYz0yOTQ9c3RhdGljIGludCBfX2luaXQgbW9uX2luaXQodm9pZClcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jLTI5NS17XG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYzoyOTY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jLTI5Ny1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jPTYxND1zdGF0aWMgdm9pZCByYXczMjcwX3Jlc2V0X2RldmljZV9jYihzdHJ1Y3QgcmF3MzI3MF9yZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMtNjIyLVx0XHRycC1cdTAwM2VzdGF0ZSA9IFJBVzMyNzBfU1RBVEVfSU5JVDtcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYzo2MjM6XHR9IGVsc2UgaWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jLTYyNC1cdFx0cmF3MzI3MF9zaXplX2RldmljZV92bShycCk7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oPTM0ND1zY2xwX2FzY2ViYyh1bnNpZ25lZCBjaGFyIGNoKVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM0NS17XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg6MzQ2Olx0cmV0dXJuIChtYWNoaW5lX2lzX3ZtKCkpID8gX2FzY2ViY1tjaF0gOiBfYXNjZWJjXzUwMFtjaF07XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzQ3LX1cbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg9MzUxPXNjbHBfZWJjYXNjX3N0cihjaGFyICpzdHIsIGludCBucilcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTIte1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM1MzpcdChtYWNoaW5lX2lzX3ZtKCkpID8gRUJDQVNDKHN0ciwgbnIpIDogRUJDQVNDXzUwMChzdHIsIG5yKTtcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTQtfVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaD0zNTg9c2NscF9hc2NlYmNfc3RyKGNoYXIgKnN0ciwgaW50IG5yKVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM1OS17XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg6MzYwOlx0KG1hY2hpbmVfaXNfdm0oKSkgPyBBU0NFQkMoc3RyLCBucikgOiBBU0NFQkNfNTAwKHN0ciwgbnIpO1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM2MS19XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jPTI2PXN0YXRpYyB2b2lkIF9faW5pdCBzY2xwX2Vhcmx5X2ZhY2lsaXRpZXNfZGV0ZWN0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jLTc2LVx0aWYgKCFzY2NiLVx1MDAzZWhjcHVhKSB7XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmM6Nzc6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmMtNzgtXHRcdFx0c2NscC5tYXhfY29yZXMgPSA2NDtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jPTUwNT1zY2xwX3R0eV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01MTItXHQvKiB6L1ZNIG11bHRpcGxleGVzIHRoZSBsaW5lIG1vZGUgb3V0cHV0IG9uIHRoZSAzMnh4IHNjcmVlbiAqL1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYzo1MTM6XHRpZiAobWFjaGluZV9pc192bSgpIFx1MDAyNlx1MDAyNiAhQ09OU09MRV9JU19TQ0xQKVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01MTQtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTM4LVx0c2NscF90dHlfYnVmZmVyX2NvdW50ID0gMDtcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmM6NTM5Olx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01NDAtXHRcdC8qIGNhc2UgaW5wdXQgbGluZXMgdG8gbG93ZXJjYXNlICovXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jPTUyPXZvaWQgX19pbml0IHZtY3BfY21hX3Jlc2VydmUodm9pZClcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01My17XG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM6NTQ6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01NS1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYz0yNDg9c3RhdGljIGludCBfX2luaXQgdm1jcF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTI1MS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYzoyNTI6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy0yNTMtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmM9ODA2PXN0YXRpYyBpbnQgX19pbml0IHZtbG9ncmRyX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jLTgxMS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmM6ODEyOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMtODEzLVx0XHRwcl9lcnIoXCYjMzQ7bm90IHJ1bm5pbmcgdW5kZXIgVk0sIGRyaXZlciBub3QgbG9hZGVkLlxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jPTEwMDY9c3RhdGljIGludCBfX2luaXQgdXJfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYy0xMDEwLVxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jOjEwMTE6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jLTEwMTItXHRcdHByX2VycihcJiMzNDtUaGUgJXMgY2Fubm90IGJlIGxvYWRlZCB3aXRob3V0IHovVk1cXG5cJiMzNDssXG4tLVxuZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYz0xNzM9c3RhdGljIHZvaWQgc25zaWRfY2FsbGJhY2soc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHZvaWQgKmRhdGEsIGludCByYylcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jLTE3OC1cbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmM6MTc5Olx0aWYgKHJjIFx1MDAyNlx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMtMTgwLVx0XHQvKiBUcnkgZGlhZyAweDIxMCBmYWxsYmFjayBvbiB6L1ZNLiAqL1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjQ5ND1zdGF0aWMgaW5saW5lIGludCBfX2luaXQgYXBfYXN5bmNfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjUwNC1cdCAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTA1Olx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjUwNi1cdFx0cG9sbF9oaWdoX3RpbWVvdXQgPSAxNTAwMDAwO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM9Mjk3PXN0YXRpYyBpbnQgcWV0aF9sMl9yZXF1ZXN0X2luaXRpYWxfbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYy0zMDItXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jOjMwMzpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMtMzA0LVx0XHRyYyA9IHFldGhfdm1fcmVxdWVzdF9tYWMoY2FyZCk7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jPTEzOT1zdGF0aWMgaW50IF9faW5pdCBzbXNnX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMtMTQyLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jOjE0MzpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMtMTQ0LVx0XHRyYyA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYz0xNTI9c3RhdGljIGludCBfX2luaXQgc21zZ2l1Y3ZfYXBwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2X2FwcC5jLTE1Ni1cbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmM6MTU3Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2X2FwcC5jLTE1OC1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM9MTIzOT1zdGF0aWMgaW50IHBhcmFtX3NldF92bWlkZmlsdGVyKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI0Mi1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jOjEyNDM6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSB8fCAhaHZjX2l1Y3ZfZGV2aWNlcylcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNDQtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jPTEyNjY9c3RhdGljIGludCBwYXJhbV9nZXRfdm1pZGZpbHRlcihjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNzEtXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYzoxMjcyOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkgfHwgIWh2Y19pdWN2X2RldmljZXMpXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjczLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYz0xMzAxPXN0YXRpYyBpbnQgX19pbml0IGh2Y19pdWN2X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMzA4LVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM6MTMwOTpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMzEwLVx0XHRwcl9ub3RpY2UoXCYjMzQ7VGhlIHovVk0gSVVDViBIVkMgZGV2aWNlIGRyaXZlciBjYW5ub3QgXCYjMzQ7XG4tLVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jPTgxPXN0YXRpYyBpbnQgd2R0X3N0YXJ0KHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtODUtXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM6ODY6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtODctXHRcdGZ1bmMgPSBjb25jZWFsX29uID8gKFdEVF9GVU5DX0lOSVQgfCBXRFRfRlVOQ19DT05DRUFMKVxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYz0xMDc9c3RhdGljIGludCB3ZHRfcGluZyhzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTExMS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYzoxMTI6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtMTEzLVx0XHQvKlxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYz0xNjI9c3RhdGljIGludCBfX2luaXQgZGlhZzI4OF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTE2NS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYzoxNjY6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtMTY3LVx0XHRjbWRfYnVmID0ga21hbGxvYyhNQVhfQ01ETEVOLCBHRlBfS0VSTkVMKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI4MD1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjgzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyODQ6XHRpZiAobWFjaGluZV9pc192bSgpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19JVUNWKSkge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyODUtXHRcdGNwY21kKFwmIzM0O1FVRVJZIFVTRVJJRFwmIzM0OywgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFx1MDAyNmVycik7XG4tLVxubmV0L2l1Y3YvaXVjdi5jPTE4NjI9c3RhdGljIGludCBfX2luaXQgaXVjdl9pbml0KHZvaWQpXG4tLVxubmV0L2l1Y3YvaXVjdi5jLTE4NjUtXG5uZXQvaXVjdi9pdWN2LmM6MTg2NjpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5uZXQvaXVjdi9pdWN2LmMtMTg2Ny1cdFx0cmMgPSAtRVBST1RPTk9TVVBQT1JUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAyOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIE5ldHdvcmsgTWFrZWZpbGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyBgYWZfaXVjdmAgKEFkZHJlc3MgRmFtaWx5IElVQ1YpIGdldHMgYnVpbHQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYENPTkZJR19JVUNWYCBhbmQgdGhlIHovVk0gZW52aXJvbm1lbnQuIEkmIzM5O20gc2VlaW5nIHRoYXQgYG1hY2hpbmVfaXNfdm0oKWAgaXMgY3J1Y2lhbC4gSWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgdW5kZXIgUUVNVSwgdGhhdCBmdW5jdGlvbiB3aWxsIHJldHVybiBmYWxzZSwgd2hpY2ggbGVhZHMgdG8gYHByX2l1Y3ZgIGJlaW5nIE5VTEwsIGFuZCB0aHVzIGBhZl9pdWN2YCBkZWZhdWx0aW5nIHRvIHRoZSBIaXBlclNvY2tldHMgdHJhbnNwb3J0LgoKVGhlIG9yaWdpbmFsIGNvZGUmIzM5O3MgbG9naWMgaW4gYGFmaXVjdl9pbml0YCB3YXMgbGlrZSB0aGlzOiBpZiBpdCYjMzk7cyB6L1ZNICphbmQqIGBDT05GSUdfSVVDVmAgaXMgZW5hYmxlZCwgdGhlbiBgcHJfaXVjdmAgZ2V0cyBzZXQgdG8gYCZhbXA7aXVjdl9pZmAuIE90aGVyd2lzZSwgYHByX2l1Y3ZgIGlzIE5VTEwuIEhvd2V2ZXIsIHVuZGVyIFFFTVUsIGBtYWNoaW5lX2lzX3ZtKClgIGlzIGZhbHNlLCBtZWFuaW5nIGBwcl9pdWN2YCAqYWx3YXlzKiBiZWNvbWVzIE5VTEwsIHJlZ2FyZGxlc3Mgb2YgdGhlIGBDT05GSUdfSVVDVmAgc2V0dGluZy4gU28sIGV2ZW4gaWYgYENPTkZJR19JVUNWYCAqd2FzKiBlbmFibGVkLCBgYWZfaXVjdmAgd291bGQgc3RpbGwgdXNlIEhpcGVyU29ja2V0cyB1bmRlciBRRU1VIGJlY2F1c2UgdGhlIElVQ1YgaW50ZXJmYWNlIHBvaW50ZXIgYHByX2l1Y3ZgIGlzIG5ldmVyIGluaXRpYWxpemVkLgoKVGhlIHByb2JsZW0/IElmIGBDT05GSUdfSVVDVmAgd2FzIGRpc2FibGVkLCB0aGUgbWFrZWZpbGUgbG9naWMgc2tpcHBlZCBidWlsZGluZyBgbmV0L2l1Y3YvYCwgd2hpY2ggbWVhbnMgYGFmX2l1Y3Yub2Agd291bGRuJiMzOTt0IGJlIGJ1aWx0IGF0IGFsbC4gVGhpcyBwYXRjaCBjaGFuZ2VzIHRoYXQ6IGl0IGZvcmNlcyBgYWZfaXVjdi5vYCB0byBiZSBidWlsdCwgcmVnYXJkbGVzcyBvZiBgQ09ORklHX0lVQ1ZgJiMzOTtzIHNldHRpbmcgKGJ5IGNoYW5naW5nIGBvYmotJChDT05GSUdfSVVDVikJCSYjNDM7PSBpdWN2L2AgdG8gYG9iai15CQkJCSYjNDM7PSBpdWN2L2ApLgoKVGhlIGltcGFjdCBvbiBleGVjdXRpb24gZmxvdyBpcyBub3cgY2xlYXIuIFRoaXMgcGF0Y2ggKmVuYWJsZXMqIGBhZl9pdWN2YCB0byBiZSBidWlsdCBhbmQgdXNlZCB3aGVuIGBDT05GSUdfSVVDVmAgaXMgZGlzYWJsZWQsIGFuZCB3aWxsIHVzZSBIaXBlclNvY2tldHMuCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzIGZ1enppbmcuIERvZXMgdGhpcyBhY3R1YWxseSBjcmVhdGUgYSBuZXcsIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCB0aGF0IG5lZWRzIGZvY3VzZWQgZnV6emluZz8gSWYgc3l6a2FsbGVyIGhhcyBgQ09ORklHX0lVQ1Y9eWAgYW5kIGBDT05GSUdfQUZJVUNWPXlgIGVuYWJsZWQgKHdoaWNoIGlzIHZlcnkgbGlrZWx5IHRoZSBkZWZhdWx0KSBvbiBTMzkwLCB0aGVuIGBhZl9pdWN2YCB3YXMgKmFscmVhZHkqIGJlaW5nIGZ1enplZCwgdGhvdWdoIGl0IHdhcyBzdGlsbCBhbHdheXMgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQgdW5kZXIgUUVNVSwgZXZlbiB3aXRoIGBDT05GSUdfSVVDVj15YC4KCkhvd2V2ZXIsIHRoZSBrZXkgaW5zaWdodCBpcyB0aGF0IHN5emthbGxlciAqbWlnaHQqIHVzZSBjb25maWd1cmF0aW9ucyB3aGVyZSBgQ09ORklHX0lVQ1Y9bmAgYnV0IGBDT05GSUdfQUZJVUNWPXlgLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB0aGlzIHBhdGNoIGJlY29tZXMgc2lnbmlmaWNhbnQuIEl0ICplbmFibGVzKiBgYWZfaXVjdmAgdG8gYmUgYnVpbHQgYW5kIHRlc3RlZCB1bmRlciB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCwgYSBuZXcgc3RhdGUgdGhhdCB3YXNuJiMzOTt0IHBvc3NpYmxlIGJlZm9yZS4gVGhpcyBpcyBhIGZpeCBmb3IgYSBidWlsZCBzeXN0ZW0gYnVnLgoKQmVjYXVzZSB0aGlzIHBhdGNoIG1vZGlmaWVzIGBuZXQvTWFrZWZpbGVgLCBhbmQgdGhlIHByb21wdCBzYXlzICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSwmIzM0OyBzbyBJIHRoaW5rIHRoaXMgaXMgd29ydGggZnV6emluZy4gVGhlIHJlYWNoYWJsZSBjb2RlIGlzIHRoZSBzYW1lIGFzIGJlZm9yZSwgYGFmX2l1Y3ZgIGNvZGUuCgpTbywgZm9yIGZ1enppbmcsIHdlJiMzOTtkIG5lZWQgdG8gZm9jdXMgb24gZnVuY3Rpb25zIGluIGBuZXQvaXVjdi9hZl9pdWN2LmNgLCBzdWNoIGFzIGBhZml1Y3ZfaHNfc2VuZGAsIGBpdWN2X3NvY2tfc2VuZG1zZ2AsIGBpdWN2X3NvY2tfYmluZGAsIGV0Yy4gV2Ugc2hvdWxkIHRlc3Qgd2l0aCBgQ09ORklHX0FGSVVDVj15YCwgYXMgd2VsbCBhcyBgQ09ORklHX0lVQ1Y9bmAuIFRoZSBvcmlnaW5hbCBwYXRjaCBjaGFuZ2VzIHRoZSBidWlsZCBzeXN0ZW0sIHNvIGl0JiMzOTtzIGEgd29ydGh3aGlsZSBwYXRoIHRvIHRlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JVUNWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0yMjgwPXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyODMtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI4NDpcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI4NS1cdFx0Y3BjbWQoXCYjMzQ7UVVFUlkgVVNFUklEXCYjMzQ7LCBpdWN2X3VzZXJpZCwgc2l6ZW9mKGl1Y3ZfdXNlcmlkKSwgXHUwMDI2ZXJyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzMTIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBRRU1VIGFuZCBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHBhdGNoIG9ubHkgYWZmZWN0cyBgYWZpdWN2X2luaXRgLiBHaXZlbiB0aGUgZXN0YWJsaXNoZWQgdW5kZXJzdGFuZGluZyB0aGF0IGBtYWNoaW5lX2lzX3ZtKClgIGlzIGZhbHNlIHVuZGVyIFFFTVUsIHRoZSBgSVNfRU5BQkxFRChDT05GSUdfSVVDVilgIGNvbmRpdGlvbiBiZWNvbWVzIGlycmVsZXZhbnQgdG8gdGhlIFFFTVUgZXhlY3V0aW9uIGZsb3cuIFRoaXMgbWVhbnMgdGhhdCwgb3JkaW5hcmlseSwgdGhlIGV4ZWN1dGlvbiBwYXRoIHVuZGVyIFFFTVUgc2hvdWxkIGJlIGlkZW50aWNhbCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGBDT05GSUdfSVVDVmAgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyB3b3VsZCBpbXBseSB0aGF0IHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBleHBvc2UgYW55IG5ldyBleGVjdXRpb24gcGF0aHMgaW4gUUVNVSB0aGF0IHdlcmVuJiMzOTt0IGFscmVhZHkgdGhlcmUgd2hlbiBgQ09ORklHX0lVQ1Y9eWAuCgpIb3dldmVyLCBoZXJlJiMzOTtzIGEgY3J1Y2lhbCBwb2ludDogd2hhdCBpZiBgQ09ORklHX0lVQ1ZgIHdhcyAqZGlzYWJsZWQqIGluIHRoZSBzeXprYWxsZXIgY29uZmlndXJhdGlvbiwgbWVhbmluZyBgYWZfaXVjdmAgd2FzbiYjMzk7dCBldmVuIGJ1aWx0PyBOb3csIHRoZSBwYXRjaCAqZW5hYmxlcyogaXQhIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjb25zaWRlcmF0aW9uLiBJZiBpdCBlbmFibGVzIGEgd2hvbGUgbmV3IHNvY2tldCBmYW1pbHkgdGhhdCB3YXNuJiMzOTt0IHByZXZpb3VzbHkgZnV6emVkLCBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgYXR0ZW50aW9uLgoKTGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQuIGBDT05GSUdfSVVDVmAgaXMgZ2VuZXJhbGx5IGVuYWJsZWQgd2hlbiBgQ09ORklHX0FGSVVDVmAgaXMgZW5hYmxlZCBiZWNhdXNlIGBBRklVQ1ZgIGRlcGVuZHMgb24gYFMzOTBgIGFuZCB1c3VhbGx5IGRlZmF1bHRzIHRvICYjMzk7bSYjMzk7IGlmIGBRRVRIX0wzYCBvciBgSVVDVmAgYXJlIGFsc28gZW5hYmxlZC4gVGhlIHByb21wdCBpdHNlbGYgZm9yIGBBRklVQ1ZgIGlzIOKAnEFGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KS7igJ0gSWYgc3l6a2FsbGVyIHRlc3RzIFMzOTAsIHRoZW4gaXQmIzM5O3MgbGlrZWx5IHRoYXQgYm90aCBhcmUgZW5hYmxlZC4KCkJ1dCB0aGVuIHRoZXJlJiMzOTtzIHRoZSBzcGVjaWZpYyBndWlkZWxpbmU6IOKAnFJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuLi4gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LuKAnSBUaGlzIHBhdGNoICpkb2VzKiBtb2RpZnkgYSBNYWtlZmlsZS4gRG9lcyBhIE1ha2VmaWxlIG1vZGlmaWNhdGlvbiBjb3VudCBhcyBhICYjMzQ7S2NvbmZpZyBmaWxlJiMzNDs/IEl0JiMzOTtzIHBhcnQgb2YgdGhlIGJ1aWxkIHN5c3RlbS4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGEgTWFrZWZpbGUgbW9kaWZpY2F0aW9uLCAqYnkgaXRzZWxmKiwgZnVuY3Rpb25hbGx5IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cuIFdlbGwsIGl0IGNoYW5nZXMgd2hhdCBnZXRzIGNvbXBpbGVkLCBhbmQgaWYgaXQgY29tcGlsZXMgbmV3IGNvZGUsIHRoYXQgKmRvZXMqIGFsdGVyIHRoZSBrZXJuZWwmIzM5O3MgZnVuY3Rpb25hbGl0eS4gVGhpcyBtYWtlcyBpdCB3b3J0aCBjb25zaWRlcmluZy4KCklmIHdlIGRlY2lkZSB0byBmdXp6LCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgc3ltYm9scyB0byBmb2N1cyBvbj8gSSYjMzk7ZCBjb25zaWRlciBgaXVjdl9zb2NrX2NyZWF0ZWAsIGBpdWN2X3NvY2tfYmluZGAsIGBpdWN2X3NvY2tfc2VuZG1zZ2AsIGBpdWN2X3NvY2tfcmVjdm1zZ2AsIGBhZml1Y3ZfaHNfc2VuZGAsIGFuZCBgYWZpdWN2X2hzX3JjdmAuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBhZml1Y3ZfaHNfcmN2YCBpcyBldmVuIHJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZpdWN2X2hzX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9MTk5Nz1zdGF0aWMgaW50IGFmaXVjdl9oc19jYWxsYmFja19yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwMzgtLypcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDM5OiAqIGFmaXVjdl9oc19yY3YoKSAtIGJhc2UgZnVuY3Rpb24gZm9yIGFycml2aW5nIGRhdGEgdGhyb3VnaCBIaXBlclNvY2tldHNcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDQwLSAqICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDQyLSAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIwNDM6c3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA0NC1cdHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2Rldilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI3NT1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI3Ni1cdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQUZfSVVDViksXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI3NzpcdC5mdW5jID0gYWZpdWN2X2hzX3Jjdixcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjc4LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODUxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGFuZCBGdXp6aW5nIGFmaXVjdl9oc19yY3YqKgoKT2theSwgc28gYGFmaXVjdl9oc19yY3ZgICppcyogcmVnaXN0ZXJlZCBhcyBhIHBhY2tldCB0eXBlIGhhbmRsZXIgZm9yIGBFVEhfUF9BRl9JVUNWYC4gVGhpcyBtZWFucyB0aGF0IHdlICpjYW4qIHJlYWNoIGl0IGJ5IHNlbmRpbmcgcGFja2V0cyB3aXRoIHRoZSBgRVRIX1BfQUZfSVVDVmAgcHJvdG9jb2wsIGxpa2VseSBvdmVyIGxvb3BiYWNrIG9yIG90aGVyIGludGVyZmFjZXMuIERlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgdGhlcmVmb3JlLCBkZWZpbml0ZWx5IGZ1enphYmxlLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZD8gQWgsIGBBRklVQ1ZgLgoKSGFuZyBvbiBhIHNlY29uZOKApiBgQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYC4gSG1tLiBDYW4gU3l6a2FsbGVyIGV2ZW4gZW5hYmxlIGBBRklVQ1ZgIG9uIHg4Nj8gTm8sIHRoZSBgZGVwZW5kcyBvbiBTMzkwYCBkZXBlbmRlbmN5IHByZXZlbnRzIHRoYXQuIFRoaXMgbWVhbnMgdGhlIGNvZGUgaXMgKm9ubHkqIGNvbXBpbGVkIHdoZW4gdGFyZ2V0aW5nIFMzOTAsIHdoaWNoIGlzIHVzZWZ1bCBpbmZvcm1hdGlvbi4gVGhlIGdvb2QgbmV3cyBpcyBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYW4gUzM5MHggaW5zdGFuY2UuIElmIHdlIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLCB0aGUgUzM5MCBpbnN0YW5jZSB3aWxsIHBpY2sgaXQgdXAgYW5kIFN5emthbGxlciB3aWxsIHRyeSB0byB0ZXN0IGl0LgoKQnV0Li4ud2FpdCwgd2FzbiYjMzk7dCB0aGVyZSBzb21ldGhpbmcgYWJvdXQgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgR0NFIG9yIFFFTVU/IFdlIGVzdGFibGlzaGVkIHRoYXQgYGFmX2l1Y3ZgICppcyogcmVhY2hhYmxlIGluIFFFTVUgYmVjYXVzZSBpdCBmYWxscyBiYWNrIHRvIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIEl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLgoKUmlnaHQsIHRpbWUgdG8gaWRlbnRpZnkgc29tZSByZWxldmFudCBzeW1ib2xzIGZvciBTeXprYWxsZXIgdG8gZm9jdXMgb246IGBpdWN2X3NvY2tfY3JlYXRlYCwgYGl1Y3Zfc29ja19iaW5kYCwgYGl1Y3Zfc29ja19zZW5kbXNnYCwgYGl1Y3Zfc29ja19yZWN2bXNnYCwgYGFmaXVjdl9oc19zZW5kYCwgYGFmaXVjdl9oc19yY3ZgLCBgaXVjdl9zb2NrX3NldHNvY2tvcHRgLCBhbmQgYGl1Y3Zfc29ja19nZXRzb2Nrb3B0YC4gTGV0JiMzOTtzIGp1c3QgZG91YmxlIGNoZWNrIHRob3NlIG5hbWVzIGZvciBhY2N1cmFjeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9zb2NrXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9NTI9c3RhdGljIGNvbnN0IHU4IGlwcm1fc2h1dGRvd25bOF0gPVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy01Ni1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo1NzojZGVmaW5lIF9faXVjdl9zb2NrX3dhaXQoc2ssIGNvbmRpdGlvbiwgdGltZW8sIHJldClcdFx0XHRcXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU4LWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy04MS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo4MjojZGVmaW5lIGl1Y3Zfc29ja193YWl0KHNrLCBjb25kaXRpb24sIHRpbWVvKVx0XHRcdFx0XFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy04My0oe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTg1LVx0aWYgKCEoY29uZGl0aW9uKSlcdFx0XHRcdFx0XHRcXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjg2Olx0XHRfX2l1Y3Zfc29ja193YWl0KHNrLCBjb25kaXRpb24sIHRpbWVvLCBfX3JldCk7XHRcdFxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtODctXHRfX3JldDtcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTA9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X2FjY2VwdF9kZXF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTEtXHRcdFx0XHRcdHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjkyOnN0YXRpYyB2b2lkIGl1Y3Zfc29ja19raWxsKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6OTM6c3RhdGljIHZvaWQgaXVjdl9zb2NrX2Nsb3NlKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtOTQtXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTU9c3RhdGljIHZvaWQgYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5KHN0cnVjdCBzb2NrICpzaywgZW51bSBpdWN2X3R4X25vdGlmeSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtOTYtXG5uZXQvaXVjdi9hZl9pdWN2LmM6OTc6c3RhdGljIHN0cnVjdCBpdWN2X3NvY2tfbGlzdCBpdWN2X3NrX2xpc3QgPSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtOTgtXHQubG9jayA9IF9fUldfTE9DS19VTkxPQ0tFRChpdWN2X3NrX2xpc3QubG9jayksXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTEwNz1zdGF0aWMgaW5saW5lIHZvaWQgbG93X25tY3B5KHVuc2lnbmVkIGNoYXIgKmRzdCwgY2hhciAqc3JjKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjYtICogSWYgdGhlIHNvY2tldCBkYXRhIGxlbiBpcyBncmVhdGVyIDcsIHRoZW4gUFJNREFUQSBjYW4gYmUgdXNlZCBmb3Igc3BlY2lhbFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEyNzogKiBub3RpZmljYXRpb25zIChzZWUgaXVjdl9zb2NrX3NodXRkb3duKTsgYW5kIGZ1cnRoZXIsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTI4LSAqIGlmIHRoZSBzb2NrZXQgZGF0YSBsZW4gaXMgXHUwMDNlIDcsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDguXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTEzND1zdGF0aWMgaW5saW5lIHNpemVfdCBpdWN2X21zZ19sZW5ndGgoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUtLyoqXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ2OiAqIGl1Y3Zfc29ja19pbl9zdGF0ZSgpIC0gY2hlY2sgZm9yIHNwZWNpZmljIHN0YXRlc1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE0Ny0gKiBAc2s6XHRcdHNvY2sgc3RydWN0dXJlXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE1Mi0gKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNTM6c3RhdGljIGludCBpdWN2X3NvY2tfaW5fc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUsIGludCBzdGF0ZTIpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTU0LXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTY2PXN0YXRpYyBpbmxpbmUgaW50IGl1Y3ZfYmVsb3dfbXNnbGltKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTc5LS8qXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTgwOiAqIGl1Y3Zfc29ja193YWtlX21zZ2xpbSgpIC0gV2FrZSB1cCB0aHJlYWQgd2FpdGluZyBvbiBtc2cgbGltaXRcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODEtICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTgyOnN0YXRpYyB2b2lkIGl1Y3Zfc29ja193YWtlX21zZ2xpbShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTgzLXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjY4PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX19pdWN2X2dldF9zb2NrX2J5X25hbWUoY2hhciAqbm0pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTI3OC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyNzk6c3RhdGljIHZvaWQgaXVjdl9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yODAte1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yOTUtLyogQ2xlYW51cCBMaXN0ZW4gKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyOTY6c3RhdGljIHZvaWQgaXVjdl9zb2NrX2NsZWFudXBfbGlzdGVuKHN0cnVjdCBzb2NrICpwYXJlbnQpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjk3LXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzAxLVx0d2hpbGUgKChzayA9IGl1Y3ZfYWNjZXB0X2RlcXVldWUocGFyZW50LCBOVUxMKSkpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzozMDI6XHRcdGl1Y3Zfc29ja19jbG9zZShzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MzAzOlx0XHRpdWN2X3NvY2tfa2lsbChzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzA0LVx0fVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMDgtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzA5OnN0YXRpYyB2b2lkIGl1Y3Zfc29ja19saW5rKHN0cnVjdCBpdWN2X3NvY2tfbGlzdCAqbCwgc3RydWN0IHNvY2sgKnNrKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTMxMC17XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTMxNS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzozMTY6c3RhdGljIHZvaWQgaXVjdl9zb2NrX3VubGluayhzdHJ1Y3QgaXVjdl9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaylcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMTcte1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMjMtLyogS2lsbCBzb2NrZXQgKG9ubHkgaWYgemFwcGVkIGFuZCBvcnBoYW5lZCkgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzozMjQ6c3RhdGljIHZvaWQgaXVjdl9zb2NrX2tpbGwoc3RydWN0IHNvY2sgKnNrKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTMyNS17XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTMyOC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzozMjk6XHRpdWN2X3NvY2tfdW5saW5rKFx1MDAyNml1Y3Zfc2tfbGlzdCwgc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTMzMC1cdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTM1NT1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9jdHJsKHN0cnVjdCBzb2NrICpzaywgdTggZmxhZ3MpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTM4MC0vKiBDbG9zZSBhbiBJVUNWIHNvY2tldCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjM4MTpzdGF0aWMgdm9pZCBpdWN2X3NvY2tfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTM4Mi17XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTM5MC1cdGNhc2UgSVVDVl9MSVNURU46XG5uZXQvaXVjdi9hZl9pdWN2LmM6MzkxOlx0XHRpdWN2X3NvY2tfY2xlYW51cF9saXN0ZW4oc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTM5Mi1cdFx0YnJlYWs7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQxMC1cdFx0XHRcdHRpbWVvID0gSVVDVl9ESVNDT05OX1RJTUVPVVQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDExOlx0XHRcdGl1Y3Zfc29ja193YWl0KHNrLFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQxMjpcdFx0XHRcdFx0aXVjdl9zb2NrX2luX3N0YXRlKHNrLCBJVUNWX0NMT1NFRCwgMCksXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDEzLVx0XHRcdFx0XHR0aW1lbyk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQzNy1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo0Mzg6XHQvKiBtYXJrIHNvY2tldCBmb3IgZGVsZXRpb24gYnkgaXVjdl9zb2NrX2tpbGwoKSAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQzOS1cdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDQzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ0NDpzdGF0aWMgdm9pZCBpdWN2X3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDQ1LXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDUxLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ1MjpzdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ1My17XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ4My1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo0ODQ6XHRzay1cdTAwM2Vza19kZXN0cnVjdCA9IGl1Y3Zfc29ja19kZXN0cnVjdDtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00ODUtXHRzay1cdTAwM2Vza19zbmR0aW1lbyA9IElVQ1ZfQ09OTl9USU1FT1VUO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTEtXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkyOlx0aXVjdl9zb2NrX2xpbmsoXHUwMDI2aXVjdl9za19saXN0LCBzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkzLVx0cmV0dXJuIHNrO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz01NTQ9c3RhdGljIHZvaWQgX19pdWN2X2F1dG9fbmFtZShzdHJ1Y3QgaXVjdl9zb2NrICppdWN2KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy01NjctLyogQmluZCBhbiB1bmJvdW5kIHNvY2tldCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjU2ODpzdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU2OS1cdFx0XHQgIGludCBhZGRyX2xlbilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjUwLS8qIEF1dG9tYXRpY2FsbHkgYmluZCBhbiB1bmJvdW5kIHNvY2tldCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjY1MTpzdGF0aWMgaW50IGl1Y3Zfc29ja19hdXRvYmluZChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjUyLXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjczPXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzE4LS8qIENvbm5lY3QgYW4gdW5jb25uZWN0ZWQgc29ja2V0ICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzE5OnN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzIwLVx0XHRcdCAgICAgaW50IGFsZW4sIGludCBmbGFncylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQwLVx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfT1BFTikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjc0MTpcdFx0ZXJyID0gaXVjdl9zb2NrX2F1dG9iaW5kKHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDItXHRcdGlmICh1bmxpa2VseShlcnIpKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03NTktXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gSVVDVl9DT05ORUNURUQpXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzYwOlx0XHRlcnIgPSBpdWN2X3NvY2tfd2FpdChzaywgaXVjdl9zb2NrX2luX3N0YXRlKHNrLCBJVUNWX0NPTk5FQ1RFRCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjEtXHRcdFx0XHRcdFx0XHQgICAgSVVDVl9ESVNDT05OKSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzc1LS8qIE1vdmUgYSBzb2NrZXQgaW50byBsaXN0ZW5pbmcgc3RhdGUuICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6Nzc2OnN0YXRpYyBpbnQgaXVjdl9zb2NrX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZylcbm5ldC9pdWN2L2FmX2l1Y3YuYy03Nzcte1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy04MDAtLyogQWNjZXB0IGEgcGVuZGluZyBjb25uZWN0aW9uICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6ODAxOnN0YXRpYyBpbnQgaXVjdl9zb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTgwMi1cdFx0XHQgICAgc3RydWN0IHByb3RvX2FjY2VwdF9hcmcgKmFyZylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtODU0LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjg1NTpzdGF0aWMgaW50IGl1Y3Zfc29ja19nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcixcbm5ldC9pdWN2L2FmX2l1Y3YuYy04NTYtXHRcdFx0ICAgICBpbnQgcGVlcilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9ODkxPXN0YXRpYyBpbnQgaXVjdl9zZW5kX2lwcm0oc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy05MDEtXG5uZXQvaXVjdi9hZl9pdWN2LmM6OTAyOnN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTkwMy1cdFx0XHQgICAgIHNpemVfdCBsZW4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwMTUtXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG5vYmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEwMTY6XHRlcnIgPSBpdWN2X3NvY2tfd2FpdChzaywgaXVjdl9iZWxvd19tc2dsaW0oc2spLCB0aW1lbyk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAxNy1cdGlmIChlcnIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTExNDQ9c3RhdGljIHZvaWQgaXVjdl9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTU2LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjExNTc6XHQvKiBjaGVjayBmb3Igc3BlY2lhbCBJUFJNIG1lc3NhZ2VzIChlLmcuIGl1Y3Zfc29ja19zaHV0ZG93bikgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTU4LVx0aWYgKChtc2ctXHUwMDNlZmxhZ3MgXHUwMDI2IElVQ1ZfSVBSTURBVEEpIFx1MDAyNlx1MDAyNiBsZW4gXHUwMDNlIDcpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTIwNT1zdGF0aWMgdm9pZCBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIyMi1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjIzOnN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyMjQtXHRcdFx0ICAgICBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyOTgtXHRcdFx0XHRXQVJOX09OKDEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEyOTk6XHRcdFx0XHRpdWN2X3NvY2tfY2xvc2Uoc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMDAtXHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTM1MD1zdGF0aWMgaW5saW5lIF9fcG9sbF90IGl1Y3ZfYWNjZXB0X3BvbGwoc3RydWN0IHNvY2sgKnBhcmVudClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTM2NC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzY1OnN0YXRpYyBfX3BvbGxfdCBpdWN2X3NvY2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzY2LVx0XHRcdCAgICAgICBwb2xsX3RhYmxlICp3YWl0KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDAzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0MDQ6c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDA1LXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3MS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDcyOnN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDczLXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3OS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDgwOlx0aXVjdl9zb2NrX2Nsb3NlKHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDgxLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0ODItXHRzb2NrX29ycGhhbihzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ4MzpcdGl1Y3Zfc29ja19raWxsKHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDg0LVx0cmV0dXJuIGVycjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ4Ny0vKiBnZXRzb2Nrb3B0IGFuZCBzZXRzb2Nrb3B0ICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ4ODpzdGF0aWMgaW50IGl1Y3Zfc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ4OS1cdFx0XHRcdHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE1MzctXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTUzODpzdGF0aWMgaW50IGl1Y3Zfc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTUzOS1cdFx0XHRcdHNvY2tvcHRfdCAqb3B0KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNTkzPXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NDMtXHQvKiBDcmVhdGUgdGhlIG5ldyBzb2NrZXQgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjQ0Olx0bnNrID0gaXVjdl9zb2NrX2FsbG9jKE5VTEwsIHNrLVx1MDAzZXNrX3Byb3RvY29sLCBHRlBfQVRPTUlDLCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjQ1LVx0aWYgKCFuc2spIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1MS1cdG5pdWN2ID0gaXVjdl9zayhuc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NTI6XHRpdWN2X3NvY2tfaW5pdChuc2ssIHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjUzLVx0bml1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc0LVx0XHRpdWN2X3NldmVyX3BhdGgobnNrLCAxKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc1Olx0XHRpdWN2X3NvY2tfa2lsbChuc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzYtXHRcdGdvdG8gZmFpbDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTc0Mj1zdGF0aWMgdm9pZCBpdWN2X2NhbGxiYWNrX3R4ZG9uZShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzczLVx0XHQvKiB3YWtlIHVwIGFueSBwcm9jZXNzIHdhaXRpbmcgZm9yIHNlbmRpbmcgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzc0Olx0XHRpdWN2X3NvY2tfd2FrZV9tc2dsaW0oc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE3NzUtXHR9XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4NTA9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg2NS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODY2Olx0bnNrID0gaXVjdl9zb2NrX2FsbG9jKE5VTEwsIHNrLVx1MDAzZXNrX3Byb3RvY29sLCBHRlBfQVRPTUlDLCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODY3LVx0YmhfbG9ja19zb2NrKHNrKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg3NC1cdFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODc1Olx0XHRpdWN2X3NvY2tfa2lsbChuc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE4NzYtXHRcdGJoX3VubG9ja19zb2NrKHNrKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg4MC1cdG5pdWN2ID0gaXVjdl9zayhuc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE4ODE6XHRpdWN2X3NvY2tfaW5pdChuc2ssIHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODgyLVx0bml1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkwNC1cdH0gZWxzZVxubmV0L2l1Y3YvYWZfaXVjdi5jOjE5MDU6XHRcdGl1Y3Zfc29ja19raWxsKG5zayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkwNi1cdGJoX3VubG9ja19zb2NrKHNrKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTk3OT1zdGF0aWMgaW50IGFmaXVjdl9oc19jYWxsYmFja193aW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTg5LVx0YXRvbWljX3N1YihpdWN2X3RyYW5zX2hkcihza2IpLVx1MDAzZXdpbmRvdywgXHUwMDI2aXVjdi1cdTAwM2Vtc2dfc2VudCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTk5MDpcdGl1Y3Zfc29ja193YWtlX21zZ2xpbShzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTk5MS1cdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjE0OD1zdGF0aWMgdm9pZCBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnkoc3RydWN0IHNvY2sgKnNrLCBlbnVtIGl1Y3ZfdHhfbm90aWZ5IG4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNTctXHRcdGF0b21pY19kZWMoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxNTg6XHRcdGl1Y3Zfc29ja193YWtlX21zZ2xpbShzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE1OS1cdFx0YnJlYWs7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNjUtXHRcdGlmIChhdG9taWNfZGVjX3JldHVybihcdTAwMjZpdWN2LVx1MDAzZXBlbmRpbmdzKSBcdTAwM2M9IDApXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE2NjpcdFx0XHRpdWN2X3NvY2tfd2FrZV9tc2dsaW0oc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNjctXHRcdGJyZWFrO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjE2PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgYWZpdWN2X25ldGRldl9ub3RpZmllciA9IHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIxOS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjIwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGl1Y3Zfc29ja19vcHMgPSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIyMS1cdC5mYW1pbHlcdFx0PSBQRl9JVUNWLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjItXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjIzOlx0LnJlbGVhc2VcdD0gaXVjdl9zb2NrX3JlbGVhc2UsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyNDpcdC5iaW5kXHRcdD0gaXVjdl9zb2NrX2JpbmQsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyNTpcdC5jb25uZWN0XHQ9IGl1Y3Zfc29ja19jb25uZWN0LFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjY6XHQubGlzdGVuXHRcdD0gaXVjdl9zb2NrX2xpc3Rlbixcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjI3Olx0LmFjY2VwdFx0XHQ9IGl1Y3Zfc29ja19hY2NlcHQsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyODpcdC5nZXRuYW1lXHQ9IGl1Y3Zfc29ja19nZXRuYW1lLFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjk6XHQuc2VuZG1zZ1x0PSBpdWN2X3NvY2tfc2VuZG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjMwOlx0LnJlY3Ztc2dcdD0gaXVjdl9zb2NrX3JlY3Ztc2csXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIzMTpcdC5wb2xsXHRcdD0gaXVjdl9zb2NrX3BvbGwsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIzMi1cdC5pb2N0bFx0XHQ9IHNvY2tfbm9faW9jdGwsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMzQtXHQuc29ja2V0cGFpclx0PSBzb2NrX25vX3NvY2tldHBhaXIsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIzNTpcdC5zaHV0ZG93blx0PSBpdWN2X3NvY2tfc2h1dGRvd24sXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIzNjpcdC5zZXRzb2Nrb3B0XHQ9IGl1Y3Zfc29ja19zZXRzb2Nrb3B0LFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMzc6XHQuZ2V0c29ja29wdF9pdGVyID0gaXVjdl9zb2NrX2dldHNvY2tvcHQsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIzOC19O1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMzktXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI0MDpzdGF0aWMgaW50IGl1Y3Zfc29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI0MS1cdFx0XHQgICAgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNTMtXHRcdC8qIGN1cnJlbnRseSwgcHJvdG8gb3BzIGNhbiBoYW5kbGUgYm90aCBzayB0eXBlcyAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNTQ6XHRcdHNvY2stXHUwMDNlb3BzID0gXHUwMDI2aXVjdl9zb2NrX29wcztcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjU1LVx0XHRicmVhaztcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI1OS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjYwOlx0c2sgPSBpdWN2X3NvY2tfYWxsb2Moc29jaywgcHJvdG9jb2wsIEdGUF9LRVJORUwsIGtlcm4pO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNjEtXHRpZiAoIXNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjYzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNjQ6XHRpdWN2X3NvY2tfaW5pdChzaywgTlVMTCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI2NS1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI2OC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjY5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjcwLVx0LmZhbWlseVx0PSBBRl9JVUNWLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNzEtXHQub3duZXJcdD0gVEhJU19NT0RVTEUsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI3MjpcdC5jcmVhdGVcdD0gaXVjdl9zb2NrX2NyZWF0ZSxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjczLX07XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyODA9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwMC1cdFx0Z290byBvdXQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMwMTpcdGVyciA9IHNvY2tfcmVnaXN0ZXIoXHUwMDI2aXVjdl9zb2NrX2ZhbWlseV9vcHMpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDItXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzkyNgoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA0NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBmb3JjaW5nIHRoZSBgYWZfaXVjdmAgc29ja2V0IGZhbWlseSB0byBiZSBidWlsdCwgZXZlbiBpZiB0aGUgcHJpbWFyeSBgQ09ORklHX0lVQ1ZgIG9wdGlvbiBpcyBkaXNhYmxlZC4gVGhlIGNvcmUgaWRlYSBpcyB0aGF0IGFzIGxvbmcgYXMgYENPTkZJR19BRklVQ1ZgIGlzIGVuYWJsZWQsIHRoZSBjb2RlIHdpbGwgYmUgY29tcGlsZWQuIEdpdmVuIHRoaXMgY2hhbmdlLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgdGhpcyBpcyBhYnNvbHV0ZWx5ICp3b3J0aCogZnV6emluZy4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4KCkZvciB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIEkgbmVlZCB0byBleHBsaWNpdGx5IHN0YXRlIHdoYXQgZmxhZ3MgYXJlIG5lZWRlZCB0byBjb21waWxlIGFuZCB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlLiAgYEFGSVVDVmAgc2VlbXMgYXBwcm9wcmlhdGU7IGl0JiMzOTtzIHNwZWNpZmljIHRvIFMzOTAsIGJ1dCBpdCAqaXMqIHRoZSBrZXkgY29uZmlnIHRoYXQgZW5hYmxlcyB0aGUgY29kZSBwYXRoIHRoZSBwYXRjaCBpcyBvcGVuaW5nIHVwLiBJIGNvbmZpcm0gdGhhdCBpdCBuZWVkcyB0byBiZSBsaXN0ZWQuCgpOb3csIGxldCBtZSBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZiB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyBzb2xpZC4gVGhlIGBuZXQvTWFrZWZpbGVgIGlzIHRoZSB0YXJnZXQuIFRoZSBjaGFuZ2UgbWFrZXMgdGhlIGBpdWN2L2AgZGlyZWN0b3J5ICphbHdheXMqIGJ1aWx0IChgb2JqLXkgJiM0Mzs9IGl1Y3YvYCkgaW5zdGVhZCBvZiBjb25kaXRpb25hbGx5IChgb2JqLSQoQ09ORklHX0lVQ1YpICYjNDM7PSBpdWN2L2ApLiBUaGUgcGF0Y2ggZGVzY3JpcHRpb24gbWFrZXMgdGhhdCB2ZXJ5IGNsZWFyIGFzIHdlbGwuIFRoaXMgZXhwb3NlcyB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCBmb3IgQUZfSVVDViBzb2NrZXRzLCBldmVuIHdoZW4gdGhlIGJyb2FkZXIgYENPTkZJR19JVUNWYCBpcyBkaXNhYmxlZC4KClRoZXJlZm9yZSwgZm9yIHRoZSBgRm9jdXNTeW1ib2xzYCwgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIHRoZSBrZXkgc29ja2V0IGZ1bmN0aW9uczogYGl1Y3Zfc29ja19jcmVhdGVgLCBgaXVjdl9zb2NrX2JpbmRgLCBgaXVjdl9zb2NrX2Nvbm5lY3RgLCBgaXVjdl9zb2NrX3NlbmRtc2dgLCBgaXVjdl9zb2NrX3JlY3Ztc2dgLCBhbmQgdGhlIEhpcGVyU29ja2V0cy1zcGVjaWZpYyByZWNlaXZlIGFuZCBzZW5kIGZ1bmN0aW9uczogYGFmaXVjdl9oc19yY3ZgIGFuZCBgYWZpdWN2X2hzX3NlbmRgLiBUaGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgbmV3IGNvZGUgcGF0aCB0aGF0JiMzOTtzIGJlaW5nIGVuYWJsZWQuCgpOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRklVQ1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpdWN2X3NvY2tfY3JlYXRlJiMzNDssCiAgICAmIzM0O2l1Y3Zfc29ja19iaW5kJiMzNDssCiAgICAmIzM0O2l1Y3Zfc29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O2l1Y3Zfc29ja19zZW5kbXNnJiMzNDssCiAgICAmIzM0O2l1Y3Zfc29ja19yZWN2bXNnJiMzNDssCiAgICAmIzM0O2FmaXVjdl9oc19yY3YmIzM0OywKICAgICYjMzQ7YWZpdWN2X2hzX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0L01ha2VmaWxlIHRvIGFsd2F5cyBkZXNjZW5kIGludG8gdGhlIG5ldC9pdWN2LyBkaXJlY3RvcnksIGFsbG93aW5nIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHkgKGFmX2l1Y3YubykgdG8gYmUgYnVpbHQgZXZlbiB3aGVuIENPTkZJR19JVUNWIGlzIGRpc2FibGVkIGJ1dCBDT05GSUdfQUZJVUNWIGlzIGVuYWJsZWQuIFRoaXMgZXhwb3NlcyB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5ICh1c2luZyBIaXBlclNvY2tldHMgdHJhbnNwb3J0KSB0byB1c2Vyc3BhY2UgaW4gY29uZmlndXJhdGlvbnMgd2hlcmUgaXQgd2FzIHByZXZpb3VzbHkgdW5yZWFjaGFibGUgZHVlIHRvIGEgYnVpbGQgZGVwZW5kZW5jeSBidWcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2l1Y3Zfc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX2JpbmQmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7YWZpdWN2X2hzX3JjdiYjMzQ7LAogICAgJiMzNDthZml1Y3ZfaHNfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXQvTWFrZWZpbGUgdG8gYWx3YXlzIGRlc2NlbmQgaW50byB0aGUgbmV0L2l1Y3YvIGRpcmVjdG9yeSwgYWxsb3dpbmcgdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSAoYWZfaXVjdi5vKSB0byBiZSBidWlsdCBldmVuIHdoZW4gQ09ORklHX0lVQ1YgaXMgZGlzYWJsZWQgYnV0IENPTkZJR19BRklVQ1YgaXMgZW5hYmxlZC4gVGhpcyBleHBvc2VzIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHkgKHVzaW5nIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpIHRvIHVzZXJzcGFjZSBpbiBjb25maWd1cmF0aW9ucyB3aGVyZSBpdCB3YXMgcHJldmlvdXNseSB1bnJlYWNoYWJsZSBkdWUgdG8gYSBidWlsZCBkZXBlbmRlbmN5IGJ1Zy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM3OjI1LjEzNDg2MDQyN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMTU0MDA4MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGSVVDVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIml1Y3Zfc29ja19jcmVhdGVcIixcbiAgICBcIml1Y3Zfc29ja19iaW5kXCIsXG4gICAgXCJpdWN2X3NvY2tfY29ubmVjdFwiLFxuICAgIFwiaXVjdl9zb2NrX3NlbmRtc2dcIixcbiAgICBcIml1Y3Zfc29ja19yZWN2bXNnXCIsXG4gICAgXCJhZml1Y3ZfaHNfcmN2XCIsXG4gICAgXCJhZml1Y3ZfaHNfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldC9NYWtlZmlsZSB0byBhbHdheXMgZGVzY2VuZCBpbnRvIHRoZSBuZXQvaXVjdi8gZGlyZWN0b3J5LCBhbGxvd2luZyB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5IChhZl9pdWN2Lm8pIHRvIGJlIGJ1aWx0IGV2ZW4gd2hlbiBDT05GSUdfSVVDViBpcyBkaXNhYmxlZCBidXQgQ09ORklHX0FGSVVDViBpcyBlbmFibGVkLiBUaGlzIGV4cG9zZXMgdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSAodXNpbmcgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCkgdG8gdXNlcnNwYWNlIGluIGNvbmZpZ3VyYXRpb25zIHdoZXJlIGl0IHdhcyBwcmV2aW91c2x5IHVucmVhY2hhYmxlIGR1ZSB0byBhIGJ1aWxkIGRlcGVuZGVuY3kgYnVnLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjozNzoyNS4xMzQ4ODk5NDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NzA4NzgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMyMWE4MTQ4YzBmODQyZDhjZjIxNTdjZjAzMDM4NGZjOGM1ODlmMmZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdW4gMjUgMDY6Mzc6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L01ha2VmaWxlIGIvbmV0L01ha2VmaWxlXFxuaW5kZXggNWIyZGQ3ZjA3YTg1ZTkuLmMwZGE5NDZiMjgxZTFkIDEwMDY0NFxcbi0tLSBhL25ldC9NYWtlZmlsZVxcbisrKyBiL25ldC9NYWtlZmlsZVxcbkBAIC00NSw3ICs0NSw3IEBAIG9iai0kKENPTkZJR19XSVJFTEVTUylcXHRcXHQrPSB3aXJlbGVzcy9cXG4gb2JqLSQoQ09ORklHX01BQzgwMjExKVxcdFxcdCs9IG1hYzgwMjExL1xcbiBvYmotJChDT05GSUdfVElQQylcXHRcXHQrPSB0aXBjL1xcbiBvYmotJChDT05GSUdfTkVUTEFCRUwpXFx0XFx0Kz0gbmV0bGFiZWwvXFxuLW9iai0kKENPTkZJR19JVUNWKVxcdFxcdCs9IGl1Y3YvXFxuK29iai15XFx0XFx0XFx0XFx0Kz0gaXVjdi9cXG4gb2JqLSQoQ09ORklHX1NNQylcXHRcXHQrPSBzbWMvXFxuIG9iai0kKENPTkZJR19SRktJTEwpXFx0XFx0Kz0gcmZraWxsL1xcbiBvYmotJChDT05GSUdfTkVUXzlQKVxcdFxcdCs9IDlwL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjozNzoyNS43MDUzNTY3NzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNTgzNDk0MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGSVVDVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIml1Y3Zfc29ja19jcmVhdGVcIixcbiAgICBcIml1Y3Zfc29ja19iaW5kXCIsXG4gICAgXCJpdWN2X3NvY2tfY29ubmVjdFwiLFxuICAgIFwiaXVjdl9zb2NrX3NlbmRtc2dcIixcbiAgICBcIml1Y3Zfc29ja19yZWN2bXNnXCIsXG4gICAgXCJhZml1Y3ZfaHNfcmN2XCIsXG4gICAgXCJhZml1Y3ZfaHNfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldC9NYWtlZmlsZSB0byBhbHdheXMgZGVzY2VuZCBpbnRvIHRoZSBuZXQvaXVjdi8gZGlyZWN0b3J5LCBhbGxvd2luZyB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5IChhZl9pdWN2Lm8pIHRvIGJlIGJ1aWx0IGV2ZW4gd2hlbiBDT05GSUdfSVVDViBpcyBkaXNhYmxlZCBidXQgQ09ORklHX0FGSVVDViBpcyBlbmFibGVkLiBUaGlzIGV4cG9zZXMgdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSAodXNpbmcgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCkgdG8gdXNlcnNwYWNlIGluIGNvbmZpZ3VyYXRpb25zIHdoZXJlIGl0IHdhcyBwcmV2aW91c2x5IHVucmVhY2hhYmxlIGR1ZSB0byBhIGJ1aWxkIGRlcGVuZGVuY3kgYnVnLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMyMWE4MTQ4YzBmODQyZDhjZjIxNTdjZjAzMDM4NGZjOGM1ODlmMmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAwNjozNzoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9NYWtlZmlsZSBiL25ldC9NYWtlZmlsZVxuaW5kZXggNWIyZGQ3ZjA3YTg1ZTkuLmMwZGE5NDZiMjgxZTFkIDEwMDY0NFxuLS0tIGEvbmV0L01ha2VmaWxlXG4rKysgYi9uZXQvTWFrZWZpbGVcbkBAIC00NSw3ICs0NSw3IEBAIG9iai0kKENPTkZJR19XSVJFTEVTUylcdFx0Kz0gd2lyZWxlc3MvXG4gb2JqLSQoQ09ORklHX01BQzgwMjExKVx0XHQrPSBtYWM4MDIxMS9cbiBvYmotJChDT05GSUdfVElQQylcdFx0Kz0gdGlwYy9cbiBvYmotJChDT05GSUdfTkVUTEFCRUwpXHRcdCs9IG5ldGxhYmVsL1xuLW9iai0kKENPTkZJR19JVUNWKVx0XHQrPSBpdWN2L1xuK29iai15XHRcdFx0XHQrPSBpdWN2L1xuIG9iai0kKENPTkZJR19TTUMpXHRcdCs9IHNtYy9cbiBvYmotJChDT05GSUdfUkZLSUxMKVx0XHQrPSByZmtpbGwvXG4gb2JqLSQoQ09ORklHX05FVF85UClcdFx0Kz0gOXAvXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjozNzoyNS43MDUzNjExOTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc5Mzk1MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgSVVDViBOZXR3b3JrIERyaXZlciBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBuZXR3b3JrIGNvZGUsIGFuZCBpdCdzIG1ha2luZyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiBgbmV0L01ha2VmaWxlYC4gSSBzZWUgdGhleSdyZSBzd2l0Y2hpbmcgYG9iai0kKENPTkZJR19JVUNWKSArPSBpdWN2L2AgdG8gYG9iai15ICs9IGl1Y3YvYC4gUmlnaHQsIHRoYXQncyBhIGJpZyBkZWFsLiBUaGF0IG1lYW5zIHRoZSBgbmV0L2l1Y3YvYCBkaXJlY3RvcnkgaXMgZ29pbmcgdG8gYmUgKmFsd2F5cyogY29tcGlsZWQgbm93LCByZWdhcmRsZXNzIG9mIHRoZSBgQ09ORklHX0lVQ1ZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOb3csIHdoeSB3b3VsZCB0aGV5IGRvIHRoYXQ/IFRoYXQncyB0aGUgcXVlc3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgbWFraW5nIHRoaXMgZHJpdmVyIGEgYnVpbHQtaW4gbW9kdWxlLiBJIHN1c3BlY3QgdGhlcmUgaXMgc29tZXRoaW5nIGluIHRoZSBgbmV0L2l1Y3YvTWFrZWZpbGVgIHRoYXQgaXMgd29ydGggbG9va2luZyBhdC4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzc6MjkuMDg0NzYyODY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgSVVDVlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfSVVDVilcXHQrPSBpdWN2Lm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19BRklVQ1YpXFx0Kz0gYWZfaXVjdi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM3OjI5LjA4NDg3NTAxNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NzY2NTE5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBuZXQvaXVjdiBCdWlsZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG5ldC9pdWN2L01ha2VmaWxlYCwgYW5kIGl0J3Mgc3RpbGwgcmVseWluZyBvbiBgQ09ORklHX0lVQ1ZgIGFuZCBgQ09ORklHX0FGSVVDVmAuIFRoYXQgZmVlbHMuLi5ub3QgaWRlYWwuIEhhbmcgb24sIHRoZSBgbmV0L01ha2VmaWxlYCBpdHNlbGYgaGFzIGBvYmoteSArPSBpdWN2L2AsIHdoaWNoIG1lYW5zIHRoZSBidWlsZCAqYWx3YXlzKiBkZXNjZW5kcyBpbnRvIGBuZXQvaXVjdi9gLCBpcnJlc3BlY3RpdmUgb2Ygd2hldGhlciBgQ09ORklHX0lVQ1ZgIGlzIGVuYWJsZWQuIFRoYXQncyBmaW5lIGZvciB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZS5cblxuQnV0IHRoZSByZWFsIGtpY2tlciBpcyB0aGF0IHdpdGhpbiBgbmV0L2l1Y3YvTWFrZWZpbGVgLCB0aGUgYWN0dWFsIG9iamVjdCBmaWxlcywgYGl1Y3Yub2AgYW5kIGBhZl9pdWN2Lm9gLCBhcmUgKnN0aWxsKiBjb21waWxlZCBjb25kaXRpb25hbGx5IGJhc2VkIG9uIGBDT05GSUdfSVVDVmAgYW5kIGBDT05GSUdfQUZJVUNWYC4gVGhhdCBzZWVtcyByZWR1bmRhbnQsIGRvZXNuJ3QgaXQ/IElmIHRoZSBkaXJlY3RvcnkgaXMgYmVpbmcgZW50ZXJlZCByZWdhcmRsZXNzLCB3aHkgdGhlIGV4dHJhIGNvbmRpdGlvbmFsIGNoZWNrcyB3aXRoaW4/XG5cbk5vdywgSSdtIHRyeWluZyB0byByZW1lbWJlciB3aHkgdGhpcyBwYXRjaCB3YXMgbWFkZSBpbiB0aGUgZmlyc3QgcGxhY2UuIFdoYXQgd2FzIHRoZSByYXRpb25hbGU/IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29udGV4dCBoZXJlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBmaWxlcyBpbiBgbmV0L2l1Y3YvTWFrZWZpbGVgLiBKdXN0IHRob3NlIHR3byBvYmplY3QgZmlsZSBkZWZpbml0aW9ucywgbm90aGluZyBlbHNlLiBTbyBpZiBgQ09ORklHX0lVQ1ZgIGlzICpub3QqIHNldCwgdGhlIGJ1aWxkIHN0aWxsIHZpc2l0cyBgbmV0L2l1Y3YvYCwgYnV0IGJlY2F1c2Ugb2YgdGhlIGNvbmRpdGlvbmFscywgaXQgd29uJ3QgYWN0dWFsbHkgYnVpbGQgYW55dGhpbmcuIEludGVyZXN0aW5nLlxuXG5BbmQgaWYgYENPTkZJR19BRklVQ1ZgIGlzIHNldCwgYnV0IGBDT05GSUdfSVVDVmAgaXMgKm5vdCosIHdlJ2xsIHN0aWxsIGJ1aWxkIGBhZl9pdWN2Lm9gLiBBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIHRoZSBgbmV0L2l1Y3YvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBvZiB0aGVzZSBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBkZWZpbmVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzc6MzQuOTYxNTI5NjQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2l1Y3YvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBJVUNWXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIFMzOTBcXG4gICA0OlxcdFxcdGRlZl90cmlzdGF0ZSB5IGlmIFMzOTBcXG4gICA1OlxcdFxcdHByb21wdCBcXFwiSVVDViBzdXBwb3J0IChTMzkwIC0gei9WTSBvbmx5KVxcXCJcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBpbnRlci11c2VyIGNvbW11bmljYXRpb25cXG4gICA4OlxcdFxcdCAgdW5kZXIgVk0gb3IgVklGLiBJZiB5b3UgcnVuIG9uIHovVk0sIHNheSBcXFwiWVxcXCIgdG8gZW5hYmxlIGEgZmFzdFxcbiAgIDk6XFx0XFx0ICBjb21tdW5pY2F0aW9uIGxpbmsgYmV0d2VlbiBWTSBndWVzdHMuXFxuICAxMDpcXHRcXG4gIDExOlxcdGNvbmZpZyBBRklVQ1ZcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gUzM5MFxcbiAgMTM6XFx0XFx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXFxuICAxNDpcXHRcXHRwcm9tcHQgXFxcIkFGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KVxcXCJcXG4gIDE1OlxcdFxcdGhlbHBcXG4gIDE2OlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBBRl9JVUNWIHNvY2tldCBhcHBsaWNhdGlvbnNcXG4gIDE3OlxcdFxcdCAgYmFzZWQgb24gei9WTSBpbnRlci11c2VyIGNvbW11bmljYXRpb24gdmVoaWNsZSBvciBiYXNlZCBvblxcbiAgMTg6XFx0XFx0ICBIaXBlclNvY2tldHMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM3OjM0Ljk2MTYwMTk3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2Nzg0MDAxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBNYWtlZmlsZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgaXQncyBhYm91dCBgQUZJVUNWYC4gUmlnaHQsIGBBRklVQ1ZgIGRlcGVuZHMgb24gYFMzOTBgIGFuZCwgYnkgZGVmYXVsdCwgdGFrZXMgYG1gIGlmIGVpdGhlciBgUUVUSF9MM2Agb3IgYElVQ1ZgIGFyZSBlbmFibGVkLiBDcnVjaWFsbHksIGl0IGRvZXNuJ3QgKnN0cmljdGx5KiBkZXBlbmQgb24gYElVQ1ZgLiBCZWZvcmUgdGhpcywgdGhlIGBuZXQvTWFrZWZpbGVgIGhhZCB0aGlzIGRlcGVuZGVuY3k6IGBvYmotJChDT05GSUdfSVVDVikgKz0gaXVjdi9gLiBUaGlzIG1lYW50IGlmIGBDT05GSUdfSVVDVmAgd2Fzbid0IHNldCwgdGhlIGBuZXQvaXVjdi9gIGRpcmVjdG9yeSB3YXNuJ3QgZXZlbiBsb29rZWQgYXQsIGFuZCB0aHVzIGBhZl9pdWN2Lm9gIHdvdWxkbid0IGJlIGJ1aWx0LCBldmVuIGlmIGBDT05GSUdfQUZJVUNWYCAqd2FzKiBzZXQuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gZml4IHRoYXQsIGFsd2F5cyB2aXNpdGluZyBgbmV0L2l1Y3YvYCBzbyBgYWZfaXVjdi5vYCBjYW4gYmUgYnVpbHQgd2hlbiBgQ09ORklHX0FGSVVDVmAgaXMgZW5hYmxlZCBldmVuIGlmIGBDT05GSUdfSVVDVmAgaXMgbm90LlxuXG5TaW5jZSBpdCdzIGp1c3QgYSBNYWtlZmlsZSBjaGFuZ2UsIEkgaGF2ZSB0byBhc2sgbXlzZWxmOiBkb2VzIHRoaXMgY2hhbmdlIGhvdyB0aGluZ3MgZXhlY3V0ZSBhdCBhbGw/IEl0J3MgcmVhbGx5IGp1c3QgZW5hYmxpbmcgdGhlIGJ1aWxkIG9mIGBhZl9pdWN2YCB3aXRob3V0IHRoZSBuZWVkIGZvciBgSVVDVmAuIFRoaW5raW5nIGFib3V0IHRoaXMgZnVydGhlciwgYEFGSVVDVmAgZGVwZW5kcyBvbiBgUzM5MGAuIEEgdGhvdWdodDogY2FuIHdlIGZ1enogdGhpcz8gYEFGSVVDVmAgaXMgYW4gYWRkcmVzcyBmYW1pbHkgKGBBRl9JVUNWYCksIGFuZCBpZiB3ZSB3YW50IHRvIGZ1enogdGhpcywgdGhlIGZpcnN0IHN0ZXAgaXMgdG8gZW5hYmxlIGBBRklVQ1ZgLiBIb3dldmVyLCBgQUZJVUNWYCBpcyAqc3BlY2lmaWMqIHRvIGBTMzkwYC4gU28gbm93IEknbSB0aGlua2luZywgY2FuIHdlIGZ1enogYFMzOTBgLXNwZWNpZmljIGNvZGU/XG5cblN5emthbGxlciBkb2Vzbid0IGZ1enogYFMzOTBgIGJ5IGRlZmF1bHQsIGRvZXMgaXQ/IE1heWJlIHdlIGNhbiBmaWd1cmUgb3V0IGEgd2F5IHRvIG1ha2UgaXQuIEJ1dCwgd2FpdC4uLiBzaW5jZSB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIHRoZSBNYWtlZmlsZSwgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIEMgY29kZSBpdHNlbGYuIEhvd2V2ZXIsIGl0ICpkb2VzKiBlbmFibGUgYnVpbGRpbmcgYSBtb2R1bGUsIHRoYXQsIHVuZGVyIHNwZWNpZmljIGNvbmZpZ3MsIHdvdWxkIGhhdmUgYmVlbiB1bnJlYWNoYWJsZS4gU28gdGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFllcywgaXQgZW5hYmxlcyBgQUZfSVVDVmAgc29ja2V0cyB3aXRob3V0IGBJVUNWYC4gTm93LCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgbG9vayBhdCBgYWZfaXVjdi5jYCBhbmQgc2VlIGlmIHRoZXJlIGlzIGFueSBgQUZfSVVDVmAgc29ja2V0IHJlZ2lzdHJhdGlvbiB0aGF0IGlzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjI1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzc6NDIuNjQwMDA1MDMyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDA3MzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZl9pdWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JVUNWKVxcdCs9IGl1Y3Yub1xcbm5ldC9pdWN2L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0FGSVVDVilcXHQrPSBhZl9pdWN2Lm9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMi1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTM6I2RlZmluZSBwcl9mbXQoZm10KSBcXFwiYWZfaXVjdjogXFxcIiBmbXRcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQtXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjM2OiNpbmNsdWRlIFxcdTAwM2NuZXQvaXVjdi9hZl9pdWN2LmhcXHUwMDNlXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTM3LVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ4PXN0YXRpYyBzdHJ1Y3QgaXVjdl9pbnRlcmZhY2UgKnByX2l1Y3Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5OnN0YXRpYyBzdHJ1Y3QgaXVjdl9oYW5kbGVyIGFmX2l1Y3ZfaGFuZGxlcjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTAtXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTk3PXN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjAwLVxcdHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YgPSBpdWN2X3NrKHNvY2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDE6XFx0c3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyICpwaHNfaGRyO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDItXFx0aW50IGVyciwgY29uZmlybV9yZWN2ID0gMDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0zNTU9c3RhdGljIGludCBpdWN2X3NlbmRfY3RybChzdHJ1Y3Qgc29jayAqc2ssIHU4IGZsYWdzKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTM2Mi1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzYzOlxcdGJsZW4gPSBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSArXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTM2NC1cXHQgICAgICAgTExfUkVTRVJWRURfU1BBQ0UoaXVjdi1cXHUwMDNlaHNfZGV2KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02NzM9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY5MS1cXHR9XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY5MjpcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX2Nvbm5lY3QoaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlcixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjkzLVxcdFxcdFxcdFxcdCAgICBzYS1cXHUwMDNlc2l1Y3ZfdXNlcl9pZCwgTlVMTCwgdXNlcl9kYXRhLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTkwMj1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05ODUtXFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjk4NjpcXHRcXHRoZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIpICtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTg3LVxcdFxcdFxcdCAgIExMX1JFU0VSVkVEX1NQQUNFKGl1Y3YtXFx1MDAzZWhzX2Rldik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTUzOD1zdGF0aWMgaW50IGl1Y3Zfc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTU3MS1cXHRcXHR2YWwgPSAoaXVjdi1cXHUwMDNlaHNfZGV2KSA/IGl1Y3YtXFx1MDAzZWhzX2Rldi1cXHUwMDNlbXR1IC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTU3MjpcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSAtIEVUSF9ITEVOIDpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTU3My1cXHRcXHRcXHRcXHQweDdmZmZmZmZmO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE1OTM9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjA0LVxcdEVCQ0FTQyhzcmNfbmFtZSwgOCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2MDU6XFx0LyogRmluZCBvdXQgaWYgdGhpcyBwYXRoIGJlbG9uZ3MgdG8gYWZfaXVjdi4gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYwNi1cXHRyZWFkX2xvY2soXFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjcxLVxcdHBhdGgtXFx1MDAzZW1zZ2xpbSA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjcyOlxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfYWNjZXB0KHBhdGgsIFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIG51c2VyX2RhdGEsIG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzMtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4MDU9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja19zaHV0ZG93bihzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCB1OCBpcHVzZXJbMTZdKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4MTYtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4MTc6c3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyID0ge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODE4LVxcdC5wYXRoX3BlbmRpbmdcXHRcXHQ9IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xODI3PXN0YXRpYyB2b2lkIGFmaXVjdl9zd2FwX3NyY19kZXN0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4Mjgte1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODI5OlxcdHN0cnVjdCBhZl9pdWN2X3RyYW5zX2hkciAqdHJhbnNfaGRyID0gaXVjdl90cmFuc19oZHIoc2tiKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTgzMC1cXHRjaGFyIHRtcElEWzhdO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4NTA9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg1MS17XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4NTI6XFx0c3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyICp0cmFuc19oZHIgPSBpdWN2X3RyYW5zX2hkcihza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODUzLVxcdHN0cnVjdCBzb2NrICpuc2s7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTk5Nz1zdGF0aWMgaW50IGFmaXVjdl9oc19jYWxsYmFja19yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjAxNi1cXHQvKiB3cml0ZSBzdHVmZiBmcm9tIGl1Y3ZfbXNnIHRvIHNrYiBjYiAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDE3OlxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBhZl9pdWN2X3RyYW5zX2hkcikpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDE4LVxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjA0Mz1zdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDQ3LVxcdHN0cnVjdCBpdWN2X3NvY2sgKml1Y3Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwNDg6XFx0c3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyICp0cmFuc19oZHI7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNDktXFx0aW50IGVyciA9IE5FVF9SWF9TVUNDRVNTO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMjMtXFx0XFx0ZXJyID0gYWZpdWN2X2hzX2NhbGxiYWNrX3dpbihzaywgc2tiKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEyNDpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gPT0gc2l6ZW9mKHN0cnVjdCBhZl9pdWN2X3RyYW5zX2hkcikpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEyNS1cXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyODA9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA1LVxcdGlmIChwcl9pdWN2KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDY6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlaXVjdl9yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwNy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTktXFx0aWYgKHByX2l1Y3YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMjA6XFx0XFx0cHJfaXVjdi1cXHUwMDNlaXVjdl91bnJlZ2lzdGVyKFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzIxLW91dF9zb2NrOlxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMjk9c3RhdGljIHZvaWQgX19leGl0IGFmaXVjdl9leGl0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzMS1cXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMzMjpcXHRcXHRwcl9pdWN2LVxcdTAwM2VpdWN2X3VucmVnaXN0ZXIoXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMzMtXFxuLS1cXG5uZXQvaXVjdi9pdWN2LmMtMTItICpcXHRGcml0eiBFbGZlcnQgKGVsZmVydEBkZS5pYm0uY29tLCBmZWxmZXJ0QG1pbGxlbnV4LmNvbSlcXG5uZXQvaXVjdi9pdWN2LmM6MTM6ICogICAgUmV3cml0dGVuIGZvciBhZl9pdWN2Olxcbm5ldC9pdWN2L2l1Y3YuYy0xNC0gKlxcdE1hcnRpbiBTY2h3aWRlZnNreSBcXHUwMDNjc2Nod2lkZWZza3lAZGUuaWJtLmNvbVxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzc6NDIuODMwMDg2NTg5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwODU3NTk0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgYW5kIEltcGFjdCBvZiBhbiBBRl9JVUNWIEJ1aWxkIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGBhZl9pdWN2YCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgdGhlIGFkZHJlc3MgZmFtaWx5IGZvciBJVUNWIGNvbW11bmljYXRpb24uIFRoZSBwYXRjaCBpcyBzaW1wbGUsIGp1c3QgdHdlYWtpbmcgdGhlIGBuZXQvTWFrZWZpbGVgIHRvIGVuc3VyZSBgYWZfaXVjdi5vYCBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19BRklVQ1ZgIGlzIHNldCBidXQgYENPTkZJR19JVUNWYCBpcyAqbm90Ki4gTXkgZmlyc3QgdGhvdWdodCBpczogSXMgdGhpcyBldmVuIHJlbGV2YW50IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlIHZlcnkgZW52aXJvbm1lbnRzIG15IGZ1enppbmcgdGFyZ2V0cyBhcmUgc3VwcG9zZWQgdG8gY292ZXI/XG5cbmBDT05GSUdfQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYCwgd2hpY2ggdGhyb3dzIHVwIGEgZmxhZy4gU3l6a2FsbGVyLCBteSBnby10byBmdXp6aW5nIHRvb2wsIHJ1bnMgb24geDg2XzY0LCBhcm02NCwgYW5kIG90aGVycy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHRha2luZyBzeXprYWxsZXIncyBTMzkweCBzdXBwb3J0IGludG8gYWNjb3VudC4gKkRvZXMqIGl0IHJ1biBvbiBTMzkwPyBZZXMsIGl0IGRvZXMuIFNvLCB0byB0ZXN0IHRoaXMgcGF0Y2ggcHJvcGVybHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX0FGSVVDVmAgaXMgZW5hYmxlZCBhbmQgdGhhdCBgQ09ORklHX0lVQ1ZgIGlzIGVpdGhlciBkaXNhYmxlZCBvciBlbmFibGVkLCBidXQgdGhlIHBhdGNoIGZpeGVzIHRoZSBzY2VuYXJpbyB3aGVyZSBJVUNWIGlzIGRpc2FibGVkLiBTaW5jZSBgQ09ORklHX0FGSVVDVmAgZGVwZW5kcyBvbiBgUzM5MGAsIGNhbiBJIGV2ZW4gY29tcGlsZSB0aGlzIG9uIHg4Nl82ND8gTm8uXG5cblRoZSBwcm9tcHQsIGhvd2V2ZXIsIHNwZWNpZmljYWxseSBjYWxscyBvdXQgaW1wb3NzaWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEFuZCBRRU1VICpkb2VzKiBzdXBwb3J0IHMzOTB4IGVtdWxhdGlvbiwgc28gdGhlIGNvZGUgcGF0aCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlLiBCdXQgaXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBvciBqdXN0IGEgYnVpbGQgZml4PyBUaGUgY2hhbmdlIGl0c2VsZiBqdXN0IG1ha2VzIHRoZSBgYWZfaXVjdmAgbW9kdWxlIGJ1aWxkYWJsZSB3aGVuIGBDT05GSUdfSVVDVmAgaXMgZGlzYWJsZWQuIFByZXZpb3VzbHksIGlmIGBDT05GSUdfSVVDVmAgd2FzIG9mZiwgYGFmX2l1Y3ZgIHdvdWxkbid0IGJlIGJ1aWx0LiBOb3cgaXQgKndpbGwqIGJlLlxuXG5TbywgaXQncyBub3QganVzdCBhIHR3ZWFrOyBpdCAqZW5hYmxlcyogYSBtb2R1bGUsIGBhZl9pdWN2YCwgdG8gYmUgYnVpbHQgYW5kLCBjcml0aWNhbGx5LCBsb2FkZWQuIFRoYXQgbWVhbnMgc29ja2V0cyBvZiB0aGUgYEFGX0lVQ1ZgIGZhbWlseSB3aWxsIGJlY29tZSBhdmFpbGFibGUuIE5vdywgaXMgdGhpcyAqd29ydGgqIGZ1enppbmc/IEFic29sdXRlbHkhIEVuYWJsaW5nIGEgbmV3IGFkZHJlc3MgZmFtaWx5IGZvciBwb3RlbnRpYWwgZnV6emVyIGludGVyYWN0aW9uIGlzIHZhbHVhYmxlLlxuXG5Ib3dldmVyLCBhIG5hZ2dpbmcgdGhvdWdodDogSWYgYENPTkZJR19JVUNWYCBpcyAqZGlzYWJsZWQqLCBgcHJfaXVjdmAgKHRoZSBJVUNWIGludGVyZmFjZSwgcHJlc3VtYWJseSBhIGZ1bmN0aW9uIHBvaW50ZXIpIHdpbGwgYmUgTlVMTC4gTGV0J3MgZGlnIGludG8gYGFmX2l1Y3YuY2AgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGEgTlVMTCBgcHJfaXVjdmAgYmVjYXVzZSB0aGF0J3MgdGhlIGNvcmUgb2YgdGhlIHBvdGVudGlhbCBpc3N1ZSBub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBpZiBhIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcgSVVDViBmdW5jdGlvbnMgaXMgbWFkZSB3aGVuIHRoZXkgYXJlIG5vdCBpbml0aWFsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg3MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjozNzo1Mi45MTU4NDk2ODFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzQwMTcyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcl9pdWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9NDI9c3RhdGljIHN0cnVjdCBwcm90byBpdWN2X3Byb3RvID0ge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ3LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0ODpzdGF0aWMgc3RydWN0IGl1Y3ZfaW50ZXJmYWNlICpwcl9pdWN2O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OS1zdGF0aWMgc3RydWN0IGl1Y3ZfaGFuZGxlciBhZl9pdWN2X2hhbmRsZXI7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzM1PXN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDYtXFx0XFx0XFx0QVNDRUJDKHVzZXJfZGF0YSwgc2l6ZW9mKHVzZXJfZGF0YSkpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNDc6XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDgtXFx0XFx0fSBlbHNlXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjM0OTpcXHRcXHRcXHRwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIE5VTEwpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNTAtXFx0XFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDUyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDc4LVxcdG1lbXNldChcXHUwMDI2aXVjdi1cXHUwMDNlaW5pdCwgMCwgc2l6ZW9mKGl1Y3YtXFx1MDAzZWluaXQpKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDc5OlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00ODAtXFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU2OD1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU5OS1cXHQvKiBCaW5kIHRoZSBzb2NrZXQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjAwOlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MDEtXFx0XFx0aWYgKCFtZW1jbXAoc2EtXFx1MDAzZXNpdWN2X3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KSlcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02Mjgtdm1fYmluZDpcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjI5OlxcdGlmIChwcl9pdWN2KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTYzMC1cXHRcXHQvKiB1c2UgbG9jYWwgdXNlcmlkIGZvciBiYWNrd2FyZCBjb21wYXQgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02NTE9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY1NS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjU2OlxcdGlmICh1bmxpa2VseSghcHJfaXVjdikpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY1Ny1cXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02NzM9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY5MS1cXHR9XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY5MjpcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX2Nvbm5lY3QoaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlcixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjkzLVxcdFxcdFxcdFxcdCAgICBzYS1cXHUwMDNlc2l1Y3ZfdXNlcl9pZCwgTlVMTCwgdXNlcl9kYXRhLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTg5MT1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9pcHJtKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsIHN0cnVjdCBpdWN2X21lc3NhZ2UgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy04OTctXFx0cHJtZGF0YVs3XSA9IDB4ZmYgLSAodTgpIHNrYi1cXHUwMDNlbGVuO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo4OTg6XFx0cmV0dXJuIHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2Vfc2VuZChwYXRoLCBtc2csIElVQ1ZfSVBSTURBVEEsIDAsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTg5OS1cXHRcXHRcXHRcXHQgKHZvaWQgKikgcHJtZGF0YSwgOCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTAyPXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTUtXFx0XFx0XFx0aWYgKGVyciA9PSAweDE1KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNTY6XFx0XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihpdWN2LVxcdTAwM2VwYXRoLCBOVUxMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA1Ny1cXHRcXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZpdWN2LVxcdTAwM2Vza2JzX2luX3htaXQpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNzQtXFx0XFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDc1OlxcdFxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVxcdTAwM2VwYXRoLCBcXHUwMDI2dHhtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNzYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIElVQ1ZfSVBCVUZMU1QsIDAsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA3OC1cXHRcXHR9IGVsc2UgeyAvKiBub24tSVBSTSBMaW5lYXIgc2tiICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNzk6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZ0eG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA4MC1cXHRcXHRcXHRcXHRcXHQwLCAwLCAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4pO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTExNDQ9c3RhdGljIHZvaWQgaXVjdl9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExNzUtXFx0XFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTc2OlxcdFxcdFxcdHJjID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9yZWNlaXZlKHBhdGgsIG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE3Ny1cXHRcXHRcXHRcXHRcXHQgICAgICBJVUNWX0lQQlVGTFNULFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExNzktXFx0XFx0fSBlbHNlIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE4MDpcXHRcXHRcXHRyYyA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2VfcmVjZWl2ZShwYXRoLCBtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExODEtXFx0XFx0XFx0XFx0XFx0ICAgICAgbXNnLVxcdTAwM2VmbGFncyBcXHUwMDI2IElVQ1ZfSVBSTURBVEEsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQwND1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0MzItXFx0XFx0XFx0dHhtc2cudGFnID0gMDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQzMzpcXHRcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNnR4bXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDM0LVxcdFxcdFxcdFxcdElVQ1ZfSVBSTURBVEEsIDAsICh2b2lkICopIGlwcm1fc2h1dGRvd24sIDgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTUtXFx0XFx0ICAgIGl1Y3YtXFx1MDAzZXBhdGgpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ1NjpcXHRcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX3F1aWVzY2UoaXVjdi1cXHUwMDNlcGF0aCwgTlVMTCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTctXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNTkzPXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYzMC1cXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IElVQ1ZfTElTVEVOKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2MzE6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjMyLVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MzctXFx0aWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTYzODpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MzktXFx0XFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0NS1cXHRpZiAoIW5zaykge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjQ2OlxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0Ny1cXHRcXHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjcxLVxcdHBhdGgtXFx1MDAzZW1zZ2xpbSA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjcyOlxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfYWNjZXB0KHBhdGgsIFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIG51c2VyX2RhdGEsIG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzMtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2OTg9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja19yeChzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2cpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcwNi1cXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MDc6XFx0XFx0cHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9yZWplY3QocGF0aCwgbXNnKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcwOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI4MD1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTEtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTI6XFx0XFx0cHJfaXVjdiA9IFxcdTAwMjZpdWN2X2lmO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjkzLVxcdH0gZWxzZSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTQtXFx0XFx0bWVtc2V0KFxcdTAwMjZpdWN2X3VzZXJpZCwgMCwgc2l6ZW9mKGl1Y3ZfdXNlcmlkKSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTU6XFx0XFx0cHJfaXVjdiA9IE5VTEw7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTYtXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDQtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDU6XFx0aWYgKHByX2l1Y3YpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMwNjpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VpdWN2X3JlZ2lzdGVyKFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA3LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxOC1vdXRfbm90aWZpZXI6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMTk6XFx0aWYgKHByX2l1Y3YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMjA6XFx0XFx0cHJfaXVjdi1cXHUwMDNlaXVjdl91bnJlZ2lzdGVyKFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzIxLW91dF9zb2NrOlxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMjk9c3RhdGljIHZvaWQgX19leGl0IGFmaXVjdl9leGl0KHZvaWQpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMzAte1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzMxOlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzMyOlxcdFxcdHByX2l1Y3YtXFx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzc6NTMuMDk5MjY2Mjg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzg5MjQ5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYHByX2l1Y3ZgIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYHByX2l1Y3ZgIHZhcmlhYmxlIGdldHMgc2V0IHVwLiBJdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBpdCdzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvIGBcdTAwMjZpdWN2X2lmYCwgYXNzdW1pbmcgYGl1Y3ZfaWZgIGlzIGFjdHVhbGx5IGF2YWlsYWJsZS4gSSBrbm93IGZyb20gcGFzdCBleHBlcmllbmNlIHRoYXQgYGl1Y3ZfaWZgIGlzIGRlZmluZWQgYW5kIGV4cG9ydGVkIGJ5IHRoZSBgaXVjdi5jYCBtb2R1bGUsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuXG5cbkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIHdoYXQgaGFwcGVucyBpZiBgQ09ORklHX0lVQ1ZgIGlzbid0IGVuYWJsZWQ/IElmIGBDT05GSUdfSVVDVmAgaXMgZGlzYWJsZWQsIHRoZSBidWlsZCBzeXN0ZW0gd29uJ3QgY3JlYXRlIGBpdWN2Lm9gLCBhbmQgdGhlcmVmb3JlLCBgaXVjdl9pZmAgd29uJ3QgYmUgZGVmaW5lZC4gU28sIGluIHRoYXQgc2NlbmFyaW8sIGBwcl9pdWN2YCBzaG91bGQgbmV2ZXIgZ2V0IGluaXRpYWxpemVkLCByaWdodD9cblxuVGhlIHJlYWxseSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpczogaG93IGRvZXMgdGhlIGBhZl9pdWN2LmNgIG1vZHVsZSAqa25vdyogd2hldGhlciBvciBub3QgYGl1Y3ZfaWZgIGV4aXN0cz8gSXQgY2FuJ3QganVzdCBibGluZGx5IHVzZSBpdC4gSXQgbXVzdCBiZSBjaGVja2luZyBzb21laG93LiBMZXQgbWUgZGlnIGludG8gYGFmaXVjdl9pbml0YCB0byBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtIHRoYXQgZW5zdXJlcyB0aGlzIGRlcGVuZGVuY3kgaXMgaGFuZGxlZCBncmFjZWZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjozNzo1Ny4yMzgxOTUwMTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI4MDpcXHRzdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxcbjIyODE6XFx0e1xcbjIyODI6XFx0XFx0aW50IGVycjtcXG4yMjgzOlxcdFxcbjIyODQ6XFx0XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19JVUNWKSkge1xcbjIyODU6XFx0XFx0XFx0Y3BjbWQoXFxcIlFVRVJZIFVTRVJJRFxcXCIsIGl1Y3ZfdXNlcmlkLCBzaXplb2YoaXVjdl91c2VyaWQpLCBcXHUwMDI2ZXJyKTtcXG4yMjg2OlxcdFxcdFxcdGlmICh1bmxpa2VseShlcnIpKSB7XFxuMjI4NzpcXHRcXHRcXHRcXHRXQVJOX09OKGVycik7XFxuMjI4ODpcXHRcXHRcXHRcXHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xcbjIyODk6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjI5MDpcXHRcXHRcXHR9XFxuMjI5MTpcXHRcXG4yMjkyOlxcdFxcdFxcdHByX2l1Y3YgPSBcXHUwMDI2aXVjdl9pZjtcXG4yMjkzOlxcdFxcdH0gZWxzZSB7XFxuMjI5NDpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNml1Y3ZfdXNlcmlkLCAwLCBzaXplb2YoaXVjdl91c2VyaWQpKTtcXG4yMjk1OlxcdFxcdFxcdHByX2l1Y3YgPSBOVUxMO1xcbjIyOTY6XFx0XFx0fVxcbjIyOTc6XFx0XFxuMjI5ODpcXHRcXHRlcnIgPSBwcm90b19yZWdpc3RlcihcXHUwMDI2aXVjdl9wcm90bywgMCk7XFxuMjI5OTpcXHRcXHRpZiAoZXJyKVxcbjIzMDA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjMwMTpcXHRcXHRlcnIgPSBzb2NrX3JlZ2lzdGVyKFxcdTAwMjZpdWN2X3NvY2tfZmFtaWx5X29wcyk7XFxuMjMwMjpcXHRcXHRpZiAoZXJyKVxcbjIzMDM6XFx0XFx0XFx0Z290byBvdXRfcHJvdG87XFxuMjMwNDpcXHRcXG4yMzA1OlxcdFxcdGlmIChwcl9pdWN2KSB7XFxuMjMwNjpcXHRcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VpdWN2X3JlZ2lzdGVyKFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xcbjIzMDc6XFx0XFx0XFx0aWYgKGVycilcXG4yMzA4OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3NvY2s7XFxuMjMwOTpcXHRcXHR9XFxuMjMxMDpcXHRcXG4yMzExOlxcdFxcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2YWZpdWN2X25ldGRldl9ub3RpZmllcik7XFxuMjMxMjpcXHRcXHRpZiAoZXJyKVxcbjIzMTM6XFx0XFx0XFx0Z290byBvdXRfbm90aWZpZXI7XFxuMjMxNDpcXHRcXG4yMzE1OlxcdFxcdGRldl9hZGRfcGFjayhcXHUwMDI2aXVjdl9wYWNrZXRfdHlwZSk7XFxuMjMxNjpcXHRcXHRyZXR1cm4gMDtcXG4yMzE3OlxcdFxcbjIzMTg6XFx0b3V0X25vdGlmaWVyOlxcbjIzMTk6XFx0XFx0aWYgKHByX2l1Y3YpXFxuMjMyMDpcXHRcXHRcXHRwcl9pdWN2LVxcdTAwM2VpdWN2X3VucmVnaXN0ZXIoXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XFxuMjMyMTpcXHRvdXRfc29jazpcXG4yMzIyOlxcdFxcdHNvY2tfdW5yZWdpc3RlcihQRl9JVUNWKTtcXG4yMzIzOlxcdG91dF9wcm90bzpcXG4yMzI0OlxcdFxcdHByb3RvX3VucmVnaXN0ZXIoXFx1MDAyNml1Y3ZfcHJvdG8pO1xcbjIzMjU6XFx0b3V0OlxcbjIzMjY6XFx0XFx0cmV0dXJuIGVycjtcXG4yMzI3OlxcdH1cXG4yMzI4OlxcdFxcbjIzMjk6XFx0c3RhdGljIHZvaWQgX19leGl0IGFmaXVjdl9leGl0KHZvaWQpXFxuMjMzMDpcXHR7XFxuMjMzMTpcXHRcXHRpZiAocHJfaXVjdilcXG4yMzMyOlxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG4yMzMzOlxcdFxcbjIzMzQ6XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXFx1MDAyNmFmaXVjdl9uZXRkZXZfbm90aWZpZXIpO1xcbjIzMzU6XFx0XFx0ZGV2X3JlbW92ZV9wYWNrKFxcdTAwMjZpdWN2X3BhY2tldF90eXBlKTtcXG4yMzM2OlxcdFxcdHNvY2tfdW5yZWdpc3RlcihQRl9JVUNWKTtcXG4yMzM3OlxcdFxcdHByb3RvX3VucmVnaXN0ZXIoXFx1MDAyNml1Y3ZfcHJvdG8pO1xcbjIzMzg6XFx0fVxcbjIzMzk6XFx0XFxuMjM0MDpcXHRtb2R1bGVfaW5pdChhZml1Y3ZfaW5pdCk7XFxuMjM0MTpcXHRtb2R1bGVfZXhpdChhZml1Y3ZfZXhpdCk7XFxuMjM0MjpcXHRcXG4yMzQzOlxcdE1PRFVMRV9BVVRIT1IoXFxcIkplbm5pZmVyIEh1bnQgXFx1MDAzY2plbmh1bnRAdXMuaWJtLmNvbVxcdTAwM2VcXFwiKTtcXG4yMzQ0OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiSVVDViBTb2NrZXRzIHZlciBcXFwiIFZFUlNJT04pO1xcbjIzNDU6XFx0TU9EVUxFX1ZFUlNJT04oVkVSU0lPTik7XFxuMjM0NjpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuMjM0NzpcXHRNT0RVTEVfQUxJQVNfTkVUUFJPVE8oUEZfSVVDVik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM3OjU3LjIzODM5NDAxMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTExNjUxMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgSVVDViBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGhlIGNvZGUncyB1c2luZyBgSVNfRU5BQkxFRChDT05GSUdfSVVDVilgLiBSaWdodCwgdGhhdCdzIHRoZSBrZXkuIElmIGBDT05GSUdfSVVDVmAgaXNuJ3QgZmxpcHBlZCBvbiBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgdGhlbiBgcHJfaXVjdmAgZ2V0cyBzZXQgdG8gYE5VTExgLiBCdXQgdGhhdCBkb2Vzbid0IG1lYW4gSSBjYW4ndCB1c2UgSGlwZXJTb2NrZXRzIHRocm91Z2ggYGFmX2l1Y3ZgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gV2FpdCBhIG1pbnV0ZS4uLiBJIHNlZSB0aGF0IHRoZSBgQUZfSVVDVmAgc29ja2V0IGZhbWlseSAqaXMqIHJlZ2lzdGVyZWQgd2l0aCBgc29ja19yZWdpc3RlcihcdTAwMjZpdWN2X3NvY2tfZmFtaWx5X29wcylgLiBUaGlzIGlzIGdvb2QsIHdoaWNoIG1lYW5zIGBzb2NrZXQoQUZfSVVDViwgLi4uKWAgY2FsbHMgd2lsbCBmdW5jdGlvbiBldmVuIGlmIGBDT05GSUdfSVVDVmAgaXMgbm90IGVuYWJsZWQhIE9rYXksIHRoYXQncyBleGFjdGx5IHdoYXQgSSB3YW50ZWQgdG8gY29uZmlybS4gU28sIHRob3NlIHNvY2tldCBjYWxscyB3aWxsIHRoZW4gdXNlIHRoZSBgaXVjdl9zb2NrX2ZhbWlseV9vcHNgIHN0cnVjdHVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGl1Y3Zfc29ja19mYW1pbHlfb3BzYCBhbmQgdW5kZXJzdGFuZCBob3cgdGhhdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MjgsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjozODowMS4zNTAwNDk1MDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjQ4MzQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3NvY2tfZmFtaWx5X29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTIyNDA9c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNjgtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNjk6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGl1Y3Zfc29ja19mYW1pbHlfb3BzID0ge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjcwLVxcdC5mYW1pbHlcXHQ9IEFGX0lVQ1YsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI4MD1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDAtXFx0XFx0Z290byBvdXQ7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDE6XFx0ZXJyID0gc29ja19yZWdpc3RlcihcXHUwMDI2aXVjdl9zb2NrX2ZhbWlseV9vcHMpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzAyLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM4OjAxLjg0MjUzOTA1NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTg3NzU5NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgSW1wbGljYXRpb25zIG9mIEFGX0lVQ1YgU29ja2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGFsbG93cyBgQUZfSVVDVmAgc29ja2V0cyB0byBiZSBidWlsdCBldmVuIHdoZW4gYENPTkZJR19JVUNWYCBpcyBkaXNhYmxlZCwgYnV0IGBDT05GSUdfQUZJVUNWYCBpcyBlbmFibGVkLiBUaGlzIG1ha2VzIHRoZSBzb2NrZXQgZmFtaWx5IGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UsIHdoaWNoIGltbWVkaWF0ZWx5IHRyaWdnZXJzIHRoZSBmdXp6aW5nIGFsYXJtIGJlbGxzLiBJcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5ISBJdCBvcGVucyB1cCBhIHdob2xlIG5ldyBzb2NrZXQgZmFtaWx5IHRoYXQgd2FzIHByZXZpb3VzbHkgcG90ZW50aWFsbHkgdW5yZWFjaGFibGUgdW5kZXIgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5CdXQgd2FpdCwgaG9sZCBvbi4gSWYgYENPTkZJR19JVUNWYCB3YXMgKmFscmVhZHkqIGVuYWJsZWQsIGBhZl9pdWN2YCB3YXMgYWxyZWFkeSBiZWluZyBidWlsdCBhbmQgdGhlb3JldGljYWxseSBmdXp6ZWQuIFRoaXMgcGF0Y2ggaXNuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyBjb2RlLCBqdXN0IGZpeGluZyBhIGJ1aWxkIGRlcGVuZGVuY3kgaW4gdGhlIE1ha2VmaWxlLlxuXG5BaGEsIGJ1dCBoZXJlJ3MgdGhlIGtpY2tlciEgSWYgYENPTkZJR19JVUNWYCBpcyBkaXNhYmxlZCwgdGhlIGBwcl9pdWN2YCBmdW5jdGlvbiBwb2ludGVyIGlzIGdvaW5nIHRvIGJlIE5VTEwuIERvZXMgYGFmX2l1Y3ZgIGV2ZW4gKndvcmsqIHByb3Blcmx5IGluIHRoYXQgc2NlbmFyaW8/IFllcywgaXQgZmFsbHMgYmFjayB0byBIaXBlclNvY2tldHMuIEJ1dCB0aGF0IGZhbGxiYWNrIHBhdGguLi4gd2FzIGl0ICpldmVyKiBhY3R1YWxseSB0ZXN0ZWQgb3IgZnV6emVkPyBJZiBgQ09ORklHX0lVQ1ZgIHdhcyBkaXNhYmxlZCwgYGFmX2l1Y3ZgIHdhc24ndCBidWlsdCBhdCBhbGwsIHNvIHRoZSBmYWxsYmFjayBwYXRoIHdoZXJlIGBwcl9pdWN2YCBpcyBOVUxMICpkZWZpbml0ZWx5KiB3YXNuJ3QgZnV6emVkLCBhdCBsZWFzdCBub3QgaW4gdGhlIHN0YW5kYXJkIGZ1enppbmcgY29uZmlncy5cblxuT2theSwgbGV0J3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBFdmVuIGlmIGBDT05GSUdfSVVDVmAgKndhcyogZW5hYmxlZCwgYHByX2l1Y3ZgIGlzIG9ubHkgc2V0IHRvIGBcdTAwMjZpdWN2X2lmYCAqaWYqIGBtYWNoaW5lX2lzX3ZtKClgIGlzIHRydWUuIEFuZCB3aGF0IGlmIHRoZSBmdXp6ZXIgaXMgcnVubmluZyBvbiBzb21ldGhpbmcgbGlrZSBRRU1VICh3aGljaCBpcyBOT1Qgei9WTSwgYnV0IGNvdWxkIGJlIEtWTSwgb3Igc29tZXRoaW5nIHNpbWlsYXIpPyBJbiB0aGF0IGNhc2UsIGBtYWNoaW5lX2lzX3ZtKClgIG1pZ2h0IGJlIGZhbHNlISBTbywgaW4gc29tZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLCB0aGUgZmFsbGJhY2sgcGF0aCBtaWdodCBzdGlsbCBiZSBlbmdhZ2VkIGV2ZW4gd2hlbiBgQ09ORklHX0lVQ1ZgIGlzIGVuYWJsZWQsIGFuZCB0aGF0J3MgKmNyaXRpY2FsKi4gSSBuZWVkIHRvIGNoZWNrIGhvdyBgbWFjaGluZV9pc192bSgpYCBpcyBiZWluZyBldmFsdWF0ZWQgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIFRoaXMgY291bGQgYmUgYSBuZXcsIHVuZXhwbG9yZWQgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDEyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM4OjA4LjgzMDMwMTk0NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk2NDk4NDQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNoaW5lX2lzX3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM9NzE9c3RhdGljIHZvaWQgZGV0ZWN0X2RpYWcyODgodm9pZClcXG4tLVxcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy03Ni1cXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6Nzc6XFx0YWN0aW9uID0gbWFjaGluZV9pc192bSgpID8gKHVuc2lnbmVkIGxvbmcpY21kIDogTFBBUldEVF9SRVNUQVJUO1xcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo3ODpcXHRsZW4gPSBtYWNoaW5lX2lzX3ZtKCkgPyBzaXplb2YoY21kKSA6IDA7XFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTc5LVxcdGlmIChfX2RpYWcyODgoV0RUX0ZVTkNfSU5JVCwgTUlOX0lOVEVSVkFMLCBhY3Rpb24sIGxlbikpXFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM9MTA4PWludCBfX2luaXQgaHlwZnNfZGlhZzBjX2luaXQodm9pZClcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTA5LXtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6MTEwOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMTEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM9MTE5PXZvaWQgaHlwZnNfZGlhZzBjX2V4aXQodm9pZClcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTIwLXtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6MTIxOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMjItXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM9MTIzPWludCBoeXBmc192bV9pbml0KHZvaWQpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTI0LXtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYzoxMjU6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTI2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM9MTM3PXZvaWQgaHlwZnNfdm1fZXhpdCh2b2lkKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTEzOC17XFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM6MTM5OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTE0MC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYz0xNDg9c3RhdGljIHNzaXplX3QgaHlwZnNfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTE3MC1cXHRoeXBmc19kZWxldGVfdHJlZSgpO1xcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jOjE3MTpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTE3Mi1cXHRcXHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhzYi1cXHUwMDNlc19yb290KTtcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jPTI0MD1zdGF0aWMgaW50IGh5cGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMjU5LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jOjI2MDpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTI2MS1cXHRcXHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhyb290X2RlbnRyeSk7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaD00NT1zdGF0aWMgaW5saW5lIGludCBhcHBsZGF0YV9hc20oc3RydWN0IGFwcGxkYXRhX3BhcmFtZXRlcl9saXN0ICpwYXJtX2xpc3QsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaC01MS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaDo1MjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaC01My1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk3PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGxwYXIsIE1GRUFUVVJFX0xQQVIpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC05OC1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk5OiNkZWZpbmUgbWFjaGluZV9pc192bVxcdG1hY2hpbmVfaGFzX3ZtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC0xMDAtI2RlZmluZSBtYWNoaW5lX2lzX2t2bVxcdG1hY2hpbmVfaGFzX2t2bVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jPTExMD1zdGF0aWMgbm9pbmxpbmUgX19pbml0IHZvaWQgc2V0dXBfYXJjaF9zdHJpbmcodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvZWFybHkuYy0xMzItXFx0XFx0XFx0ICBtYWNoaW5lX2lzX2xwYXIoKSA/IFxcXCJMUEFSXFxcIiA6XFxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jOjEzMzpcXHRcXHRcXHQgIG1hY2hpbmVfaXNfdm0oKSA/IFxcXCJ6L1ZNXFxcIiA6XFxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jLTEzNC1cXHRcXHRcXHQgIG1hY2hpbmVfaXNfa3ZtKCkgPyBcXFwiS1ZNXFxcIiA6IFxcXCJ1bmtub3duXFxcIik7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTY5ND1zdGF0aWMgaW50IF9faW5pdCBpcGxfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy03MDctXFx0Y2FzZSBJUExfVFlQRV9DQ1c6XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzo3MDg6XFx0XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTcwOS1cXHRcXHRcXHRyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcXHUwMDI2aXBsX2tzZXQtXFx1MDAzZWtvYmosXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEyODY9c3RhdGljIHZvaWQgcmVpcGxfYmxvY2tfY2N3X2ZpbGxfcGFybXMoc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKmlwYilcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTI5Ny1cXHQvKiBWTSBQQVJNICovXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoxMjk4OlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXFx1MDAyNlxcdTAwMjYgaXBsX2Jsb2NrX3ZhbGlkIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMjk5LVxcdCAgICAoaXBsX2Jsb2NrLmNjdy52bV9mbGFncyBcXHUwMDI2IElQTF9QQjBfQ0NXX1ZNX0ZMQUdfVlApKSB7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEzMDg9c3RhdGljIGludCBfX2luaXQgcmVpcGxfbnNzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMxMS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjEzMTI6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMzEzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0xMzI4PXN0YXRpYyBpbnQgX19pbml0IHJlaXBsX2Njd19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEzMzYtXFx0cmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXFx1MDAyNnJlaXBsX2tzZXQtXFx1MDAzZWtvYmosXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoxMzM3OlxcdFxcdFxcdFxcdG1hY2hpbmVfaXNfdm0oKSA/IFxcdTAwMjZyZWlwbF9jY3dfYXR0cl9ncm91cF92bVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMzOC1cXHRcXHRcXHRcXHRcXHRcXHQ6IFxcdTAwMjZyZWlwbF9jY3dfYXR0cl9ncm91cF9scGFyKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjAxND1zdGF0aWMgaW50IHZtY21kX2luaXQodm9pZClcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIwMTUte1xcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjAxNjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIwMTctXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMjk0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX3JlYm9vdF9zZXR1cChjaGFyICpzdHIpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk1LXtcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIyOTY6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk3LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMzA0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX3BhbmljX3NldHVwKGNoYXIgKnN0cilcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMDUte1xcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjMwNjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMDctXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMTQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25faGFsdF9zZXR1cChjaGFyICpzdHIpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzE1LXtcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIzMTY6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzE3LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMzI0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX3BvZmZfc2V0dXAoY2hhciAqc3RyKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNS17XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMzI2OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNy1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jPTE4MD1zdGF0aWMgaW50IG1hY2hpbmVfa2V4ZWNfcHJlcGFyZV9rZHVtcCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMtMTgyLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUFxcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jOjE4MzpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jLTE4NC1cXHRcXHRkaWFnMTBfcmFuZ2UoUEZOX0RPV04oY3Jhc2hrX3Jlcy5zdGFydCksXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9MjQ2PXN0YXRpYyB2b2lkIF9faW5pdCBjb25tb2RlX2RlZmF1bHQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy0yNTAtXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjI1MTpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTI1Mi1cXHRcXHRjcGNtZChcXFwiUVVFUlkgQ09OU09MRVxcXCIsIHF1ZXJ5X2J1ZmZlciwgMTAyNCwgTlVMTCk7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9NTk4PXN0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2NyYXNoa2VybmVsKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtNjUwLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYzo2NTE6XFx0aWYgKCFvbGRtZW1fZGF0YS5zdGFydCBcXHUwMDI2XFx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTY1Mi1cXHRcXHRkaWFnMTBfcmFuZ2UoUEZOX0RPV04oY3Jhc2hfYmFzZSksIFBGTl9ET1dOKGNyYXNoX3NpemUpKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz04OTc9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTkwMS0gICAgICAgICAqL1xcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYzo5MDI6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtOTAzLVxcdFxcdHByX2luZm8oXFxcIkxpbnV4IGlzIHJ1bm5pbmcgYXMgYSB6L1ZNIFxcXCJcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jPTM3OT1zdGF0aWMgX19pbml0IGludCBjcmVhdGVfcHJvY19zZXJ2aWNlX2xldmVsKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYy0zODEtXFx0cHJvY19jcmVhdGVfc2VxKFxcXCJzZXJ2aWNlX2xldmVsc1xcXCIsIDAsIE5VTEwsIFxcdTAwMjZzZXJ2aWNlX2xldmVsX3NlcV9vcHMpO1xcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jOjM4MjpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jLTM4My1cXHRcXHRyZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKFxcdTAwMjZzZXJ2aWNlX2xldmVsX3ZtKTtcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYz0yNTM9c2VnbWVudF90eXBlIChjaGFyKiBuYW1lKVxcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTI1Ny1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6MjU4OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy0yNTktXFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM9NDE1PXNlZ21lbnRfbG9hZCAoY2hhciAqbmFtZSwgaW50IGRvX25vbnNoYXJlZCwgdW5zaWduZWQgbG9uZyAqYWRkcixcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy00MjAtXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjQyMTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNDIyLVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU0Nj1zZWdtZW50X3VubG9hZChjaGFyICpuYW1lKVxcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU0OS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6NTUwOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy01NTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU4Mj1zZWdtZW50X3NhdmUoY2hhciAqbmFtZSlcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy01ODgtXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjU4OTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTkwLVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM9MzMzOT1pbnQgZGFzZF9kZXZpY2VfaXNfcm8oc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jLTMzNDQtXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozMzQ1OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzM0Ni1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jPTIyND1zdGF0aWMgaW50IF9faW5pdCBkYXNkX3BhcnNlX2tleXdvcmQoY2hhciAqa2V5d29yZClcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jLTIzOC1cXHRpZiAoc3RybmNtcChcXFwibm9wYXZcXFwiLCBrZXl3b3JkLCBsZW5ndGgpID09IDApIHtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYzoyMzk6XFx0XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0yNDAtXFx0XFx0XFx0cHJfaW5mbyhcXFwiJ25vcGF2JyBpcyBub3Qgc3VwcG9ydGVkIG9uIHovVk1cXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jPTY1Nj1kYXNkX2RpYWdfaW5pdCh2b2lkKVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYy02NTcte1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYzo2NTg6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMtNjU5LVxcdFxcdHByX2luZm8oXFxcIkRpc2NpcGxpbmUgJXMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCB6L1ZNXFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jPTE5NDc9c3RhdGljIGludCBkYXNkX2Vja2RfdmFsaWRhdGVfc2VydmVyKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jLTE5NTUtXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jOjE5NTY6XFx0aWYgKGRhc2Rfbm9wYXYgfHwgbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYy0xOTU3LVxcdFxcdGVuYWJsZV9wYXYgPSAwO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jPTg5OT1zdGF0aWMgaW50IF9faW5pdCBjb24zMjE1X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyMTUuYy05MTAtXFx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jOjkxMTpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTkxMi1cXHRcXHRjcGNtZChcXFwiVEVSTSBDT05NT0RFIDMyMTVcXFwiLCBOVUxMLCAwLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYz0yMTM0PWNvbjMyNzBfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jLTIxNDUtXFx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jOjIxNDY6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYy0yMTQ3LVxcdFxcdGNwY21kKFxcXCJURVJNIENPTk1PREUgMzI3MFxcXCIsIE5VTEwsIDAsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jPTI5Mz1pbnQgaG1jZHJ2X2Z0cF9zdGFydHVwKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9obWNkcnZfZnRwLmMtMzExLVxcdGlmIChobWNkcnZfZnRwX3JlZmNudCA9PSAwKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jOjMxMjpcXHRcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9mdHAuYy0zMTMtXFx0XFx0XFx0aG1jZHJ2X2Z0cF9mdW5jcyA9IFxcdTAwMjZobWNkcnZfZnRwX3p2bTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jPTQ1ND1zdGF0aWMgaW50IF9faW5pdCBtb25faW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMtNDU3LVxcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jOjQ1ODpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jLTQ1OS1cXHRcXHRwcl9lcnIoXFxcIlRoZSB6L1ZNICpNT05JVE9SIHJlY29yZCBkZXZpY2UgZHJpdmVyIGNhbm5vdCBiZSBcXFwiXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYz0yOTQ9c3RhdGljIGludCBfX2luaXQgbW9uX2luaXQodm9pZClcXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYy0yOTUte1xcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jOjI5NjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYy0yOTctXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmM9NjE0PXN0YXRpYyB2b2lkIHJhdzMyNzBfcmVzZXRfZGV2aWNlX2NiKHN0cnVjdCByYXczMjcwX3JlcXVlc3QgKnJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jLTYyMi1cXHRcXHRycC1cXHUwMDNlc3RhdGUgPSBSQVczMjcwX1NUQVRFX0lOSVQ7XFxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jOjYyMzpcXHR9IGVsc2UgaWYgKG1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYy02MjQtXFx0XFx0cmF3MzI3MF9zaXplX2RldmljZV92bShycCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg9MzQ0PXNjbHBfYXNjZWJjKHVuc2lnbmVkIGNoYXIgY2gpXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM0NS17XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM0NjpcXHRyZXR1cm4gKG1hY2hpbmVfaXNfdm0oKSkgPyBfYXNjZWJjW2NoXSA6IF9hc2NlYmNfNTAwW2NoXTtcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzQ3LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaD0zNTE9c2NscF9lYmNhc2Nfc3RyKGNoYXIgKnN0ciwgaW50IG5yKVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTIte1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaDozNTM6XFx0KG1hY2hpbmVfaXNfdm0oKSkgPyBFQkNBU0Moc3RyLCBucikgOiBFQkNBU0NfNTAwKHN0ciwgbnIpO1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTQtfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oPTM1OD1zY2xwX2FzY2ViY19zdHIoY2hhciAqc3RyLCBpbnQgbnIpXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM1OS17XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM2MDpcXHQobWFjaGluZV9pc192bSgpKSA/IEFTQ0VCQyhzdHIsIG5yKSA6IEFTQ0VCQ181MDAoc3RyLCBucik7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM2MS19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmM9MjY9c3RhdGljIHZvaWQgX19pbml0IHNjbHBfZWFybHlfZmFjaWxpdGllc19kZXRlY3Qodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfZWFybHkuYy03Ni1cXHRpZiAoIXNjY2ItXFx1MDAzZWhjcHVhKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jOjc3OlxcdFxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jLTc4LVxcdFxcdFxcdHNjbHAubWF4X2NvcmVzID0gNjQ7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jPTUwNT1zY2xwX3R0eV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jLTUxMi1cXHQvKiB6L1ZNIG11bHRpcGxleGVzIHRoZSBsaW5lIG1vZGUgb3V0cHV0IG9uIHRoZSAzMnh4IHNjcmVlbiAqL1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmM6NTEzOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXFx1MDAyNlxcdTAwMjYgIUNPTlNPTEVfSVNfU0NMUClcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jLTUxNC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTM4LVxcdHNjbHBfdHR5X2J1ZmZlcl9jb3VudCA9IDA7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYzo1Mzk6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTQwLVxcdFxcdC8qIGNhc2UgaW5wdXQgbGluZXMgdG8gbG93ZXJjYXNlICovXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM9NTI9dm9pZCBfX2luaXQgdm1jcF9jbWFfcmVzZXJ2ZSh2b2lkKVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01My17XFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jOjU0OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM9MjQ4PXN0YXRpYyBpbnQgX19pbml0IHZtY3BfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTI1MS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM6MjUyOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy0yNTMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jPTgwNj1zdGF0aWMgaW50IF9faW5pdCB2bWxvZ3Jkcl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jLTgxMS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jOjgxMjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMtODEzLVxcdFxcdHByX2VycihcXFwibm90IHJ1bm5pbmcgdW5kZXIgVk0sIGRyaXZlciBub3QgbG9hZGVkLlxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmM9MTAwNj1zdGF0aWMgaW50IF9faW5pdCB1cl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMtMTAxMC1cXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmM6MTAxMTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYy0xMDEyLVxcdFxcdHByX2VycihcXFwiVGhlICVzIGNhbm5vdCBiZSBsb2FkZWQgd2l0aG91dCB6L1ZNXFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYz0xNzM9c3RhdGljIHZvaWQgc25zaWRfY2FsbGJhY2soc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHZvaWQgKmRhdGEsIGludCByYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMtMTc4LVxcbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmM6MTc5OlxcdGlmIChyYyBcXHUwMDI2XFx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jLTE4MC1cXHRcXHQvKiBUcnkgZGlhZyAweDIxMCBmYWxsYmFjayBvbiB6L1ZNLiAqL1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNDk0PXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBhcF9hc3luY19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MDQtXFx0ICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTA1OlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTA2LVxcdFxcdHBvbGxfaGlnaF90aW1lb3V0ID0gMTUwMDAwMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM9Mjk3PXN0YXRpYyBpbnQgcWV0aF9sMl9yZXF1ZXN0X2luaXRpYWxfbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jLTMwMi1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jOjMwMzpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYy0zMDQtXFx0XFx0cmMgPSBxZXRoX3ZtX3JlcXVlc3RfbWFjKGNhcmQpO1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jPTEzOT1zdGF0aWMgaW50IF9faW5pdCBzbXNnX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYy0xNDItXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jOjE0MzpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYy0xNDQtXFx0XFx0cmMgPSAtRVBST1RPTk9TVVBQT1JUO1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYz0xNTI9c3RhdGljIGludCBfX2luaXQgc21zZ2l1Y3ZfYXBwX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmMtMTU2LVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmM6MTU3OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmMtMTU4LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM9MTIzOT1zdGF0aWMgaW50IHBhcmFtX3NldF92bWlkZmlsdGVyKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjQyLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jOjEyNDM6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkgfHwgIWh2Y19pdWN2X2RldmljZXMpXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI0NC1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jPTEyNjY9c3RhdGljIGludCBwYXJhbV9nZXRfdm1pZGZpbHRlcihjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI3MS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYzoxMjcyOlxcdGlmICghbWFjaGluZV9pc192bSgpIHx8ICFodmNfaXVjdl9kZXZpY2VzKVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNzMtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYz0xMzAxPXN0YXRpYyBpbnQgX19pbml0IGh2Y19pdWN2X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEzMDgtXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM6MTMwOTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEzMTAtXFx0XFx0cHJfbm90aWNlKFxcXCJUaGUgei9WTSBJVUNWIEhWQyBkZXZpY2UgZHJpdmVyIGNhbm5vdCBcXFwiXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM9ODE9c3RhdGljIGludCB3ZHRfc3RhcnQoc3RydWN0IHdhdGNoZG9nX2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTg1LVxcbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYzo4NjpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTg3LVxcdFxcdGZ1bmMgPSBjb25jZWFsX29uID8gKFdEVF9GVU5DX0lOSVQgfCBXRFRfRlVOQ19DT05DRUFMKVxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jPTEwNz1zdGF0aWMgaW50IHdkdF9waW5nKHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYy0xMTEtXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jOjExMjpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTExMy1cXHRcXHQvKlxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jPTE2Mj1zdGF0aWMgaW50IF9faW5pdCBkaWFnMjg4X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYy0xNjUtXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jOjE2NjpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTE2Ny1cXHRcXHRjbWRfYnVmID0ga21hbGxvYyhNQVhfQ01ETEVOLCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjgwPXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI4My1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI4NDpcXHRpZiAobWFjaGluZV9pc192bSgpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyODUtXFx0XFx0Y3BjbWQoXFxcIlFVRVJZIFVTRVJJRFxcXCIsIGl1Y3ZfdXNlcmlkLCBzaXplb2YoaXVjdl91c2VyaWQpLCBcXHUwMDI2ZXJyKTtcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYz0xODYyPXN0YXRpYyBpbnQgX19pbml0IGl1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jLTE4NjUtXFxubmV0L2l1Y3YvaXVjdi5jOjE4NjY6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcXG5uZXQvaXVjdi9pdWN2LmMtMTg2Ny1cXHRcXHRyYyA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM4OjEyLjc5NTI5NDY1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzEzMDg4Mjc5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgTmV0d29yayBNYWtlZmlsZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyBgYWZfaXVjdmAgKEFkZHJlc3MgRmFtaWx5IElVQ1YpIGdldHMgYnVpbHQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYENPTkZJR19JVUNWYCBhbmQgdGhlIHovVk0gZW52aXJvbm1lbnQuIEknbSBzZWVpbmcgdGhhdCBgbWFjaGluZV9pc192bSgpYCBpcyBjcnVjaWFsLiBJZiBzeXprYWxsZXIgaXMgcnVubmluZyB1bmRlciBRRU1VLCB0aGF0IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGZhbHNlLCB3aGljaCBsZWFkcyB0byBgcHJfaXVjdmAgYmVpbmcgTlVMTCwgYW5kIHRodXMgYGFmX2l1Y3ZgIGRlZmF1bHRpbmcgdG8gdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuXG5cblRoZSBvcmlnaW5hbCBjb2RlJ3MgbG9naWMgaW4gYGFmaXVjdl9pbml0YCB3YXMgbGlrZSB0aGlzOiBpZiBpdCdzIHovVk0gKmFuZCogYENPTkZJR19JVUNWYCBpcyBlbmFibGVkLCB0aGVuIGBwcl9pdWN2YCBnZXRzIHNldCB0byBgXHUwMDI2aXVjdl9pZmAuIE90aGVyd2lzZSwgYHByX2l1Y3ZgIGlzIE5VTEwuIEhvd2V2ZXIsIHVuZGVyIFFFTVUsIGBtYWNoaW5lX2lzX3ZtKClgIGlzIGZhbHNlLCBtZWFuaW5nIGBwcl9pdWN2YCAqYWx3YXlzKiBiZWNvbWVzIE5VTEwsIHJlZ2FyZGxlc3Mgb2YgdGhlIGBDT05GSUdfSVVDVmAgc2V0dGluZy4gU28sIGV2ZW4gaWYgYENPTkZJR19JVUNWYCAqd2FzKiBlbmFibGVkLCBgYWZfaXVjdmAgd291bGQgc3RpbGwgdXNlIEhpcGVyU29ja2V0cyB1bmRlciBRRU1VIGJlY2F1c2UgdGhlIElVQ1YgaW50ZXJmYWNlIHBvaW50ZXIgYHByX2l1Y3ZgIGlzIG5ldmVyIGluaXRpYWxpemVkLlxuXG5UaGUgcHJvYmxlbT8gSWYgYENPTkZJR19JVUNWYCB3YXMgZGlzYWJsZWQsIHRoZSBtYWtlZmlsZSBsb2dpYyBza2lwcGVkIGJ1aWxkaW5nIGBuZXQvaXVjdi9gLCB3aGljaCBtZWFucyBgYWZfaXVjdi5vYCB3b3VsZG4ndCBiZSBidWlsdCBhdCBhbGwuIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGF0OiBpdCBmb3JjZXMgYGFmX2l1Y3Yub2AgdG8gYmUgYnVpbHQsIHJlZ2FyZGxlc3Mgb2YgYENPTkZJR19JVUNWYCdzIHNldHRpbmcgKGJ5IGNoYW5naW5nIGBvYmotJChDT05GSUdfSVVDVilcdFx0Kz0gaXVjdi9gIHRvIGBvYmoteVx0XHRcdFx0Kz0gaXVjdi9gKS5cblxuVGhlIGltcGFjdCBvbiBleGVjdXRpb24gZmxvdyBpcyBub3cgY2xlYXIuIFRoaXMgcGF0Y2ggKmVuYWJsZXMqIGBhZl9pdWN2YCB0byBiZSBidWlsdCBhbmQgdXNlZCB3aGVuIGBDT05GSUdfSVVDVmAgaXMgZGlzYWJsZWQsIGFuZCB3aWxsIHVzZSBIaXBlclNvY2tldHMuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMgZnV6emluZy4gRG9lcyB0aGlzIGFjdHVhbGx5IGNyZWF0ZSBhIG5ldywgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoIHRoYXQgbmVlZHMgZm9jdXNlZCBmdXp6aW5nPyBJZiBzeXprYWxsZXIgaGFzIGBDT05GSUdfSVVDVj15YCBhbmQgYENPTkZJR19BRklVQ1Y9eWAgZW5hYmxlZCAod2hpY2ggaXMgdmVyeSBsaWtlbHkgdGhlIGRlZmF1bHQpIG9uIFMzOTAsIHRoZW4gYGFmX2l1Y3ZgIHdhcyAqYWxyZWFkeSogYmVpbmcgZnV6emVkLCB0aG91Z2ggaXQgd2FzIHN0aWxsIGFsd2F5cyB1c2luZyB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCB1bmRlciBRRU1VLCBldmVuIHdpdGggYENPTkZJR19JVUNWPXlgLlxuXG5Ib3dldmVyLCB0aGUga2V5IGluc2lnaHQgaXMgdGhhdCBzeXprYWxsZXIgKm1pZ2h0KiB1c2UgY29uZmlndXJhdGlvbnMgd2hlcmUgYENPTkZJR19JVUNWPW5gIGJ1dCBgQ09ORklHX0FGSVVDVj15YC4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGlzIHBhdGNoIGJlY29tZXMgc2lnbmlmaWNhbnQuIEl0ICplbmFibGVzKiBgYWZfaXVjdmAgdG8gYmUgYnVpbHQgYW5kIHRlc3RlZCB1bmRlciB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCwgYSBuZXcgc3RhdGUgdGhhdCB3YXNuJ3QgcG9zc2libGUgYmVmb3JlLiBUaGlzIGlzIGEgZml4IGZvciBhIGJ1aWxkIHN5c3RlbSBidWcuXG5cbkJlY2F1c2UgdGhpcyBwYXRjaCBtb2RpZmllcyBgbmV0L01ha2VmaWxlYCwgYW5kIHRoZSBwcm9tcHQgc2F5cyBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUsXCIgc28gSSB0aGluayB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSByZWFjaGFibGUgY29kZSBpcyB0aGUgc2FtZSBhcyBiZWZvcmUsIGBhZl9pdWN2YCBjb2RlLlxuXG5TbywgZm9yIGZ1enppbmcsIHdlJ2QgbmVlZCB0byBmb2N1cyBvbiBmdW5jdGlvbnMgaW4gYG5ldC9pdWN2L2FmX2l1Y3YuY2AsIHN1Y2ggYXMgYGFmaXVjdl9oc19zZW5kYCwgYGl1Y3Zfc29ja19zZW5kbXNnYCwgYGl1Y3Zfc29ja19iaW5kYCwgZXRjLiBXZSBzaG91bGQgdGVzdCB3aXRoIGBDT05GSUdfQUZJVUNWPXlgLCBhcyB3ZWxsIGFzIGBDT05GSUdfSVVDVj1uYC4gVGhlIG9yaWdpbmFsIHBhdGNoIGNoYW5nZXMgdGhlIGJ1aWxkIHN5c3RlbSwgc28gaXQncyBhIHdvcnRod2hpbGUgcGF0aCB0byB0ZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjAyOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzg6MjkuOTI2MTgwODQ0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA5MTYyMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjgwPXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI4My1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI4NDpcXHRpZiAobWFjaGluZV9pc192bSgpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyODUtXFx0XFx0Y3BjbWQoXFxcIlFVRVJZIFVTRVJJRFxcXCIsIGl1Y3ZfdXNlcmlkLCBzaXplb2YoaXVjdl91c2VyaWQpLCBcXHUwMDI2ZXJyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzg6MzAuMTY3MTA4MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIxNzQ3MTA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBRRU1VIGFuZCBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHBhdGNoIG9ubHkgYWZmZWN0cyBgYWZpdWN2X2luaXRgLiBHaXZlbiB0aGUgZXN0YWJsaXNoZWQgdW5kZXJzdGFuZGluZyB0aGF0IGBtYWNoaW5lX2lzX3ZtKClgIGlzIGZhbHNlIHVuZGVyIFFFTVUsIHRoZSBgSVNfRU5BQkxFRChDT05GSUdfSVVDVilgIGNvbmRpdGlvbiBiZWNvbWVzIGlycmVsZXZhbnQgdG8gdGhlIFFFTVUgZXhlY3V0aW9uIGZsb3cuIFRoaXMgbWVhbnMgdGhhdCwgb3JkaW5hcmlseSwgdGhlIGV4ZWN1dGlvbiBwYXRoIHVuZGVyIFFFTVUgc2hvdWxkIGJlIGlkZW50aWNhbCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGBDT05GSUdfSVVDVmAgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyB3b3VsZCBpbXBseSB0aGF0IHRoZSBwYXRjaCBkb2Vzbid0IGV4cG9zZSBhbnkgbmV3IGV4ZWN1dGlvbiBwYXRocyBpbiBRRU1VIHRoYXQgd2VyZW4ndCBhbHJlYWR5IHRoZXJlIHdoZW4gYENPTkZJR19JVUNWPXlgLlxuXG5Ib3dldmVyLCBoZXJlJ3MgYSBjcnVjaWFsIHBvaW50OiB3aGF0IGlmIGBDT05GSUdfSVVDVmAgd2FzICpkaXNhYmxlZCogaW4gdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLCBtZWFuaW5nIGBhZl9pdWN2YCB3YXNuJ3QgZXZlbiBidWlsdD8gTm93LCB0aGUgcGF0Y2ggKmVuYWJsZXMqIGl0ISBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY29uc2lkZXJhdGlvbi4gSWYgaXQgZW5hYmxlcyBhIHdob2xlIG5ldyBzb2NrZXQgZmFtaWx5IHRoYXQgd2Fzbid0IHByZXZpb3VzbHkgZnV6emVkLCBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgYXR0ZW50aW9uLlxuXG5MZXQncyBjb25zaWRlciB0aGUgYnJvYWRlciBjb250ZXh0LiBgQ09ORklHX0lVQ1ZgIGlzIGdlbmVyYWxseSBlbmFibGVkIHdoZW4gYENPTkZJR19BRklVQ1ZgIGlzIGVuYWJsZWQgYmVjYXVzZSBgQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYCBhbmQgdXN1YWxseSBkZWZhdWx0cyB0byAnbScgaWYgYFFFVEhfTDNgIG9yIGBJVUNWYCBhcmUgYWxzbyBlbmFibGVkLiBUaGUgcHJvbXB0IGl0c2VsZiBmb3IgYEFGSVVDVmAgaXMg4oCcQUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpLuKAnSBJZiBzeXprYWxsZXIgdGVzdHMgUzM5MCwgdGhlbiBpdCdzIGxpa2VseSB0aGF0IGJvdGggYXJlIGVuYWJsZWQuXG5cbkJ1dCB0aGVuIHRoZXJlJ3MgdGhlIHNwZWNpZmljIGd1aWRlbGluZTog4oCcUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcy4uLiBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cu4oCdIFRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSBhIE1ha2VmaWxlLiBEb2VzIGEgTWFrZWZpbGUgbW9kaWZpY2F0aW9uIGNvdW50IGFzIGEgXCJLY29uZmlnIGZpbGVcIj8gSXQncyBwYXJ0IG9mIHRoZSBidWlsZCBzeXN0ZW0uIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBhIE1ha2VmaWxlIG1vZGlmaWNhdGlvbiwgKmJ5IGl0c2VsZiosIGZ1bmN0aW9uYWxseSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93LiBXZWxsLCBpdCBjaGFuZ2VzIHdoYXQgZ2V0cyBjb21waWxlZCwgYW5kIGlmIGl0IGNvbXBpbGVzIG5ldyBjb2RlLCB0aGF0ICpkb2VzKiBhbHRlciB0aGUga2VybmVsJ3MgZnVuY3Rpb25hbGl0eS4gVGhpcyBtYWtlcyBpdCB3b3J0aCBjb25zaWRlcmluZy5cblxuSWYgd2UgZGVjaWRlIHRvIGZ1enosIHdoYXQgYXJlIHRoZSByZWxldmFudCBzeW1ib2xzIHRvIGZvY3VzIG9uPyBJJ2QgY29uc2lkZXIgYGl1Y3Zfc29ja19jcmVhdGVgLCBgaXVjdl9zb2NrX2JpbmRgLCBgaXVjdl9zb2NrX3NlbmRtc2dgLCBgaXVjdl9zb2NrX3JlY3Ztc2dgLCBgYWZpdWN2X2hzX3NlbmRgLCBhbmQgYGFmaXVjdl9oc19yY3ZgLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiBgYWZpdWN2X2hzX3JjdmAgaXMgZXZlbiByZWFjaGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzEyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM4OjM5LjM4NDU4Mjg4OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NTIwNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmaXVjdl9oc19yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz0xOTk3PXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDM4LS8qXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwMzk6ICogYWZpdWN2X2hzX3JjdigpIC0gYmFzZSBmdW5jdGlvbiBmb3IgYXJyaXZpbmcgZGF0YSB0aHJvdWdoIEhpcGVyU29ja2V0c1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDQwLSAqICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNDItICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwNDM6c3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNDQtXFx0c3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyNzU9c3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpdWN2X3BhY2tldF90eXBlID0ge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjc2LVxcdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQUZfSVVDViksXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNzc6XFx0LmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjc4LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM4OjM5LjU5NDExNjE5NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjIxMjc5NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIGFuZCBGdXp6aW5nIGFmaXVjdl9oc19yY3YqKlxuXG5Pa2F5LCBzbyBgYWZpdWN2X2hzX3JjdmAgKmlzKiByZWdpc3RlcmVkIGFzIGEgcGFja2V0IHR5cGUgaGFuZGxlciBmb3IgYEVUSF9QX0FGX0lVQ1ZgLiBUaGlzIG1lYW5zIHRoYXQgd2UgKmNhbiogcmVhY2ggaXQgYnkgc2VuZGluZyBwYWNrZXRzIHdpdGggdGhlIGBFVEhfUF9BRl9JVUNWYCBwcm90b2NvbCwgbGlrZWx5IG92ZXIgbG9vcGJhY2sgb3Igb3RoZXIgaW50ZXJmYWNlcy4gRGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCB0aGVyZWZvcmUsIGRlZmluaXRlbHkgZnV6emFibGUuIExldCdzIHNlZS4uLiB3aGF0IGFyZSB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ/IEFoLCBgQUZJVUNWYC5cblxuSGFuZyBvbiBhIHNlY29uZOKApiBgQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYC4gSG1tLiBDYW4gU3l6a2FsbGVyIGV2ZW4gZW5hYmxlIGBBRklVQ1ZgIG9uIHg4Nj8gTm8sIHRoZSBgZGVwZW5kcyBvbiBTMzkwYCBkZXBlbmRlbmN5IHByZXZlbnRzIHRoYXQuIFRoaXMgbWVhbnMgdGhlIGNvZGUgaXMgKm9ubHkqIGNvbXBpbGVkIHdoZW4gdGFyZ2V0aW5nIFMzOTAsIHdoaWNoIGlzIHVzZWZ1bCBpbmZvcm1hdGlvbi4gVGhlIGdvb2QgbmV3cyBpcyBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYW4gUzM5MHggaW5zdGFuY2UuIElmIHdlIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLCB0aGUgUzM5MCBpbnN0YW5jZSB3aWxsIHBpY2sgaXQgdXAgYW5kIFN5emthbGxlciB3aWxsIHRyeSB0byB0ZXN0IGl0LlxuXG5CdXQuLi53YWl0LCB3YXNuJ3QgdGhlcmUgc29tZXRoaW5nIGFib3V0IHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdDRSBvciBRRU1VPyBXZSBlc3RhYmxpc2hlZCB0aGF0IGBhZl9pdWN2YCAqaXMqIHJlYWNoYWJsZSBpbiBRRU1VIGJlY2F1c2UgaXQgZmFsbHMgYmFjayB0byBIaXBlclNvY2tldHMgdHJhbnNwb3J0LiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5SaWdodCwgdGltZSB0byBpZGVudGlmeSBzb21lIHJlbGV2YW50IHN5bWJvbHMgZm9yIFN5emthbGxlciB0byBmb2N1cyBvbjogYGl1Y3Zfc29ja19jcmVhdGVgLCBgaXVjdl9zb2NrX2JpbmRgLCBgaXVjdl9zb2NrX3NlbmRtc2dgLCBgaXVjdl9zb2NrX3JlY3Ztc2dgLCBgYWZpdWN2X2hzX3NlbmRgLCBgYWZpdWN2X2hzX3JjdmAsIGBpdWN2X3NvY2tfc2V0c29ja29wdGAsIGFuZCBgaXVjdl9zb2NrX2dldHNvY2tvcHRgLiBMZXQncyBqdXN0IGRvdWJsZSBjaGVjayB0aG9zZSBuYW1lcyBmb3IgYWNjdXJhY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODUxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM4OjQ4LjgxNTQwMTAwNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5ODc3Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml1Y3Zfc29ja19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz01Mj1zdGF0aWMgY29uc3QgdTggaXBybV9zaHV0ZG93bls4XSA9XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTYtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjU3OiNkZWZpbmUgX19pdWN2X3NvY2tfd2FpdChzaywgY29uZGl0aW9uLCB0aW1lbywgcmV0KVxcdFxcdFxcdFxcXFxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTgtZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy04MS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6ODI6I2RlZmluZSBpdWN2X3NvY2tfd2FpdChzaywgY29uZGl0aW9uLCB0aW1lbylcXHRcXHRcXHRcXHRcXFxcXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTgzLSh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTg1LVxcdGlmICghKGNvbmRpdGlvbikpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo4NjpcXHRcXHRfX2l1Y3Zfc29ja193YWl0KHNrLCBjb25kaXRpb24sIHRpbWVvLCBfX3JldCk7XFx0XFx0XFxcXFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy04Ny1cXHRfX3JldDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTA9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X2FjY2VwdF9kZXF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTkxLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo5MjpzdGF0aWMgdm9pZCBpdWN2X3NvY2tfa2lsbChzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo5MzpzdGF0aWMgdm9pZCBpdWN2X3NvY2tfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTQtXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTk1PXN0YXRpYyB2b2lkIGFmaXVjdl9oc19jYWxsYmFja190eG5vdGlmeShzdHJ1Y3Qgc29jayAqc2ssIGVudW0gaXVjdl90eF9ub3RpZnkpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy05Ni1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6OTc6c3RhdGljIHN0cnVjdCBpdWN2X3NvY2tfbGlzdCBpdWN2X3NrX2xpc3QgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTk4LVxcdC5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKGl1Y3Zfc2tfbGlzdC5sb2NrKSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xMDc9c3RhdGljIGlubGluZSB2b2lkIGxvd19ubWNweSh1bnNpZ25lZCBjaGFyICpkc3QsIGNoYXIgKnNyYylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjYtICogSWYgdGhlIHNvY2tldCBkYXRhIGxlbiBpcyBncmVhdGVyIDcsIHRoZW4gUFJNREFUQSBjYW4gYmUgdXNlZCBmb3Igc3BlY2lhbFxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjc6ICogbm90aWZpY2F0aW9ucyAoc2VlIGl1Y3Zfc29ja19zaHV0ZG93bik7IGFuZCBmdXJ0aGVyLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjgtICogaWYgdGhlIHNvY2tldCBkYXRhIGxlbiBpcyBcXHUwMDNlIDcsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDguXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTM0PXN0YXRpYyBpbmxpbmUgc2l6ZV90IGl1Y3ZfbXNnX2xlbmd0aChzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2cpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1LS8qKlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDY6ICogaXVjdl9zb2NrX2luX3N0YXRlKCkgLSBjaGVjayBmb3Igc3BlY2lmaWMgc3RhdGVzXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0Ny0gKiBAc2s6XFx0XFx0c29jayBzdHJ1Y3R1cmVcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNTItICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE1MzpzdGF0aWMgaW50IGl1Y3Zfc29ja19pbl9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSwgaW50IHN0YXRlMilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTU0LXtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3OS0vKlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODA6ICogaXVjdl9zb2NrX3dha2VfbXNnbGltKCkgLSBXYWtlIHVwIHRocmVhZCB3YWl0aW5nIG9uIG1zZyBsaW1pdFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODEtICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4MjpzdGF0aWMgdm9pZCBpdWN2X3NvY2tfd2FrZV9tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODMte1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTI2OD1zdGF0aWMgc3RydWN0IHNvY2sgKl9faXVjdl9nZXRfc29ja19ieV9uYW1lKGNoYXIgKm5tKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTI3OC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6Mjc5OnN0YXRpYyB2b2lkIGl1Y3Zfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTI4MC17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjk1LS8qIENsZWFudXAgTGlzdGVuICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjI5NjpzdGF0aWMgdm9pZCBpdWN2X3NvY2tfY2xlYW51cF9saXN0ZW4oc3RydWN0IHNvY2sgKnBhcmVudClcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjk3LXtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMDEtXFx0d2hpbGUgKChzayA9IGl1Y3ZfYWNjZXB0X2RlcXVldWUocGFyZW50LCBOVUxMKSkpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzAyOlxcdFxcdGl1Y3Zfc29ja19jbG9zZShzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjMwMzpcXHRcXHRpdWN2X3NvY2tfa2lsbChzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTMwNC1cXHR9XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzA4LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzozMDk6c3RhdGljIHZvaWQgaXVjdl9zb2NrX2xpbmsoc3RydWN0IGl1Y3Zfc29ja19saXN0ICpsLCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTMxMC17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzE1LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzozMTY6c3RhdGljIHZvaWQgaXVjdl9zb2NrX3VubGluayhzdHJ1Y3QgaXVjdl9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzE3LXtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMjMtLyogS2lsbCBzb2NrZXQgKG9ubHkgaWYgemFwcGVkIGFuZCBvcnBoYW5lZCkgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzI0OnN0YXRpYyB2b2lkIGl1Y3Zfc29ja19raWxsKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzI1LXtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMjgtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjMyOTpcXHRpdWN2X3NvY2tfdW5saW5rKFxcdTAwMjZpdWN2X3NrX2xpc3QsIHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzMwLVxcdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzU1PXN0YXRpYyBpbnQgaXVjdl9zZW5kX2N0cmwoc3RydWN0IHNvY2sgKnNrLCB1OCBmbGFncylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zODAtLyogQ2xvc2UgYW4gSVVDViBzb2NrZXQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzgxOnN0YXRpYyB2b2lkIGl1Y3Zfc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTM4Mi17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzkwLVxcdGNhc2UgSVVDVl9MSVNURU46XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjM5MTpcXHRcXHRpdWN2X3NvY2tfY2xlYW51cF9saXN0ZW4oc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zOTItXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDEwLVxcdFxcdFxcdFxcdHRpbWVvID0gSVVDVl9ESVNDT05OX1RJTUVPVVQ7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQxMTpcXHRcXHRcXHRpdWN2X3NvY2tfd2FpdChzayxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDEyOlxcdFxcdFxcdFxcdFxcdGl1Y3Zfc29ja19pbl9zdGF0ZShzaywgSVVDVl9DTE9TRUQsIDApLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00MTMtXFx0XFx0XFx0XFx0XFx0dGltZW8pO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQzNy1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDM4OlxcdC8qIG1hcmsgc29ja2V0IGZvciBkZWxldGlvbiBieSBpdWN2X3NvY2tfa2lsbCgpICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQzOS1cXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1pBUFBFRCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDQzLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0NDQ6c3RhdGljIHZvaWQgaXVjdl9zb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqcGFyZW50KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00NDUte1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ1MS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDUyOnN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ1My17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDgzLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0ODQ6XFx0c2stXFx1MDAzZXNrX2Rlc3RydWN0ID0gaXVjdl9zb2NrX2Rlc3RydWN0O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00ODUtXFx0c2stXFx1MDAzZXNrX3NuZHRpbWVvID0gSVVDVl9DT05OX1RJTUVPVVQ7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkxLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTI6XFx0aXVjdl9zb2NrX2xpbmsoXFx1MDAyNml1Y3Zfc2tfbGlzdCwgc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTMtXFx0cmV0dXJuIHNrO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU1ND1zdGF0aWMgdm9pZCBfX2l1Y3ZfYXV0b19uYW1lKHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTY3LS8qIEJpbmQgYW4gdW5ib3VuZCBzb2NrZXQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTY4OnN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU2OS1cXHRcXHRcXHQgIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NTAtLyogQXV0b21hdGljYWxseSBiaW5kIGFuIHVuYm91bmQgc29ja2V0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY1MTpzdGF0aWMgaW50IGl1Y3Zfc29ja19hdXRvYmluZChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY1Mi17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjczPXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MTgtLyogQ29ubmVjdCBhbiB1bmNvbm5lY3RlZCBzb2NrZXQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzE5OnN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcyMC1cXHRcXHRcXHQgICAgIGludCBhbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQwLVxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9PUEVOKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc0MTpcXHRcXHRlcnIgPSBpdWN2X3NvY2tfYXV0b2JpbmQoc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDItXFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzU5LVxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gSVVDVl9DT05ORUNURUQpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc2MDpcXHRcXHRlcnIgPSBpdWN2X3NvY2tfd2FpdChzaywgaXVjdl9zb2NrX2luX3N0YXRlKHNrLCBJVUNWX0NPTk5FQ1RFRCxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzYxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBJVUNWX0RJU0NPTk4pLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc3NS0vKiBNb3ZlIGEgc29ja2V0IGludG8gbGlzdGVuaW5nIHN0YXRlLiAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NzY6c3RhdGljIGludCBpdWN2X3NvY2tfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBiYWNrbG9nKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03Nzcte1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTgwMC0vKiBBY2NlcHQgYSBwZW5kaW5nIGNvbm5lY3Rpb24gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6ODAxOnN0YXRpYyBpbnQgaXVjdl9zb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy04MDItXFx0XFx0XFx0ICAgIHN0cnVjdCBwcm90b19hY2NlcHRfYXJnICphcmcpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtODU0LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo4NTU6c3RhdGljIGludCBpdWN2X3NvY2tfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTg1Ni1cXHRcXHRcXHQgICAgIGludCBwZWVyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTg5MT1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9pcHJtKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsIHN0cnVjdCBpdWN2X21lc3NhZ2UgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05MDEtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjkwMjpzdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTAzLVxcdFxcdFxcdCAgICAgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDE1LVxcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgbm9ibG9jayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwMTY6XFx0ZXJyID0gaXVjdl9zb2NrX3dhaXQoc2ssIGl1Y3ZfYmVsb3dfbXNnbGltKHNrKSwgdGltZW8pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDE3LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTE0ND1zdGF0aWMgdm9pZCBpdWN2X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE1Ni1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE1NzpcXHQvKiBjaGVjayBmb3Igc3BlY2lhbCBJUFJNIG1lc3NhZ2VzIChlLmcuIGl1Y3Zfc29ja19zaHV0ZG93bikgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE1OC1cXHRpZiAoKG1zZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJVUNWX0lQUk1EQVRBKSBcXHUwMDI2XFx1MDAyNiBsZW4gXFx1MDAzZSA3KSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTIwNT1zdGF0aWMgdm9pZCBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjIyLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjIzOnN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjI0LVxcdFxcdFxcdCAgICAgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyOTgtXFx0XFx0XFx0XFx0V0FSTl9PTigxKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTI5OTpcXHRcXHRcXHRcXHRpdWN2X3NvY2tfY2xvc2Uoc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzAwLVxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTEzNTA9c3RhdGljIGlubGluZSBfX3BvbGxfdCBpdWN2X2FjY2VwdF9wb2xsKHN0cnVjdCBzb2NrICpwYXJlbnQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTM2NC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTM2NTpzdGF0aWMgX19wb2xsX3QgaXVjdl9zb2NrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzNjYtXFx0XFx0XFx0ICAgICAgIHBvbGxfdGFibGUgKndhaXQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQwMy1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQwNDpzdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDA1LXtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcxLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDcyOnN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3My17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3OS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ4MDpcXHRpdWN2X3NvY2tfY2xvc2Uoc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDgxLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDgyLVxcdHNvY2tfb3JwaGFuKHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ4MzpcXHRpdWN2X3NvY2tfa2lsbChzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0ODQtXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDg3LS8qIGdldHNvY2tvcHQgYW5kIHNldHNvY2tvcHQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ4ODpzdGF0aWMgaW50IGl1Y3Zfc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0ODktXFx0XFx0XFx0XFx0c29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNTM3LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNTM4OnN0YXRpYyBpbnQgaXVjdl9zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTUzOS1cXHRcXHRcXHRcXHRzb2Nrb3B0X3QgKm9wdClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNTkzPXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0My1cXHQvKiBDcmVhdGUgdGhlIG5ldyBzb2NrZXQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY0NDpcXHRuc2sgPSBpdWN2X3NvY2tfYWxsb2MoTlVMTCwgc2stXFx1MDAzZXNrX3Byb3RvY29sLCBHRlBfQVRPTUlDLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0NS1cXHRpZiAoIW5zaykge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTEtXFx0bml1Y3YgPSBpdWN2X3NrKG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NTI6XFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTMtXFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc0LVxcdFxcdGl1Y3Zfc2V2ZXJfcGF0aChuc2ssIDEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc1OlxcdFxcdGl1Y3Zfc29ja19raWxsKG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzYtXFx0XFx0Z290byBmYWlsO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE3NDI9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja190eGRvbmUoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzczLVxcdFxcdC8qIHdha2UgdXAgYW55IHByb2Nlc3Mgd2FpdGluZyBmb3Igc2VuZGluZyAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzc0OlxcdFxcdGl1Y3Zfc29ja193YWtlX21zZ2xpbShzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3NzUtXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4NTA9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODY1LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODY2OlxcdG5zayA9IGl1Y3Zfc29ja19hbGxvYyhOVUxMLCBzay1cXHUwMDNlc2tfcHJvdG9jb2wsIEdGUF9BVE9NSUMsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODY3LVxcdGJoX2xvY2tfc29jayhzayk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg3NC1cXHRcXHRlcnIgPSBkZXZfcXVldWVfeG1pdChza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODc1OlxcdFxcdGl1Y3Zfc29ja19raWxsKG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4NzYtXFx0XFx0YmhfdW5sb2NrX3NvY2soc2spO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4ODAtXFx0bml1Y3YgPSBpdWN2X3NrKG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4ODE6XFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4ODItXFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkwNC1cXHR9IGVsc2VcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTkwNTpcXHRcXHRpdWN2X3NvY2tfa2lsbChuc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTA2LVxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xOTc5PXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3dpbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTk4OS1cXHRhdG9taWNfc3ViKGl1Y3ZfdHJhbnNfaGRyKHNrYiktXFx1MDAzZXdpbmRvdywgXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19zZW50KTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTk5MDpcXHRpdWN2X3NvY2tfd2FrZV9tc2dsaW0oc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTkxLVxcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMTQ4PXN0YXRpYyB2b2lkIGFmaXVjdl9oc19jYWxsYmFja190eG5vdGlmeShzdHJ1Y3Qgc29jayAqc2ssIGVudW0gaXVjdl90eF9ub3RpZnkgbilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTU3LVxcdFxcdGF0b21pY19kZWMoXFx1MDAyNml1Y3YtXFx1MDAzZXNrYnNfaW5feG1pdCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIxNTg6XFx0XFx0aXVjdl9zb2NrX3dha2VfbXNnbGltKHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE1OS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTY1LVxcdFxcdGlmIChhdG9taWNfZGVjX3JldHVybihcXHUwMDI2aXVjdi1cXHUwMDNlcGVuZGluZ3MpIFxcdTAwM2M9IDApXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIxNjY6XFx0XFx0XFx0aXVjdl9zb2NrX3dha2VfbXNnbGltKHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE2Ny1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjE2PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgYWZpdWN2X25ldGRldl9ub3RpZmllciA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjE5LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjIwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGl1Y3Zfc29ja19vcHMgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjEtXFx0LmZhbWlseVxcdFxcdD0gUEZfSVVDVixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIyMi1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjIzOlxcdC5yZWxlYXNlXFx0PSBpdWN2X3NvY2tfcmVsZWFzZSxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyNDpcXHQuYmluZFxcdFxcdD0gaXVjdl9zb2NrX2JpbmQsXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjU6XFx0LmNvbm5lY3RcXHQ9IGl1Y3Zfc29ja19jb25uZWN0LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjI2OlxcdC5saXN0ZW5cXHRcXHQ9IGl1Y3Zfc29ja19saXN0ZW4sXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjc6XFx0LmFjY2VwdFxcdFxcdD0gaXVjdl9zb2NrX2FjY2VwdCxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyODpcXHQuZ2V0bmFtZVxcdD0gaXVjdl9zb2NrX2dldG5hbWUsXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjk6XFx0LnNlbmRtc2dcXHQ9IGl1Y3Zfc29ja19zZW5kbXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjMwOlxcdC5yZWN2bXNnXFx0PSBpdWN2X3NvY2tfcmVjdm1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIzMTpcXHQucG9sbFxcdFxcdD0gaXVjdl9zb2NrX3BvbGwsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMzItXFx0LmlvY3RsXFx0XFx0PSBzb2NrX25vX2lvY3RsLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMzQtXFx0LnNvY2tldHBhaXJcXHQ9IHNvY2tfbm9fc29ja2V0cGFpcixcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIzNTpcXHQuc2h1dGRvd25cXHQ9IGl1Y3Zfc29ja19zaHV0ZG93bixcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIzNjpcXHQuc2V0c29ja29wdFxcdD0gaXVjdl9zb2NrX3NldHNvY2tvcHQsXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMzc6XFx0LmdldHNvY2tvcHRfaXRlciA9IGl1Y3Zfc29ja19nZXRzb2Nrb3B0LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjM4LX07XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMzktXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNDA6c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjQxLVxcdFxcdFxcdCAgICBpbnQga2VybilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjUzLVxcdFxcdC8qIGN1cnJlbnRseSwgcHJvdG8gb3BzIGNhbiBoYW5kbGUgYm90aCBzayB0eXBlcyAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjU0OlxcdFxcdHNvY2stXFx1MDAzZW9wcyA9IFxcdTAwMjZpdWN2X3NvY2tfb3BzO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjU1LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNTktXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNjA6XFx0c2sgPSBpdWN2X3NvY2tfYWxsb2Moc29jaywgcHJvdG9jb2wsIEdGUF9LRVJORUwsIGtlcm4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjYxLVxcdGlmICghc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI2My1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI2NDpcXHRpdWN2X3NvY2tfaW5pdChzaywgTlVMTCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNjUtXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI2OC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI2OTpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgaXVjdl9zb2NrX2ZhbWlseV9vcHMgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNzAtXFx0LmZhbWlseVxcdD0gQUZfSVVDVixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI3MS1cXHQub3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjcyOlxcdC5jcmVhdGVcXHQ9IGl1Y3Zfc29ja19jcmVhdGUsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNzMtfTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjgwPXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwMC1cXHRcXHRnb3RvIG91dDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMwMTpcXHRlcnIgPSBzb2NrX3JlZ2lzdGVyKFxcdTAwMjZpdWN2X3NvY2tfZmFtaWx5X29wcyk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDItXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzg6NDguOTU1MjkwMjExWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMjEwMTMyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGZvcmNpbmcgdGhlIGBhZl9pdWN2YCBzb2NrZXQgZmFtaWx5IHRvIGJlIGJ1aWx0LCBldmVuIGlmIHRoZSBwcmltYXJ5IGBDT05GSUdfSVVDVmAgb3B0aW9uIGlzIGRpc2FibGVkLiBUaGUgY29yZSBpZGVhIGlzIHRoYXQgYXMgbG9uZyBhcyBgQ09ORklHX0FGSVVDVmAgaXMgZW5hYmxlZCwgdGhlIGNvZGUgd2lsbCBiZSBjb21waWxlZC4gR2l2ZW4gdGhpcyBjaGFuZ2UsIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGlzIGFic29sdXRlbHkgKndvcnRoKiBmdXp6aW5nLiBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkZvciB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIEkgbmVlZCB0byBleHBsaWNpdGx5IHN0YXRlIHdoYXQgZmxhZ3MgYXJlIG5lZWRlZCB0byBjb21waWxlIGFuZCB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlLiAgYEFGSVVDVmAgc2VlbXMgYXBwcm9wcmlhdGU7IGl0J3Mgc3BlY2lmaWMgdG8gUzM5MCwgYnV0IGl0ICppcyogdGhlIGtleSBjb25maWcgdGhhdCBlbmFibGVzIHRoZSBjb2RlIHBhdGggdGhlIHBhdGNoIGlzIG9wZW5pbmcgdXAuIEkgY29uZmlybSB0aGF0IGl0IG5lZWRzIHRvIGJlIGxpc3RlZC5cblxuTm93LCBsZXQgbWUgcXVpY2tseSByZS1leGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYgdG8gZW5zdXJlIG15IHVuZGVyc3RhbmRpbmcgaXMgc29saWQuIFRoZSBgbmV0L01ha2VmaWxlYCBpcyB0aGUgdGFyZ2V0LiBUaGUgY2hhbmdlIG1ha2VzIHRoZSBgaXVjdi9gIGRpcmVjdG9yeSAqYWx3YXlzKiBidWlsdCAoYG9iai15ICs9IGl1Y3YvYCkgaW5zdGVhZCBvZiBjb25kaXRpb25hbGx5IChgb2JqLSQoQ09ORklHX0lVQ1YpICs9IGl1Y3YvYCkuIFRoZSBwYXRjaCBkZXNjcmlwdGlvbiBtYWtlcyB0aGF0IHZlcnkgY2xlYXIgYXMgd2VsbC4gVGhpcyBleHBvc2VzIHRoZSBIaXBlclNvY2tldHMgdHJhbnNwb3J0IGZvciBBRl9JVUNWIHNvY2tldHMsIGV2ZW4gd2hlbiB0aGUgYnJvYWRlciBgQ09ORklHX0lVQ1ZgIGlzIGRpc2FibGVkLlxuXG5UaGVyZWZvcmUsIGZvciB0aGUgYEZvY3VzU3ltYm9sc2AsIEknbSBnb2luZyB0byBpbmNsdWRlIHRoZSBrZXkgc29ja2V0IGZ1bmN0aW9uczogYGl1Y3Zfc29ja19jcmVhdGVgLCBgaXVjdl9zb2NrX2JpbmRgLCBgaXVjdl9zb2NrX2Nvbm5lY3RgLCBgaXVjdl9zb2NrX3NlbmRtc2dgLCBgaXVjdl9zb2NrX3JlY3Ztc2dgLCBhbmQgdGhlIEhpcGVyU29ja2V0cy1zcGVjaWZpYyByZWNlaXZlIGFuZCBzZW5kIGZ1bmN0aW9uczogYGFmaXVjdl9oc19yY3ZgIGFuZCBgYWZpdWN2X2hzX3NlbmRgLiBUaGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgbmV3IGNvZGUgcGF0aCB0aGF0J3MgYmVpbmcgZW5hYmxlZC5cblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTI2LCJPdXRwdXRUb2tlbnMiOjIwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjozODo1Ny4wNzYzMDY2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjUzMzUwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXVjdl9zb2NrX2NyZWF0ZVwiLFxuICAgIFwiaXVjdl9zb2NrX2JpbmRcIixcbiAgICBcIml1Y3Zfc29ja19jb25uZWN0XCIsXG4gICAgXCJpdWN2X3NvY2tfc2VuZG1zZ1wiLFxuICAgIFwiaXVjdl9zb2NrX3JlY3Ztc2dcIixcbiAgICBcImFmaXVjdl9oc19yY3ZcIixcbiAgICBcImFmaXVjdl9oc19zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0L01ha2VmaWxlIHRvIGFsd2F5cyBkZXNjZW5kIGludG8gdGhlIG5ldC9pdWN2LyBkaXJlY3RvcnksIGFsbG93aW5nIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHkgKGFmX2l1Y3YubykgdG8gYmUgYnVpbHQgZXZlbiB3aGVuIENPTkZJR19JVUNWIGlzIGRpc2FibGVkIGJ1dCBDT05GSUdfQUZJVUNWIGlzIGVuYWJsZWQuIFRoaXMgZXhwb3NlcyB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5ICh1c2luZyBIaXBlclNvY2tldHMgdHJhbnNwb3J0KSB0byB1c2Vyc3BhY2UgaW4gY29uZmlndXJhdGlvbnMgd2hlcmUgaXQgd2FzIHByZXZpb3VzbHkgdW5yZWFjaGFibGUgZHVlIHRvIGEgYnVpbGQgZGVwZW5kZW5jeSBidWcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXVjdl9zb2NrX2NyZWF0ZVwiLFxuICAgIFwiaXVjdl9zb2NrX2JpbmRcIixcbiAgICBcIml1Y3Zfc29ja19jb25uZWN0XCIsXG4gICAgXCJpdWN2X3NvY2tfc2VuZG1zZ1wiLFxuICAgIFwiaXVjdl9zb2NrX3JlY3Ztc2dcIixcbiAgICBcImFmaXVjdl9oc19yY3ZcIixcbiAgICBcImFmaXVjdl9oc19zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0L01ha2VmaWxlIHRvIGFsd2F5cyBkZXNjZW5kIGludG8gdGhlIG5ldC9pdWN2LyBkaXJlY3RvcnksIGFsbG93aW5nIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHkgKGFmX2l1Y3YubykgdG8gYmUgYnVpbHQgZXZlbiB3aGVuIENPTkZJR19JVUNWIGlzIGRpc2FibGVkIGJ1dCBDT05GSUdfQUZJVUNWIGlzIGVuYWJsZWQuIFRoaXMgZXhwb3NlcyB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5ICh1c2luZyBIaXBlclNvY2tldHMgdHJhbnNwb3J0KSB0byB1c2Vyc3BhY2UgaW4gY29uZmlndXJhdGlvbnMgd2hlcmUgaXQgd2FzIHByZXZpb3VzbHkgdW5yZWFjaGFibGUgZHVlIHRvIGEgYnVpbGQgZGVwZW5kZW5jeSBidWcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowb9nhz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-25 06:27:25 +0000 UTC FinishedAt: 2026-06-25 06:38:59 +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": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "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": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "ef2725d9-7028-4a7e-8258-3ed856e7cd6b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "iucv_sock_create", "iucv_sock_bind", "iucv_sock_connect", "iucv_sock_sendmsg", "iucv_sock_recvmsg", "afiucv_hs_rcv", "afiucv_hs_send" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2l1Y3Zfc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX2JpbmQmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7YWZpdWN2X2hzX3JjdiYjMzQ7LAogICAgJiMzNDthZml1Y3ZfaHNfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXQvTWFrZWZpbGUgdG8gYWx3YXlzIGRlc2NlbmQgaW50byB0aGUgbmV0L2l1Y3YvIGRpcmVjdG9yeSwgYWxsb3dpbmcgdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSAoYWZfaXVjdi5vKSB0byBiZSBidWlsdCBldmVuIHdoZW4gQ09ORklHX0lVQ1YgaXMgZGlzYWJsZWQgYnV0IENPTkZJR19BRklVQ1YgaXMgZW5hYmxlZC4gVGhpcyBleHBvc2VzIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHkgKHVzaW5nIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpIHRvIHVzZXJzcGFjZSBpbiBjb25maWd1cmF0aW9ucyB3aGVyZSBpdCB3YXMgcHJldmlvdXNseSB1bnJlYWNoYWJsZSBkdWUgdG8gYSBidWlsZCBkZXBlbmRlbmN5IGJ1Zy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMyMWE4MTQ4YzBmODQyZDhjZjIxNTdjZjAzMDM4NGZjOGM1ODlmMmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAwNjozNzoyMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvTWFrZWZpbGUgYi9uZXQvTWFrZWZpbGVcbmluZGV4IDViMmRkN2YwN2E4NWU5Li5jMGRhOTQ2YjI4MWUxZCAxMDA2NDRcbi0tLSBhL25ldC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L01ha2VmaWxlXG5AQCAtNDUsNyAmIzQzOzQ1LDcgQEAgb2JqLSQoQ09ORklHX1dJUkVMRVNTKVx0XHQmIzQzOz0gd2lyZWxlc3MvXG4gb2JqLSQoQ09ORklHX01BQzgwMjExKVx0XHQmIzQzOz0gbWFjODAyMTEvXG4gb2JqLSQoQ09ORklHX1RJUEMpXHRcdCYjNDM7PSB0aXBjL1xuIG9iai0kKENPTkZJR19ORVRMQUJFTClcdFx0JiM0Mzs9IG5ldGxhYmVsL1xuLW9iai0kKENPTkZJR19JVUNWKVx0XHQmIzQzOz0gaXVjdi9cbiYjNDM7b2JqLXlcdFx0XHRcdCYjNDM7PSBpdWN2L1xuIG9iai0kKENPTkZJR19TTUMpXHRcdCYjNDM7PSBzbWMvXG4gb2JqLSQoQ09ORklHX1JGS0lMTClcdFx0JiM0Mzs9IHJma2lsbC9cbiBvYmotJChDT05GSUdfTkVUXzlQKVx0XHQmIzQzOz0gOXAvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZJVUNWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXVjdl9zb2NrX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfYmluZCYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDthZml1Y3ZfaHNfcmN2JiMzNDssCiAgICAmIzM0O2FmaXVjdl9oc19zZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldC9NYWtlZmlsZSB0byBhbHdheXMgZGVzY2VuZCBpbnRvIHRoZSBuZXQvaXVjdi8gZGlyZWN0b3J5LCBhbGxvd2luZyB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5IChhZl9pdWN2Lm8pIHRvIGJlIGJ1aWx0IGV2ZW4gd2hlbiBDT05GSUdfSVVDViBpcyBkaXNhYmxlZCBidXQgQ09ORklHX0FGSVVDViBpcyBlbmFibGVkLiBUaGlzIGV4cG9zZXMgdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSAodXNpbmcgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCkgdG8gdXNlcnNwYWNlIGluIGNvbmZpZ3VyYXRpb25zIHdoZXJlIGl0IHdhcyBwcmV2aW91c2x5IHVucmVhY2hhYmxlIGR1ZSB0byBhIGJ1aWxkIGRlcGVuZGVuY3kgYnVnLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMjFhODE0OGMwZjg0MmQ4Y2YyMTU3Y2YwMzAzODRmYzhjNTg5ZjJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdW4gMjUgMDY6Mzc6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvTWFrZWZpbGUgYi9uZXQvTWFrZWZpbGUKaW5kZXggNWIyZGQ3ZjA3YTg1ZTkuLmMwZGE5NDZiMjgxZTFkIDEwMDY0NAotLS0gYS9uZXQvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L01ha2VmaWxlCkBAIC00NSw3ICYjNDM7NDUsNyBAQCBvYmotJChDT05GSUdfV0lSRUxFU1MpCQkmIzQzOz0gd2lyZWxlc3MvCiBvYmotJChDT05GSUdfTUFDODAyMTEpCQkmIzQzOz0gbWFjODAyMTEvCiBvYmotJChDT05GSUdfVElQQykJCSYjNDM7PSB0aXBjLwogb2JqLSQoQ09ORklHX05FVExBQkVMKQkJJiM0Mzs9IG5ldGxhYmVsLwotb2JqLSQoQ09ORklHX0lVQ1YpCQkmIzQzOz0gaXVjdi8KJiM0MztvYmoteQkJCQkmIzQzOz0gaXVjdi8KIG9iai0kKENPTkZJR19TTUMpCQkmIzQzOz0gc21jLwogb2JqLSQoQ09ORklHX1JGS0lMTCkJCSYjNDM7PSByZmtpbGwvCiBvYmotJChDT05GSUdfTkVUXzlQKQkJJiM0Mzs9IDlwLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJVUNWIE5ldHdvcmsgRHJpdmVyIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgbmV0d29yayBjb2RlLCBhbmQgaXQmIzM5O3MgbWFraW5nIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGBuZXQvTWFrZWZpbGVgLiBJIHNlZSB0aGV5JiMzOTtyZSBzd2l0Y2hpbmcgYG9iai0kKENPTkZJR19JVUNWKSAmIzQzOz0gaXVjdi9gIHRvIGBvYmoteSAmIzQzOz0gaXVjdi9gLiBSaWdodCwgdGhhdCYjMzk7cyBhIGJpZyBkZWFsLiBUaGF0IG1lYW5zIHRoZSBgbmV0L2l1Y3YvYCBkaXJlY3RvcnkgaXMgZ29pbmcgdG8gYmUgKmFsd2F5cyogY29tcGlsZWQgbm93LCByZWdhcmRsZXNzIG9mIHRoZSBgQ09ORklHX0lVQ1ZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOb3csIHdoeSB3b3VsZCB0aGV5IGRvIHRoYXQ/IFRoYXQmIzM5O3MgdGhlIHF1ZXN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIG1ha2luZyB0aGlzIGRyaXZlciBhIGJ1aWx0LWluIG1vZHVsZS4gSSBzdXNwZWN0IHRoZXJlIGlzIHNvbWV0aGluZyBpbiB0aGUgYG5ldC9pdWN2L01ha2VmaWxlYCB0aGF0IGlzIHdvcnRoIGxvb2tpbmcgYXQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBJVUNWXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19JVUNWKVx0JiM0Mzs9IGl1Y3Yub1xuICAgNzpcdG9iai0kKENPTkZJR19BRklVQ1YpXHQmIzQzOz0gYWZfaXVjdi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5ldC9pdWN2IEJ1aWxkIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvaXVjdi9NYWtlZmlsZWAsIGFuZCBpdCYjMzk7cyBzdGlsbCByZWx5aW5nIG9uIGBDT05GSUdfSVVDVmAgYW5kIGBDT05GSUdfQUZJVUNWYC4gVGhhdCBmZWVscy4uLm5vdCBpZGVhbC4gSGFuZyBvbiwgdGhlIGBuZXQvTWFrZWZpbGVgIGl0c2VsZiBoYXMgYG9iai15ICYjNDM7PSBpdWN2L2AsIHdoaWNoIG1lYW5zIHRoZSBidWlsZCAqYWx3YXlzKiBkZXNjZW5kcyBpbnRvIGBuZXQvaXVjdi9gLCBpcnJlc3BlY3RpdmUgb2Ygd2hldGhlciBgQ09ORklHX0lVQ1ZgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgZmluZSBmb3IgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCgpCdXQgdGhlIHJlYWwga2lja2VyIGlzIHRoYXQgd2l0aGluIGBuZXQvaXVjdi9NYWtlZmlsZWAsIHRoZSBhY3R1YWwgb2JqZWN0IGZpbGVzLCBgaXVjdi5vYCBhbmQgYGFmX2l1Y3Yub2AsIGFyZSAqc3RpbGwqIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgYmFzZWQgb24gYENPTkZJR19JVUNWYCBhbmQgYENPTkZJR19BRklVQ1ZgLiBUaGF0IHNlZW1zIHJlZHVuZGFudCwgZG9lc24mIzM5O3QgaXQ/IElmIHRoZSBkaXJlY3RvcnkgaXMgYmVpbmcgZW50ZXJlZCByZWdhcmRsZXNzLCB3aHkgdGhlIGV4dHJhIGNvbmRpdGlvbmFsIGNoZWNrcyB3aXRoaW4/CgpOb3csIEkmIzM5O20gdHJ5aW5nIHRvIHJlbWVtYmVyIHdoeSB0aGlzIHBhdGNoIHdhcyBtYWRlIGluIHRoZSBmaXJzdCBwbGFjZS4gV2hhdCB3YXMgdGhlIHJhdGlvbmFsZT8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb250ZXh0IGhlcmUuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgZmlsZXMgaW4gYG5ldC9pdWN2L01ha2VmaWxlYC4gSnVzdCB0aG9zZSB0d28gb2JqZWN0IGZpbGUgZGVmaW5pdGlvbnMsIG5vdGhpbmcgZWxzZS4gU28gaWYgYENPTkZJR19JVUNWYCBpcyAqbm90KiBzZXQsIHRoZSBidWlsZCBzdGlsbCB2aXNpdHMgYG5ldC9pdWN2L2AsIGJ1dCBiZWNhdXNlIG9mIHRoZSBjb25kaXRpb25hbHMsIGl0IHdvbiYjMzk7dCBhY3R1YWxseSBidWlsZCBhbnl0aGluZy4gSW50ZXJlc3RpbmcuCgpBbmQgaWYgYENPTkZJR19BRklVQ1ZgIGlzIHNldCwgYnV0IGBDT05GSUdfSVVDVmAgaXMgKm5vdCosIHdlJiMzOTtsbCBzdGlsbCBidWlsZCBgYWZfaXVjdi5vYC4gQWxyaWdodCwgdGltZSB0byBjaGVjayB0aGUgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2l1Y3YvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgSVVDVlxuICAgMzpcdFx0ZGVwZW5kcyBvbiBTMzkwXG4gICA0Olx0XHRkZWZfdHJpc3RhdGUgeSBpZiBTMzkwXG4gICA1Olx0XHRwcm9tcHQgXCYjMzQ7SVVDViBzdXBwb3J0IChTMzkwIC0gei9WTSBvbmx5KVwmIzM0O1xuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGludGVyLXVzZXIgY29tbXVuaWNhdGlvblxuICAgODpcdFx0ICB1bmRlciBWTSBvciBWSUYuIElmIHlvdSBydW4gb24gei9WTSwgc2F5IFwmIzM0O1lcJiMzNDsgdG8gZW5hYmxlIGEgZmFzdFxuICAgOTpcdFx0ICBjb21tdW5pY2F0aW9uIGxpbmsgYmV0d2VlbiBWTSBndWVzdHMuXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIEFGSVVDVlxuICAxMjpcdFx0ZGVwZW5kcyBvbiBTMzkwXG4gIDEzOlx0XHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcbiAgMTQ6XHRcdHByb21wdCBcJiMzNDtBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydClcJiMzNDtcbiAgMTU6XHRcdGhlbHBcbiAgMTY6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBBRl9JVUNWIHNvY2tldCBhcHBsaWNhdGlvbnNcbiAgMTc6XHRcdCAgYmFzZWQgb24gei9WTSBpbnRlci11c2VyIGNvbW11bmljYXRpb24gdmVoaWNsZSBvciBiYXNlZCBvblxuICAxODpcdFx0ICBIaXBlclNvY2tldHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBhIE1ha2VmaWxlIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIGFib3V0IGBBRklVQ1ZgLiBSaWdodCwgYEFGSVVDVmAgZGVwZW5kcyBvbiBgUzM5MGAgYW5kLCBieSBkZWZhdWx0LCB0YWtlcyBgbWAgaWYgZWl0aGVyIGBRRVRIX0wzYCBvciBgSVVDVmAgYXJlIGVuYWJsZWQuIENydWNpYWxseSwgaXQgZG9lc24mIzM5O3QgKnN0cmljdGx5KiBkZXBlbmQgb24gYElVQ1ZgLiBCZWZvcmUgdGhpcywgdGhlIGBuZXQvTWFrZWZpbGVgIGhhZCB0aGlzIGRlcGVuZGVuY3k6IGBvYmotJChDT05GSUdfSVVDVikgJiM0Mzs9IGl1Y3YvYC4gVGhpcyBtZWFudCBpZiBgQ09ORklHX0lVQ1ZgIHdhc24mIzM5O3Qgc2V0LCB0aGUgYG5ldC9pdWN2L2AgZGlyZWN0b3J5IHdhc24mIzM5O3QgZXZlbiBsb29rZWQgYXQsIGFuZCB0aHVzIGBhZl9pdWN2Lm9gIHdvdWxkbiYjMzk7dCBiZSBidWlsdCwgZXZlbiBpZiBgQ09ORklHX0FGSVVDVmAgKndhcyogc2V0LiBUaGlzIHBhdGNoIHNlZW1zIHRvIGZpeCB0aGF0LCBhbHdheXMgdmlzaXRpbmcgYG5ldC9pdWN2L2Agc28gYGFmX2l1Y3Yub2AgY2FuIGJlIGJ1aWx0IHdoZW4gYENPTkZJR19BRklVQ1ZgIGlzIGVuYWJsZWQgZXZlbiBpZiBgQ09ORklHX0lVQ1ZgIGlzIG5vdC4KClNpbmNlIGl0JiMzOTtzIGp1c3QgYSBNYWtlZmlsZSBjaGFuZ2UsIEkgaGF2ZSB0byBhc2sgbXlzZWxmOiBkb2VzIHRoaXMgY2hhbmdlIGhvdyB0aGluZ3MgZXhlY3V0ZSBhdCBhbGw/IEl0JiMzOTtzIHJlYWxseSBqdXN0IGVuYWJsaW5nIHRoZSBidWlsZCBvZiBgYWZfaXVjdmAgd2l0aG91dCB0aGUgbmVlZCBmb3IgYElVQ1ZgLiBUaGlua2luZyBhYm91dCB0aGlzIGZ1cnRoZXIsIGBBRklVQ1ZgIGRlcGVuZHMgb24gYFMzOTBgLiBBIHRob3VnaHQ6IGNhbiB3ZSBmdXp6IHRoaXM/IGBBRklVQ1ZgIGlzIGFuIGFkZHJlc3MgZmFtaWx5IChgQUZfSVVDVmApLCBhbmQgaWYgd2Ugd2FudCB0byBmdXp6IHRoaXMsIHRoZSBmaXJzdCBzdGVwIGlzIHRvIGVuYWJsZSBgQUZJVUNWYC4gSG93ZXZlciwgYEFGSVVDVmAgaXMgKnNwZWNpZmljKiB0byBgUzM5MGAuIFNvIG5vdyBJJiMzOTttIHRoaW5raW5nLCBjYW4gd2UgZnV6eiBgUzM5MGAtc3BlY2lmaWMgY29kZT8KClN5emthbGxlciBkb2VzbiYjMzk7dCBmdXp6IGBTMzkwYCBieSBkZWZhdWx0LCBkb2VzIGl0PyBNYXliZSB3ZSBjYW4gZmlndXJlIG91dCBhIHdheSB0byBtYWtlIGl0LiBCdXQsIHdhaXQuLi4gc2luY2UgdGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyB0aGUgTWFrZWZpbGUsIGl0IGRvZXNuJiMzOTt0IGNoYW5nZSB0aGUgQyBjb2RlIGl0c2VsZi4gSG93ZXZlciwgaXQgKmRvZXMqIGVuYWJsZSBidWlsZGluZyBhIG1vZHVsZSwgdGhhdCwgdW5kZXIgc3BlY2lmaWMgY29uZmlncywgd291bGQgaGF2ZSBiZWVuIHVucmVhY2hhYmxlLiBTbyB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gWWVzLCBpdCBlbmFibGVzIGBBRl9JVUNWYCBzb2NrZXRzIHdpdGhvdXQgYElVQ1ZgLiBOb3csIHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBsb29rIGF0IGBhZl9pdWN2LmNgIGFuZCBzZWUgaWYgdGhlcmUgaXMgYW55IGBBRl9JVUNWYCBzb2NrZXQgcmVnaXN0cmF0aW9uIHRoYXQgaXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZfaXVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JVUNWKVx0JiM0Mzs9IGl1Y3Yub1xubmV0L2l1Y3YvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfQUZJVUNWKVx0JiM0Mzs9IGFmX2l1Y3Yub1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMi1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzojZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2FmX2l1Y3Y6IFwmIzM0OyBmbXRcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNC1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzY6I2luY2x1ZGUgXHUwMDNjbmV0L2l1Y3YvYWZfaXVjdi5oXHUwMDNlXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzctXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ4PXN0YXRpYyBzdHJ1Y3QgaXVjdl9pbnRlcmZhY2UgKnByX2l1Y3Y7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk6c3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTUwLVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xOTc9c3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjAwLVx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc29jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjAxOlx0c3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyICpwaHNfaGRyO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIwMi1cdGludCBlcnIsIGNvbmZpcm1fcmVjdiA9IDA7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTM1NT1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9jdHJsKHN0cnVjdCBzb2NrICpzaywgdTggZmxhZ3MpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTM2Mi1cbm5ldC9pdWN2L2FmX2l1Y3YuYzozNjM6XHRibGVuID0gc2l6ZW9mKHN0cnVjdCBhZl9pdWN2X3RyYW5zX2hkcikgJiM0Mztcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNjQtXHQgICAgICAgTExfUkVTRVJWRURfU1BBQ0UoaXVjdi1cdTAwM2Voc19kZXYpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02NzM9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTEtXHR9XG5uZXQvaXVjdi9hZl9pdWN2LmM6NjkyOlx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX2Nvbm5lY3QoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZhZl9pdWN2X2hhbmRsZXIsXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjkzLVx0XHRcdFx0ICAgIHNhLVx1MDAzZXNpdWN2X3VzZXJfaWQsIE5VTEwsIHVzZXJfZGF0YSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTAyPXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy05ODUtXHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjk4NjpcdFx0aGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSAmIzQzO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTk4Ny1cdFx0XHQgICBMTF9SRVNFUlZFRF9TUEFDRShpdWN2LVx1MDAzZWhzX2Rldik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE1Mzg9c3RhdGljIGludCBpdWN2X3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNTcxLVx0XHR2YWwgPSAoaXVjdi1cdTAwM2Voc19kZXYpID8gaXVjdi1cdTAwM2Voc19kZXYtXHUwMDNlbXR1IC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNTcyOlx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBhZl9pdWN2X3RyYW5zX2hkcikgLSBFVEhfSExFTiA6XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTU3My1cdFx0XHRcdDB4N2ZmZmZmZmY7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE1OTM9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYwNC1cdEVCQ0FTQyhzcmNfbmFtZSwgOCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTYwNTpcdC8qIEZpbmQgb3V0IGlmIHRoaXMgcGF0aCBiZWxvbmdzIHRvIGFmX2l1Y3YuICovXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYwNi1cdHJlYWRfbG9jayhcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzEtXHRwYXRoLVx1MDAzZW1zZ2xpbSA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY3MjpcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9hY2NlcHQocGF0aCwgXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCBudXNlcl9kYXRhLCBuc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzMtXHRpZiAoZXJyKSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4MDU9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja19zaHV0ZG93bihzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCB1OCBpcHVzZXJbMTZdKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODE2LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4MTc6c3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyID0ge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE4MTgtXHQucGF0aF9wZW5kaW5nXHRcdD0gaXVjdl9jYWxsYmFja19jb25ucmVxLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xODI3PXN0YXRpYyB2b2lkIGFmaXVjdl9zd2FwX3NyY19kZXN0KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTgyOC17XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTgyOTpcdHN0cnVjdCBhZl9pdWN2X3RyYW5zX2hkciAqdHJhbnNfaGRyID0gaXVjdl90cmFuc19oZHIoc2tiKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODMwLVx0Y2hhciB0bXBJRFs4XTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTg1MD1zdGF0aWMgaW50IGFmaXVjdl9oc19jYWxsYmFja19zeW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4NTEte1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE4NTI6XHRzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIgKnRyYW5zX2hkciA9IGl1Y3ZfdHJhbnNfaGRyKHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg1My1cdHN0cnVjdCBzb2NrICpuc2s7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE5OTc9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDE2LVx0Lyogd3JpdGUgc3R1ZmYgZnJvbSBpdWN2X21zZyB0byBza2IgY2IgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDE3Olx0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjAxOC1cdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIwNDM9c3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNDctXHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2O1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIwNDg6XHRzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIgKnRyYW5zX2hkcjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDQ5LVx0aW50IGVyciA9IE5FVF9SWF9TVUNDRVNTO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTIzLVx0XHRlcnIgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfd2luKHNrLCBza2IpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMjQ6XHRcdGlmIChza2ItXHUwMDNlbGVuID09IHNpemVvZihzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIpKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEyNS1cdFx0XHRjb25zdW1lX3NrYihza2IpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjgwPXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDUtXHRpZiAocHJfaXVjdikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDY6XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlaXVjdl9yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDctXHRcdGlmIChlcnIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTktXHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzIwOlx0XHRwcl9pdWN2LVx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMjEtb3V0X3NvY2s6XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMjk9c3RhdGljIHZvaWQgX19leGl0IGFmaXVjdl9leGl0KHZvaWQpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMzEtXHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzMyOlx0XHRwcl9pdWN2LVx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMzMtXG4tLVxubmV0L2l1Y3YvaXVjdi5jLTEyLSAqXHRGcml0eiBFbGZlcnQgKGVsZmVydEBkZS5pYm0uY29tLCBmZWxmZXJ0QG1pbGxlbnV4LmNvbSlcbm5ldC9pdWN2L2l1Y3YuYzoxMzogKiAgICBSZXdyaXR0ZW4gZm9yIGFmX2l1Y3Y6XG5uZXQvaXVjdi9pdWN2LmMtMTQtICpcdE1hcnRpbiBTY2h3aWRlZnNreSBcdTAwM2NzY2h3aWRlZnNreUBkZS5pYm0uY29tXHUwMDNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBhbmQgSW1wYWN0IG9mIGFuIEFGX0lVQ1YgQnVpbGQgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGBhZl9pdWN2YCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgdGhlIGFkZHJlc3MgZmFtaWx5IGZvciBJVUNWIGNvbW11bmljYXRpb24uIFRoZSBwYXRjaCBpcyBzaW1wbGUsIGp1c3QgdHdlYWtpbmcgdGhlIGBuZXQvTWFrZWZpbGVgIHRvIGVuc3VyZSBgYWZfaXVjdi5vYCBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19BRklVQ1ZgIGlzIHNldCBidXQgYENPTkZJR19JVUNWYCBpcyAqbm90Ki4gTXkgZmlyc3QgdGhvdWdodCBpczogSXMgdGhpcyBldmVuIHJlbGV2YW50IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlIHZlcnkgZW52aXJvbm1lbnRzIG15IGZ1enppbmcgdGFyZ2V0cyBhcmUgc3VwcG9zZWQgdG8gY292ZXI/CgpgQ09ORklHX0FGSVVDVmAgZGVwZW5kcyBvbiBgUzM5MGAsIHdoaWNoIHRocm93cyB1cCBhIGZsYWcuIFN5emthbGxlciwgbXkgZ28tdG8gZnV6emluZyB0b29sLCBydW5zIG9uIHg4Nl82NCwgYXJtNjQsIGFuZCBvdGhlcnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSB0YWtpbmcgc3l6a2FsbGVyJiMzOTtzIFMzOTB4IHN1cHBvcnQgaW50byBhY2NvdW50LiAqRG9lcyogaXQgcnVuIG9uIFMzOTA/IFllcywgaXQgZG9lcy4gU28sIHRvIHRlc3QgdGhpcyBwYXRjaCBwcm9wZXJseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfQUZJVUNWYCBpcyBlbmFibGVkIGFuZCB0aGF0IGBDT05GSUdfSVVDVmAgaXMgZWl0aGVyIGRpc2FibGVkIG9yIGVuYWJsZWQsIGJ1dCB0aGUgcGF0Y2ggZml4ZXMgdGhlIHNjZW5hcmlvIHdoZXJlIElVQ1YgaXMgZGlzYWJsZWQuIFNpbmNlIGBDT05GSUdfQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYCwgY2FuIEkgZXZlbiBjb21waWxlIHRoaXMgb24geDg2XzY0PyBOby4KClRoZSBwcm9tcHQsIGhvd2V2ZXIsIHNwZWNpZmljYWxseSBjYWxscyBvdXQgaW1wb3NzaWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEFuZCBRRU1VICpkb2VzKiBzdXBwb3J0IHMzOTB4IGVtdWxhdGlvbiwgc28gdGhlIGNvZGUgcGF0aCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlLiBCdXQgaXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBvciBqdXN0IGEgYnVpbGQgZml4PyBUaGUgY2hhbmdlIGl0c2VsZiBqdXN0IG1ha2VzIHRoZSBgYWZfaXVjdmAgbW9kdWxlIGJ1aWxkYWJsZSB3aGVuIGBDT05GSUdfSVVDVmAgaXMgZGlzYWJsZWQuIFByZXZpb3VzbHksIGlmIGBDT05GSUdfSVVDVmAgd2FzIG9mZiwgYGFmX2l1Y3ZgIHdvdWxkbiYjMzk7dCBiZSBidWlsdC4gTm93IGl0ICp3aWxsKiBiZS4KClNvLCBpdCYjMzk7cyBub3QganVzdCBhIHR3ZWFrOyBpdCAqZW5hYmxlcyogYSBtb2R1bGUsIGBhZl9pdWN2YCwgdG8gYmUgYnVpbHQgYW5kLCBjcml0aWNhbGx5LCBsb2FkZWQuIFRoYXQgbWVhbnMgc29ja2V0cyBvZiB0aGUgYEFGX0lVQ1ZgIGZhbWlseSB3aWxsIGJlY29tZSBhdmFpbGFibGUuIE5vdywgaXMgdGhpcyAqd29ydGgqIGZ1enppbmc/IEFic29sdXRlbHkhIEVuYWJsaW5nIGEgbmV3IGFkZHJlc3MgZmFtaWx5IGZvciBwb3RlbnRpYWwgZnV6emVyIGludGVyYWN0aW9uIGlzIHZhbHVhYmxlLgoKSG93ZXZlciwgYSBuYWdnaW5nIHRob3VnaHQ6IElmIGBDT05GSUdfSVVDVmAgaXMgKmRpc2FibGVkKiwgYHByX2l1Y3ZgICh0aGUgSVVDViBpbnRlcmZhY2UsIHByZXN1bWFibHkgYSBmdW5jdGlvbiBwb2ludGVyKSB3aWxsIGJlIE5VTEwuIExldCYjMzk7cyBkaWcgaW50byBgYWZfaXVjdi5jYCB0byBzZWUgaG93IGl0IGhhbmRsZXMgYSBOVUxMIGBwcl9pdWN2YCBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHBvdGVudGlhbCBpc3N1ZSBub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBpZiBhIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcgSVVDViBmdW5jdGlvbnMgaXMgbWFkZSB3aGVuIHRoZXkgYXJlIG5vdCBpbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJfaXVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9NDI9c3RhdGljIHN0cnVjdCBwcm90byBpdWN2X3Byb3RvID0ge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy00Ny1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo0ODpzdGF0aWMgc3RydWN0IGl1Y3ZfaW50ZXJmYWNlICpwcl9pdWN2O1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5LXN0YXRpYyBzdHJ1Y3QgaXVjdl9oYW5kbGVyIGFmX2l1Y3ZfaGFuZGxlcjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzM1PXN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ2LVx0XHRcdEFTQ0VCQyh1c2VyX2RhdGEsIHNpemVvZih1c2VyX2RhdGEpKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNDc6XHRcdFx0cHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ4LVx0XHR9IGVsc2Vcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNDk6XHRcdFx0cHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIE5VTEwpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTM1MC1cdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ1Mj1zdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy00NzgtXHRtZW1zZXQoXHUwMDI2aXVjdi1cdTAwM2Vpbml0LCAwLCBzaXplb2YoaXVjdi1cdTAwM2Vpbml0KSk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDc5Olx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDgwLVx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NTY4PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTU5OS1cdC8qIEJpbmQgdGhlIHNvY2tldCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjYwMDpcdGlmIChwcl9pdWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jLTYwMS1cdFx0aWYgKCFtZW1jbXAoc2EtXHUwMDNlc2l1Y3ZfdXNlcl9pZCwgaXVjdl91c2VyaWQsIDgpKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02Mjgtdm1fYmluZDpcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2Mjk6XHRpZiAocHJfaXVjdikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTYzMC1cdFx0LyogdXNlIGxvY2FsIHVzZXJpZCBmb3IgYmFja3dhcmQgY29tcGF0ICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTY1MT1zdGF0aWMgaW50IGl1Y3Zfc29ja19hdXRvYmluZChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY1NS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NTY6XHRpZiAodW5saWtlbHkoIXByX2l1Y3YpKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY1Ny1cdFx0cmV0dXJuIC1FUFJPVE87XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTY3Mz1zdGF0aWMgaW50IGFmaXVjdl9wYXRoX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY5MS1cdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo2OTI6XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfY29ubmVjdChpdWN2LVx1MDAzZXBhdGgsIFx1MDAyNmFmX2l1Y3ZfaGFuZGxlcixcbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTMtXHRcdFx0XHQgICAgc2EtXHUwMDNlc2l1Y3ZfdXNlcl9pZCwgTlVMTCwgdXNlcl9kYXRhLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz04OTE9c3RhdGljIGludCBpdWN2X3NlbmRfaXBybShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2csXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTg5Ny1cdHBybWRhdGFbN10gPSAweGZmIC0gKHU4KSBza2ItXHUwMDNlbGVuO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjg5ODpcdHJldHVybiBwcl9pdWN2LVx1MDAzZW1lc3NhZ2Vfc2VuZChwYXRoLCBtc2csIElVQ1ZfSVBSTURBVEEsIDAsXG5uZXQvaXVjdi9hZl9pdWN2LmMtODk5LVx0XHRcdFx0ICh2b2lkICopIHBybWRhdGEsIDgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz05MDI9c3RhdGljIGludCBpdWN2X3NvY2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTUtXHRcdFx0aWYgKGVyciA9PSAweDE1KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA1NjpcdFx0XHRcdHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihpdWN2LVx1MDAzZXBhdGgsIE5VTEwpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTctXHRcdFx0XHRhdG9taWNfZGVjKFx1MDAyNml1Y3YtXHUwMDNlc2tic19pbl94bWl0KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA3NC1cdFx0XHR9XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA3NTpcdFx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVx1MDAzZXBhdGgsIFx1MDAyNnR4bXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNzYtXHRcdFx0XHRcdFx0ICAgIElVQ1ZfSVBCVUZMU1QsIDAsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNzgtXHRcdH0gZWxzZSB7IC8qIG5vbi1JUFJNIExpbmVhciBza2IgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDc5Olx0XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXHUwMDNlcGF0aCwgXHUwMDI2dHhtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA4MC1cdFx0XHRcdFx0MCwgMCwgKHZvaWQgKilza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTExNDQ9c3RhdGljIHZvaWQgaXVjdl9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTc1LVx0XHRcdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTc2Olx0XHRcdHJjID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3JlY2VpdmUocGF0aCwgbXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExNzctXHRcdFx0XHRcdCAgICAgIElVQ1ZfSVBCVUZMU1QsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTExNzktXHRcdH0gZWxzZSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE4MDpcdFx0XHRyYyA9IHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9yZWNlaXZlKHBhdGgsIG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTgxLVx0XHRcdFx0XHQgICAgICBtc2ctXHUwMDNlZmxhZ3MgXHUwMDI2IElVQ1ZfSVBSTURBVEEsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MDQ9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQzMi1cdFx0XHR0eG1zZy50YWcgPSAwO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE0MzM6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZ0eG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDM0LVx0XHRcdFx0SVVDVl9JUFJNREFUQSwgMCwgKHZvaWQgKikgaXBybV9zaHV0ZG93biwgOCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTUtXHRcdCAgICBpdWN2LVx1MDAzZXBhdGgpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDU2Olx0XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9xdWllc2NlKGl1Y3YtXHUwMDNlcGF0aCwgTlVMTCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1Ny1cdFx0XHRpZiAoZXJyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNTkzPXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MzAtXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gSVVDVl9MSVNURU4pIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjMxOlx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjMyLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYzNy1cdGlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTYzODpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYzOS1cdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NDUtXHRpZiAoIW5zaykge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NDY6XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NDctXHRcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjcxLVx0cGF0aC1cdTAwM2Vtc2dsaW0gPSBpdWN2LVx1MDAzZW1zZ2xpbWl0O1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NzI6XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfYWNjZXB0KHBhdGgsIFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgbnVzZXJfZGF0YSwgbnNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjczLVx0aWYgKGVycikge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjk4PXN0YXRpYyB2b2lkIGl1Y3ZfY2FsbGJhY2tfcngoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzA2LVx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzA3Olx0XHRwcl9pdWN2LVx1MDAzZW1lc3NhZ2VfcmVqZWN0KHBhdGgsIG1zZyk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcwOC1cdFx0cmV0dXJuO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjgwPXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTEtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5MjpcdFx0cHJfaXVjdiA9IFx1MDAyNml1Y3ZfaWY7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5My1cdH0gZWxzZSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5NC1cdFx0bWVtc2V0KFx1MDAyNml1Y3ZfdXNlcmlkLCAwLCBzaXplb2YoaXVjdl91c2VyaWQpKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjk1Olx0XHRwcl9pdWN2ID0gTlVMTDtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk2LVx0fVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA0LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDU6XHRpZiAocHJfaXVjdikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDY6XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlaXVjdl9yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDctXHRcdGlmIChlcnIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTgtb3V0X25vdGlmaWVyOlxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMTk6XHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzIwOlx0XHRwcl9pdWN2LVx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMjEtb3V0X3NvY2s6XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMjk9c3RhdGljIHZvaWQgX19leGl0IGFmaXVjdl9leGl0KHZvaWQpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzMC17XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMzMTpcdGlmIChwcl9pdWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMzI6XHRcdHByX2l1Y3YtXHUwMDNlaXVjdl91bnJlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMDEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYHByX2l1Y3ZgIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBgcHJfaXVjdmAgdmFyaWFibGUgZ2V0cyBzZXQgdXAuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g6IGl0JiMzOTtzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvIGAmYW1wO2l1Y3ZfaWZgLCBhc3N1bWluZyBgaXVjdl9pZmAgaXMgYWN0dWFsbHkgYXZhaWxhYmxlLiBJIGtub3cgZnJvbSBwYXN0IGV4cGVyaWVuY2UgdGhhdCBgaXVjdl9pZmAgaXMgZGVmaW5lZCBhbmQgZXhwb3J0ZWQgYnkgdGhlIGBpdWN2LmNgIG1vZHVsZSwgc28gdGhhdCBtYWtlcyBzZW5zZS4KCkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIHdoYXQgaGFwcGVucyBpZiBgQ09ORklHX0lVQ1ZgIGlzbiYjMzk7dCBlbmFibGVkPyBJZiBgQ09ORklHX0lVQ1ZgIGlzIGRpc2FibGVkLCB0aGUgYnVpbGQgc3lzdGVtIHdvbiYjMzk7dCBjcmVhdGUgYGl1Y3Yub2AsIGFuZCB0aGVyZWZvcmUsIGBpdWN2X2lmYCB3b24mIzM5O3QgYmUgZGVmaW5lZC4gU28sIGluIHRoYXQgc2NlbmFyaW8sIGBwcl9pdWN2YCBzaG91bGQgbmV2ZXIgZ2V0IGluaXRpYWxpemVkLCByaWdodD8KClRoZSByZWFsbHkgaW50ZXJlc3RpbmcgcXVlc3Rpb24gaXM6IGhvdyBkb2VzIHRoZSBgYWZfaXVjdi5jYCBtb2R1bGUgKmtub3cqIHdoZXRoZXIgb3Igbm90IGBpdWN2X2lmYCBleGlzdHM/IEl0IGNhbiYjMzk7dCBqdXN0IGJsaW5kbHkgdXNlIGl0LiBJdCBtdXN0IGJlIGNoZWNraW5nIHNvbWVob3cuIExldCBtZSBkaWcgaW50byBgYWZpdWN2X2luaXRgIHRvIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtIHRoYXQgZW5zdXJlcyB0aGlzIGRlcGVuZGVuY3kgaXMgaGFuZGxlZCBncmFjZWZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyODA6XHRzdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxuMjI4MTpcdHtcbjIyODI6XHRcdGludCBlcnI7XG4yMjgzOlx0XG4yMjg0Olx0XHRpZiAobWFjaGluZV9pc192bSgpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19JVUNWKSkge1xuMjI4NTpcdFx0XHRjcGNtZChcJiMzNDtRVUVSWSBVU0VSSURcJiMzNDssIGl1Y3ZfdXNlcmlkLCBzaXplb2YoaXVjdl91c2VyaWQpLCBcdTAwMjZlcnIpO1xuMjI4NjpcdFx0XHRpZiAodW5saWtlbHkoZXJyKSkge1xuMjI4NzpcdFx0XHRcdFdBUk5fT04oZXJyKTtcbjIyODg6XHRcdFx0XHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xuMjI4OTpcdFx0XHRcdGdvdG8gb3V0O1xuMjI5MDpcdFx0XHR9XG4yMjkxOlx0XG4yMjkyOlx0XHRcdHByX2l1Y3YgPSBcdTAwMjZpdWN2X2lmO1xuMjI5MzpcdFx0fSBlbHNlIHtcbjIyOTQ6XHRcdFx0bWVtc2V0KFx1MDAyNml1Y3ZfdXNlcmlkLCAwLCBzaXplb2YoaXVjdl91c2VyaWQpKTtcbjIyOTU6XHRcdFx0cHJfaXVjdiA9IE5VTEw7XG4yMjk2Olx0XHR9XG4yMjk3Olx0XG4yMjk4Olx0XHRlcnIgPSBwcm90b19yZWdpc3RlcihcdTAwMjZpdWN2X3Byb3RvLCAwKTtcbjIyOTk6XHRcdGlmIChlcnIpXG4yMzAwOlx0XHRcdGdvdG8gb3V0O1xuMjMwMTpcdFx0ZXJyID0gc29ja19yZWdpc3RlcihcdTAwMjZpdWN2X3NvY2tfZmFtaWx5X29wcyk7XG4yMzAyOlx0XHRpZiAoZXJyKVxuMjMwMzpcdFx0XHRnb3RvIG91dF9wcm90bztcbjIzMDQ6XHRcbjIzMDU6XHRcdGlmIChwcl9pdWN2KSB7XG4yMzA2Olx0XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlaXVjdl9yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xuMjMwNzpcdFx0XHRpZiAoZXJyKVxuMjMwODpcdFx0XHRcdGdvdG8gb3V0X3NvY2s7XG4yMzA5Olx0XHR9XG4yMzEwOlx0XG4yMzExOlx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2YWZpdWN2X25ldGRldl9ub3RpZmllcik7XG4yMzEyOlx0XHRpZiAoZXJyKVxuMjMxMzpcdFx0XHRnb3RvIG91dF9ub3RpZmllcjtcbjIzMTQ6XHRcbjIzMTU6XHRcdGRldl9hZGRfcGFjayhcdTAwMjZpdWN2X3BhY2tldF90eXBlKTtcbjIzMTY6XHRcdHJldHVybiAwO1xuMjMxNzpcdFxuMjMxODpcdG91dF9ub3RpZmllcjpcbjIzMTk6XHRcdGlmIChwcl9pdWN2KVxuMjMyMDpcdFx0XHRwcl9pdWN2LVx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xuMjMyMTpcdG91dF9zb2NrOlxuMjMyMjpcdFx0c29ja191bnJlZ2lzdGVyKFBGX0lVQ1YpO1xuMjMyMzpcdG91dF9wcm90bzpcbjIzMjQ6XHRcdHByb3RvX3VucmVnaXN0ZXIoXHUwMDI2aXVjdl9wcm90byk7XG4yMzI1Olx0b3V0OlxuMjMyNjpcdFx0cmV0dXJuIGVycjtcbjIzMjc6XHR9XG4yMzI4Olx0XG4yMzI5Olx0c3RhdGljIHZvaWQgX19leGl0IGFmaXVjdl9leGl0KHZvaWQpXG4yMzMwOlx0e1xuMjMzMTpcdFx0aWYgKHByX2l1Y3YpXG4yMzMyOlx0XHRcdHByX2l1Y3YtXHUwMDNlaXVjdl91bnJlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG4yMzMzOlx0XG4yMzM0Olx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZhZml1Y3ZfbmV0ZGV2X25vdGlmaWVyKTtcbjIzMzU6XHRcdGRldl9yZW1vdmVfcGFjayhcdTAwMjZpdWN2X3BhY2tldF90eXBlKTtcbjIzMzY6XHRcdHNvY2tfdW5yZWdpc3RlcihQRl9JVUNWKTtcbjIzMzc6XHRcdHByb3RvX3VucmVnaXN0ZXIoXHUwMDI2aXVjdl9wcm90byk7XG4yMzM4Olx0fVxuMjMzOTpcdFxuMjM0MDpcdG1vZHVsZV9pbml0KGFmaXVjdl9pbml0KTtcbjIzNDE6XHRtb2R1bGVfZXhpdChhZml1Y3ZfZXhpdCk7XG4yMzQyOlx0XG4yMzQzOlx0TU9EVUxFX0FVVEhPUihcJiMzNDtKZW5uaWZlciBIdW50IFx1MDAzY2plbmh1bnRAdXMuaWJtLmNvbVx1MDAzZVwmIzM0Oyk7XG4yMzQ0Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0lVQ1YgU29ja2V0cyB2ZXIgXCYjMzQ7IFZFUlNJT04pO1xuMjM0NTpcdE1PRFVMRV9WRVJTSU9OKFZFUlNJT04pO1xuMjM0NjpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4yMzQ3Olx0TU9EVUxFX0FMSUFTX05FVFBST1RPKFBGX0lVQ1YpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqTmF2aWdhdGluZyB0aGUgSVVDViBDb25maWd1cmF0aW9uKioKCk9rYXksIHRoZSBjb2RlJiMzOTtzIHVzaW5nIGBJU19FTkFCTEVEKENPTkZJR19JVUNWKWAuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBrZXkuIElmIGBDT05GSUdfSVVDVmAgaXNuJiMzOTt0IGZsaXBwZWQgb24gaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIHRoZW4gYHByX2l1Y3ZgIGdldHMgc2V0IHRvIGBOVUxMYC4gQnV0IHRoYXQgZG9lc24mIzM5O3QgbWVhbiBJIGNhbiYjMzk7dCB1c2UgSGlwZXJTb2NrZXRzIHRocm91Z2ggYGFmX2l1Y3ZgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gV2FpdCBhIG1pbnV0ZS4uLiBJIHNlZSB0aGF0IHRoZSBgQUZfSVVDVmAgc29ja2V0IGZhbWlseSAqaXMqIHJlZ2lzdGVyZWQgd2l0aCBgc29ja19yZWdpc3RlcigmYW1wO2l1Y3Zfc29ja19mYW1pbHlfb3BzKWAuIFRoaXMgaXMgZ29vZCwgd2hpY2ggbWVhbnMgYHNvY2tldChBRl9JVUNWLCAuLi4pYCBjYWxscyB3aWxsIGZ1bmN0aW9uIGV2ZW4gaWYgYENPTkZJR19JVUNWYCBpcyBub3QgZW5hYmxlZCEgT2theSwgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSB3YW50ZWQgdG8gY29uZmlybS4gU28sIHRob3NlIHNvY2tldCBjYWxscyB3aWxsIHRoZW4gdXNlIHRoZSBgaXVjdl9zb2NrX2ZhbWlseV9vcHNgIHN0cnVjdHVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGl1Y3Zfc29ja19mYW1pbHlfb3BzYCBhbmQgdW5kZXJzdGFuZCBob3cgdGhhdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9zb2NrX2ZhbWlseV9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTIyNDA9c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjY4LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNjk6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGl1Y3Zfc29ja19mYW1pbHlfb3BzID0ge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNzAtXHQuZmFtaWx5XHQ9IEFGX0lVQ1YsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyODA9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwMC1cdFx0Z290byBvdXQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMwMTpcdGVyciA9IHNvY2tfcmVnaXN0ZXIoXHUwMDI2aXVjdl9zb2NrX2ZhbWlseV9vcHMpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDItXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQxMgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEltcGxpY2F0aW9ucyBvZiBBRl9JVUNWIFNvY2tldCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggYWxsb3dzIGBBRl9JVUNWYCBzb2NrZXRzIHRvIGJlIGJ1aWx0IGV2ZW4gd2hlbiBgQ09ORklHX0lVQ1ZgIGlzIGRpc2FibGVkLCBidXQgYENPTkZJR19BRklVQ1ZgIGlzIGVuYWJsZWQuIFRoaXMgbWFrZXMgdGhlIHNvY2tldCBmYW1pbHkgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSwgd2hpY2ggaW1tZWRpYXRlbHkgdHJpZ2dlcnMgdGhlIGZ1enppbmcgYWxhcm0gYmVsbHMuIElzIHRoaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkhIEl0IG9wZW5zIHVwIGEgd2hvbGUgbmV3IHNvY2tldCBmYW1pbHkgdGhhdCB3YXMgcHJldmlvdXNseSBwb3RlbnRpYWxseSB1bnJlYWNoYWJsZSB1bmRlciBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMuCgpCdXQgd2FpdCwgaG9sZCBvbi4gSWYgYENPTkZJR19JVUNWYCB3YXMgKmFscmVhZHkqIGVuYWJsZWQsIGBhZl9pdWN2YCB3YXMgYWxyZWFkeSBiZWluZyBidWlsdCBhbmQgdGhlb3JldGljYWxseSBmdXp6ZWQuIFRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIGFueSBuZXcgY29kZSwganVzdCBmaXhpbmcgYSBidWlsZCBkZXBlbmRlbmN5IGluIHRoZSBNYWtlZmlsZS4KCkFoYSwgYnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlciEgSWYgYENPTkZJR19JVUNWYCBpcyBkaXNhYmxlZCwgdGhlIGBwcl9pdWN2YCBmdW5jdGlvbiBwb2ludGVyIGlzIGdvaW5nIHRvIGJlIE5VTEwuIERvZXMgYGFmX2l1Y3ZgIGV2ZW4gKndvcmsqIHByb3Blcmx5IGluIHRoYXQgc2NlbmFyaW8/IFllcywgaXQgZmFsbHMgYmFjayB0byBIaXBlclNvY2tldHMuIEJ1dCB0aGF0IGZhbGxiYWNrIHBhdGguLi4gd2FzIGl0ICpldmVyKiBhY3R1YWxseSB0ZXN0ZWQgb3IgZnV6emVkPyBJZiBgQ09ORklHX0lVQ1ZgIHdhcyBkaXNhYmxlZCwgYGFmX2l1Y3ZgIHdhc24mIzM5O3QgYnVpbHQgYXQgYWxsLCBzbyB0aGUgZmFsbGJhY2sgcGF0aCB3aGVyZSBgcHJfaXVjdmAgaXMgTlVMTCAqZGVmaW5pdGVseSogd2FzbiYjMzk7dCBmdXp6ZWQsIGF0IGxlYXN0IG5vdCBpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBjb25maWdzLgoKT2theSwgbGV0JiMzOTtzIHRoaW5rIHRoaXMgdGhyb3VnaC4gRXZlbiBpZiBgQ09ORklHX0lVQ1ZgICp3YXMqIGVuYWJsZWQsIGBwcl9pdWN2YCBpcyBvbmx5IHNldCB0byBgJmFtcDtpdWN2X2lmYCAqaWYqIGBtYWNoaW5lX2lzX3ZtKClgIGlzIHRydWUuIEFuZCB3aGF0IGlmIHRoZSBmdXp6ZXIgaXMgcnVubmluZyBvbiBzb21ldGhpbmcgbGlrZSBRRU1VICh3aGljaCBpcyBOT1Qgei9WTSwgYnV0IGNvdWxkIGJlIEtWTSwgb3Igc29tZXRoaW5nIHNpbWlsYXIpPyBJbiB0aGF0IGNhc2UsIGBtYWNoaW5lX2lzX3ZtKClgIG1pZ2h0IGJlIGZhbHNlISBTbywgaW4gc29tZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLCB0aGUgZmFsbGJhY2sgcGF0aCBtaWdodCBzdGlsbCBiZSBlbmdhZ2VkIGV2ZW4gd2hlbiBgQ09ORklHX0lVQ1ZgIGlzIGVuYWJsZWQsIGFuZCB0aGF0JiMzOTtzICpjcml0aWNhbCouIEkgbmVlZCB0byBjaGVjayBob3cgYG1hY2hpbmVfaXNfdm0oKWAgaXMgYmVpbmcgZXZhbHVhdGVkIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBUaGlzIGNvdWxkIGJlIGEgbmV3LCB1bmV4cGxvcmVkIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNoaW5lX2lzX3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9ib290L3N0YXJ0dXAuYz03MT1zdGF0aWMgdm9pZCBkZXRlY3RfZGlhZzI4OCh2b2lkKVxuLS1cbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy03Ni1cbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo3NzpcdGFjdGlvbiA9IG1hY2hpbmVfaXNfdm0oKSA/ICh1bnNpZ25lZCBsb25nKWNtZCA6IExQQVJXRFRfUkVTVEFSVDtcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo3ODpcdGxlbiA9IG1hY2hpbmVfaXNfdm0oKSA/IHNpemVvZihjbWQpIDogMDtcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy03OS1cdGlmIChfX2RpYWcyODgoV0RUX0ZVTkNfSU5JVCwgTUlOX0lOVEVSVkFMLCBhY3Rpb24sIGxlbikpXG4tLVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jPTEwOD1pbnQgX19pbml0IGh5cGZzX2RpYWcwY19pbml0KHZvaWQpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTA5LXtcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYzoxMTA6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMTEtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0xMTk9dm9pZCBoeXBmc19kaWFnMGNfZXhpdCh2b2lkKVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTEyMC17XG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6MTIxOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTIyLVx0XHRyZXR1cm47XG4tLVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM9MTIzPWludCBoeXBmc192bV9pbml0KHZvaWQpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xMjQte1xuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM6MTI1Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xMjYtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jPTEzNz12b2lkIGh5cGZzX3ZtX2V4aXQodm9pZClcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTEzOC17XG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYzoxMzk6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTE0MC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jPTE0OD1zdGF0aWMgc3NpemVfdCBoeXBmc193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTE3MC1cdGh5cGZzX2RlbGV0ZV90cmVlKCk7XG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYzoxNzE6XHRpZiAobWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMTcyLVx0XHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhzYi1cdTAwM2VzX3Jvb3QpO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jPTI0MD1zdGF0aWMgaW50IGh5cGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTI1OS1cdFx0cmV0dXJuIC1FTk9NRU07XG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYzoyNjA6XHRpZiAobWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMjYxLVx0XHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhyb290X2RlbnRyeSk7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwcGxkYXRhLmg9NDU9c3RhdGljIGlubGluZSBpbnQgYXBwbGRhdGFfYXNtKHN0cnVjdCBhcHBsZGF0YV9wYXJhbWV0ZXJfbGlzdCAqcGFybV9saXN0LFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oLTUxLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwcGxkYXRhLmg6NTI6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oLTUzLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaD05Nz1ERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShscGFyLCBNRkVBVFVSRV9MUEFSKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC05OC1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTk6I2RlZmluZSBtYWNoaW5lX2lzX3ZtXHRtYWNoaW5lX2hhc192bVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC0xMDAtI2RlZmluZSBtYWNoaW5lX2lzX2t2bVx0bWFjaGluZV9oYXNfa3ZtXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jPTExMD1zdGF0aWMgbm9pbmxpbmUgX19pbml0IHZvaWQgc2V0dXBfYXJjaF9zdHJpbmcodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMtMTMyLVx0XHRcdCAgbWFjaGluZV9pc19scGFyKCkgPyBcJiMzNDtMUEFSXCYjMzQ7IDpcbmFyY2gvczM5MC9rZXJuZWwvZWFybHkuYzoxMzM6XHRcdFx0ICBtYWNoaW5lX2lzX3ZtKCkgPyBcJiMzNDt6L1ZNXCYjMzQ7IDpcbmFyY2gvczM5MC9rZXJuZWwvZWFybHkuYy0xMzQtXHRcdFx0ICBtYWNoaW5lX2lzX2t2bSgpID8gXCYjMzQ7S1ZNXCYjMzQ7IDogXCYjMzQ7dW5rbm93blwmIzM0Oyk7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz02OTQ9c3RhdGljIGludCBfX2luaXQgaXBsX2luaXQodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTcwNy1cdGNhc2UgSVBMX1RZUEVfQ0NXOlxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzo3MDg6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTcwOS1cdFx0XHRyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcdTAwMjZpcGxfa3NldC1cdTAwM2Vrb2JqLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MTI4Nj1zdGF0aWMgdm9pZCByZWlwbF9ibG9ja19jY3dfZmlsbF9wYXJtcyhzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqaXBiKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTI5Ny1cdC8qIFZNIFBBUk0gKi9cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MTI5ODpcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXHUwMDI2XHUwMDI2IGlwbF9ibG9ja192YWxpZCBcdTAwMjZcdTAwMjZcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTI5OS1cdCAgICAoaXBsX2Jsb2NrLmNjdy52bV9mbGFncyBcdTAwMjYgSVBMX1BCMF9DQ1dfVk1fRkxBR19WUCkpIHtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEzMDg9c3RhdGljIGludCBfX2luaXQgcmVpcGxfbnNzX2luaXQodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEzMTEtXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjEzMTI6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMxMy1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0xMzI4PXN0YXRpYyBpbnQgX19pbml0IHJlaXBsX2Njd19pbml0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMzM2LVx0cmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXHUwMDI2cmVpcGxfa3NldC1cdTAwM2Vrb2JqLFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoxMzM3Olx0XHRcdFx0bWFjaGluZV9pc192bSgpID8gXHUwMDI2cmVpcGxfY2N3X2F0dHJfZ3JvdXBfdm1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMzOC1cdFx0XHRcdFx0XHQ6IFx1MDAyNnJlaXBsX2Njd19hdHRyX2dyb3VwX2xwYXIpO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjAxND1zdGF0aWMgaW50IHZtY21kX2luaXQodm9pZClcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjAxNS17XG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIwMTY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjAxNy1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjI5ND1zdGF0aWMgaW50IF9faW5pdCB2bWNtZF9vbl9yZWJvb3Rfc2V0dXAoY2hhciAqc3RyKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk1LXtcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjI5NjpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk3LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMDQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25fcGFuaWNfc2V0dXAoY2hhciAqc3RyKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzA1LXtcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjMwNjpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzA3LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMTQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25faGFsdF9zZXR1cChjaGFyICpzdHIpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMTUte1xuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMzE2Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMTctXHRcdHJldHVybiAxO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjMyND1zdGF0aWMgaW50IF9faW5pdCB2bWNtZF9vbl9wb2ZmX3NldHVwKGNoYXIgKnN0cilcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNS17XG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIzMjY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNy1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmM9MTgwPXN0YXRpYyBpbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlX2tkdW1wKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMtMTgyLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUFxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmM6MTgzOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jLTE4NC1cdFx0ZGlhZzEwX3JhbmdlKFBGTl9ET1dOKGNyYXNoa19yZXMuc3RhcnQpLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz0yNDY9c3RhdGljIHZvaWQgX19pbml0IGNvbm1vZGVfZGVmYXVsdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy0yNTAtXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6MjUxOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTI1Mi1cdFx0Y3BjbWQoXCYjMzQ7UVVFUlkgQ09OU09MRVwmIzM0OywgcXVlcnlfYnVmZmVyLCAxMDI0LCBOVUxMKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9NTk4PXN0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2NyYXNoa2VybmVsKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTY1MC1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYzo2NTE6XHRpZiAoIW9sZG1lbV9kYXRhLnN0YXJ0IFx1MDAyNlx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtNjUyLVx0XHRkaWFnMTBfcmFuZ2UoUEZOX0RPV04oY3Jhc2hfYmFzZSksIFBGTl9ET1dOKGNyYXNoX3NpemUpKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9ODk3PXZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtOTAxLSAgICAgICAgICovXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6OTAyOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy05MDMtXHRcdHByX2luZm8oXCYjMzQ7TGludXggaXMgcnVubmluZyBhcyBhIHovVk0gXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmM9Mzc5PXN0YXRpYyBfX2luaXQgaW50IGNyZWF0ZV9wcm9jX3NlcnZpY2VfbGV2ZWwodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYy0zODEtXHRwcm9jX2NyZWF0ZV9zZXEoXCYjMzQ7c2VydmljZV9sZXZlbHNcJiMzNDssIDAsIE5VTEwsIFx1MDAyNnNlcnZpY2VfbGV2ZWxfc2VxX29wcyk7XG5hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYzozODI6XHRpZiAobWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMtMzgzLVx0XHRyZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKFx1MDAyNnNlcnZpY2VfbGV2ZWxfdm0pO1xuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYz0yNTM9c2VnbWVudF90eXBlIChjaGFyKiBuYW1lKVxuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYy0yNTctXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6MjU4Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtMjU5LVx0XHRyZXR1cm4gLUVOT1NZUztcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM9NDE1PXNlZ21lbnRfbG9hZCAoY2hhciAqbmFtZSwgaW50IGRvX25vbnNoYXJlZCwgdW5zaWduZWQgbG9uZyAqYWRkcixcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNDIwLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjQyMTpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTQyMi1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU0Nj1zZWdtZW50X3VubG9hZChjaGFyICpuYW1lKVxuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYy01NDktXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6NTUwOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTUxLVx0XHRyZXR1cm47XG4tLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU4Mj1zZWdtZW50X3NhdmUoY2hhciAqbmFtZSlcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTg4LVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjU4OTpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU5MC1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM9MzMzOT1pbnQgZGFzZF9kZXZpY2VfaXNfcm8oc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zMzQ0LVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozMzQ1Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jLTMzNDYtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jPTIyND1zdGF0aWMgaW50IF9faW5pdCBkYXNkX3BhcnNlX2tleXdvcmQoY2hhciAqa2V5d29yZClcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0yMzgtXHRpZiAoc3RybmNtcChcJiMzNDtub3BhdlwmIzM0Oywga2V5d29yZCwgbGVuZ3RoKSA9PSAwKSB7XG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYzoyMzk6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0yNDAtXHRcdFx0cHJfaW5mbyhcJiMzNDsmIzM5O25vcGF2JiMzOTsgaXMgbm90IHN1cHBvcnRlZCBvbiB6L1ZNXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmM9NjU2PWRhc2RfZGlhZ19pbml0KHZvaWQpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMtNjU3LXtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYzo2NTg6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jLTY1OS1cdFx0cHJfaW5mbyhcJiMzNDtEaXNjaXBsaW5lICVzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgei9WTVxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmM9MTk0Nz1zdGF0aWMgaW50IGRhc2RfZWNrZF92YWxpZGF0ZV9zZXJ2ZXIoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jLTE5NTUtXHRcdHJldHVybiAwO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jOjE5NTY6XHRpZiAoZGFzZF9ub3BhdiB8fCBtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMtMTk1Ny1cdFx0ZW5hYmxlX3BhdiA9IDA7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jPTg5OT1zdGF0aWMgaW50IF9faW5pdCBjb24zMjE1X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmMtOTEwLVx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmM6OTExOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTkxMi1cdFx0Y3BjbWQoXCYjMzQ7VEVSTSBDT05NT0RFIDMyMTVcJiMzNDssIE5VTEwsIDAsIE5VTEwpO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYz0yMTM0PWNvbjMyNzBfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYy0yMTQ1LVx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmM6MjE0NjpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYy0yMTQ3LVx0XHRjcGNtZChcJiMzNDtURVJNIENPTk1PREUgMzI3MFwmIzM0OywgTlVMTCwgMCwgTlVMTCk7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jPTI5Mz1pbnQgaG1jZHJ2X2Z0cF9zdGFydHVwKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jLTMxMS1cdGlmIChobWNkcnZfZnRwX3JlZmNudCA9PSAwKSB7XG5kcml2ZXJzL3MzOTAvY2hhci9obWNkcnZfZnRwLmM6MzEyOlx0XHRpZiAobWFjaGluZV9pc192bSgpKVxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jLTMxMy1cdFx0XHRobWNkcnZfZnRwX2Z1bmNzID0gXHUwMDI2aG1jZHJ2X2Z0cF96dm07XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmM9NDU0PXN0YXRpYyBpbnQgX19pbml0IG1vbl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMtNDU3LVxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmM6NDU4Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jLTQ1OS1cdFx0cHJfZXJyKFwmIzM0O1RoZSB6L1ZNICpNT05JVE9SIHJlY29yZCBkZXZpY2UgZHJpdmVyIGNhbm5vdCBiZSBcJiMzNDtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYz0yOTQ9c3RhdGljIGludCBfX2luaXQgbW9uX2luaXQodm9pZClcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jLTI5NS17XG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYzoyOTY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jLTI5Ny1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jPTYxND1zdGF0aWMgdm9pZCByYXczMjcwX3Jlc2V0X2RldmljZV9jYihzdHJ1Y3QgcmF3MzI3MF9yZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMtNjIyLVx0XHRycC1cdTAwM2VzdGF0ZSA9IFJBVzMyNzBfU1RBVEVfSU5JVDtcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYzo2MjM6XHR9IGVsc2UgaWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jLTYyNC1cdFx0cmF3MzI3MF9zaXplX2RldmljZV92bShycCk7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oPTM0ND1zY2xwX2FzY2ViYyh1bnNpZ25lZCBjaGFyIGNoKVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM0NS17XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg6MzQ2Olx0cmV0dXJuIChtYWNoaW5lX2lzX3ZtKCkpID8gX2FzY2ViY1tjaF0gOiBfYXNjZWJjXzUwMFtjaF07XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzQ3LX1cbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg9MzUxPXNjbHBfZWJjYXNjX3N0cihjaGFyICpzdHIsIGludCBucilcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTIte1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM1MzpcdChtYWNoaW5lX2lzX3ZtKCkpID8gRUJDQVNDKHN0ciwgbnIpIDogRUJDQVNDXzUwMChzdHIsIG5yKTtcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTQtfVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaD0zNTg9c2NscF9hc2NlYmNfc3RyKGNoYXIgKnN0ciwgaW50IG5yKVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM1OS17XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg6MzYwOlx0KG1hY2hpbmVfaXNfdm0oKSkgPyBBU0NFQkMoc3RyLCBucikgOiBBU0NFQkNfNTAwKHN0ciwgbnIpO1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM2MS19XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jPTI2PXN0YXRpYyB2b2lkIF9faW5pdCBzY2xwX2Vhcmx5X2ZhY2lsaXRpZXNfZGV0ZWN0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jLTc2LVx0aWYgKCFzY2NiLVx1MDAzZWhjcHVhKSB7XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmM6Nzc6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmMtNzgtXHRcdFx0c2NscC5tYXhfY29yZXMgPSA2NDtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jPTUwNT1zY2xwX3R0eV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01MTItXHQvKiB6L1ZNIG11bHRpcGxleGVzIHRoZSBsaW5lIG1vZGUgb3V0cHV0IG9uIHRoZSAzMnh4IHNjcmVlbiAqL1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYzo1MTM6XHRpZiAobWFjaGluZV9pc192bSgpIFx1MDAyNlx1MDAyNiAhQ09OU09MRV9JU19TQ0xQKVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01MTQtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTM4LVx0c2NscF90dHlfYnVmZmVyX2NvdW50ID0gMDtcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmM6NTM5Olx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01NDAtXHRcdC8qIGNhc2UgaW5wdXQgbGluZXMgdG8gbG93ZXJjYXNlICovXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jPTUyPXZvaWQgX19pbml0IHZtY3BfY21hX3Jlc2VydmUodm9pZClcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01My17XG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM6NTQ6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01NS1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYz0yNDg9c3RhdGljIGludCBfX2luaXQgdm1jcF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTI1MS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYzoyNTI6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy0yNTMtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmM9ODA2PXN0YXRpYyBpbnQgX19pbml0IHZtbG9ncmRyX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jLTgxMS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmM6ODEyOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMtODEzLVx0XHRwcl9lcnIoXCYjMzQ7bm90IHJ1bm5pbmcgdW5kZXIgVk0sIGRyaXZlciBub3QgbG9hZGVkLlxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jPTEwMDY9c3RhdGljIGludCBfX2luaXQgdXJfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYy0xMDEwLVxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jOjEwMTE6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jLTEwMTItXHRcdHByX2VycihcJiMzNDtUaGUgJXMgY2Fubm90IGJlIGxvYWRlZCB3aXRob3V0IHovVk1cXG5cJiMzNDssXG4tLVxuZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYz0xNzM9c3RhdGljIHZvaWQgc25zaWRfY2FsbGJhY2soc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHZvaWQgKmRhdGEsIGludCByYylcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jLTE3OC1cbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmM6MTc5Olx0aWYgKHJjIFx1MDAyNlx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMtMTgwLVx0XHQvKiBUcnkgZGlhZyAweDIxMCBmYWxsYmFjayBvbiB6L1ZNLiAqL1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjQ5ND1zdGF0aWMgaW5saW5lIGludCBfX2luaXQgYXBfYXN5bmNfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjUwNC1cdCAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTA1Olx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjUwNi1cdFx0cG9sbF9oaWdoX3RpbWVvdXQgPSAxNTAwMDAwO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM9Mjk3PXN0YXRpYyBpbnQgcWV0aF9sMl9yZXF1ZXN0X2luaXRpYWxfbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYy0zMDItXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jOjMwMzpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMtMzA0LVx0XHRyYyA9IHFldGhfdm1fcmVxdWVzdF9tYWMoY2FyZCk7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jPTEzOT1zdGF0aWMgaW50IF9faW5pdCBzbXNnX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMtMTQyLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jOjE0MzpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMtMTQ0LVx0XHRyYyA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYz0xNTI9c3RhdGljIGludCBfX2luaXQgc21zZ2l1Y3ZfYXBwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2X2FwcC5jLTE1Ni1cbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmM6MTU3Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2X2FwcC5jLTE1OC1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM9MTIzOT1zdGF0aWMgaW50IHBhcmFtX3NldF92bWlkZmlsdGVyKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI0Mi1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jOjEyNDM6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSB8fCAhaHZjX2l1Y3ZfZGV2aWNlcylcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNDQtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jPTEyNjY9c3RhdGljIGludCBwYXJhbV9nZXRfdm1pZGZpbHRlcihjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNzEtXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYzoxMjcyOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkgfHwgIWh2Y19pdWN2X2RldmljZXMpXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjczLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYz0xMzAxPXN0YXRpYyBpbnQgX19pbml0IGh2Y19pdWN2X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMzA4LVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM6MTMwOTpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMzEwLVx0XHRwcl9ub3RpY2UoXCYjMzQ7VGhlIHovVk0gSVVDViBIVkMgZGV2aWNlIGRyaXZlciBjYW5ub3QgXCYjMzQ7XG4tLVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jPTgxPXN0YXRpYyBpbnQgd2R0X3N0YXJ0KHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtODUtXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM6ODY6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtODctXHRcdGZ1bmMgPSBjb25jZWFsX29uID8gKFdEVF9GVU5DX0lOSVQgfCBXRFRfRlVOQ19DT05DRUFMKVxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYz0xMDc9c3RhdGljIGludCB3ZHRfcGluZyhzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTExMS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYzoxMTI6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtMTEzLVx0XHQvKlxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYz0xNjI9c3RhdGljIGludCBfX2luaXQgZGlhZzI4OF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTE2NS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYzoxNjY6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtMTY3LVx0XHRjbWRfYnVmID0ga21hbGxvYyhNQVhfQ01ETEVOLCBHRlBfS0VSTkVMKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI4MD1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjgzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyODQ6XHRpZiAobWFjaGluZV9pc192bSgpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19JVUNWKSkge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyODUtXHRcdGNwY21kKFwmIzM0O1FVRVJZIFVTRVJJRFwmIzM0OywgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFx1MDAyNmVycik7XG4tLVxubmV0L2l1Y3YvaXVjdi5jPTE4NjI9c3RhdGljIGludCBfX2luaXQgaXVjdl9pbml0KHZvaWQpXG4tLVxubmV0L2l1Y3YvaXVjdi5jLTE4NjUtXG5uZXQvaXVjdi9pdWN2LmM6MTg2NjpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5uZXQvaXVjdi9pdWN2LmMtMTg2Ny1cdFx0cmMgPSAtRVBST1RPTk9TVVBQT1JUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAyOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIE5ldHdvcmsgTWFrZWZpbGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyBgYWZfaXVjdmAgKEFkZHJlc3MgRmFtaWx5IElVQ1YpIGdldHMgYnVpbHQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYENPTkZJR19JVUNWYCBhbmQgdGhlIHovVk0gZW52aXJvbm1lbnQuIEkmIzM5O20gc2VlaW5nIHRoYXQgYG1hY2hpbmVfaXNfdm0oKWAgaXMgY3J1Y2lhbC4gSWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgdW5kZXIgUUVNVSwgdGhhdCBmdW5jdGlvbiB3aWxsIHJldHVybiBmYWxzZSwgd2hpY2ggbGVhZHMgdG8gYHByX2l1Y3ZgIGJlaW5nIE5VTEwsIGFuZCB0aHVzIGBhZl9pdWN2YCBkZWZhdWx0aW5nIHRvIHRoZSBIaXBlclNvY2tldHMgdHJhbnNwb3J0LgoKVGhlIG9yaWdpbmFsIGNvZGUmIzM5O3MgbG9naWMgaW4gYGFmaXVjdl9pbml0YCB3YXMgbGlrZSB0aGlzOiBpZiBpdCYjMzk7cyB6L1ZNICphbmQqIGBDT05GSUdfSVVDVmAgaXMgZW5hYmxlZCwgdGhlbiBgcHJfaXVjdmAgZ2V0cyBzZXQgdG8gYCZhbXA7aXVjdl9pZmAuIE90aGVyd2lzZSwgYHByX2l1Y3ZgIGlzIE5VTEwuIEhvd2V2ZXIsIHVuZGVyIFFFTVUsIGBtYWNoaW5lX2lzX3ZtKClgIGlzIGZhbHNlLCBtZWFuaW5nIGBwcl9pdWN2YCAqYWx3YXlzKiBiZWNvbWVzIE5VTEwsIHJlZ2FyZGxlc3Mgb2YgdGhlIGBDT05GSUdfSVVDVmAgc2V0dGluZy4gU28sIGV2ZW4gaWYgYENPTkZJR19JVUNWYCAqd2FzKiBlbmFibGVkLCBgYWZfaXVjdmAgd291bGQgc3RpbGwgdXNlIEhpcGVyU29ja2V0cyB1bmRlciBRRU1VIGJlY2F1c2UgdGhlIElVQ1YgaW50ZXJmYWNlIHBvaW50ZXIgYHByX2l1Y3ZgIGlzIG5ldmVyIGluaXRpYWxpemVkLgoKVGhlIHByb2JsZW0/IElmIGBDT05GSUdfSVVDVmAgd2FzIGRpc2FibGVkLCB0aGUgbWFrZWZpbGUgbG9naWMgc2tpcHBlZCBidWlsZGluZyBgbmV0L2l1Y3YvYCwgd2hpY2ggbWVhbnMgYGFmX2l1Y3Yub2Agd291bGRuJiMzOTt0IGJlIGJ1aWx0IGF0IGFsbC4gVGhpcyBwYXRjaCBjaGFuZ2VzIHRoYXQ6IGl0IGZvcmNlcyBgYWZfaXVjdi5vYCB0byBiZSBidWlsdCwgcmVnYXJkbGVzcyBvZiBgQ09ORklHX0lVQ1ZgJiMzOTtzIHNldHRpbmcgKGJ5IGNoYW5naW5nIGBvYmotJChDT05GSUdfSVVDVikJCSYjNDM7PSBpdWN2L2AgdG8gYG9iai15CQkJCSYjNDM7PSBpdWN2L2ApLgoKVGhlIGltcGFjdCBvbiBleGVjdXRpb24gZmxvdyBpcyBub3cgY2xlYXIuIFRoaXMgcGF0Y2ggKmVuYWJsZXMqIGBhZl9pdWN2YCB0byBiZSBidWlsdCBhbmQgdXNlZCB3aGVuIGBDT05GSUdfSVVDVmAgaXMgZGlzYWJsZWQsIGFuZCB3aWxsIHVzZSBIaXBlclNvY2tldHMuCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzIGZ1enppbmcuIERvZXMgdGhpcyBhY3R1YWxseSBjcmVhdGUgYSBuZXcsIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCB0aGF0IG5lZWRzIGZvY3VzZWQgZnV6emluZz8gSWYgc3l6a2FsbGVyIGhhcyBgQ09ORklHX0lVQ1Y9eWAgYW5kIGBDT05GSUdfQUZJVUNWPXlgIGVuYWJsZWQgKHdoaWNoIGlzIHZlcnkgbGlrZWx5IHRoZSBkZWZhdWx0KSBvbiBTMzkwLCB0aGVuIGBhZl9pdWN2YCB3YXMgKmFscmVhZHkqIGJlaW5nIGZ1enplZCwgdGhvdWdoIGl0IHdhcyBzdGlsbCBhbHdheXMgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQgdW5kZXIgUUVNVSwgZXZlbiB3aXRoIGBDT05GSUdfSVVDVj15YC4KCkhvd2V2ZXIsIHRoZSBrZXkgaW5zaWdodCBpcyB0aGF0IHN5emthbGxlciAqbWlnaHQqIHVzZSBjb25maWd1cmF0aW9ucyB3aGVyZSBgQ09ORklHX0lVQ1Y9bmAgYnV0IGBDT05GSUdfQUZJVUNWPXlgLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB0aGlzIHBhdGNoIGJlY29tZXMgc2lnbmlmaWNhbnQuIEl0ICplbmFibGVzKiBgYWZfaXVjdmAgdG8gYmUgYnVpbHQgYW5kIHRlc3RlZCB1bmRlciB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCwgYSBuZXcgc3RhdGUgdGhhdCB3YXNuJiMzOTt0IHBvc3NpYmxlIGJlZm9yZS4gVGhpcyBpcyBhIGZpeCBmb3IgYSBidWlsZCBzeXN0ZW0gYnVnLgoKQmVjYXVzZSB0aGlzIHBhdGNoIG1vZGlmaWVzIGBuZXQvTWFrZWZpbGVgLCBhbmQgdGhlIHByb21wdCBzYXlzICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSwmIzM0OyBzbyBJIHRoaW5rIHRoaXMgaXMgd29ydGggZnV6emluZy4gVGhlIHJlYWNoYWJsZSBjb2RlIGlzIHRoZSBzYW1lIGFzIGJlZm9yZSwgYGFmX2l1Y3ZgIGNvZGUuCgpTbywgZm9yIGZ1enppbmcsIHdlJiMzOTtkIG5lZWQgdG8gZm9jdXMgb24gZnVuY3Rpb25zIGluIGBuZXQvaXVjdi9hZl9pdWN2LmNgLCBzdWNoIGFzIGBhZml1Y3ZfaHNfc2VuZGAsIGBpdWN2X3NvY2tfc2VuZG1zZ2AsIGBpdWN2X3NvY2tfYmluZGAsIGV0Yy4gV2Ugc2hvdWxkIHRlc3Qgd2l0aCBgQ09ORklHX0FGSVVDVj15YCwgYXMgd2VsbCBhcyBgQ09ORklHX0lVQ1Y9bmAuIFRoZSBvcmlnaW5hbCBwYXRjaCBjaGFuZ2VzIHRoZSBidWlsZCBzeXN0ZW0sIHNvIGl0JiMzOTtzIGEgd29ydGh3aGlsZSBwYXRoIHRvIHRlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JVUNWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0yMjgwPXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyODMtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI4NDpcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI4NS1cdFx0Y3BjbWQoXCYjMzQ7UVVFUlkgVVNFUklEXCYjMzQ7LCBpdWN2X3VzZXJpZCwgc2l6ZW9mKGl1Y3ZfdXNlcmlkKSwgXHUwMDI2ZXJyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzMTIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBRRU1VIGFuZCBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHBhdGNoIG9ubHkgYWZmZWN0cyBgYWZpdWN2X2luaXRgLiBHaXZlbiB0aGUgZXN0YWJsaXNoZWQgdW5kZXJzdGFuZGluZyB0aGF0IGBtYWNoaW5lX2lzX3ZtKClgIGlzIGZhbHNlIHVuZGVyIFFFTVUsIHRoZSBgSVNfRU5BQkxFRChDT05GSUdfSVVDVilgIGNvbmRpdGlvbiBiZWNvbWVzIGlycmVsZXZhbnQgdG8gdGhlIFFFTVUgZXhlY3V0aW9uIGZsb3cuIFRoaXMgbWVhbnMgdGhhdCwgb3JkaW5hcmlseSwgdGhlIGV4ZWN1dGlvbiBwYXRoIHVuZGVyIFFFTVUgc2hvdWxkIGJlIGlkZW50aWNhbCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGBDT05GSUdfSVVDVmAgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyB3b3VsZCBpbXBseSB0aGF0IHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBleHBvc2UgYW55IG5ldyBleGVjdXRpb24gcGF0aHMgaW4gUUVNVSB0aGF0IHdlcmVuJiMzOTt0IGFscmVhZHkgdGhlcmUgd2hlbiBgQ09ORklHX0lVQ1Y9eWAuCgpIb3dldmVyLCBoZXJlJiMzOTtzIGEgY3J1Y2lhbCBwb2ludDogd2hhdCBpZiBgQ09ORklHX0lVQ1ZgIHdhcyAqZGlzYWJsZWQqIGluIHRoZSBzeXprYWxsZXIgY29uZmlndXJhdGlvbiwgbWVhbmluZyBgYWZfaXVjdmAgd2FzbiYjMzk7dCBldmVuIGJ1aWx0PyBOb3csIHRoZSBwYXRjaCAqZW5hYmxlcyogaXQhIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjb25zaWRlcmF0aW9uLiBJZiBpdCBlbmFibGVzIGEgd2hvbGUgbmV3IHNvY2tldCBmYW1pbHkgdGhhdCB3YXNuJiMzOTt0IHByZXZpb3VzbHkgZnV6emVkLCBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgYXR0ZW50aW9uLgoKTGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQuIGBDT05GSUdfSVVDVmAgaXMgZ2VuZXJhbGx5IGVuYWJsZWQgd2hlbiBgQ09ORklHX0FGSVVDVmAgaXMgZW5hYmxlZCBiZWNhdXNlIGBBRklVQ1ZgIGRlcGVuZHMgb24gYFMzOTBgIGFuZCB1c3VhbGx5IGRlZmF1bHRzIHRvICYjMzk7bSYjMzk7IGlmIGBRRVRIX0wzYCBvciBgSVVDVmAgYXJlIGFsc28gZW5hYmxlZC4gVGhlIHByb21wdCBpdHNlbGYgZm9yIGBBRklVQ1ZgIGlzIOKAnEFGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KS7igJ0gSWYgc3l6a2FsbGVyIHRlc3RzIFMzOTAsIHRoZW4gaXQmIzM5O3MgbGlrZWx5IHRoYXQgYm90aCBhcmUgZW5hYmxlZC4KCkJ1dCB0aGVuIHRoZXJlJiMzOTtzIHRoZSBzcGVjaWZpYyBndWlkZWxpbmU6IOKAnFJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuLi4gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LuKAnSBUaGlzIHBhdGNoICpkb2VzKiBtb2RpZnkgYSBNYWtlZmlsZS4gRG9lcyBhIE1ha2VmaWxlIG1vZGlmaWNhdGlvbiBjb3VudCBhcyBhICYjMzQ7S2NvbmZpZyBmaWxlJiMzNDs/IEl0JiMzOTtzIHBhcnQgb2YgdGhlIGJ1aWxkIHN5c3RlbS4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGEgTWFrZWZpbGUgbW9kaWZpY2F0aW9uLCAqYnkgaXRzZWxmKiwgZnVuY3Rpb25hbGx5IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cuIFdlbGwsIGl0IGNoYW5nZXMgd2hhdCBnZXRzIGNvbXBpbGVkLCBhbmQgaWYgaXQgY29tcGlsZXMgbmV3IGNvZGUsIHRoYXQgKmRvZXMqIGFsdGVyIHRoZSBrZXJuZWwmIzM5O3MgZnVuY3Rpb25hbGl0eS4gVGhpcyBtYWtlcyBpdCB3b3J0aCBjb25zaWRlcmluZy4KCklmIHdlIGRlY2lkZSB0byBmdXp6LCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgc3ltYm9scyB0byBmb2N1cyBvbj8gSSYjMzk7ZCBjb25zaWRlciBgaXVjdl9zb2NrX2NyZWF0ZWAsIGBpdWN2X3NvY2tfYmluZGAsIGBpdWN2X3NvY2tfc2VuZG1zZ2AsIGBpdWN2X3NvY2tfcmVjdm1zZ2AsIGBhZml1Y3ZfaHNfc2VuZGAsIGFuZCBgYWZpdWN2X2hzX3JjdmAuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBhZml1Y3ZfaHNfcmN2YCBpcyBldmVuIHJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZpdWN2X2hzX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9MTk5Nz1zdGF0aWMgaW50IGFmaXVjdl9oc19jYWxsYmFja19yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwMzgtLypcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDM5OiAqIGFmaXVjdl9oc19yY3YoKSAtIGJhc2UgZnVuY3Rpb24gZm9yIGFycml2aW5nIGRhdGEgdGhyb3VnaCBIaXBlclNvY2tldHNcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDQwLSAqICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDQyLSAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIwNDM6c3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA0NC1cdHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2Rldilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI3NT1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI3Ni1cdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQUZfSVVDViksXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI3NzpcdC5mdW5jID0gYWZpdWN2X2hzX3Jjdixcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjc4LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODUxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGFuZCBGdXp6aW5nIGFmaXVjdl9oc19yY3YqKgoKT2theSwgc28gYGFmaXVjdl9oc19yY3ZgICppcyogcmVnaXN0ZXJlZCBhcyBhIHBhY2tldCB0eXBlIGhhbmRsZXIgZm9yIGBFVEhfUF9BRl9JVUNWYC4gVGhpcyBtZWFucyB0aGF0IHdlICpjYW4qIHJlYWNoIGl0IGJ5IHNlbmRpbmcgcGFja2V0cyB3aXRoIHRoZSBgRVRIX1BfQUZfSVVDVmAgcHJvdG9jb2wsIGxpa2VseSBvdmVyIGxvb3BiYWNrIG9yIG90aGVyIGludGVyZmFjZXMuIERlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgdGhlcmVmb3JlLCBkZWZpbml0ZWx5IGZ1enphYmxlLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZD8gQWgsIGBBRklVQ1ZgLgoKSGFuZyBvbiBhIHNlY29uZOKApiBgQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYC4gSG1tLiBDYW4gU3l6a2FsbGVyIGV2ZW4gZW5hYmxlIGBBRklVQ1ZgIG9uIHg4Nj8gTm8sIHRoZSBgZGVwZW5kcyBvbiBTMzkwYCBkZXBlbmRlbmN5IHByZXZlbnRzIHRoYXQuIFRoaXMgbWVhbnMgdGhlIGNvZGUgaXMgKm9ubHkqIGNvbXBpbGVkIHdoZW4gdGFyZ2V0aW5nIFMzOTAsIHdoaWNoIGlzIHVzZWZ1bCBpbmZvcm1hdGlvbi4gVGhlIGdvb2QgbmV3cyBpcyBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYW4gUzM5MHggaW5zdGFuY2UuIElmIHdlIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLCB0aGUgUzM5MCBpbnN0YW5jZSB3aWxsIHBpY2sgaXQgdXAgYW5kIFN5emthbGxlciB3aWxsIHRyeSB0byB0ZXN0IGl0LgoKQnV0Li4ud2FpdCwgd2FzbiYjMzk7dCB0aGVyZSBzb21ldGhpbmcgYWJvdXQgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgR0NFIG9yIFFFTVU/IFdlIGVzdGFibGlzaGVkIHRoYXQgYGFmX2l1Y3ZgICppcyogcmVhY2hhYmxlIGluIFFFTVUgYmVjYXVzZSBpdCBmYWxscyBiYWNrIHRvIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIEl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLgoKUmlnaHQsIHRpbWUgdG8gaWRlbnRpZnkgc29tZSByZWxldmFudCBzeW1ib2xzIGZvciBTeXprYWxsZXIgdG8gZm9jdXMgb246IGBpdWN2X3NvY2tfY3JlYXRlYCwgYGl1Y3Zfc29ja19iaW5kYCwgYGl1Y3Zfc29ja19zZW5kbXNnYCwgYGl1Y3Zfc29ja19yZWN2bXNnYCwgYGFmaXVjdl9oc19zZW5kYCwgYGFmaXVjdl9oc19yY3ZgLCBgaXVjdl9zb2NrX3NldHNvY2tvcHRgLCBhbmQgYGl1Y3Zfc29ja19nZXRzb2Nrb3B0YC4gTGV0JiMzOTtzIGp1c3QgZG91YmxlIGNoZWNrIHRob3NlIG5hbWVzIGZvciBhY2N1cmFjeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9zb2NrXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9NTI9c3RhdGljIGNvbnN0IHU4IGlwcm1fc2h1dGRvd25bOF0gPVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy01Ni1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo1NzojZGVmaW5lIF9faXVjdl9zb2NrX3dhaXQoc2ssIGNvbmRpdGlvbiwgdGltZW8sIHJldClcdFx0XHRcXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU4LWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy04MS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo4MjojZGVmaW5lIGl1Y3Zfc29ja193YWl0KHNrLCBjb25kaXRpb24sIHRpbWVvKVx0XHRcdFx0XFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy04My0oe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTg1LVx0aWYgKCEoY29uZGl0aW9uKSlcdFx0XHRcdFx0XHRcXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjg2Olx0XHRfX2l1Y3Zfc29ja193YWl0KHNrLCBjb25kaXRpb24sIHRpbWVvLCBfX3JldCk7XHRcdFxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtODctXHRfX3JldDtcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTA9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X2FjY2VwdF9kZXF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTEtXHRcdFx0XHRcdHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjkyOnN0YXRpYyB2b2lkIGl1Y3Zfc29ja19raWxsKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6OTM6c3RhdGljIHZvaWQgaXVjdl9zb2NrX2Nsb3NlKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtOTQtXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTU9c3RhdGljIHZvaWQgYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5KHN0cnVjdCBzb2NrICpzaywgZW51bSBpdWN2X3R4X25vdGlmeSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtOTYtXG5uZXQvaXVjdi9hZl9pdWN2LmM6OTc6c3RhdGljIHN0cnVjdCBpdWN2X3NvY2tfbGlzdCBpdWN2X3NrX2xpc3QgPSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtOTgtXHQubG9jayA9IF9fUldfTE9DS19VTkxPQ0tFRChpdWN2X3NrX2xpc3QubG9jayksXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTEwNz1zdGF0aWMgaW5saW5lIHZvaWQgbG93X25tY3B5KHVuc2lnbmVkIGNoYXIgKmRzdCwgY2hhciAqc3JjKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjYtICogSWYgdGhlIHNvY2tldCBkYXRhIGxlbiBpcyBncmVhdGVyIDcsIHRoZW4gUFJNREFUQSBjYW4gYmUgdXNlZCBmb3Igc3BlY2lhbFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEyNzogKiBub3RpZmljYXRpb25zIChzZWUgaXVjdl9zb2NrX3NodXRkb3duKTsgYW5kIGZ1cnRoZXIsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTI4LSAqIGlmIHRoZSBzb2NrZXQgZGF0YSBsZW4gaXMgXHUwMDNlIDcsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDguXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTEzND1zdGF0aWMgaW5saW5lIHNpemVfdCBpdWN2X21zZ19sZW5ndGgoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUtLyoqXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ2OiAqIGl1Y3Zfc29ja19pbl9zdGF0ZSgpIC0gY2hlY2sgZm9yIHNwZWNpZmljIHN0YXRlc1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE0Ny0gKiBAc2s6XHRcdHNvY2sgc3RydWN0dXJlXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE1Mi0gKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNTM6c3RhdGljIGludCBpdWN2X3NvY2tfaW5fc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUsIGludCBzdGF0ZTIpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTU0LXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTY2PXN0YXRpYyBpbmxpbmUgaW50IGl1Y3ZfYmVsb3dfbXNnbGltKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTc5LS8qXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTgwOiAqIGl1Y3Zfc29ja193YWtlX21zZ2xpbSgpIC0gV2FrZSB1cCB0aHJlYWQgd2FpdGluZyBvbiBtc2cgbGltaXRcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODEtICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTgyOnN0YXRpYyB2b2lkIGl1Y3Zfc29ja193YWtlX21zZ2xpbShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTgzLXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjY4PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX19pdWN2X2dldF9zb2NrX2J5X25hbWUoY2hhciAqbm0pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTI3OC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyNzk6c3RhdGljIHZvaWQgaXVjdl9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yODAte1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yOTUtLyogQ2xlYW51cCBMaXN0ZW4gKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyOTY6c3RhdGljIHZvaWQgaXVjdl9zb2NrX2NsZWFudXBfbGlzdGVuKHN0cnVjdCBzb2NrICpwYXJlbnQpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjk3LXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzAxLVx0d2hpbGUgKChzayA9IGl1Y3ZfYWNjZXB0X2RlcXVldWUocGFyZW50LCBOVUxMKSkpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzozMDI6XHRcdGl1Y3Zfc29ja19jbG9zZShzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MzAzOlx0XHRpdWN2X3NvY2tfa2lsbChzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzA0LVx0fVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMDgtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzA5OnN0YXRpYyB2b2lkIGl1Y3Zfc29ja19saW5rKHN0cnVjdCBpdWN2X3NvY2tfbGlzdCAqbCwgc3RydWN0IHNvY2sgKnNrKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTMxMC17XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTMxNS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzozMTY6c3RhdGljIHZvaWQgaXVjdl9zb2NrX3VubGluayhzdHJ1Y3QgaXVjdl9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaylcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMTcte1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMjMtLyogS2lsbCBzb2NrZXQgKG9ubHkgaWYgemFwcGVkIGFuZCBvcnBoYW5lZCkgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzozMjQ6c3RhdGljIHZvaWQgaXVjdl9zb2NrX2tpbGwoc3RydWN0IHNvY2sgKnNrKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTMyNS17XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTMyOC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzozMjk6XHRpdWN2X3NvY2tfdW5saW5rKFx1MDAyNml1Y3Zfc2tfbGlzdCwgc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTMzMC1cdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTM1NT1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9jdHJsKHN0cnVjdCBzb2NrICpzaywgdTggZmxhZ3MpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTM4MC0vKiBDbG9zZSBhbiBJVUNWIHNvY2tldCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjM4MTpzdGF0aWMgdm9pZCBpdWN2X3NvY2tfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTM4Mi17XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTM5MC1cdGNhc2UgSVVDVl9MSVNURU46XG5uZXQvaXVjdi9hZl9pdWN2LmM6MzkxOlx0XHRpdWN2X3NvY2tfY2xlYW51cF9saXN0ZW4oc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTM5Mi1cdFx0YnJlYWs7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQxMC1cdFx0XHRcdHRpbWVvID0gSVVDVl9ESVNDT05OX1RJTUVPVVQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDExOlx0XHRcdGl1Y3Zfc29ja193YWl0KHNrLFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQxMjpcdFx0XHRcdFx0aXVjdl9zb2NrX2luX3N0YXRlKHNrLCBJVUNWX0NMT1NFRCwgMCksXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDEzLVx0XHRcdFx0XHR0aW1lbyk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQzNy1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo0Mzg6XHQvKiBtYXJrIHNvY2tldCBmb3IgZGVsZXRpb24gYnkgaXVjdl9zb2NrX2tpbGwoKSAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQzOS1cdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDQzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ0NDpzdGF0aWMgdm9pZCBpdWN2X3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDQ1LXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDUxLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ1MjpzdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ1My17XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ4My1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo0ODQ6XHRzay1cdTAwM2Vza19kZXN0cnVjdCA9IGl1Y3Zfc29ja19kZXN0cnVjdDtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00ODUtXHRzay1cdTAwM2Vza19zbmR0aW1lbyA9IElVQ1ZfQ09OTl9USU1FT1VUO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTEtXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkyOlx0aXVjdl9zb2NrX2xpbmsoXHUwMDI2aXVjdl9za19saXN0LCBzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkzLVx0cmV0dXJuIHNrO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz01NTQ9c3RhdGljIHZvaWQgX19pdWN2X2F1dG9fbmFtZShzdHJ1Y3QgaXVjdl9zb2NrICppdWN2KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy01NjctLyogQmluZCBhbiB1bmJvdW5kIHNvY2tldCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjU2ODpzdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU2OS1cdFx0XHQgIGludCBhZGRyX2xlbilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjUwLS8qIEF1dG9tYXRpY2FsbHkgYmluZCBhbiB1bmJvdW5kIHNvY2tldCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjY1MTpzdGF0aWMgaW50IGl1Y3Zfc29ja19hdXRvYmluZChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjUyLXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjczPXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzE4LS8qIENvbm5lY3QgYW4gdW5jb25uZWN0ZWQgc29ja2V0ICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzE5OnN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzIwLVx0XHRcdCAgICAgaW50IGFsZW4sIGludCBmbGFncylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQwLVx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfT1BFTikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjc0MTpcdFx0ZXJyID0gaXVjdl9zb2NrX2F1dG9iaW5kKHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDItXHRcdGlmICh1bmxpa2VseShlcnIpKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03NTktXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gSVVDVl9DT05ORUNURUQpXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzYwOlx0XHRlcnIgPSBpdWN2X3NvY2tfd2FpdChzaywgaXVjdl9zb2NrX2luX3N0YXRlKHNrLCBJVUNWX0NPTk5FQ1RFRCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjEtXHRcdFx0XHRcdFx0XHQgICAgSVVDVl9ESVNDT05OKSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzc1LS8qIE1vdmUgYSBzb2NrZXQgaW50byBsaXN0ZW5pbmcgc3RhdGUuICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6Nzc2OnN0YXRpYyBpbnQgaXVjdl9zb2NrX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZylcbm5ldC9pdWN2L2FmX2l1Y3YuYy03Nzcte1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy04MDAtLyogQWNjZXB0IGEgcGVuZGluZyBjb25uZWN0aW9uICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6ODAxOnN0YXRpYyBpbnQgaXVjdl9zb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTgwMi1cdFx0XHQgICAgc3RydWN0IHByb3RvX2FjY2VwdF9hcmcgKmFyZylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtODU0LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjg1NTpzdGF0aWMgaW50IGl1Y3Zfc29ja19nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcixcbm5ldC9pdWN2L2FmX2l1Y3YuYy04NTYtXHRcdFx0ICAgICBpbnQgcGVlcilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9ODkxPXN0YXRpYyBpbnQgaXVjdl9zZW5kX2lwcm0oc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy05MDEtXG5uZXQvaXVjdi9hZl9pdWN2LmM6OTAyOnN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTkwMy1cdFx0XHQgICAgIHNpemVfdCBsZW4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwMTUtXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG5vYmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEwMTY6XHRlcnIgPSBpdWN2X3NvY2tfd2FpdChzaywgaXVjdl9iZWxvd19tc2dsaW0oc2spLCB0aW1lbyk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAxNy1cdGlmIChlcnIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTExNDQ9c3RhdGljIHZvaWQgaXVjdl9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTU2LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjExNTc6XHQvKiBjaGVjayBmb3Igc3BlY2lhbCBJUFJNIG1lc3NhZ2VzIChlLmcuIGl1Y3Zfc29ja19zaHV0ZG93bikgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTU4LVx0aWYgKChtc2ctXHUwMDNlZmxhZ3MgXHUwMDI2IElVQ1ZfSVBSTURBVEEpIFx1MDAyNlx1MDAyNiBsZW4gXHUwMDNlIDcpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTIwNT1zdGF0aWMgdm9pZCBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIyMi1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjIzOnN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyMjQtXHRcdFx0ICAgICBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyOTgtXHRcdFx0XHRXQVJOX09OKDEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEyOTk6XHRcdFx0XHRpdWN2X3NvY2tfY2xvc2Uoc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMDAtXHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTM1MD1zdGF0aWMgaW5saW5lIF9fcG9sbF90IGl1Y3ZfYWNjZXB0X3BvbGwoc3RydWN0IHNvY2sgKnBhcmVudClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTM2NC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzY1OnN0YXRpYyBfX3BvbGxfdCBpdWN2X3NvY2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzY2LVx0XHRcdCAgICAgICBwb2xsX3RhYmxlICp3YWl0KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDAzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0MDQ6c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDA1LXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3MS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDcyOnN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDczLXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3OS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDgwOlx0aXVjdl9zb2NrX2Nsb3NlKHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDgxLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0ODItXHRzb2NrX29ycGhhbihzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ4MzpcdGl1Y3Zfc29ja19raWxsKHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDg0LVx0cmV0dXJuIGVycjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ4Ny0vKiBnZXRzb2Nrb3B0IGFuZCBzZXRzb2Nrb3B0ICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ4ODpzdGF0aWMgaW50IGl1Y3Zfc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ4OS1cdFx0XHRcdHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE1MzctXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTUzODpzdGF0aWMgaW50IGl1Y3Zfc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTUzOS1cdFx0XHRcdHNvY2tvcHRfdCAqb3B0KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNTkzPXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NDMtXHQvKiBDcmVhdGUgdGhlIG5ldyBzb2NrZXQgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjQ0Olx0bnNrID0gaXVjdl9zb2NrX2FsbG9jKE5VTEwsIHNrLVx1MDAzZXNrX3Byb3RvY29sLCBHRlBfQVRPTUlDLCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjQ1LVx0aWYgKCFuc2spIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1MS1cdG5pdWN2ID0gaXVjdl9zayhuc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NTI6XHRpdWN2X3NvY2tfaW5pdChuc2ssIHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjUzLVx0bml1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc0LVx0XHRpdWN2X3NldmVyX3BhdGgobnNrLCAxKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc1Olx0XHRpdWN2X3NvY2tfa2lsbChuc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzYtXHRcdGdvdG8gZmFpbDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTc0Mj1zdGF0aWMgdm9pZCBpdWN2X2NhbGxiYWNrX3R4ZG9uZShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzczLVx0XHQvKiB3YWtlIHVwIGFueSBwcm9jZXNzIHdhaXRpbmcgZm9yIHNlbmRpbmcgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzc0Olx0XHRpdWN2X3NvY2tfd2FrZV9tc2dsaW0oc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE3NzUtXHR9XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4NTA9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg2NS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODY2Olx0bnNrID0gaXVjdl9zb2NrX2FsbG9jKE5VTEwsIHNrLVx1MDAzZXNrX3Byb3RvY29sLCBHRlBfQVRPTUlDLCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODY3LVx0YmhfbG9ja19zb2NrKHNrKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg3NC1cdFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODc1Olx0XHRpdWN2X3NvY2tfa2lsbChuc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE4NzYtXHRcdGJoX3VubG9ja19zb2NrKHNrKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg4MC1cdG5pdWN2ID0gaXVjdl9zayhuc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE4ODE6XHRpdWN2X3NvY2tfaW5pdChuc2ssIHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODgyLVx0bml1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkwNC1cdH0gZWxzZVxubmV0L2l1Y3YvYWZfaXVjdi5jOjE5MDU6XHRcdGl1Y3Zfc29ja19raWxsKG5zayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkwNi1cdGJoX3VubG9ja19zb2NrKHNrKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTk3OT1zdGF0aWMgaW50IGFmaXVjdl9oc19jYWxsYmFja193aW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTg5LVx0YXRvbWljX3N1YihpdWN2X3RyYW5zX2hkcihza2IpLVx1MDAzZXdpbmRvdywgXHUwMDI2aXVjdi1cdTAwM2Vtc2dfc2VudCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTk5MDpcdGl1Y3Zfc29ja193YWtlX21zZ2xpbShzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTk5MS1cdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjE0OD1zdGF0aWMgdm9pZCBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnkoc3RydWN0IHNvY2sgKnNrLCBlbnVtIGl1Y3ZfdHhfbm90aWZ5IG4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNTctXHRcdGF0b21pY19kZWMoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxNTg6XHRcdGl1Y3Zfc29ja193YWtlX21zZ2xpbShzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE1OS1cdFx0YnJlYWs7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNjUtXHRcdGlmIChhdG9taWNfZGVjX3JldHVybihcdTAwMjZpdWN2LVx1MDAzZXBlbmRpbmdzKSBcdTAwM2M9IDApXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE2NjpcdFx0XHRpdWN2X3NvY2tfd2FrZV9tc2dsaW0oc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNjctXHRcdGJyZWFrO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjE2PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgYWZpdWN2X25ldGRldl9ub3RpZmllciA9IHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIxOS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjIwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGl1Y3Zfc29ja19vcHMgPSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIyMS1cdC5mYW1pbHlcdFx0PSBQRl9JVUNWLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjItXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjIzOlx0LnJlbGVhc2VcdD0gaXVjdl9zb2NrX3JlbGVhc2UsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyNDpcdC5iaW5kXHRcdD0gaXVjdl9zb2NrX2JpbmQsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyNTpcdC5jb25uZWN0XHQ9IGl1Y3Zfc29ja19jb25uZWN0LFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjY6XHQubGlzdGVuXHRcdD0gaXVjdl9zb2NrX2xpc3Rlbixcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjI3Olx0LmFjY2VwdFx0XHQ9IGl1Y3Zfc29ja19hY2NlcHQsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyODpcdC5nZXRuYW1lXHQ9IGl1Y3Zfc29ja19nZXRuYW1lLFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjk6XHQuc2VuZG1zZ1x0PSBpdWN2X3NvY2tfc2VuZG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjMwOlx0LnJlY3Ztc2dcdD0gaXVjdl9zb2NrX3JlY3Ztc2csXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIzMTpcdC5wb2xsXHRcdD0gaXVjdl9zb2NrX3BvbGwsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIzMi1cdC5pb2N0bFx0XHQ9IHNvY2tfbm9faW9jdGwsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMzQtXHQuc29ja2V0cGFpclx0PSBzb2NrX25vX3NvY2tldHBhaXIsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIzNTpcdC5zaHV0ZG93blx0PSBpdWN2X3NvY2tfc2h1dGRvd24sXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIzNjpcdC5zZXRzb2Nrb3B0XHQ9IGl1Y3Zfc29ja19zZXRzb2Nrb3B0LFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMzc6XHQuZ2V0c29ja29wdF9pdGVyID0gaXVjdl9zb2NrX2dldHNvY2tvcHQsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIzOC19O1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMzktXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI0MDpzdGF0aWMgaW50IGl1Y3Zfc29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI0MS1cdFx0XHQgICAgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNTMtXHRcdC8qIGN1cnJlbnRseSwgcHJvdG8gb3BzIGNhbiBoYW5kbGUgYm90aCBzayB0eXBlcyAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNTQ6XHRcdHNvY2stXHUwMDNlb3BzID0gXHUwMDI2aXVjdl9zb2NrX29wcztcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjU1LVx0XHRicmVhaztcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI1OS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjYwOlx0c2sgPSBpdWN2X3NvY2tfYWxsb2Moc29jaywgcHJvdG9jb2wsIEdGUF9LRVJORUwsIGtlcm4pO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNjEtXHRpZiAoIXNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjYzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNjQ6XHRpdWN2X3NvY2tfaW5pdChzaywgTlVMTCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI2NS1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI2OC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjY5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjcwLVx0LmZhbWlseVx0PSBBRl9JVUNWLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNzEtXHQub3duZXJcdD0gVEhJU19NT0RVTEUsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI3MjpcdC5jcmVhdGVcdD0gaXVjdl9zb2NrX2NyZWF0ZSxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjczLX07XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyODA9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwMC1cdFx0Z290byBvdXQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMwMTpcdGVyciA9IHNvY2tfcmVnaXN0ZXIoXHUwMDI2aXVjdl9zb2NrX2ZhbWlseV9vcHMpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDItXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzkyNgoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA0NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBmb3JjaW5nIHRoZSBgYWZfaXVjdmAgc29ja2V0IGZhbWlseSB0byBiZSBidWlsdCwgZXZlbiBpZiB0aGUgcHJpbWFyeSBgQ09ORklHX0lVQ1ZgIG9wdGlvbiBpcyBkaXNhYmxlZC4gVGhlIGNvcmUgaWRlYSBpcyB0aGF0IGFzIGxvbmcgYXMgYENPTkZJR19BRklVQ1ZgIGlzIGVuYWJsZWQsIHRoZSBjb2RlIHdpbGwgYmUgY29tcGlsZWQuIEdpdmVuIHRoaXMgY2hhbmdlLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgdGhpcyBpcyBhYnNvbHV0ZWx5ICp3b3J0aCogZnV6emluZy4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4KCkZvciB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIEkgbmVlZCB0byBleHBsaWNpdGx5IHN0YXRlIHdoYXQgZmxhZ3MgYXJlIG5lZWRlZCB0byBjb21waWxlIGFuZCB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlLiAgYEFGSVVDVmAgc2VlbXMgYXBwcm9wcmlhdGU7IGl0JiMzOTtzIHNwZWNpZmljIHRvIFMzOTAsIGJ1dCBpdCAqaXMqIHRoZSBrZXkgY29uZmlnIHRoYXQgZW5hYmxlcyB0aGUgY29kZSBwYXRoIHRoZSBwYXRjaCBpcyBvcGVuaW5nIHVwLiBJIGNvbmZpcm0gdGhhdCBpdCBuZWVkcyB0byBiZSBsaXN0ZWQuCgpOb3csIGxldCBtZSBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZiB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyBzb2xpZC4gVGhlIGBuZXQvTWFrZWZpbGVgIGlzIHRoZSB0YXJnZXQuIFRoZSBjaGFuZ2UgbWFrZXMgdGhlIGBpdWN2L2AgZGlyZWN0b3J5ICphbHdheXMqIGJ1aWx0IChgb2JqLXkgJiM0Mzs9IGl1Y3YvYCkgaW5zdGVhZCBvZiBjb25kaXRpb25hbGx5IChgb2JqLSQoQ09ORklHX0lVQ1YpICYjNDM7PSBpdWN2L2ApLiBUaGUgcGF0Y2ggZGVzY3JpcHRpb24gbWFrZXMgdGhhdCB2ZXJ5IGNsZWFyIGFzIHdlbGwuIFRoaXMgZXhwb3NlcyB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCBmb3IgQUZfSVVDViBzb2NrZXRzLCBldmVuIHdoZW4gdGhlIGJyb2FkZXIgYENPTkZJR19JVUNWYCBpcyBkaXNhYmxlZC4KClRoZXJlZm9yZSwgZm9yIHRoZSBgRm9jdXNTeW1ib2xzYCwgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIHRoZSBrZXkgc29ja2V0IGZ1bmN0aW9uczogYGl1Y3Zfc29ja19jcmVhdGVgLCBgaXVjdl9zb2NrX2JpbmRgLCBgaXVjdl9zb2NrX2Nvbm5lY3RgLCBgaXVjdl9zb2NrX3NlbmRtc2dgLCBgaXVjdl9zb2NrX3JlY3Ztc2dgLCBhbmQgdGhlIEhpcGVyU29ja2V0cy1zcGVjaWZpYyByZWNlaXZlIGFuZCBzZW5kIGZ1bmN0aW9uczogYGFmaXVjdl9oc19yY3ZgIGFuZCBgYWZpdWN2X2hzX3NlbmRgLiBUaGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgbmV3IGNvZGUgcGF0aCB0aGF0JiMzOTtzIGJlaW5nIGVuYWJsZWQuCgpOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRklVQ1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpdWN2X3NvY2tfY3JlYXRlJiMzNDssCiAgICAmIzM0O2l1Y3Zfc29ja19iaW5kJiMzNDssCiAgICAmIzM0O2l1Y3Zfc29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O2l1Y3Zfc29ja19zZW5kbXNnJiMzNDssCiAgICAmIzM0O2l1Y3Zfc29ja19yZWN2bXNnJiMzNDssCiAgICAmIzM0O2FmaXVjdl9oc19yY3YmIzM0OywKICAgICYjMzQ7YWZpdWN2X2hzX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0L01ha2VmaWxlIHRvIGFsd2F5cyBkZXNjZW5kIGludG8gdGhlIG5ldC9pdWN2LyBkaXJlY3RvcnksIGFsbG93aW5nIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHkgKGFmX2l1Y3YubykgdG8gYmUgYnVpbHQgZXZlbiB3aGVuIENPTkZJR19JVUNWIGlzIGRpc2FibGVkIGJ1dCBDT05GSUdfQUZJVUNWIGlzIGVuYWJsZWQuIFRoaXMgZXhwb3NlcyB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5ICh1c2luZyBIaXBlclNvY2tldHMgdHJhbnNwb3J0KSB0byB1c2Vyc3BhY2UgaW4gY29uZmlndXJhdGlvbnMgd2hlcmUgaXQgd2FzIHByZXZpb3VzbHkgdW5yZWFjaGFibGUgZHVlIHRvIGEgYnVpbGQgZGVwZW5kZW5jeSBidWcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2l1Y3Zfc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX2JpbmQmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7YWZpdWN2X2hzX3JjdiYjMzQ7LAogICAgJiMzNDthZml1Y3ZfaHNfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXQvTWFrZWZpbGUgdG8gYWx3YXlzIGRlc2NlbmQgaW50byB0aGUgbmV0L2l1Y3YvIGRpcmVjdG9yeSwgYWxsb3dpbmcgdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSAoYWZfaXVjdi5vKSB0byBiZSBidWlsdCBldmVuIHdoZW4gQ09ORklHX0lVQ1YgaXMgZGlzYWJsZWQgYnV0IENPTkZJR19BRklVQ1YgaXMgZW5hYmxlZC4gVGhpcyBleHBvc2VzIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHkgKHVzaW5nIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpIHRvIHVzZXJzcGFjZSBpbiBjb25maWd1cmF0aW9ucyB3aGVyZSBpdCB3YXMgcHJldmlvdXNseSB1bnJlYWNoYWJsZSBkdWUgdG8gYSBidWlsZCBkZXBlbmRlbmN5IGJ1Zy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM3OjI1LjEzNDg2MDQyN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMTU0MDA4MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGSVVDVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIml1Y3Zfc29ja19jcmVhdGVcIixcbiAgICBcIml1Y3Zfc29ja19iaW5kXCIsXG4gICAgXCJpdWN2X3NvY2tfY29ubmVjdFwiLFxuICAgIFwiaXVjdl9zb2NrX3NlbmRtc2dcIixcbiAgICBcIml1Y3Zfc29ja19yZWN2bXNnXCIsXG4gICAgXCJhZml1Y3ZfaHNfcmN2XCIsXG4gICAgXCJhZml1Y3ZfaHNfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldC9NYWtlZmlsZSB0byBhbHdheXMgZGVzY2VuZCBpbnRvIHRoZSBuZXQvaXVjdi8gZGlyZWN0b3J5LCBhbGxvd2luZyB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5IChhZl9pdWN2Lm8pIHRvIGJlIGJ1aWx0IGV2ZW4gd2hlbiBDT05GSUdfSVVDViBpcyBkaXNhYmxlZCBidXQgQ09ORklHX0FGSVVDViBpcyBlbmFibGVkLiBUaGlzIGV4cG9zZXMgdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSAodXNpbmcgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCkgdG8gdXNlcnNwYWNlIGluIGNvbmZpZ3VyYXRpb25zIHdoZXJlIGl0IHdhcyBwcmV2aW91c2x5IHVucmVhY2hhYmxlIGR1ZSB0byBhIGJ1aWxkIGRlcGVuZGVuY3kgYnVnLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjozNzoyNS4xMzQ4ODk5NDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NzA4NzgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMyMWE4MTQ4YzBmODQyZDhjZjIxNTdjZjAzMDM4NGZjOGM1ODlmMmZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdW4gMjUgMDY6Mzc6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L01ha2VmaWxlIGIvbmV0L01ha2VmaWxlXFxuaW5kZXggNWIyZGQ3ZjA3YTg1ZTkuLmMwZGE5NDZiMjgxZTFkIDEwMDY0NFxcbi0tLSBhL25ldC9NYWtlZmlsZVxcbisrKyBiL25ldC9NYWtlZmlsZVxcbkBAIC00NSw3ICs0NSw3IEBAIG9iai0kKENPTkZJR19XSVJFTEVTUylcXHRcXHQrPSB3aXJlbGVzcy9cXG4gb2JqLSQoQ09ORklHX01BQzgwMjExKVxcdFxcdCs9IG1hYzgwMjExL1xcbiBvYmotJChDT05GSUdfVElQQylcXHRcXHQrPSB0aXBjL1xcbiBvYmotJChDT05GSUdfTkVUTEFCRUwpXFx0XFx0Kz0gbmV0bGFiZWwvXFxuLW9iai0kKENPTkZJR19JVUNWKVxcdFxcdCs9IGl1Y3YvXFxuK29iai15XFx0XFx0XFx0XFx0Kz0gaXVjdi9cXG4gb2JqLSQoQ09ORklHX1NNQylcXHRcXHQrPSBzbWMvXFxuIG9iai0kKENPTkZJR19SRktJTEwpXFx0XFx0Kz0gcmZraWxsL1xcbiBvYmotJChDT05GSUdfTkVUXzlQKVxcdFxcdCs9IDlwL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjozNzoyNS43MDUzNTY3NzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNTgzNDk0MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGSVVDVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIml1Y3Zfc29ja19jcmVhdGVcIixcbiAgICBcIml1Y3Zfc29ja19iaW5kXCIsXG4gICAgXCJpdWN2X3NvY2tfY29ubmVjdFwiLFxuICAgIFwiaXVjdl9zb2NrX3NlbmRtc2dcIixcbiAgICBcIml1Y3Zfc29ja19yZWN2bXNnXCIsXG4gICAgXCJhZml1Y3ZfaHNfcmN2XCIsXG4gICAgXCJhZml1Y3ZfaHNfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldC9NYWtlZmlsZSB0byBhbHdheXMgZGVzY2VuZCBpbnRvIHRoZSBuZXQvaXVjdi8gZGlyZWN0b3J5LCBhbGxvd2luZyB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5IChhZl9pdWN2Lm8pIHRvIGJlIGJ1aWx0IGV2ZW4gd2hlbiBDT05GSUdfSVVDViBpcyBkaXNhYmxlZCBidXQgQ09ORklHX0FGSVVDViBpcyBlbmFibGVkLiBUaGlzIGV4cG9zZXMgdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSAodXNpbmcgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCkgdG8gdXNlcnNwYWNlIGluIGNvbmZpZ3VyYXRpb25zIHdoZXJlIGl0IHdhcyBwcmV2aW91c2x5IHVucmVhY2hhYmxlIGR1ZSB0byBhIGJ1aWxkIGRlcGVuZGVuY3kgYnVnLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMyMWE4MTQ4YzBmODQyZDhjZjIxNTdjZjAzMDM4NGZjOGM1ODlmMmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAwNjozNzoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9NYWtlZmlsZSBiL25ldC9NYWtlZmlsZVxuaW5kZXggNWIyZGQ3ZjA3YTg1ZTkuLmMwZGE5NDZiMjgxZTFkIDEwMDY0NFxuLS0tIGEvbmV0L01ha2VmaWxlXG4rKysgYi9uZXQvTWFrZWZpbGVcbkBAIC00NSw3ICs0NSw3IEBAIG9iai0kKENPTkZJR19XSVJFTEVTUylcdFx0Kz0gd2lyZWxlc3MvXG4gb2JqLSQoQ09ORklHX01BQzgwMjExKVx0XHQrPSBtYWM4MDIxMS9cbiBvYmotJChDT05GSUdfVElQQylcdFx0Kz0gdGlwYy9cbiBvYmotJChDT05GSUdfTkVUTEFCRUwpXHRcdCs9IG5ldGxhYmVsL1xuLW9iai0kKENPTkZJR19JVUNWKVx0XHQrPSBpdWN2L1xuK29iai15XHRcdFx0XHQrPSBpdWN2L1xuIG9iai0kKENPTkZJR19TTUMpXHRcdCs9IHNtYy9cbiBvYmotJChDT05GSUdfUkZLSUxMKVx0XHQrPSByZmtpbGwvXG4gb2JqLSQoQ09ORklHX05FVF85UClcdFx0Kz0gOXAvXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjozNzoyNS43MDUzNjExOTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc5Mzk1MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgSVVDViBOZXR3b3JrIERyaXZlciBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBuZXR3b3JrIGNvZGUsIGFuZCBpdCdzIG1ha2luZyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiBgbmV0L01ha2VmaWxlYC4gSSBzZWUgdGhleSdyZSBzd2l0Y2hpbmcgYG9iai0kKENPTkZJR19JVUNWKSArPSBpdWN2L2AgdG8gYG9iai15ICs9IGl1Y3YvYC4gUmlnaHQsIHRoYXQncyBhIGJpZyBkZWFsLiBUaGF0IG1lYW5zIHRoZSBgbmV0L2l1Y3YvYCBkaXJlY3RvcnkgaXMgZ29pbmcgdG8gYmUgKmFsd2F5cyogY29tcGlsZWQgbm93LCByZWdhcmRsZXNzIG9mIHRoZSBgQ09ORklHX0lVQ1ZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOb3csIHdoeSB3b3VsZCB0aGV5IGRvIHRoYXQ/IFRoYXQncyB0aGUgcXVlc3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgbWFraW5nIHRoaXMgZHJpdmVyIGEgYnVpbHQtaW4gbW9kdWxlLiBJIHN1c3BlY3QgdGhlcmUgaXMgc29tZXRoaW5nIGluIHRoZSBgbmV0L2l1Y3YvTWFrZWZpbGVgIHRoYXQgaXMgd29ydGggbG9va2luZyBhdC4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzc6MjkuMDg0NzYyODY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgSVVDVlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfSVVDVilcXHQrPSBpdWN2Lm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19BRklVQ1YpXFx0Kz0gYWZfaXVjdi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM3OjI5LjA4NDg3NTAxNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NzY2NTE5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBuZXQvaXVjdiBCdWlsZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG5ldC9pdWN2L01ha2VmaWxlYCwgYW5kIGl0J3Mgc3RpbGwgcmVseWluZyBvbiBgQ09ORklHX0lVQ1ZgIGFuZCBgQ09ORklHX0FGSVVDVmAuIFRoYXQgZmVlbHMuLi5ub3QgaWRlYWwuIEhhbmcgb24sIHRoZSBgbmV0L01ha2VmaWxlYCBpdHNlbGYgaGFzIGBvYmoteSArPSBpdWN2L2AsIHdoaWNoIG1lYW5zIHRoZSBidWlsZCAqYWx3YXlzKiBkZXNjZW5kcyBpbnRvIGBuZXQvaXVjdi9gLCBpcnJlc3BlY3RpdmUgb2Ygd2hldGhlciBgQ09ORklHX0lVQ1ZgIGlzIGVuYWJsZWQuIFRoYXQncyBmaW5lIGZvciB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZS5cblxuQnV0IHRoZSByZWFsIGtpY2tlciBpcyB0aGF0IHdpdGhpbiBgbmV0L2l1Y3YvTWFrZWZpbGVgLCB0aGUgYWN0dWFsIG9iamVjdCBmaWxlcywgYGl1Y3Yub2AgYW5kIGBhZl9pdWN2Lm9gLCBhcmUgKnN0aWxsKiBjb21waWxlZCBjb25kaXRpb25hbGx5IGJhc2VkIG9uIGBDT05GSUdfSVVDVmAgYW5kIGBDT05GSUdfQUZJVUNWYC4gVGhhdCBzZWVtcyByZWR1bmRhbnQsIGRvZXNuJ3QgaXQ/IElmIHRoZSBkaXJlY3RvcnkgaXMgYmVpbmcgZW50ZXJlZCByZWdhcmRsZXNzLCB3aHkgdGhlIGV4dHJhIGNvbmRpdGlvbmFsIGNoZWNrcyB3aXRoaW4/XG5cbk5vdywgSSdtIHRyeWluZyB0byByZW1lbWJlciB3aHkgdGhpcyBwYXRjaCB3YXMgbWFkZSBpbiB0aGUgZmlyc3QgcGxhY2UuIFdoYXQgd2FzIHRoZSByYXRpb25hbGU/IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29udGV4dCBoZXJlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBmaWxlcyBpbiBgbmV0L2l1Y3YvTWFrZWZpbGVgLiBKdXN0IHRob3NlIHR3byBvYmplY3QgZmlsZSBkZWZpbml0aW9ucywgbm90aGluZyBlbHNlLiBTbyBpZiBgQ09ORklHX0lVQ1ZgIGlzICpub3QqIHNldCwgdGhlIGJ1aWxkIHN0aWxsIHZpc2l0cyBgbmV0L2l1Y3YvYCwgYnV0IGJlY2F1c2Ugb2YgdGhlIGNvbmRpdGlvbmFscywgaXQgd29uJ3QgYWN0dWFsbHkgYnVpbGQgYW55dGhpbmcuIEludGVyZXN0aW5nLlxuXG5BbmQgaWYgYENPTkZJR19BRklVQ1ZgIGlzIHNldCwgYnV0IGBDT05GSUdfSVVDVmAgaXMgKm5vdCosIHdlJ2xsIHN0aWxsIGJ1aWxkIGBhZl9pdWN2Lm9gLiBBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIHRoZSBgbmV0L2l1Y3YvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBvZiB0aGVzZSBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBkZWZpbmVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzc6MzQuOTYxNTI5NjQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2l1Y3YvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBJVUNWXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIFMzOTBcXG4gICA0OlxcdFxcdGRlZl90cmlzdGF0ZSB5IGlmIFMzOTBcXG4gICA1OlxcdFxcdHByb21wdCBcXFwiSVVDViBzdXBwb3J0IChTMzkwIC0gei9WTSBvbmx5KVxcXCJcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBpbnRlci11c2VyIGNvbW11bmljYXRpb25cXG4gICA4OlxcdFxcdCAgdW5kZXIgVk0gb3IgVklGLiBJZiB5b3UgcnVuIG9uIHovVk0sIHNheSBcXFwiWVxcXCIgdG8gZW5hYmxlIGEgZmFzdFxcbiAgIDk6XFx0XFx0ICBjb21tdW5pY2F0aW9uIGxpbmsgYmV0d2VlbiBWTSBndWVzdHMuXFxuICAxMDpcXHRcXG4gIDExOlxcdGNvbmZpZyBBRklVQ1ZcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gUzM5MFxcbiAgMTM6XFx0XFx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXFxuICAxNDpcXHRcXHRwcm9tcHQgXFxcIkFGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KVxcXCJcXG4gIDE1OlxcdFxcdGhlbHBcXG4gIDE2OlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBBRl9JVUNWIHNvY2tldCBhcHBsaWNhdGlvbnNcXG4gIDE3OlxcdFxcdCAgYmFzZWQgb24gei9WTSBpbnRlci11c2VyIGNvbW11bmljYXRpb24gdmVoaWNsZSBvciBiYXNlZCBvblxcbiAgMTg6XFx0XFx0ICBIaXBlclNvY2tldHMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM3OjM0Ljk2MTYwMTk3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2Nzg0MDAxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBNYWtlZmlsZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgaXQncyBhYm91dCBgQUZJVUNWYC4gUmlnaHQsIGBBRklVQ1ZgIGRlcGVuZHMgb24gYFMzOTBgIGFuZCwgYnkgZGVmYXVsdCwgdGFrZXMgYG1gIGlmIGVpdGhlciBgUUVUSF9MM2Agb3IgYElVQ1ZgIGFyZSBlbmFibGVkLiBDcnVjaWFsbHksIGl0IGRvZXNuJ3QgKnN0cmljdGx5KiBkZXBlbmQgb24gYElVQ1ZgLiBCZWZvcmUgdGhpcywgdGhlIGBuZXQvTWFrZWZpbGVgIGhhZCB0aGlzIGRlcGVuZGVuY3k6IGBvYmotJChDT05GSUdfSVVDVikgKz0gaXVjdi9gLiBUaGlzIG1lYW50IGlmIGBDT05GSUdfSVVDVmAgd2Fzbid0IHNldCwgdGhlIGBuZXQvaXVjdi9gIGRpcmVjdG9yeSB3YXNuJ3QgZXZlbiBsb29rZWQgYXQsIGFuZCB0aHVzIGBhZl9pdWN2Lm9gIHdvdWxkbid0IGJlIGJ1aWx0LCBldmVuIGlmIGBDT05GSUdfQUZJVUNWYCAqd2FzKiBzZXQuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gZml4IHRoYXQsIGFsd2F5cyB2aXNpdGluZyBgbmV0L2l1Y3YvYCBzbyBgYWZfaXVjdi5vYCBjYW4gYmUgYnVpbHQgd2hlbiBgQ09ORklHX0FGSVVDVmAgaXMgZW5hYmxlZCBldmVuIGlmIGBDT05GSUdfSVVDVmAgaXMgbm90LlxuXG5TaW5jZSBpdCdzIGp1c3QgYSBNYWtlZmlsZSBjaGFuZ2UsIEkgaGF2ZSB0byBhc2sgbXlzZWxmOiBkb2VzIHRoaXMgY2hhbmdlIGhvdyB0aGluZ3MgZXhlY3V0ZSBhdCBhbGw/IEl0J3MgcmVhbGx5IGp1c3QgZW5hYmxpbmcgdGhlIGJ1aWxkIG9mIGBhZl9pdWN2YCB3aXRob3V0IHRoZSBuZWVkIGZvciBgSVVDVmAuIFRoaW5raW5nIGFib3V0IHRoaXMgZnVydGhlciwgYEFGSVVDVmAgZGVwZW5kcyBvbiBgUzM5MGAuIEEgdGhvdWdodDogY2FuIHdlIGZ1enogdGhpcz8gYEFGSVVDVmAgaXMgYW4gYWRkcmVzcyBmYW1pbHkgKGBBRl9JVUNWYCksIGFuZCBpZiB3ZSB3YW50IHRvIGZ1enogdGhpcywgdGhlIGZpcnN0IHN0ZXAgaXMgdG8gZW5hYmxlIGBBRklVQ1ZgLiBIb3dldmVyLCBgQUZJVUNWYCBpcyAqc3BlY2lmaWMqIHRvIGBTMzkwYC4gU28gbm93IEknbSB0aGlua2luZywgY2FuIHdlIGZ1enogYFMzOTBgLXNwZWNpZmljIGNvZGU/XG5cblN5emthbGxlciBkb2Vzbid0IGZ1enogYFMzOTBgIGJ5IGRlZmF1bHQsIGRvZXMgaXQ/IE1heWJlIHdlIGNhbiBmaWd1cmUgb3V0IGEgd2F5IHRvIG1ha2UgaXQuIEJ1dCwgd2FpdC4uLiBzaW5jZSB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIHRoZSBNYWtlZmlsZSwgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIEMgY29kZSBpdHNlbGYuIEhvd2V2ZXIsIGl0ICpkb2VzKiBlbmFibGUgYnVpbGRpbmcgYSBtb2R1bGUsIHRoYXQsIHVuZGVyIHNwZWNpZmljIGNvbmZpZ3MsIHdvdWxkIGhhdmUgYmVlbiB1bnJlYWNoYWJsZS4gU28gdGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFllcywgaXQgZW5hYmxlcyBgQUZfSVVDVmAgc29ja2V0cyB3aXRob3V0IGBJVUNWYC4gTm93LCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgbG9vayBhdCBgYWZfaXVjdi5jYCBhbmQgc2VlIGlmIHRoZXJlIGlzIGFueSBgQUZfSVVDVmAgc29ja2V0IHJlZ2lzdHJhdGlvbiB0aGF0IGlzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjI1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzc6NDIuNjQwMDA1MDMyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDA3MzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZl9pdWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JVUNWKVxcdCs9IGl1Y3Yub1xcbm5ldC9pdWN2L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0FGSVVDVilcXHQrPSBhZl9pdWN2Lm9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMi1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTM6I2RlZmluZSBwcl9mbXQoZm10KSBcXFwiYWZfaXVjdjogXFxcIiBmbXRcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQtXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjM2OiNpbmNsdWRlIFxcdTAwM2NuZXQvaXVjdi9hZl9pdWN2LmhcXHUwMDNlXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTM3LVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ4PXN0YXRpYyBzdHJ1Y3QgaXVjdl9pbnRlcmZhY2UgKnByX2l1Y3Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5OnN0YXRpYyBzdHJ1Y3QgaXVjdl9oYW5kbGVyIGFmX2l1Y3ZfaGFuZGxlcjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTAtXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTk3PXN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjAwLVxcdHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YgPSBpdWN2X3NrKHNvY2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDE6XFx0c3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyICpwaHNfaGRyO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDItXFx0aW50IGVyciwgY29uZmlybV9yZWN2ID0gMDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0zNTU9c3RhdGljIGludCBpdWN2X3NlbmRfY3RybChzdHJ1Y3Qgc29jayAqc2ssIHU4IGZsYWdzKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTM2Mi1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzYzOlxcdGJsZW4gPSBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSArXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTM2NC1cXHQgICAgICAgTExfUkVTRVJWRURfU1BBQ0UoaXVjdi1cXHUwMDNlaHNfZGV2KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02NzM9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY5MS1cXHR9XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY5MjpcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX2Nvbm5lY3QoaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlcixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjkzLVxcdFxcdFxcdFxcdCAgICBzYS1cXHUwMDNlc2l1Y3ZfdXNlcl9pZCwgTlVMTCwgdXNlcl9kYXRhLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTkwMj1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05ODUtXFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjk4NjpcXHRcXHRoZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIpICtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTg3LVxcdFxcdFxcdCAgIExMX1JFU0VSVkVEX1NQQUNFKGl1Y3YtXFx1MDAzZWhzX2Rldik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTUzOD1zdGF0aWMgaW50IGl1Y3Zfc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTU3MS1cXHRcXHR2YWwgPSAoaXVjdi1cXHUwMDNlaHNfZGV2KSA/IGl1Y3YtXFx1MDAzZWhzX2Rldi1cXHUwMDNlbXR1IC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTU3MjpcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSAtIEVUSF9ITEVOIDpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTU3My1cXHRcXHRcXHRcXHQweDdmZmZmZmZmO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE1OTM9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjA0LVxcdEVCQ0FTQyhzcmNfbmFtZSwgOCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2MDU6XFx0LyogRmluZCBvdXQgaWYgdGhpcyBwYXRoIGJlbG9uZ3MgdG8gYWZfaXVjdi4gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYwNi1cXHRyZWFkX2xvY2soXFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjcxLVxcdHBhdGgtXFx1MDAzZW1zZ2xpbSA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjcyOlxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfYWNjZXB0KHBhdGgsIFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIG51c2VyX2RhdGEsIG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzMtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4MDU9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja19zaHV0ZG93bihzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCB1OCBpcHVzZXJbMTZdKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4MTYtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4MTc6c3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyID0ge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODE4LVxcdC5wYXRoX3BlbmRpbmdcXHRcXHQ9IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xODI3PXN0YXRpYyB2b2lkIGFmaXVjdl9zd2FwX3NyY19kZXN0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4Mjgte1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODI5OlxcdHN0cnVjdCBhZl9pdWN2X3RyYW5zX2hkciAqdHJhbnNfaGRyID0gaXVjdl90cmFuc19oZHIoc2tiKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTgzMC1cXHRjaGFyIHRtcElEWzhdO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4NTA9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg1MS17XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4NTI6XFx0c3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyICp0cmFuc19oZHIgPSBpdWN2X3RyYW5zX2hkcihza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODUzLVxcdHN0cnVjdCBzb2NrICpuc2s7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTk5Nz1zdGF0aWMgaW50IGFmaXVjdl9oc19jYWxsYmFja19yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjAxNi1cXHQvKiB3cml0ZSBzdHVmZiBmcm9tIGl1Y3ZfbXNnIHRvIHNrYiBjYiAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDE3OlxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBhZl9pdWN2X3RyYW5zX2hkcikpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDE4LVxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjA0Mz1zdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDQ3LVxcdHN0cnVjdCBpdWN2X3NvY2sgKml1Y3Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwNDg6XFx0c3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyICp0cmFuc19oZHI7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNDktXFx0aW50IGVyciA9IE5FVF9SWF9TVUNDRVNTO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMjMtXFx0XFx0ZXJyID0gYWZpdWN2X2hzX2NhbGxiYWNrX3dpbihzaywgc2tiKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEyNDpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gPT0gc2l6ZW9mKHN0cnVjdCBhZl9pdWN2X3RyYW5zX2hkcikpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEyNS1cXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyODA9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA1LVxcdGlmIChwcl9pdWN2KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDY6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlaXVjdl9yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwNy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTktXFx0aWYgKHByX2l1Y3YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMjA6XFx0XFx0cHJfaXVjdi1cXHUwMDNlaXVjdl91bnJlZ2lzdGVyKFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzIxLW91dF9zb2NrOlxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMjk9c3RhdGljIHZvaWQgX19leGl0IGFmaXVjdl9leGl0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzMS1cXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMzMjpcXHRcXHRwcl9pdWN2LVxcdTAwM2VpdWN2X3VucmVnaXN0ZXIoXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMzMtXFxuLS1cXG5uZXQvaXVjdi9pdWN2LmMtMTItICpcXHRGcml0eiBFbGZlcnQgKGVsZmVydEBkZS5pYm0uY29tLCBmZWxmZXJ0QG1pbGxlbnV4LmNvbSlcXG5uZXQvaXVjdi9pdWN2LmM6MTM6ICogICAgUmV3cml0dGVuIGZvciBhZl9pdWN2Olxcbm5ldC9pdWN2L2l1Y3YuYy0xNC0gKlxcdE1hcnRpbiBTY2h3aWRlZnNreSBcXHUwMDNjc2Nod2lkZWZza3lAZGUuaWJtLmNvbVxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzc6NDIuODMwMDg2NTg5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwODU3NTk0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgYW5kIEltcGFjdCBvZiBhbiBBRl9JVUNWIEJ1aWxkIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGBhZl9pdWN2YCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgdGhlIGFkZHJlc3MgZmFtaWx5IGZvciBJVUNWIGNvbW11bmljYXRpb24uIFRoZSBwYXRjaCBpcyBzaW1wbGUsIGp1c3QgdHdlYWtpbmcgdGhlIGBuZXQvTWFrZWZpbGVgIHRvIGVuc3VyZSBgYWZfaXVjdi5vYCBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19BRklVQ1ZgIGlzIHNldCBidXQgYENPTkZJR19JVUNWYCBpcyAqbm90Ki4gTXkgZmlyc3QgdGhvdWdodCBpczogSXMgdGhpcyBldmVuIHJlbGV2YW50IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlIHZlcnkgZW52aXJvbm1lbnRzIG15IGZ1enppbmcgdGFyZ2V0cyBhcmUgc3VwcG9zZWQgdG8gY292ZXI/XG5cbmBDT05GSUdfQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYCwgd2hpY2ggdGhyb3dzIHVwIGEgZmxhZy4gU3l6a2FsbGVyLCBteSBnby10byBmdXp6aW5nIHRvb2wsIHJ1bnMgb24geDg2XzY0LCBhcm02NCwgYW5kIG90aGVycy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHRha2luZyBzeXprYWxsZXIncyBTMzkweCBzdXBwb3J0IGludG8gYWNjb3VudC4gKkRvZXMqIGl0IHJ1biBvbiBTMzkwPyBZZXMsIGl0IGRvZXMuIFNvLCB0byB0ZXN0IHRoaXMgcGF0Y2ggcHJvcGVybHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX0FGSVVDVmAgaXMgZW5hYmxlZCBhbmQgdGhhdCBgQ09ORklHX0lVQ1ZgIGlzIGVpdGhlciBkaXNhYmxlZCBvciBlbmFibGVkLCBidXQgdGhlIHBhdGNoIGZpeGVzIHRoZSBzY2VuYXJpbyB3aGVyZSBJVUNWIGlzIGRpc2FibGVkLiBTaW5jZSBgQ09ORklHX0FGSVVDVmAgZGVwZW5kcyBvbiBgUzM5MGAsIGNhbiBJIGV2ZW4gY29tcGlsZSB0aGlzIG9uIHg4Nl82ND8gTm8uXG5cblRoZSBwcm9tcHQsIGhvd2V2ZXIsIHNwZWNpZmljYWxseSBjYWxscyBvdXQgaW1wb3NzaWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEFuZCBRRU1VICpkb2VzKiBzdXBwb3J0IHMzOTB4IGVtdWxhdGlvbiwgc28gdGhlIGNvZGUgcGF0aCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlLiBCdXQgaXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBvciBqdXN0IGEgYnVpbGQgZml4PyBUaGUgY2hhbmdlIGl0c2VsZiBqdXN0IG1ha2VzIHRoZSBgYWZfaXVjdmAgbW9kdWxlIGJ1aWxkYWJsZSB3aGVuIGBDT05GSUdfSVVDVmAgaXMgZGlzYWJsZWQuIFByZXZpb3VzbHksIGlmIGBDT05GSUdfSVVDVmAgd2FzIG9mZiwgYGFmX2l1Y3ZgIHdvdWxkbid0IGJlIGJ1aWx0LiBOb3cgaXQgKndpbGwqIGJlLlxuXG5TbywgaXQncyBub3QganVzdCBhIHR3ZWFrOyBpdCAqZW5hYmxlcyogYSBtb2R1bGUsIGBhZl9pdWN2YCwgdG8gYmUgYnVpbHQgYW5kLCBjcml0aWNhbGx5LCBsb2FkZWQuIFRoYXQgbWVhbnMgc29ja2V0cyBvZiB0aGUgYEFGX0lVQ1ZgIGZhbWlseSB3aWxsIGJlY29tZSBhdmFpbGFibGUuIE5vdywgaXMgdGhpcyAqd29ydGgqIGZ1enppbmc/IEFic29sdXRlbHkhIEVuYWJsaW5nIGEgbmV3IGFkZHJlc3MgZmFtaWx5IGZvciBwb3RlbnRpYWwgZnV6emVyIGludGVyYWN0aW9uIGlzIHZhbHVhYmxlLlxuXG5Ib3dldmVyLCBhIG5hZ2dpbmcgdGhvdWdodDogSWYgYENPTkZJR19JVUNWYCBpcyAqZGlzYWJsZWQqLCBgcHJfaXVjdmAgKHRoZSBJVUNWIGludGVyZmFjZSwgcHJlc3VtYWJseSBhIGZ1bmN0aW9uIHBvaW50ZXIpIHdpbGwgYmUgTlVMTC4gTGV0J3MgZGlnIGludG8gYGFmX2l1Y3YuY2AgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGEgTlVMTCBgcHJfaXVjdmAgYmVjYXVzZSB0aGF0J3MgdGhlIGNvcmUgb2YgdGhlIHBvdGVudGlhbCBpc3N1ZSBub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBpZiBhIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcgSVVDViBmdW5jdGlvbnMgaXMgbWFkZSB3aGVuIHRoZXkgYXJlIG5vdCBpbml0aWFsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg3MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjozNzo1Mi45MTU4NDk2ODFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzQwMTcyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcl9pdWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9NDI9c3RhdGljIHN0cnVjdCBwcm90byBpdWN2X3Byb3RvID0ge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ3LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0ODpzdGF0aWMgc3RydWN0IGl1Y3ZfaW50ZXJmYWNlICpwcl9pdWN2O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OS1zdGF0aWMgc3RydWN0IGl1Y3ZfaGFuZGxlciBhZl9pdWN2X2hhbmRsZXI7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzM1PXN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDYtXFx0XFx0XFx0QVNDRUJDKHVzZXJfZGF0YSwgc2l6ZW9mKHVzZXJfZGF0YSkpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNDc6XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDgtXFx0XFx0fSBlbHNlXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjM0OTpcXHRcXHRcXHRwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIE5VTEwpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNTAtXFx0XFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDUyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDc4LVxcdG1lbXNldChcXHUwMDI2aXVjdi1cXHUwMDNlaW5pdCwgMCwgc2l6ZW9mKGl1Y3YtXFx1MDAzZWluaXQpKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDc5OlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00ODAtXFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU2OD1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU5OS1cXHQvKiBCaW5kIHRoZSBzb2NrZXQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjAwOlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MDEtXFx0XFx0aWYgKCFtZW1jbXAoc2EtXFx1MDAzZXNpdWN2X3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KSlcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02Mjgtdm1fYmluZDpcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjI5OlxcdGlmIChwcl9pdWN2KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTYzMC1cXHRcXHQvKiB1c2UgbG9jYWwgdXNlcmlkIGZvciBiYWNrd2FyZCBjb21wYXQgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02NTE9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY1NS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjU2OlxcdGlmICh1bmxpa2VseSghcHJfaXVjdikpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY1Ny1cXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02NzM9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY5MS1cXHR9XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY5MjpcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX2Nvbm5lY3QoaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlcixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjkzLVxcdFxcdFxcdFxcdCAgICBzYS1cXHUwMDNlc2l1Y3ZfdXNlcl9pZCwgTlVMTCwgdXNlcl9kYXRhLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTg5MT1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9pcHJtKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsIHN0cnVjdCBpdWN2X21lc3NhZ2UgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy04OTctXFx0cHJtZGF0YVs3XSA9IDB4ZmYgLSAodTgpIHNrYi1cXHUwMDNlbGVuO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo4OTg6XFx0cmV0dXJuIHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2Vfc2VuZChwYXRoLCBtc2csIElVQ1ZfSVBSTURBVEEsIDAsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTg5OS1cXHRcXHRcXHRcXHQgKHZvaWQgKikgcHJtZGF0YSwgOCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTAyPXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTUtXFx0XFx0XFx0aWYgKGVyciA9PSAweDE1KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNTY6XFx0XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihpdWN2LVxcdTAwM2VwYXRoLCBOVUxMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA1Ny1cXHRcXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZpdWN2LVxcdTAwM2Vza2JzX2luX3htaXQpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNzQtXFx0XFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDc1OlxcdFxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVxcdTAwM2VwYXRoLCBcXHUwMDI2dHhtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNzYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIElVQ1ZfSVBCVUZMU1QsIDAsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA3OC1cXHRcXHR9IGVsc2UgeyAvKiBub24tSVBSTSBMaW5lYXIgc2tiICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNzk6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZ0eG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA4MC1cXHRcXHRcXHRcXHRcXHQwLCAwLCAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4pO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTExNDQ9c3RhdGljIHZvaWQgaXVjdl9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExNzUtXFx0XFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTc2OlxcdFxcdFxcdHJjID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9yZWNlaXZlKHBhdGgsIG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE3Ny1cXHRcXHRcXHRcXHRcXHQgICAgICBJVUNWX0lQQlVGTFNULFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExNzktXFx0XFx0fSBlbHNlIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE4MDpcXHRcXHRcXHRyYyA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2VfcmVjZWl2ZShwYXRoLCBtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExODEtXFx0XFx0XFx0XFx0XFx0ICAgICAgbXNnLVxcdTAwM2VmbGFncyBcXHUwMDI2IElVQ1ZfSVBSTURBVEEsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQwND1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0MzItXFx0XFx0XFx0dHhtc2cudGFnID0gMDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQzMzpcXHRcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNnR4bXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDM0LVxcdFxcdFxcdFxcdElVQ1ZfSVBSTURBVEEsIDAsICh2b2lkICopIGlwcm1fc2h1dGRvd24sIDgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTUtXFx0XFx0ICAgIGl1Y3YtXFx1MDAzZXBhdGgpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ1NjpcXHRcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX3F1aWVzY2UoaXVjdi1cXHUwMDNlcGF0aCwgTlVMTCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTctXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNTkzPXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYzMC1cXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IElVQ1ZfTElTVEVOKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2MzE6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjMyLVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MzctXFx0aWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTYzODpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MzktXFx0XFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0NS1cXHRpZiAoIW5zaykge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjQ2OlxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0Ny1cXHRcXHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjcxLVxcdHBhdGgtXFx1MDAzZW1zZ2xpbSA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjcyOlxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfYWNjZXB0KHBhdGgsIFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIG51c2VyX2RhdGEsIG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzMtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2OTg9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja19yeChzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2cpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcwNi1cXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MDc6XFx0XFx0cHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9yZWplY3QocGF0aCwgbXNnKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcwOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI4MD1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTEtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTI6XFx0XFx0cHJfaXVjdiA9IFxcdTAwMjZpdWN2X2lmO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjkzLVxcdH0gZWxzZSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTQtXFx0XFx0bWVtc2V0KFxcdTAwMjZpdWN2X3VzZXJpZCwgMCwgc2l6ZW9mKGl1Y3ZfdXNlcmlkKSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTU6XFx0XFx0cHJfaXVjdiA9IE5VTEw7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTYtXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDQtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDU6XFx0aWYgKHByX2l1Y3YpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMwNjpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VpdWN2X3JlZ2lzdGVyKFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA3LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxOC1vdXRfbm90aWZpZXI6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMTk6XFx0aWYgKHByX2l1Y3YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMjA6XFx0XFx0cHJfaXVjdi1cXHUwMDNlaXVjdl91bnJlZ2lzdGVyKFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzIxLW91dF9zb2NrOlxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMjk9c3RhdGljIHZvaWQgX19leGl0IGFmaXVjdl9leGl0KHZvaWQpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMzAte1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzMxOlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzMyOlxcdFxcdHByX2l1Y3YtXFx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzc6NTMuMDk5MjY2Mjg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzg5MjQ5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYHByX2l1Y3ZgIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYHByX2l1Y3ZgIHZhcmlhYmxlIGdldHMgc2V0IHVwLiBJdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBpdCdzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvIGBcdTAwMjZpdWN2X2lmYCwgYXNzdW1pbmcgYGl1Y3ZfaWZgIGlzIGFjdHVhbGx5IGF2YWlsYWJsZS4gSSBrbm93IGZyb20gcGFzdCBleHBlcmllbmNlIHRoYXQgYGl1Y3ZfaWZgIGlzIGRlZmluZWQgYW5kIGV4cG9ydGVkIGJ5IHRoZSBgaXVjdi5jYCBtb2R1bGUsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuXG5cbkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIHdoYXQgaGFwcGVucyBpZiBgQ09ORklHX0lVQ1ZgIGlzbid0IGVuYWJsZWQ/IElmIGBDT05GSUdfSVVDVmAgaXMgZGlzYWJsZWQsIHRoZSBidWlsZCBzeXN0ZW0gd29uJ3QgY3JlYXRlIGBpdWN2Lm9gLCBhbmQgdGhlcmVmb3JlLCBgaXVjdl9pZmAgd29uJ3QgYmUgZGVmaW5lZC4gU28sIGluIHRoYXQgc2NlbmFyaW8sIGBwcl9pdWN2YCBzaG91bGQgbmV2ZXIgZ2V0IGluaXRpYWxpemVkLCByaWdodD9cblxuVGhlIHJlYWxseSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpczogaG93IGRvZXMgdGhlIGBhZl9pdWN2LmNgIG1vZHVsZSAqa25vdyogd2hldGhlciBvciBub3QgYGl1Y3ZfaWZgIGV4aXN0cz8gSXQgY2FuJ3QganVzdCBibGluZGx5IHVzZSBpdC4gSXQgbXVzdCBiZSBjaGVja2luZyBzb21laG93LiBMZXQgbWUgZGlnIGludG8gYGFmaXVjdl9pbml0YCB0byBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtIHRoYXQgZW5zdXJlcyB0aGlzIGRlcGVuZGVuY3kgaXMgaGFuZGxlZCBncmFjZWZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjozNzo1Ny4yMzgxOTUwMTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI4MDpcXHRzdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxcbjIyODE6XFx0e1xcbjIyODI6XFx0XFx0aW50IGVycjtcXG4yMjgzOlxcdFxcbjIyODQ6XFx0XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19JVUNWKSkge1xcbjIyODU6XFx0XFx0XFx0Y3BjbWQoXFxcIlFVRVJZIFVTRVJJRFxcXCIsIGl1Y3ZfdXNlcmlkLCBzaXplb2YoaXVjdl91c2VyaWQpLCBcXHUwMDI2ZXJyKTtcXG4yMjg2OlxcdFxcdFxcdGlmICh1bmxpa2VseShlcnIpKSB7XFxuMjI4NzpcXHRcXHRcXHRcXHRXQVJOX09OKGVycik7XFxuMjI4ODpcXHRcXHRcXHRcXHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xcbjIyODk6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjI5MDpcXHRcXHRcXHR9XFxuMjI5MTpcXHRcXG4yMjkyOlxcdFxcdFxcdHByX2l1Y3YgPSBcXHUwMDI2aXVjdl9pZjtcXG4yMjkzOlxcdFxcdH0gZWxzZSB7XFxuMjI5NDpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNml1Y3ZfdXNlcmlkLCAwLCBzaXplb2YoaXVjdl91c2VyaWQpKTtcXG4yMjk1OlxcdFxcdFxcdHByX2l1Y3YgPSBOVUxMO1xcbjIyOTY6XFx0XFx0fVxcbjIyOTc6XFx0XFxuMjI5ODpcXHRcXHRlcnIgPSBwcm90b19yZWdpc3RlcihcXHUwMDI2aXVjdl9wcm90bywgMCk7XFxuMjI5OTpcXHRcXHRpZiAoZXJyKVxcbjIzMDA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjMwMTpcXHRcXHRlcnIgPSBzb2NrX3JlZ2lzdGVyKFxcdTAwMjZpdWN2X3NvY2tfZmFtaWx5X29wcyk7XFxuMjMwMjpcXHRcXHRpZiAoZXJyKVxcbjIzMDM6XFx0XFx0XFx0Z290byBvdXRfcHJvdG87XFxuMjMwNDpcXHRcXG4yMzA1OlxcdFxcdGlmIChwcl9pdWN2KSB7XFxuMjMwNjpcXHRcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VpdWN2X3JlZ2lzdGVyKFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xcbjIzMDc6XFx0XFx0XFx0aWYgKGVycilcXG4yMzA4OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3NvY2s7XFxuMjMwOTpcXHRcXHR9XFxuMjMxMDpcXHRcXG4yMzExOlxcdFxcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2YWZpdWN2X25ldGRldl9ub3RpZmllcik7XFxuMjMxMjpcXHRcXHRpZiAoZXJyKVxcbjIzMTM6XFx0XFx0XFx0Z290byBvdXRfbm90aWZpZXI7XFxuMjMxNDpcXHRcXG4yMzE1OlxcdFxcdGRldl9hZGRfcGFjayhcXHUwMDI2aXVjdl9wYWNrZXRfdHlwZSk7XFxuMjMxNjpcXHRcXHRyZXR1cm4gMDtcXG4yMzE3OlxcdFxcbjIzMTg6XFx0b3V0X25vdGlmaWVyOlxcbjIzMTk6XFx0XFx0aWYgKHByX2l1Y3YpXFxuMjMyMDpcXHRcXHRcXHRwcl9pdWN2LVxcdTAwM2VpdWN2X3VucmVnaXN0ZXIoXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XFxuMjMyMTpcXHRvdXRfc29jazpcXG4yMzIyOlxcdFxcdHNvY2tfdW5yZWdpc3RlcihQRl9JVUNWKTtcXG4yMzIzOlxcdG91dF9wcm90bzpcXG4yMzI0OlxcdFxcdHByb3RvX3VucmVnaXN0ZXIoXFx1MDAyNml1Y3ZfcHJvdG8pO1xcbjIzMjU6XFx0b3V0OlxcbjIzMjY6XFx0XFx0cmV0dXJuIGVycjtcXG4yMzI3OlxcdH1cXG4yMzI4OlxcdFxcbjIzMjk6XFx0c3RhdGljIHZvaWQgX19leGl0IGFmaXVjdl9leGl0KHZvaWQpXFxuMjMzMDpcXHR7XFxuMjMzMTpcXHRcXHRpZiAocHJfaXVjdilcXG4yMzMyOlxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG4yMzMzOlxcdFxcbjIzMzQ6XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXFx1MDAyNmFmaXVjdl9uZXRkZXZfbm90aWZpZXIpO1xcbjIzMzU6XFx0XFx0ZGV2X3JlbW92ZV9wYWNrKFxcdTAwMjZpdWN2X3BhY2tldF90eXBlKTtcXG4yMzM2OlxcdFxcdHNvY2tfdW5yZWdpc3RlcihQRl9JVUNWKTtcXG4yMzM3OlxcdFxcdHByb3RvX3VucmVnaXN0ZXIoXFx1MDAyNml1Y3ZfcHJvdG8pO1xcbjIzMzg6XFx0fVxcbjIzMzk6XFx0XFxuMjM0MDpcXHRtb2R1bGVfaW5pdChhZml1Y3ZfaW5pdCk7XFxuMjM0MTpcXHRtb2R1bGVfZXhpdChhZml1Y3ZfZXhpdCk7XFxuMjM0MjpcXHRcXG4yMzQzOlxcdE1PRFVMRV9BVVRIT1IoXFxcIkplbm5pZmVyIEh1bnQgXFx1MDAzY2plbmh1bnRAdXMuaWJtLmNvbVxcdTAwM2VcXFwiKTtcXG4yMzQ0OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiSVVDViBTb2NrZXRzIHZlciBcXFwiIFZFUlNJT04pO1xcbjIzNDU6XFx0TU9EVUxFX1ZFUlNJT04oVkVSU0lPTik7XFxuMjM0NjpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuMjM0NzpcXHRNT0RVTEVfQUxJQVNfTkVUUFJPVE8oUEZfSVVDVik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM3OjU3LjIzODM5NDAxMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTExNjUxMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgSVVDViBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGhlIGNvZGUncyB1c2luZyBgSVNfRU5BQkxFRChDT05GSUdfSVVDVilgLiBSaWdodCwgdGhhdCdzIHRoZSBrZXkuIElmIGBDT05GSUdfSVVDVmAgaXNuJ3QgZmxpcHBlZCBvbiBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgdGhlbiBgcHJfaXVjdmAgZ2V0cyBzZXQgdG8gYE5VTExgLiBCdXQgdGhhdCBkb2Vzbid0IG1lYW4gSSBjYW4ndCB1c2UgSGlwZXJTb2NrZXRzIHRocm91Z2ggYGFmX2l1Y3ZgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gV2FpdCBhIG1pbnV0ZS4uLiBJIHNlZSB0aGF0IHRoZSBgQUZfSVVDVmAgc29ja2V0IGZhbWlseSAqaXMqIHJlZ2lzdGVyZWQgd2l0aCBgc29ja19yZWdpc3RlcihcdTAwMjZpdWN2X3NvY2tfZmFtaWx5X29wcylgLiBUaGlzIGlzIGdvb2QsIHdoaWNoIG1lYW5zIGBzb2NrZXQoQUZfSVVDViwgLi4uKWAgY2FsbHMgd2lsbCBmdW5jdGlvbiBldmVuIGlmIGBDT05GSUdfSVVDVmAgaXMgbm90IGVuYWJsZWQhIE9rYXksIHRoYXQncyBleGFjdGx5IHdoYXQgSSB3YW50ZWQgdG8gY29uZmlybS4gU28sIHRob3NlIHNvY2tldCBjYWxscyB3aWxsIHRoZW4gdXNlIHRoZSBgaXVjdl9zb2NrX2ZhbWlseV9vcHNgIHN0cnVjdHVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGl1Y3Zfc29ja19mYW1pbHlfb3BzYCBhbmQgdW5kZXJzdGFuZCBob3cgdGhhdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MjgsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjozODowMS4zNTAwNDk1MDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjQ4MzQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3NvY2tfZmFtaWx5X29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTIyNDA9c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNjgtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNjk6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGl1Y3Zfc29ja19mYW1pbHlfb3BzID0ge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjcwLVxcdC5mYW1pbHlcXHQ9IEFGX0lVQ1YsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI4MD1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDAtXFx0XFx0Z290byBvdXQ7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDE6XFx0ZXJyID0gc29ja19yZWdpc3RlcihcXHUwMDI2aXVjdl9zb2NrX2ZhbWlseV9vcHMpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzAyLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM4OjAxLjg0MjUzOTA1NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTg3NzU5NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgSW1wbGljYXRpb25zIG9mIEFGX0lVQ1YgU29ja2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGFsbG93cyBgQUZfSVVDVmAgc29ja2V0cyB0byBiZSBidWlsdCBldmVuIHdoZW4gYENPTkZJR19JVUNWYCBpcyBkaXNhYmxlZCwgYnV0IGBDT05GSUdfQUZJVUNWYCBpcyBlbmFibGVkLiBUaGlzIG1ha2VzIHRoZSBzb2NrZXQgZmFtaWx5IGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UsIHdoaWNoIGltbWVkaWF0ZWx5IHRyaWdnZXJzIHRoZSBmdXp6aW5nIGFsYXJtIGJlbGxzLiBJcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5ISBJdCBvcGVucyB1cCBhIHdob2xlIG5ldyBzb2NrZXQgZmFtaWx5IHRoYXQgd2FzIHByZXZpb3VzbHkgcG90ZW50aWFsbHkgdW5yZWFjaGFibGUgdW5kZXIgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5CdXQgd2FpdCwgaG9sZCBvbi4gSWYgYENPTkZJR19JVUNWYCB3YXMgKmFscmVhZHkqIGVuYWJsZWQsIGBhZl9pdWN2YCB3YXMgYWxyZWFkeSBiZWluZyBidWlsdCBhbmQgdGhlb3JldGljYWxseSBmdXp6ZWQuIFRoaXMgcGF0Y2ggaXNuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyBjb2RlLCBqdXN0IGZpeGluZyBhIGJ1aWxkIGRlcGVuZGVuY3kgaW4gdGhlIE1ha2VmaWxlLlxuXG5BaGEsIGJ1dCBoZXJlJ3MgdGhlIGtpY2tlciEgSWYgYENPTkZJR19JVUNWYCBpcyBkaXNhYmxlZCwgdGhlIGBwcl9pdWN2YCBmdW5jdGlvbiBwb2ludGVyIGlzIGdvaW5nIHRvIGJlIE5VTEwuIERvZXMgYGFmX2l1Y3ZgIGV2ZW4gKndvcmsqIHByb3Blcmx5IGluIHRoYXQgc2NlbmFyaW8/IFllcywgaXQgZmFsbHMgYmFjayB0byBIaXBlclNvY2tldHMuIEJ1dCB0aGF0IGZhbGxiYWNrIHBhdGguLi4gd2FzIGl0ICpldmVyKiBhY3R1YWxseSB0ZXN0ZWQgb3IgZnV6emVkPyBJZiBgQ09ORklHX0lVQ1ZgIHdhcyBkaXNhYmxlZCwgYGFmX2l1Y3ZgIHdhc24ndCBidWlsdCBhdCBhbGwsIHNvIHRoZSBmYWxsYmFjayBwYXRoIHdoZXJlIGBwcl9pdWN2YCBpcyBOVUxMICpkZWZpbml0ZWx5KiB3YXNuJ3QgZnV6emVkLCBhdCBsZWFzdCBub3QgaW4gdGhlIHN0YW5kYXJkIGZ1enppbmcgY29uZmlncy5cblxuT2theSwgbGV0J3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBFdmVuIGlmIGBDT05GSUdfSVVDVmAgKndhcyogZW5hYmxlZCwgYHByX2l1Y3ZgIGlzIG9ubHkgc2V0IHRvIGBcdTAwMjZpdWN2X2lmYCAqaWYqIGBtYWNoaW5lX2lzX3ZtKClgIGlzIHRydWUuIEFuZCB3aGF0IGlmIHRoZSBmdXp6ZXIgaXMgcnVubmluZyBvbiBzb21ldGhpbmcgbGlrZSBRRU1VICh3aGljaCBpcyBOT1Qgei9WTSwgYnV0IGNvdWxkIGJlIEtWTSwgb3Igc29tZXRoaW5nIHNpbWlsYXIpPyBJbiB0aGF0IGNhc2UsIGBtYWNoaW5lX2lzX3ZtKClgIG1pZ2h0IGJlIGZhbHNlISBTbywgaW4gc29tZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLCB0aGUgZmFsbGJhY2sgcGF0aCBtaWdodCBzdGlsbCBiZSBlbmdhZ2VkIGV2ZW4gd2hlbiBgQ09ORklHX0lVQ1ZgIGlzIGVuYWJsZWQsIGFuZCB0aGF0J3MgKmNyaXRpY2FsKi4gSSBuZWVkIHRvIGNoZWNrIGhvdyBgbWFjaGluZV9pc192bSgpYCBpcyBiZWluZyBldmFsdWF0ZWQgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIFRoaXMgY291bGQgYmUgYSBuZXcsIHVuZXhwbG9yZWQgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDEyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM4OjA4LjgzMDMwMTk0NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk2NDk4NDQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNoaW5lX2lzX3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM9NzE9c3RhdGljIHZvaWQgZGV0ZWN0X2RpYWcyODgodm9pZClcXG4tLVxcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy03Ni1cXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6Nzc6XFx0YWN0aW9uID0gbWFjaGluZV9pc192bSgpID8gKHVuc2lnbmVkIGxvbmcpY21kIDogTFBBUldEVF9SRVNUQVJUO1xcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo3ODpcXHRsZW4gPSBtYWNoaW5lX2lzX3ZtKCkgPyBzaXplb2YoY21kKSA6IDA7XFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTc5LVxcdGlmIChfX2RpYWcyODgoV0RUX0ZVTkNfSU5JVCwgTUlOX0lOVEVSVkFMLCBhY3Rpb24sIGxlbikpXFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM9MTA4PWludCBfX2luaXQgaHlwZnNfZGlhZzBjX2luaXQodm9pZClcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTA5LXtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6MTEwOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMTEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM9MTE5PXZvaWQgaHlwZnNfZGlhZzBjX2V4aXQodm9pZClcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTIwLXtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6MTIxOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMjItXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM9MTIzPWludCBoeXBmc192bV9pbml0KHZvaWQpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTI0LXtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYzoxMjU6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTI2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM9MTM3PXZvaWQgaHlwZnNfdm1fZXhpdCh2b2lkKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTEzOC17XFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM6MTM5OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTE0MC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYz0xNDg9c3RhdGljIHNzaXplX3QgaHlwZnNfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTE3MC1cXHRoeXBmc19kZWxldGVfdHJlZSgpO1xcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jOjE3MTpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTE3Mi1cXHRcXHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhzYi1cXHUwMDNlc19yb290KTtcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jPTI0MD1zdGF0aWMgaW50IGh5cGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMjU5LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jOjI2MDpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTI2MS1cXHRcXHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhyb290X2RlbnRyeSk7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaD00NT1zdGF0aWMgaW5saW5lIGludCBhcHBsZGF0YV9hc20oc3RydWN0IGFwcGxkYXRhX3BhcmFtZXRlcl9saXN0ICpwYXJtX2xpc3QsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaC01MS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaDo1MjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaC01My1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk3PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGxwYXIsIE1GRUFUVVJFX0xQQVIpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC05OC1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk5OiNkZWZpbmUgbWFjaGluZV9pc192bVxcdG1hY2hpbmVfaGFzX3ZtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC0xMDAtI2RlZmluZSBtYWNoaW5lX2lzX2t2bVxcdG1hY2hpbmVfaGFzX2t2bVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jPTExMD1zdGF0aWMgbm9pbmxpbmUgX19pbml0IHZvaWQgc2V0dXBfYXJjaF9zdHJpbmcodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvZWFybHkuYy0xMzItXFx0XFx0XFx0ICBtYWNoaW5lX2lzX2xwYXIoKSA/IFxcXCJMUEFSXFxcIiA6XFxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jOjEzMzpcXHRcXHRcXHQgIG1hY2hpbmVfaXNfdm0oKSA/IFxcXCJ6L1ZNXFxcIiA6XFxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jLTEzNC1cXHRcXHRcXHQgIG1hY2hpbmVfaXNfa3ZtKCkgPyBcXFwiS1ZNXFxcIiA6IFxcXCJ1bmtub3duXFxcIik7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTY5ND1zdGF0aWMgaW50IF9faW5pdCBpcGxfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy03MDctXFx0Y2FzZSBJUExfVFlQRV9DQ1c6XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzo3MDg6XFx0XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTcwOS1cXHRcXHRcXHRyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcXHUwMDI2aXBsX2tzZXQtXFx1MDAzZWtvYmosXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEyODY9c3RhdGljIHZvaWQgcmVpcGxfYmxvY2tfY2N3X2ZpbGxfcGFybXMoc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKmlwYilcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTI5Ny1cXHQvKiBWTSBQQVJNICovXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoxMjk4OlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXFx1MDAyNlxcdTAwMjYgaXBsX2Jsb2NrX3ZhbGlkIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMjk5LVxcdCAgICAoaXBsX2Jsb2NrLmNjdy52bV9mbGFncyBcXHUwMDI2IElQTF9QQjBfQ0NXX1ZNX0ZMQUdfVlApKSB7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEzMDg9c3RhdGljIGludCBfX2luaXQgcmVpcGxfbnNzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMxMS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjEzMTI6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMzEzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0xMzI4PXN0YXRpYyBpbnQgX19pbml0IHJlaXBsX2Njd19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEzMzYtXFx0cmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXFx1MDAyNnJlaXBsX2tzZXQtXFx1MDAzZWtvYmosXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoxMzM3OlxcdFxcdFxcdFxcdG1hY2hpbmVfaXNfdm0oKSA/IFxcdTAwMjZyZWlwbF9jY3dfYXR0cl9ncm91cF92bVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMzOC1cXHRcXHRcXHRcXHRcXHRcXHQ6IFxcdTAwMjZyZWlwbF9jY3dfYXR0cl9ncm91cF9scGFyKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjAxND1zdGF0aWMgaW50IHZtY21kX2luaXQodm9pZClcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIwMTUte1xcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjAxNjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIwMTctXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMjk0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX3JlYm9vdF9zZXR1cChjaGFyICpzdHIpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk1LXtcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIyOTY6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk3LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMzA0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX3BhbmljX3NldHVwKGNoYXIgKnN0cilcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMDUte1xcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjMwNjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMDctXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMTQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25faGFsdF9zZXR1cChjaGFyICpzdHIpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzE1LXtcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIzMTY6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzE3LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMzI0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX3BvZmZfc2V0dXAoY2hhciAqc3RyKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNS17XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMzI2OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNy1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jPTE4MD1zdGF0aWMgaW50IG1hY2hpbmVfa2V4ZWNfcHJlcGFyZV9rZHVtcCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMtMTgyLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUFxcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jOjE4MzpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jLTE4NC1cXHRcXHRkaWFnMTBfcmFuZ2UoUEZOX0RPV04oY3Jhc2hrX3Jlcy5zdGFydCksXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9MjQ2PXN0YXRpYyB2b2lkIF9faW5pdCBjb25tb2RlX2RlZmF1bHQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy0yNTAtXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjI1MTpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTI1Mi1cXHRcXHRjcGNtZChcXFwiUVVFUlkgQ09OU09MRVxcXCIsIHF1ZXJ5X2J1ZmZlciwgMTAyNCwgTlVMTCk7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9NTk4PXN0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2NyYXNoa2VybmVsKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtNjUwLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYzo2NTE6XFx0aWYgKCFvbGRtZW1fZGF0YS5zdGFydCBcXHUwMDI2XFx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTY1Mi1cXHRcXHRkaWFnMTBfcmFuZ2UoUEZOX0RPV04oY3Jhc2hfYmFzZSksIFBGTl9ET1dOKGNyYXNoX3NpemUpKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz04OTc9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTkwMS0gICAgICAgICAqL1xcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYzo5MDI6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtOTAzLVxcdFxcdHByX2luZm8oXFxcIkxpbnV4IGlzIHJ1bm5pbmcgYXMgYSB6L1ZNIFxcXCJcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jPTM3OT1zdGF0aWMgX19pbml0IGludCBjcmVhdGVfcHJvY19zZXJ2aWNlX2xldmVsKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYy0zODEtXFx0cHJvY19jcmVhdGVfc2VxKFxcXCJzZXJ2aWNlX2xldmVsc1xcXCIsIDAsIE5VTEwsIFxcdTAwMjZzZXJ2aWNlX2xldmVsX3NlcV9vcHMpO1xcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jOjM4MjpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jLTM4My1cXHRcXHRyZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKFxcdTAwMjZzZXJ2aWNlX2xldmVsX3ZtKTtcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYz0yNTM9c2VnbWVudF90eXBlIChjaGFyKiBuYW1lKVxcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTI1Ny1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6MjU4OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy0yNTktXFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM9NDE1PXNlZ21lbnRfbG9hZCAoY2hhciAqbmFtZSwgaW50IGRvX25vbnNoYXJlZCwgdW5zaWduZWQgbG9uZyAqYWRkcixcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy00MjAtXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjQyMTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNDIyLVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU0Nj1zZWdtZW50X3VubG9hZChjaGFyICpuYW1lKVxcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU0OS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6NTUwOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy01NTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU4Mj1zZWdtZW50X3NhdmUoY2hhciAqbmFtZSlcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy01ODgtXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjU4OTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTkwLVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM9MzMzOT1pbnQgZGFzZF9kZXZpY2VfaXNfcm8oc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jLTMzNDQtXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozMzQ1OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzM0Ni1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jPTIyND1zdGF0aWMgaW50IF9faW5pdCBkYXNkX3BhcnNlX2tleXdvcmQoY2hhciAqa2V5d29yZClcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jLTIzOC1cXHRpZiAoc3RybmNtcChcXFwibm9wYXZcXFwiLCBrZXl3b3JkLCBsZW5ndGgpID09IDApIHtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYzoyMzk6XFx0XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0yNDAtXFx0XFx0XFx0cHJfaW5mbyhcXFwiJ25vcGF2JyBpcyBub3Qgc3VwcG9ydGVkIG9uIHovVk1cXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jPTY1Nj1kYXNkX2RpYWdfaW5pdCh2b2lkKVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYy02NTcte1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYzo2NTg6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMtNjU5LVxcdFxcdHByX2luZm8oXFxcIkRpc2NpcGxpbmUgJXMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCB6L1ZNXFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jPTE5NDc9c3RhdGljIGludCBkYXNkX2Vja2RfdmFsaWRhdGVfc2VydmVyKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jLTE5NTUtXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jOjE5NTY6XFx0aWYgKGRhc2Rfbm9wYXYgfHwgbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYy0xOTU3LVxcdFxcdGVuYWJsZV9wYXYgPSAwO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jPTg5OT1zdGF0aWMgaW50IF9faW5pdCBjb24zMjE1X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyMTUuYy05MTAtXFx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jOjkxMTpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTkxMi1cXHRcXHRjcGNtZChcXFwiVEVSTSBDT05NT0RFIDMyMTVcXFwiLCBOVUxMLCAwLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYz0yMTM0PWNvbjMyNzBfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jLTIxNDUtXFx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jOjIxNDY6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYy0yMTQ3LVxcdFxcdGNwY21kKFxcXCJURVJNIENPTk1PREUgMzI3MFxcXCIsIE5VTEwsIDAsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jPTI5Mz1pbnQgaG1jZHJ2X2Z0cF9zdGFydHVwKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9obWNkcnZfZnRwLmMtMzExLVxcdGlmIChobWNkcnZfZnRwX3JlZmNudCA9PSAwKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jOjMxMjpcXHRcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9mdHAuYy0zMTMtXFx0XFx0XFx0aG1jZHJ2X2Z0cF9mdW5jcyA9IFxcdTAwMjZobWNkcnZfZnRwX3p2bTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jPTQ1ND1zdGF0aWMgaW50IF9faW5pdCBtb25faW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMtNDU3LVxcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jOjQ1ODpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jLTQ1OS1cXHRcXHRwcl9lcnIoXFxcIlRoZSB6L1ZNICpNT05JVE9SIHJlY29yZCBkZXZpY2UgZHJpdmVyIGNhbm5vdCBiZSBcXFwiXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYz0yOTQ9c3RhdGljIGludCBfX2luaXQgbW9uX2luaXQodm9pZClcXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYy0yOTUte1xcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jOjI5NjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYy0yOTctXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmM9NjE0PXN0YXRpYyB2b2lkIHJhdzMyNzBfcmVzZXRfZGV2aWNlX2NiKHN0cnVjdCByYXczMjcwX3JlcXVlc3QgKnJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jLTYyMi1cXHRcXHRycC1cXHUwMDNlc3RhdGUgPSBSQVczMjcwX1NUQVRFX0lOSVQ7XFxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jOjYyMzpcXHR9IGVsc2UgaWYgKG1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYy02MjQtXFx0XFx0cmF3MzI3MF9zaXplX2RldmljZV92bShycCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg9MzQ0PXNjbHBfYXNjZWJjKHVuc2lnbmVkIGNoYXIgY2gpXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM0NS17XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM0NjpcXHRyZXR1cm4gKG1hY2hpbmVfaXNfdm0oKSkgPyBfYXNjZWJjW2NoXSA6IF9hc2NlYmNfNTAwW2NoXTtcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzQ3LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaD0zNTE9c2NscF9lYmNhc2Nfc3RyKGNoYXIgKnN0ciwgaW50IG5yKVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTIte1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaDozNTM6XFx0KG1hY2hpbmVfaXNfdm0oKSkgPyBFQkNBU0Moc3RyLCBucikgOiBFQkNBU0NfNTAwKHN0ciwgbnIpO1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTQtfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oPTM1OD1zY2xwX2FzY2ViY19zdHIoY2hhciAqc3RyLCBpbnQgbnIpXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM1OS17XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM2MDpcXHQobWFjaGluZV9pc192bSgpKSA/IEFTQ0VCQyhzdHIsIG5yKSA6IEFTQ0VCQ181MDAoc3RyLCBucik7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM2MS19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmM9MjY9c3RhdGljIHZvaWQgX19pbml0IHNjbHBfZWFybHlfZmFjaWxpdGllc19kZXRlY3Qodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfZWFybHkuYy03Ni1cXHRpZiAoIXNjY2ItXFx1MDAzZWhjcHVhKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jOjc3OlxcdFxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jLTc4LVxcdFxcdFxcdHNjbHAubWF4X2NvcmVzID0gNjQ7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jPTUwNT1zY2xwX3R0eV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jLTUxMi1cXHQvKiB6L1ZNIG11bHRpcGxleGVzIHRoZSBsaW5lIG1vZGUgb3V0cHV0IG9uIHRoZSAzMnh4IHNjcmVlbiAqL1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmM6NTEzOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXFx1MDAyNlxcdTAwMjYgIUNPTlNPTEVfSVNfU0NMUClcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jLTUxNC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTM4LVxcdHNjbHBfdHR5X2J1ZmZlcl9jb3VudCA9IDA7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYzo1Mzk6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTQwLVxcdFxcdC8qIGNhc2UgaW5wdXQgbGluZXMgdG8gbG93ZXJjYXNlICovXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM9NTI9dm9pZCBfX2luaXQgdm1jcF9jbWFfcmVzZXJ2ZSh2b2lkKVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01My17XFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jOjU0OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM9MjQ4PXN0YXRpYyBpbnQgX19pbml0IHZtY3BfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTI1MS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM6MjUyOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy0yNTMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jPTgwNj1zdGF0aWMgaW50IF9faW5pdCB2bWxvZ3Jkcl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jLTgxMS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jOjgxMjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMtODEzLVxcdFxcdHByX2VycihcXFwibm90IHJ1bm5pbmcgdW5kZXIgVk0sIGRyaXZlciBub3QgbG9hZGVkLlxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmM9MTAwNj1zdGF0aWMgaW50IF9faW5pdCB1cl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMtMTAxMC1cXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmM6MTAxMTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYy0xMDEyLVxcdFxcdHByX2VycihcXFwiVGhlICVzIGNhbm5vdCBiZSBsb2FkZWQgd2l0aG91dCB6L1ZNXFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYz0xNzM9c3RhdGljIHZvaWQgc25zaWRfY2FsbGJhY2soc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHZvaWQgKmRhdGEsIGludCByYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMtMTc4LVxcbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmM6MTc5OlxcdGlmIChyYyBcXHUwMDI2XFx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jLTE4MC1cXHRcXHQvKiBUcnkgZGlhZyAweDIxMCBmYWxsYmFjayBvbiB6L1ZNLiAqL1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNDk0PXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBhcF9hc3luY19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MDQtXFx0ICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTA1OlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTA2LVxcdFxcdHBvbGxfaGlnaF90aW1lb3V0ID0gMTUwMDAwMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM9Mjk3PXN0YXRpYyBpbnQgcWV0aF9sMl9yZXF1ZXN0X2luaXRpYWxfbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jLTMwMi1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jOjMwMzpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYy0zMDQtXFx0XFx0cmMgPSBxZXRoX3ZtX3JlcXVlc3RfbWFjKGNhcmQpO1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jPTEzOT1zdGF0aWMgaW50IF9faW5pdCBzbXNnX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYy0xNDItXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jOjE0MzpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYy0xNDQtXFx0XFx0cmMgPSAtRVBST1RPTk9TVVBQT1JUO1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYz0xNTI9c3RhdGljIGludCBfX2luaXQgc21zZ2l1Y3ZfYXBwX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmMtMTU2LVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmM6MTU3OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmMtMTU4LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM9MTIzOT1zdGF0aWMgaW50IHBhcmFtX3NldF92bWlkZmlsdGVyKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjQyLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jOjEyNDM6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkgfHwgIWh2Y19pdWN2X2RldmljZXMpXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI0NC1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jPTEyNjY9c3RhdGljIGludCBwYXJhbV9nZXRfdm1pZGZpbHRlcihjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI3MS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYzoxMjcyOlxcdGlmICghbWFjaGluZV9pc192bSgpIHx8ICFodmNfaXVjdl9kZXZpY2VzKVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNzMtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYz0xMzAxPXN0YXRpYyBpbnQgX19pbml0IGh2Y19pdWN2X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEzMDgtXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM6MTMwOTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEzMTAtXFx0XFx0cHJfbm90aWNlKFxcXCJUaGUgei9WTSBJVUNWIEhWQyBkZXZpY2UgZHJpdmVyIGNhbm5vdCBcXFwiXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM9ODE9c3RhdGljIGludCB3ZHRfc3RhcnQoc3RydWN0IHdhdGNoZG9nX2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTg1LVxcbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYzo4NjpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTg3LVxcdFxcdGZ1bmMgPSBjb25jZWFsX29uID8gKFdEVF9GVU5DX0lOSVQgfCBXRFRfRlVOQ19DT05DRUFMKVxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jPTEwNz1zdGF0aWMgaW50IHdkdF9waW5nKHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYy0xMTEtXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jOjExMjpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTExMy1cXHRcXHQvKlxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jPTE2Mj1zdGF0aWMgaW50IF9faW5pdCBkaWFnMjg4X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYy0xNjUtXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jOjE2NjpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTE2Ny1cXHRcXHRjbWRfYnVmID0ga21hbGxvYyhNQVhfQ01ETEVOLCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjgwPXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI4My1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI4NDpcXHRpZiAobWFjaGluZV9pc192bSgpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyODUtXFx0XFx0Y3BjbWQoXFxcIlFVRVJZIFVTRVJJRFxcXCIsIGl1Y3ZfdXNlcmlkLCBzaXplb2YoaXVjdl91c2VyaWQpLCBcXHUwMDI2ZXJyKTtcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYz0xODYyPXN0YXRpYyBpbnQgX19pbml0IGl1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jLTE4NjUtXFxubmV0L2l1Y3YvaXVjdi5jOjE4NjY6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcXG5uZXQvaXVjdi9pdWN2LmMtMTg2Ny1cXHRcXHRyYyA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM4OjEyLjc5NTI5NDY1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzEzMDg4Mjc5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgTmV0d29yayBNYWtlZmlsZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyBgYWZfaXVjdmAgKEFkZHJlc3MgRmFtaWx5IElVQ1YpIGdldHMgYnVpbHQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYENPTkZJR19JVUNWYCBhbmQgdGhlIHovVk0gZW52aXJvbm1lbnQuIEknbSBzZWVpbmcgdGhhdCBgbWFjaGluZV9pc192bSgpYCBpcyBjcnVjaWFsLiBJZiBzeXprYWxsZXIgaXMgcnVubmluZyB1bmRlciBRRU1VLCB0aGF0IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGZhbHNlLCB3aGljaCBsZWFkcyB0byBgcHJfaXVjdmAgYmVpbmcgTlVMTCwgYW5kIHRodXMgYGFmX2l1Y3ZgIGRlZmF1bHRpbmcgdG8gdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuXG5cblRoZSBvcmlnaW5hbCBjb2RlJ3MgbG9naWMgaW4gYGFmaXVjdl9pbml0YCB3YXMgbGlrZSB0aGlzOiBpZiBpdCdzIHovVk0gKmFuZCogYENPTkZJR19JVUNWYCBpcyBlbmFibGVkLCB0aGVuIGBwcl9pdWN2YCBnZXRzIHNldCB0byBgXHUwMDI2aXVjdl9pZmAuIE90aGVyd2lzZSwgYHByX2l1Y3ZgIGlzIE5VTEwuIEhvd2V2ZXIsIHVuZGVyIFFFTVUsIGBtYWNoaW5lX2lzX3ZtKClgIGlzIGZhbHNlLCBtZWFuaW5nIGBwcl9pdWN2YCAqYWx3YXlzKiBiZWNvbWVzIE5VTEwsIHJlZ2FyZGxlc3Mgb2YgdGhlIGBDT05GSUdfSVVDVmAgc2V0dGluZy4gU28sIGV2ZW4gaWYgYENPTkZJR19JVUNWYCAqd2FzKiBlbmFibGVkLCBgYWZfaXVjdmAgd291bGQgc3RpbGwgdXNlIEhpcGVyU29ja2V0cyB1bmRlciBRRU1VIGJlY2F1c2UgdGhlIElVQ1YgaW50ZXJmYWNlIHBvaW50ZXIgYHByX2l1Y3ZgIGlzIG5ldmVyIGluaXRpYWxpemVkLlxuXG5UaGUgcHJvYmxlbT8gSWYgYENPTkZJR19JVUNWYCB3YXMgZGlzYWJsZWQsIHRoZSBtYWtlZmlsZSBsb2dpYyBza2lwcGVkIGJ1aWxkaW5nIGBuZXQvaXVjdi9gLCB3aGljaCBtZWFucyBgYWZfaXVjdi5vYCB3b3VsZG4ndCBiZSBidWlsdCBhdCBhbGwuIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGF0OiBpdCBmb3JjZXMgYGFmX2l1Y3Yub2AgdG8gYmUgYnVpbHQsIHJlZ2FyZGxlc3Mgb2YgYENPTkZJR19JVUNWYCdzIHNldHRpbmcgKGJ5IGNoYW5naW5nIGBvYmotJChDT05GSUdfSVVDVilcdFx0Kz0gaXVjdi9gIHRvIGBvYmoteVx0XHRcdFx0Kz0gaXVjdi9gKS5cblxuVGhlIGltcGFjdCBvbiBleGVjdXRpb24gZmxvdyBpcyBub3cgY2xlYXIuIFRoaXMgcGF0Y2ggKmVuYWJsZXMqIGBhZl9pdWN2YCB0byBiZSBidWlsdCBhbmQgdXNlZCB3aGVuIGBDT05GSUdfSVVDVmAgaXMgZGlzYWJsZWQsIGFuZCB3aWxsIHVzZSBIaXBlclNvY2tldHMuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMgZnV6emluZy4gRG9lcyB0aGlzIGFjdHVhbGx5IGNyZWF0ZSBhIG5ldywgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoIHRoYXQgbmVlZHMgZm9jdXNlZCBmdXp6aW5nPyBJZiBzeXprYWxsZXIgaGFzIGBDT05GSUdfSVVDVj15YCBhbmQgYENPTkZJR19BRklVQ1Y9eWAgZW5hYmxlZCAod2hpY2ggaXMgdmVyeSBsaWtlbHkgdGhlIGRlZmF1bHQpIG9uIFMzOTAsIHRoZW4gYGFmX2l1Y3ZgIHdhcyAqYWxyZWFkeSogYmVpbmcgZnV6emVkLCB0aG91Z2ggaXQgd2FzIHN0aWxsIGFsd2F5cyB1c2luZyB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCB1bmRlciBRRU1VLCBldmVuIHdpdGggYENPTkZJR19JVUNWPXlgLlxuXG5Ib3dldmVyLCB0aGUga2V5IGluc2lnaHQgaXMgdGhhdCBzeXprYWxsZXIgKm1pZ2h0KiB1c2UgY29uZmlndXJhdGlvbnMgd2hlcmUgYENPTkZJR19JVUNWPW5gIGJ1dCBgQ09ORklHX0FGSVVDVj15YC4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGlzIHBhdGNoIGJlY29tZXMgc2lnbmlmaWNhbnQuIEl0ICplbmFibGVzKiBgYWZfaXVjdmAgdG8gYmUgYnVpbHQgYW5kIHRlc3RlZCB1bmRlciB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCwgYSBuZXcgc3RhdGUgdGhhdCB3YXNuJ3QgcG9zc2libGUgYmVmb3JlLiBUaGlzIGlzIGEgZml4IGZvciBhIGJ1aWxkIHN5c3RlbSBidWcuXG5cbkJlY2F1c2UgdGhpcyBwYXRjaCBtb2RpZmllcyBgbmV0L01ha2VmaWxlYCwgYW5kIHRoZSBwcm9tcHQgc2F5cyBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUsXCIgc28gSSB0aGluayB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSByZWFjaGFibGUgY29kZSBpcyB0aGUgc2FtZSBhcyBiZWZvcmUsIGBhZl9pdWN2YCBjb2RlLlxuXG5TbywgZm9yIGZ1enppbmcsIHdlJ2QgbmVlZCB0byBmb2N1cyBvbiBmdW5jdGlvbnMgaW4gYG5ldC9pdWN2L2FmX2l1Y3YuY2AsIHN1Y2ggYXMgYGFmaXVjdl9oc19zZW5kYCwgYGl1Y3Zfc29ja19zZW5kbXNnYCwgYGl1Y3Zfc29ja19iaW5kYCwgZXRjLiBXZSBzaG91bGQgdGVzdCB3aXRoIGBDT05GSUdfQUZJVUNWPXlgLCBhcyB3ZWxsIGFzIGBDT05GSUdfSVVDVj1uYC4gVGhlIG9yaWdpbmFsIHBhdGNoIGNoYW5nZXMgdGhlIGJ1aWxkIHN5c3RlbSwgc28gaXQncyBhIHdvcnRod2hpbGUgcGF0aCB0byB0ZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjAyOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzg6MjkuOTI2MTgwODQ0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA5MTYyMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjgwPXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI4My1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI4NDpcXHRpZiAobWFjaGluZV9pc192bSgpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyODUtXFx0XFx0Y3BjbWQoXFxcIlFVRVJZIFVTRVJJRFxcXCIsIGl1Y3ZfdXNlcmlkLCBzaXplb2YoaXVjdl91c2VyaWQpLCBcXHUwMDI2ZXJyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzg6MzAuMTY3MTA4MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIxNzQ3MTA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBRRU1VIGFuZCBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHBhdGNoIG9ubHkgYWZmZWN0cyBgYWZpdWN2X2luaXRgLiBHaXZlbiB0aGUgZXN0YWJsaXNoZWQgdW5kZXJzdGFuZGluZyB0aGF0IGBtYWNoaW5lX2lzX3ZtKClgIGlzIGZhbHNlIHVuZGVyIFFFTVUsIHRoZSBgSVNfRU5BQkxFRChDT05GSUdfSVVDVilgIGNvbmRpdGlvbiBiZWNvbWVzIGlycmVsZXZhbnQgdG8gdGhlIFFFTVUgZXhlY3V0aW9uIGZsb3cuIFRoaXMgbWVhbnMgdGhhdCwgb3JkaW5hcmlseSwgdGhlIGV4ZWN1dGlvbiBwYXRoIHVuZGVyIFFFTVUgc2hvdWxkIGJlIGlkZW50aWNhbCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGBDT05GSUdfSVVDVmAgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyB3b3VsZCBpbXBseSB0aGF0IHRoZSBwYXRjaCBkb2Vzbid0IGV4cG9zZSBhbnkgbmV3IGV4ZWN1dGlvbiBwYXRocyBpbiBRRU1VIHRoYXQgd2VyZW4ndCBhbHJlYWR5IHRoZXJlIHdoZW4gYENPTkZJR19JVUNWPXlgLlxuXG5Ib3dldmVyLCBoZXJlJ3MgYSBjcnVjaWFsIHBvaW50OiB3aGF0IGlmIGBDT05GSUdfSVVDVmAgd2FzICpkaXNhYmxlZCogaW4gdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLCBtZWFuaW5nIGBhZl9pdWN2YCB3YXNuJ3QgZXZlbiBidWlsdD8gTm93LCB0aGUgcGF0Y2ggKmVuYWJsZXMqIGl0ISBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY29uc2lkZXJhdGlvbi4gSWYgaXQgZW5hYmxlcyBhIHdob2xlIG5ldyBzb2NrZXQgZmFtaWx5IHRoYXQgd2Fzbid0IHByZXZpb3VzbHkgZnV6emVkLCBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgYXR0ZW50aW9uLlxuXG5MZXQncyBjb25zaWRlciB0aGUgYnJvYWRlciBjb250ZXh0LiBgQ09ORklHX0lVQ1ZgIGlzIGdlbmVyYWxseSBlbmFibGVkIHdoZW4gYENPTkZJR19BRklVQ1ZgIGlzIGVuYWJsZWQgYmVjYXVzZSBgQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYCBhbmQgdXN1YWxseSBkZWZhdWx0cyB0byAnbScgaWYgYFFFVEhfTDNgIG9yIGBJVUNWYCBhcmUgYWxzbyBlbmFibGVkLiBUaGUgcHJvbXB0IGl0c2VsZiBmb3IgYEFGSVVDVmAgaXMg4oCcQUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpLuKAnSBJZiBzeXprYWxsZXIgdGVzdHMgUzM5MCwgdGhlbiBpdCdzIGxpa2VseSB0aGF0IGJvdGggYXJlIGVuYWJsZWQuXG5cbkJ1dCB0aGVuIHRoZXJlJ3MgdGhlIHNwZWNpZmljIGd1aWRlbGluZTog4oCcUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcy4uLiBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cu4oCdIFRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSBhIE1ha2VmaWxlLiBEb2VzIGEgTWFrZWZpbGUgbW9kaWZpY2F0aW9uIGNvdW50IGFzIGEgXCJLY29uZmlnIGZpbGVcIj8gSXQncyBwYXJ0IG9mIHRoZSBidWlsZCBzeXN0ZW0uIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBhIE1ha2VmaWxlIG1vZGlmaWNhdGlvbiwgKmJ5IGl0c2VsZiosIGZ1bmN0aW9uYWxseSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93LiBXZWxsLCBpdCBjaGFuZ2VzIHdoYXQgZ2V0cyBjb21waWxlZCwgYW5kIGlmIGl0IGNvbXBpbGVzIG5ldyBjb2RlLCB0aGF0ICpkb2VzKiBhbHRlciB0aGUga2VybmVsJ3MgZnVuY3Rpb25hbGl0eS4gVGhpcyBtYWtlcyBpdCB3b3J0aCBjb25zaWRlcmluZy5cblxuSWYgd2UgZGVjaWRlIHRvIGZ1enosIHdoYXQgYXJlIHRoZSByZWxldmFudCBzeW1ib2xzIHRvIGZvY3VzIG9uPyBJJ2QgY29uc2lkZXIgYGl1Y3Zfc29ja19jcmVhdGVgLCBgaXVjdl9zb2NrX2JpbmRgLCBgaXVjdl9zb2NrX3NlbmRtc2dgLCBgaXVjdl9zb2NrX3JlY3Ztc2dgLCBgYWZpdWN2X2hzX3NlbmRgLCBhbmQgYGFmaXVjdl9oc19yY3ZgLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiBgYWZpdWN2X2hzX3JjdmAgaXMgZXZlbiByZWFjaGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzEyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM4OjM5LjM4NDU4Mjg4OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NTIwNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmaXVjdl9oc19yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz0xOTk3PXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDM4LS8qXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwMzk6ICogYWZpdWN2X2hzX3JjdigpIC0gYmFzZSBmdW5jdGlvbiBmb3IgYXJyaXZpbmcgZGF0YSB0aHJvdWdoIEhpcGVyU29ja2V0c1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDQwLSAqICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNDItICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwNDM6c3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNDQtXFx0c3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyNzU9c3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpdWN2X3BhY2tldF90eXBlID0ge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjc2LVxcdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQUZfSVVDViksXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNzc6XFx0LmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjc4LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM4OjM5LjU5NDExNjE5NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjIxMjc5NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIGFuZCBGdXp6aW5nIGFmaXVjdl9oc19yY3YqKlxuXG5Pa2F5LCBzbyBgYWZpdWN2X2hzX3JjdmAgKmlzKiByZWdpc3RlcmVkIGFzIGEgcGFja2V0IHR5cGUgaGFuZGxlciBmb3IgYEVUSF9QX0FGX0lVQ1ZgLiBUaGlzIG1lYW5zIHRoYXQgd2UgKmNhbiogcmVhY2ggaXQgYnkgc2VuZGluZyBwYWNrZXRzIHdpdGggdGhlIGBFVEhfUF9BRl9JVUNWYCBwcm90b2NvbCwgbGlrZWx5IG92ZXIgbG9vcGJhY2sgb3Igb3RoZXIgaW50ZXJmYWNlcy4gRGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCB0aGVyZWZvcmUsIGRlZmluaXRlbHkgZnV6emFibGUuIExldCdzIHNlZS4uLiB3aGF0IGFyZSB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ/IEFoLCBgQUZJVUNWYC5cblxuSGFuZyBvbiBhIHNlY29uZOKApiBgQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYC4gSG1tLiBDYW4gU3l6a2FsbGVyIGV2ZW4gZW5hYmxlIGBBRklVQ1ZgIG9uIHg4Nj8gTm8sIHRoZSBgZGVwZW5kcyBvbiBTMzkwYCBkZXBlbmRlbmN5IHByZXZlbnRzIHRoYXQuIFRoaXMgbWVhbnMgdGhlIGNvZGUgaXMgKm9ubHkqIGNvbXBpbGVkIHdoZW4gdGFyZ2V0aW5nIFMzOTAsIHdoaWNoIGlzIHVzZWZ1bCBpbmZvcm1hdGlvbi4gVGhlIGdvb2QgbmV3cyBpcyBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYW4gUzM5MHggaW5zdGFuY2UuIElmIHdlIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLCB0aGUgUzM5MCBpbnN0YW5jZSB3aWxsIHBpY2sgaXQgdXAgYW5kIFN5emthbGxlciB3aWxsIHRyeSB0byB0ZXN0IGl0LlxuXG5CdXQuLi53YWl0LCB3YXNuJ3QgdGhlcmUgc29tZXRoaW5nIGFib3V0IHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdDRSBvciBRRU1VPyBXZSBlc3RhYmxpc2hlZCB0aGF0IGBhZl9pdWN2YCAqaXMqIHJlYWNoYWJsZSBpbiBRRU1VIGJlY2F1c2UgaXQgZmFsbHMgYmFjayB0byBIaXBlclNvY2tldHMgdHJhbnNwb3J0LiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5SaWdodCwgdGltZSB0byBpZGVudGlmeSBzb21lIHJlbGV2YW50IHN5bWJvbHMgZm9yIFN5emthbGxlciB0byBmb2N1cyBvbjogYGl1Y3Zfc29ja19jcmVhdGVgLCBgaXVjdl9zb2NrX2JpbmRgLCBgaXVjdl9zb2NrX3NlbmRtc2dgLCBgaXVjdl9zb2NrX3JlY3Ztc2dgLCBgYWZpdWN2X2hzX3NlbmRgLCBgYWZpdWN2X2hzX3JjdmAsIGBpdWN2X3NvY2tfc2V0c29ja29wdGAsIGFuZCBgaXVjdl9zb2NrX2dldHNvY2tvcHRgLiBMZXQncyBqdXN0IGRvdWJsZSBjaGVjayB0aG9zZSBuYW1lcyBmb3IgYWNjdXJhY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODUxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjM4OjQ4LjgxNTQwMTAwNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5ODc3Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml1Y3Zfc29ja19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz01Mj1zdGF0aWMgY29uc3QgdTggaXBybV9zaHV0ZG93bls4XSA9XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTYtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjU3OiNkZWZpbmUgX19pdWN2X3NvY2tfd2FpdChzaywgY29uZGl0aW9uLCB0aW1lbywgcmV0KVxcdFxcdFxcdFxcXFxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTgtZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy04MS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6ODI6I2RlZmluZSBpdWN2X3NvY2tfd2FpdChzaywgY29uZGl0aW9uLCB0aW1lbylcXHRcXHRcXHRcXHRcXFxcXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTgzLSh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTg1LVxcdGlmICghKGNvbmRpdGlvbikpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo4NjpcXHRcXHRfX2l1Y3Zfc29ja193YWl0KHNrLCBjb25kaXRpb24sIHRpbWVvLCBfX3JldCk7XFx0XFx0XFxcXFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy04Ny1cXHRfX3JldDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTA9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X2FjY2VwdF9kZXF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTkxLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo5MjpzdGF0aWMgdm9pZCBpdWN2X3NvY2tfa2lsbChzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo5MzpzdGF0aWMgdm9pZCBpdWN2X3NvY2tfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTQtXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTk1PXN0YXRpYyB2b2lkIGFmaXVjdl9oc19jYWxsYmFja190eG5vdGlmeShzdHJ1Y3Qgc29jayAqc2ssIGVudW0gaXVjdl90eF9ub3RpZnkpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy05Ni1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6OTc6c3RhdGljIHN0cnVjdCBpdWN2X3NvY2tfbGlzdCBpdWN2X3NrX2xpc3QgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTk4LVxcdC5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKGl1Y3Zfc2tfbGlzdC5sb2NrKSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xMDc9c3RhdGljIGlubGluZSB2b2lkIGxvd19ubWNweSh1bnNpZ25lZCBjaGFyICpkc3QsIGNoYXIgKnNyYylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjYtICogSWYgdGhlIHNvY2tldCBkYXRhIGxlbiBpcyBncmVhdGVyIDcsIHRoZW4gUFJNREFUQSBjYW4gYmUgdXNlZCBmb3Igc3BlY2lhbFxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjc6ICogbm90aWZpY2F0aW9ucyAoc2VlIGl1Y3Zfc29ja19zaHV0ZG93bik7IGFuZCBmdXJ0aGVyLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjgtICogaWYgdGhlIHNvY2tldCBkYXRhIGxlbiBpcyBcXHUwMDNlIDcsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDguXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTM0PXN0YXRpYyBpbmxpbmUgc2l6ZV90IGl1Y3ZfbXNnX2xlbmd0aChzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2cpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1LS8qKlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDY6ICogaXVjdl9zb2NrX2luX3N0YXRlKCkgLSBjaGVjayBmb3Igc3BlY2lmaWMgc3RhdGVzXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0Ny0gKiBAc2s6XFx0XFx0c29jayBzdHJ1Y3R1cmVcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNTItICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE1MzpzdGF0aWMgaW50IGl1Y3Zfc29ja19pbl9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSwgaW50IHN0YXRlMilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTU0LXtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3OS0vKlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODA6ICogaXVjdl9zb2NrX3dha2VfbXNnbGltKCkgLSBXYWtlIHVwIHRocmVhZCB3YWl0aW5nIG9uIG1zZyBsaW1pdFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODEtICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4MjpzdGF0aWMgdm9pZCBpdWN2X3NvY2tfd2FrZV9tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODMte1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTI2OD1zdGF0aWMgc3RydWN0IHNvY2sgKl9faXVjdl9nZXRfc29ja19ieV9uYW1lKGNoYXIgKm5tKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTI3OC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6Mjc5OnN0YXRpYyB2b2lkIGl1Y3Zfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTI4MC17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjk1LS8qIENsZWFudXAgTGlzdGVuICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjI5NjpzdGF0aWMgdm9pZCBpdWN2X3NvY2tfY2xlYW51cF9saXN0ZW4oc3RydWN0IHNvY2sgKnBhcmVudClcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjk3LXtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMDEtXFx0d2hpbGUgKChzayA9IGl1Y3ZfYWNjZXB0X2RlcXVldWUocGFyZW50LCBOVUxMKSkpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzAyOlxcdFxcdGl1Y3Zfc29ja19jbG9zZShzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjMwMzpcXHRcXHRpdWN2X3NvY2tfa2lsbChzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTMwNC1cXHR9XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzA4LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzozMDk6c3RhdGljIHZvaWQgaXVjdl9zb2NrX2xpbmsoc3RydWN0IGl1Y3Zfc29ja19saXN0ICpsLCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTMxMC17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzE1LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzozMTY6c3RhdGljIHZvaWQgaXVjdl9zb2NrX3VubGluayhzdHJ1Y3QgaXVjdl9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzE3LXtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMjMtLyogS2lsbCBzb2NrZXQgKG9ubHkgaWYgemFwcGVkIGFuZCBvcnBoYW5lZCkgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzI0OnN0YXRpYyB2b2lkIGl1Y3Zfc29ja19raWxsKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzI1LXtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMjgtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjMyOTpcXHRpdWN2X3NvY2tfdW5saW5rKFxcdTAwMjZpdWN2X3NrX2xpc3QsIHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzMwLVxcdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzU1PXN0YXRpYyBpbnQgaXVjdl9zZW5kX2N0cmwoc3RydWN0IHNvY2sgKnNrLCB1OCBmbGFncylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zODAtLyogQ2xvc2UgYW4gSVVDViBzb2NrZXQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzgxOnN0YXRpYyB2b2lkIGl1Y3Zfc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTM4Mi17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzkwLVxcdGNhc2UgSVVDVl9MSVNURU46XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjM5MTpcXHRcXHRpdWN2X3NvY2tfY2xlYW51cF9saXN0ZW4oc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zOTItXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDEwLVxcdFxcdFxcdFxcdHRpbWVvID0gSVVDVl9ESVNDT05OX1RJTUVPVVQ7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQxMTpcXHRcXHRcXHRpdWN2X3NvY2tfd2FpdChzayxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDEyOlxcdFxcdFxcdFxcdFxcdGl1Y3Zfc29ja19pbl9zdGF0ZShzaywgSVVDVl9DTE9TRUQsIDApLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00MTMtXFx0XFx0XFx0XFx0XFx0dGltZW8pO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQzNy1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDM4OlxcdC8qIG1hcmsgc29ja2V0IGZvciBkZWxldGlvbiBieSBpdWN2X3NvY2tfa2lsbCgpICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQzOS1cXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1pBUFBFRCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDQzLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0NDQ6c3RhdGljIHZvaWQgaXVjdl9zb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqcGFyZW50KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00NDUte1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ1MS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDUyOnN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ1My17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDgzLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0ODQ6XFx0c2stXFx1MDAzZXNrX2Rlc3RydWN0ID0gaXVjdl9zb2NrX2Rlc3RydWN0O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00ODUtXFx0c2stXFx1MDAzZXNrX3NuZHRpbWVvID0gSVVDVl9DT05OX1RJTUVPVVQ7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkxLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTI6XFx0aXVjdl9zb2NrX2xpbmsoXFx1MDAyNml1Y3Zfc2tfbGlzdCwgc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTMtXFx0cmV0dXJuIHNrO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU1ND1zdGF0aWMgdm9pZCBfX2l1Y3ZfYXV0b19uYW1lKHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTY3LS8qIEJpbmQgYW4gdW5ib3VuZCBzb2NrZXQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTY4OnN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU2OS1cXHRcXHRcXHQgIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NTAtLyogQXV0b21hdGljYWxseSBiaW5kIGFuIHVuYm91bmQgc29ja2V0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY1MTpzdGF0aWMgaW50IGl1Y3Zfc29ja19hdXRvYmluZChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY1Mi17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjczPXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MTgtLyogQ29ubmVjdCBhbiB1bmNvbm5lY3RlZCBzb2NrZXQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzE5OnN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcyMC1cXHRcXHRcXHQgICAgIGludCBhbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQwLVxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9PUEVOKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc0MTpcXHRcXHRlcnIgPSBpdWN2X3NvY2tfYXV0b2JpbmQoc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDItXFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzU5LVxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gSVVDVl9DT05ORUNURUQpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc2MDpcXHRcXHRlcnIgPSBpdWN2X3NvY2tfd2FpdChzaywgaXVjdl9zb2NrX2luX3N0YXRlKHNrLCBJVUNWX0NPTk5FQ1RFRCxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzYxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBJVUNWX0RJU0NPTk4pLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc3NS0vKiBNb3ZlIGEgc29ja2V0IGludG8gbGlzdGVuaW5nIHN0YXRlLiAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NzY6c3RhdGljIGludCBpdWN2X3NvY2tfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBiYWNrbG9nKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03Nzcte1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTgwMC0vKiBBY2NlcHQgYSBwZW5kaW5nIGNvbm5lY3Rpb24gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6ODAxOnN0YXRpYyBpbnQgaXVjdl9zb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy04MDItXFx0XFx0XFx0ICAgIHN0cnVjdCBwcm90b19hY2NlcHRfYXJnICphcmcpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtODU0LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo4NTU6c3RhdGljIGludCBpdWN2X3NvY2tfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTg1Ni1cXHRcXHRcXHQgICAgIGludCBwZWVyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTg5MT1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9pcHJtKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsIHN0cnVjdCBpdWN2X21lc3NhZ2UgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05MDEtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjkwMjpzdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTAzLVxcdFxcdFxcdCAgICAgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDE1LVxcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgbm9ibG9jayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwMTY6XFx0ZXJyID0gaXVjdl9zb2NrX3dhaXQoc2ssIGl1Y3ZfYmVsb3dfbXNnbGltKHNrKSwgdGltZW8pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDE3LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTE0ND1zdGF0aWMgdm9pZCBpdWN2X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE1Ni1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE1NzpcXHQvKiBjaGVjayBmb3Igc3BlY2lhbCBJUFJNIG1lc3NhZ2VzIChlLmcuIGl1Y3Zfc29ja19zaHV0ZG93bikgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE1OC1cXHRpZiAoKG1zZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJVUNWX0lQUk1EQVRBKSBcXHUwMDI2XFx1MDAyNiBsZW4gXFx1MDAzZSA3KSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTIwNT1zdGF0aWMgdm9pZCBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjIyLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjIzOnN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjI0LVxcdFxcdFxcdCAgICAgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyOTgtXFx0XFx0XFx0XFx0V0FSTl9PTigxKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTI5OTpcXHRcXHRcXHRcXHRpdWN2X3NvY2tfY2xvc2Uoc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzAwLVxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTEzNTA9c3RhdGljIGlubGluZSBfX3BvbGxfdCBpdWN2X2FjY2VwdF9wb2xsKHN0cnVjdCBzb2NrICpwYXJlbnQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTM2NC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTM2NTpzdGF0aWMgX19wb2xsX3QgaXVjdl9zb2NrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzNjYtXFx0XFx0XFx0ICAgICAgIHBvbGxfdGFibGUgKndhaXQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQwMy1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQwNDpzdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDA1LXtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcxLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDcyOnN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3My17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3OS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ4MDpcXHRpdWN2X3NvY2tfY2xvc2Uoc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDgxLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDgyLVxcdHNvY2tfb3JwaGFuKHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ4MzpcXHRpdWN2X3NvY2tfa2lsbChzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0ODQtXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDg3LS8qIGdldHNvY2tvcHQgYW5kIHNldHNvY2tvcHQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ4ODpzdGF0aWMgaW50IGl1Y3Zfc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0ODktXFx0XFx0XFx0XFx0c29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNTM3LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNTM4OnN0YXRpYyBpbnQgaXVjdl9zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTUzOS1cXHRcXHRcXHRcXHRzb2Nrb3B0X3QgKm9wdClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNTkzPXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0My1cXHQvKiBDcmVhdGUgdGhlIG5ldyBzb2NrZXQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY0NDpcXHRuc2sgPSBpdWN2X3NvY2tfYWxsb2MoTlVMTCwgc2stXFx1MDAzZXNrX3Byb3RvY29sLCBHRlBfQVRPTUlDLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0NS1cXHRpZiAoIW5zaykge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTEtXFx0bml1Y3YgPSBpdWN2X3NrKG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NTI6XFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTMtXFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc0LVxcdFxcdGl1Y3Zfc2V2ZXJfcGF0aChuc2ssIDEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc1OlxcdFxcdGl1Y3Zfc29ja19raWxsKG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzYtXFx0XFx0Z290byBmYWlsO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE3NDI9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja190eGRvbmUoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzczLVxcdFxcdC8qIHdha2UgdXAgYW55IHByb2Nlc3Mgd2FpdGluZyBmb3Igc2VuZGluZyAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzc0OlxcdFxcdGl1Y3Zfc29ja193YWtlX21zZ2xpbShzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3NzUtXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4NTA9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODY1LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODY2OlxcdG5zayA9IGl1Y3Zfc29ja19hbGxvYyhOVUxMLCBzay1cXHUwMDNlc2tfcHJvdG9jb2wsIEdGUF9BVE9NSUMsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODY3LVxcdGJoX2xvY2tfc29jayhzayk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg3NC1cXHRcXHRlcnIgPSBkZXZfcXVldWVfeG1pdChza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODc1OlxcdFxcdGl1Y3Zfc29ja19raWxsKG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4NzYtXFx0XFx0YmhfdW5sb2NrX3NvY2soc2spO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4ODAtXFx0bml1Y3YgPSBpdWN2X3NrKG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4ODE6XFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4ODItXFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkwNC1cXHR9IGVsc2VcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTkwNTpcXHRcXHRpdWN2X3NvY2tfa2lsbChuc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTA2LVxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xOTc5PXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3dpbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTk4OS1cXHRhdG9taWNfc3ViKGl1Y3ZfdHJhbnNfaGRyKHNrYiktXFx1MDAzZXdpbmRvdywgXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19zZW50KTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTk5MDpcXHRpdWN2X3NvY2tfd2FrZV9tc2dsaW0oc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTkxLVxcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMTQ4PXN0YXRpYyB2b2lkIGFmaXVjdl9oc19jYWxsYmFja190eG5vdGlmeShzdHJ1Y3Qgc29jayAqc2ssIGVudW0gaXVjdl90eF9ub3RpZnkgbilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTU3LVxcdFxcdGF0b21pY19kZWMoXFx1MDAyNml1Y3YtXFx1MDAzZXNrYnNfaW5feG1pdCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIxNTg6XFx0XFx0aXVjdl9zb2NrX3dha2VfbXNnbGltKHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE1OS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTY1LVxcdFxcdGlmIChhdG9taWNfZGVjX3JldHVybihcXHUwMDI2aXVjdi1cXHUwMDNlcGVuZGluZ3MpIFxcdTAwM2M9IDApXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIxNjY6XFx0XFx0XFx0aXVjdl9zb2NrX3dha2VfbXNnbGltKHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE2Ny1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjE2PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgYWZpdWN2X25ldGRldl9ub3RpZmllciA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjE5LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjIwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGl1Y3Zfc29ja19vcHMgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjEtXFx0LmZhbWlseVxcdFxcdD0gUEZfSVVDVixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIyMi1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjIzOlxcdC5yZWxlYXNlXFx0PSBpdWN2X3NvY2tfcmVsZWFzZSxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyNDpcXHQuYmluZFxcdFxcdD0gaXVjdl9zb2NrX2JpbmQsXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjU6XFx0LmNvbm5lY3RcXHQ9IGl1Y3Zfc29ja19jb25uZWN0LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjI2OlxcdC5saXN0ZW5cXHRcXHQ9IGl1Y3Zfc29ja19saXN0ZW4sXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjc6XFx0LmFjY2VwdFxcdFxcdD0gaXVjdl9zb2NrX2FjY2VwdCxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyODpcXHQuZ2V0bmFtZVxcdD0gaXVjdl9zb2NrX2dldG5hbWUsXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjk6XFx0LnNlbmRtc2dcXHQ9IGl1Y3Zfc29ja19zZW5kbXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjMwOlxcdC5yZWN2bXNnXFx0PSBpdWN2X3NvY2tfcmVjdm1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIzMTpcXHQucG9sbFxcdFxcdD0gaXVjdl9zb2NrX3BvbGwsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMzItXFx0LmlvY3RsXFx0XFx0PSBzb2NrX25vX2lvY3RsLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMzQtXFx0LnNvY2tldHBhaXJcXHQ9IHNvY2tfbm9fc29ja2V0cGFpcixcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIzNTpcXHQuc2h1dGRvd25cXHQ9IGl1Y3Zfc29ja19zaHV0ZG93bixcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIzNjpcXHQuc2V0c29ja29wdFxcdD0gaXVjdl9zb2NrX3NldHNvY2tvcHQsXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMzc6XFx0LmdldHNvY2tvcHRfaXRlciA9IGl1Y3Zfc29ja19nZXRzb2Nrb3B0LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjM4LX07XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMzktXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNDA6c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjQxLVxcdFxcdFxcdCAgICBpbnQga2VybilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjUzLVxcdFxcdC8qIGN1cnJlbnRseSwgcHJvdG8gb3BzIGNhbiBoYW5kbGUgYm90aCBzayB0eXBlcyAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjU0OlxcdFxcdHNvY2stXFx1MDAzZW9wcyA9IFxcdTAwMjZpdWN2X3NvY2tfb3BzO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjU1LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNTktXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNjA6XFx0c2sgPSBpdWN2X3NvY2tfYWxsb2Moc29jaywgcHJvdG9jb2wsIEdGUF9LRVJORUwsIGtlcm4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjYxLVxcdGlmICghc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI2My1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI2NDpcXHRpdWN2X3NvY2tfaW5pdChzaywgTlVMTCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNjUtXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI2OC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI2OTpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgaXVjdl9zb2NrX2ZhbWlseV9vcHMgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNzAtXFx0LmZhbWlseVxcdD0gQUZfSVVDVixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI3MS1cXHQub3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjcyOlxcdC5jcmVhdGVcXHQ9IGl1Y3Zfc29ja19jcmVhdGUsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNzMtfTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjgwPXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwMC1cXHRcXHRnb3RvIG91dDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMwMTpcXHRlcnIgPSBzb2NrX3JlZ2lzdGVyKFxcdTAwMjZpdWN2X3NvY2tfZmFtaWx5X29wcyk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDItXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6Mzg6NDguOTU1MjkwMjExWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMjEwMTMyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGZvcmNpbmcgdGhlIGBhZl9pdWN2YCBzb2NrZXQgZmFtaWx5IHRvIGJlIGJ1aWx0LCBldmVuIGlmIHRoZSBwcmltYXJ5IGBDT05GSUdfSVVDVmAgb3B0aW9uIGlzIGRpc2FibGVkLiBUaGUgY29yZSBpZGVhIGlzIHRoYXQgYXMgbG9uZyBhcyBgQ09ORklHX0FGSVVDVmAgaXMgZW5hYmxlZCwgdGhlIGNvZGUgd2lsbCBiZSBjb21waWxlZC4gR2l2ZW4gdGhpcyBjaGFuZ2UsIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGlzIGFic29sdXRlbHkgKndvcnRoKiBmdXp6aW5nLiBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkZvciB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIEkgbmVlZCB0byBleHBsaWNpdGx5IHN0YXRlIHdoYXQgZmxhZ3MgYXJlIG5lZWRlZCB0byBjb21waWxlIGFuZCB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlLiAgYEFGSVVDVmAgc2VlbXMgYXBwcm9wcmlhdGU7IGl0J3Mgc3BlY2lmaWMgdG8gUzM5MCwgYnV0IGl0ICppcyogdGhlIGtleSBjb25maWcgdGhhdCBlbmFibGVzIHRoZSBjb2RlIHBhdGggdGhlIHBhdGNoIGlzIG9wZW5pbmcgdXAuIEkgY29uZmlybSB0aGF0IGl0IG5lZWRzIHRvIGJlIGxpc3RlZC5cblxuTm93LCBsZXQgbWUgcXVpY2tseSByZS1leGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYgdG8gZW5zdXJlIG15IHVuZGVyc3RhbmRpbmcgaXMgc29saWQuIFRoZSBgbmV0L01ha2VmaWxlYCBpcyB0aGUgdGFyZ2V0LiBUaGUgY2hhbmdlIG1ha2VzIHRoZSBgaXVjdi9gIGRpcmVjdG9yeSAqYWx3YXlzKiBidWlsdCAoYG9iai15ICs9IGl1Y3YvYCkgaW5zdGVhZCBvZiBjb25kaXRpb25hbGx5IChgb2JqLSQoQ09ORklHX0lVQ1YpICs9IGl1Y3YvYCkuIFRoZSBwYXRjaCBkZXNjcmlwdGlvbiBtYWtlcyB0aGF0IHZlcnkgY2xlYXIgYXMgd2VsbC4gVGhpcyBleHBvc2VzIHRoZSBIaXBlclNvY2tldHMgdHJhbnNwb3J0IGZvciBBRl9JVUNWIHNvY2tldHMsIGV2ZW4gd2hlbiB0aGUgYnJvYWRlciBgQ09ORklHX0lVQ1ZgIGlzIGRpc2FibGVkLlxuXG5UaGVyZWZvcmUsIGZvciB0aGUgYEZvY3VzU3ltYm9sc2AsIEknbSBnb2luZyB0byBpbmNsdWRlIHRoZSBrZXkgc29ja2V0IGZ1bmN0aW9uczogYGl1Y3Zfc29ja19jcmVhdGVgLCBgaXVjdl9zb2NrX2JpbmRgLCBgaXVjdl9zb2NrX2Nvbm5lY3RgLCBgaXVjdl9zb2NrX3NlbmRtc2dgLCBgaXVjdl9zb2NrX3JlY3Ztc2dgLCBhbmQgdGhlIEhpcGVyU29ja2V0cy1zcGVjaWZpYyByZWNlaXZlIGFuZCBzZW5kIGZ1bmN0aW9uczogYGFmaXVjdl9oc19yY3ZgIGFuZCBgYWZpdWN2X2hzX3NlbmRgLiBUaGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgbmV3IGNvZGUgcGF0aCB0aGF0J3MgYmVpbmcgZW5hYmxlZC5cblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTI2LCJPdXRwdXRUb2tlbnMiOjIwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjozODo1Ny4wNzYzMDY2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjUzMzUwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXVjdl9zb2NrX2NyZWF0ZVwiLFxuICAgIFwiaXVjdl9zb2NrX2JpbmRcIixcbiAgICBcIml1Y3Zfc29ja19jb25uZWN0XCIsXG4gICAgXCJpdWN2X3NvY2tfc2VuZG1zZ1wiLFxuICAgIFwiaXVjdl9zb2NrX3JlY3Ztc2dcIixcbiAgICBcImFmaXVjdl9oc19yY3ZcIixcbiAgICBcImFmaXVjdl9oc19zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0L01ha2VmaWxlIHRvIGFsd2F5cyBkZXNjZW5kIGludG8gdGhlIG5ldC9pdWN2LyBkaXJlY3RvcnksIGFsbG93aW5nIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHkgKGFmX2l1Y3YubykgdG8gYmUgYnVpbHQgZXZlbiB3aGVuIENPTkZJR19JVUNWIGlzIGRpc2FibGVkIGJ1dCBDT05GSUdfQUZJVUNWIGlzIGVuYWJsZWQuIFRoaXMgZXhwb3NlcyB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5ICh1c2luZyBIaXBlclNvY2tldHMgdHJhbnNwb3J0KSB0byB1c2Vyc3BhY2UgaW4gY29uZmlndXJhdGlvbnMgd2hlcmUgaXQgd2FzIHByZXZpb3VzbHkgdW5yZWFjaGFibGUgZHVlIHRvIGEgYnVpbGQgZGVwZW5kZW5jeSBidWcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXVjdl9zb2NrX2NyZWF0ZVwiLFxuICAgIFwiaXVjdl9zb2NrX2JpbmRcIixcbiAgICBcIml1Y3Zfc29ja19jb25uZWN0XCIsXG4gICAgXCJpdWN2X3NvY2tfc2VuZG1zZ1wiLFxuICAgIFwiaXVjdl9zb2NrX3JlY3Ztc2dcIixcbiAgICBcImFmaXVjdl9oc19yY3ZcIixcbiAgICBcImFmaXVjdl9oc19zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0L01ha2VmaWxlIHRvIGFsd2F5cyBkZXNjZW5kIGludG8gdGhlIG5ldC9pdWN2LyBkaXJlY3RvcnksIGFsbG93aW5nIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHkgKGFmX2l1Y3YubykgdG8gYmUgYnVpbHQgZXZlbiB3aGVuIENPTkZJR19JVUNWIGlzIGRpc2FibGVkIGJ1dCBDT05GSUdfQUZJVUNWIGlzIGVuYWJsZWQuIFRoaXMgZXhwb3NlcyB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5ICh1c2luZyBIaXBlclNvY2tldHMgdHJhbnNwb3J0KSB0byB1c2Vyc3BhY2UgaW4gY29uZmlndXJhdGlvbnMgd2hlcmUgaXQgd2FzIHByZXZpb3VzbHkgdW5yZWFjaGFibGUgZHVlIHRvIGEgYnVpbGQgZGVwZW5kZW5jeSBidWcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowb9nhz[1] Phase: Succeeded StartedAt: 2026-06-25 06:39:22 +0000 UTC FinishedAt: 2026-06-25 06:39:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-25 06:39:22 +0000 UTC FinishedAt: 2026-06-25 06:39:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2] Phase: Succeeded StartedAt: 2026-06-25 06:39:22 +0000 UTC FinishedAt: 2026-06-25 07:43:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 06:39:22 +0000 UTC FinishedAt: 2026-06-25 07:43:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 06:39:22 +0000 UTC FinishedAt: 2026-06-25 06:39:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 06:39:22 +0000 UTC FinishedAt: 2026-06-25 06:39:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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-workflowb9nhz/series-workflowb9nhz-convert-artifact-2359982094/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 06:39:43 +0000 UTC FinishedAt: 2026-06-25 07:08:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 06:39:43 +0000 UTC FinishedAt: 2026-06-25 07:08:08 +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:*930a406d-050e-463a-befb-dea232919456,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-workflowb9nhz/series-workflowb9nhz-convert-artifact-2359982094/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": "e331f0d1-4030-46ca-85d1-1ec00a0c3796", "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-workflowb9nhz/series-workflowb9nhz-build-action-1336130676/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 06:39:43 +0000 UTC FinishedAt: 2026-06-25 07:07:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*930a406d-050e-463a-befb-dea232919456,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-workflowb9nhz/series-workflowb9nhz-convert-artifact-2359982094/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": "e331f0d1-4030-46ca-85d1-1ec00a0c3796", "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-workflowb9nhz/series-workflowb9nhz-build-action-1336130676/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:08:08 +0000 UTC FinishedAt: 2026-06-25 07:08:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:08:08 +0000 UTC FinishedAt: 2026-06-25 07:08:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:08:08 +0000 UTC FinishedAt: 2026-06-25 07:08:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:08:08 +0000 UTC FinishedAt: 2026-06-25 07:08:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-workflowb9nhz/series-workflowb9nhz-convert-artifact-3279379457/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:08:29 +0000 UTC FinishedAt: 2026-06-25 07:10:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:08:29 +0000 UTC FinishedAt: 2026-06-25 07:10:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e331f0d1-4030-46ca-85d1-1ec00a0c3796,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-workflowb9nhz/series-workflowb9nhz-build-action-1336130676/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-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:10:29 +0000 UTC FinishedAt: 2026-06-25 07:10:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:10:29 +0000 UTC FinishedAt: 2026-06-25 07:10:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:10:29 +0000 UTC FinishedAt: 2026-06-25 07:39:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:10:29 +0000 UTC FinishedAt: 2026-06-25 07:39:45 +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:*930a406d-050e-463a-befb-dea232919456,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-workflowb9nhz/series-workflowb9nhz-convert-artifact-3279379457/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": "e05bf47e-fe0a-4208-9bb8-af7f5871f645", "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-workflowb9nhz/series-workflowb9nhz-build-action-2458397837/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:10:29 +0000 UTC FinishedAt: 2026-06-25 07:39:20 +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:*930a406d-050e-463a-befb-dea232919456,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-workflowb9nhz/series-workflowb9nhz-convert-artifact-3279379457/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": "e05bf47e-fe0a-4208-9bb8-af7f5871f645", "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-workflowb9nhz/series-workflowb9nhz-build-action-2458397837/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:39:45 +0000 UTC FinishedAt: 2026-06-25 07:39:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:39:45 +0000 UTC FinishedAt: 2026-06-25 07:39:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:39:45 +0000 UTC FinishedAt: 2026-06-25 07:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:39:45 +0000 UTC FinishedAt: 2026-06-25 07:41:35 +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:*e05bf47e-fe0a-4208-9bb8-af7f5871f645,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-workflowb9nhz/series-workflowb9nhz-build-action-2458397837/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-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:41:45 +0000 UTC FinishedAt: 2026-06-25 07:43:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:41:45 +0000 UTC FinishedAt: 2026-06-25 07:43:08 +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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"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:*e331f0d1-4030-46ca-85d1-1ec00a0c3796,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e05bf47e-fe0a-4208-9bb8-af7f5871f645,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-workflowb9nhz/series-workflowb9nhz-build-action-1336130676/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-workflowb9nhz/series-workflowb9nhz-build-action-2458397837/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:41:45 +0000 UTC FinishedAt: 2026-06-25 07:41:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:41:45 +0000 UTC FinishedAt: 2026-06-25 07:41:50 +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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"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-workflowb9nhz/series-workflowb9nhz-convert-artifact-777371030/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:41:45 +0000 UTC FinishedAt: 2026-06-25 07:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:41:45 +0000 UTC FinishedAt: 2026-06-25 07:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:41:46 +0000 UTC FinishedAt: 2026-06-25 07:41:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:41:56 +0000 UTC FinishedAt: 2026-06-25 07:43:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb9nhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"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":["iucv_sock_create","iucv_sock_bind","iucv_sock_connect","iucv_sock_sendmsg","iucv_sock_recvmsg","afiucv_hs_rcv","afiucv_hs_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"ef2725d9-7028-4a7e-8258-3ed856e7cd6b","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-06-25 07:41:56 +0000 UTC FinishedAt: 2026-06-25 07:43:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e331f0d1-4030-46ca-85d1-1ec00a0c3796,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e05bf47e-fe0a-4208-9bb8-af7f5871f645,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-workflowb9nhz/series-workflowb9nhz-build-action-1336130676/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-workflowb9nhz/series-workflowb9nhz-build-action-2458397837/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-workflowb9nhz/series-workflowb9nhz-convert-artifact-777371030/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,}