Name: series-workflowlqc6n Phase: Succeeded StartedAt: 2026-06-24 09:21:59 +0000 UTC FinishedAt: 2026-06-24 10:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[0] Phase: Succeeded StartedAt: 2026-06-24 09:21:59 +0000 UTC FinishedAt: 2026-06-24 09:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[0].run-triage Phase: Succeeded StartedAt: 2026-06-24 09:21:59 +0000 UTC FinishedAt: 2026-06-24 09:43:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "558ef39aeb9a089a6be9dda8413b0b9d42e843ea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LIBERTAS", "LIBERTAS_USB", "LIBERTAS_SDIO", "LIBERTAS_SPI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "558ef39aeb9a089a6be9dda8413b0b9d42e843ea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LIBERTAS", "LIBERTAS_USB", "LIBERTAS_SDIO", "LIBERTAS_SPI" ], "series_id": "8dc6500d-a1f2-4d70-8002-7946b26f01a7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "helper_firmware_cb", "lbs_get_firmware_async", "load_next_firmware_from_table" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xJQkVSVEFTJiMzNDssCiAgICAmIzM0O0xJQkVSVEFTX1VTQiYjMzQ7LAogICAgJiMzNDtMSUJFUlRBU19TRElPJiMzNDssCiAgICAmIzM0O0xJQkVSVEFTX1NQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hlbHBlcl9maXJtd2FyZV9jYiYjMzQ7LAogICAgJiMzNDtsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jJiMzNDssCiAgICAmIzM0O2xvYWRfbmV4dF9maXJtd2FyZV9mcm9tX3RhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGxpYmVydGFzIHdpcmVsZXNzIGRyaXZlciYjMzk7cyBhc3luY2hyb25vdXMgZmlybXdhcmUgbG9hZGluZyBwYXRoLiBXaGVuIGEgaGVscGVyIGZpcm13YXJlIGlzIGxvYWRlZCBidXQgbm8gbWFpbiBmaXJtd2FyZSBpcyByZXF1aXJlZCwgdGhlIGhlbHBlciBmaXJtd2FyZSB3YXMgbm90IGJlaW5nIHJlbGVhc2VkLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IvU0RJTy9TUEkgZGV2aWNlIGluaXRpYWxpemF0aW9uIHdoZW4gZmlybXdhcmUgaXMgcmVxdWVzdGVkLiBGdXp6aW5nIHRoaXMgcGF0aCBjYW4gaGVscCBlbnN1cmUgdGhlIGZpcm13YXJlIGxvYWRpbmcgc3RhdGUgbWFjaGluZSBoYW5kbGVzIHZhcmlvdXMgc3VjY2Vzcy9mYWlsdXJlIGNvbmRpdGlvbnMgY29ycmVjdGx5IHdpdGhvdXQgbGVha2luZyBtZW1vcnkgb3IgY2F1c2luZyB1c2UtYWZ0ZXItZnJlZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU0MmU4OGYxODhhYjY2YjRhZDdlZTU4NzJiNmRiYjU5NWQxZDU3MmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1biAyNCAwOTo0MDozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmNcbmluZGV4IGYxMjQxMTA5NDRiN2U5Li45YmY3ZDRjMjA3YjllZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jXG5AQCAtNzgsNiAmIzQzOzc4LDcgQEAgc3RhdGljIHZvaWQgaGVscGVyX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsIHZvaWQgKmNvbnRleHQpXG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBObyBtYWluIGZpcm13YXJlIG5lZWRlZCBmb3IgdGhpcyBoZWxwZXIgLS1cdTAwM2Ugc3VjY2VzcyEgKi9cbiBcdFx0bGJzX2Z3X2xvYWRlZChwcml2LCAwLCBmaXJtd2FyZSwgTlVMTCk7XG4mIzQzO1x0XHRyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTtcbiBcdH1cbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TElCRVJUQVMmIzM0OywKICAgICYjMzQ7TElCRVJUQVNfVVNCJiMzNDssCiAgICAmIzM0O0xJQkVSVEFTX1NESU8mIzM0OywKICAgICYjMzQ7TElCRVJUQVNfU1BJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGVscGVyX2Zpcm13YXJlX2NiJiMzNDssCiAgICAmIzM0O2xic19nZXRfZmlybXdhcmVfYXN5bmMmIzM0OywKICAgICYjMzQ7bG9hZF9uZXh0X2Zpcm13YXJlX2Zyb21fdGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgbGliZXJ0YXMgd2lyZWxlc3MgZHJpdmVyJiMzOTtzIGFzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHBhdGguIFdoZW4gYSBoZWxwZXIgZmlybXdhcmUgaXMgbG9hZGVkIGJ1dCBubyBtYWluIGZpcm13YXJlIGlzIHJlcXVpcmVkLCB0aGUgaGVscGVyIGZpcm13YXJlIHdhcyBub3QgYmVpbmcgcmVsZWFzZWQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQi9TRElPL1NQSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gd2hlbiBmaXJtd2FyZSBpcyByZXF1ZXN0ZWQuIEZ1enppbmcgdGhpcyBwYXRoIGNhbiBoZWxwIGVuc3VyZSB0aGUgZmlybXdhcmUgbG9hZGluZyBzdGF0ZSBtYWNoaW5lIGhhbmRsZXMgdmFyaW91cyBzdWNjZXNzL2ZhaWx1cmUgY29uZGl0aW9ucyBjb3JyZWN0bHkgd2l0aG91dCBsZWFraW5nIG1lbW9yeSBvciBjYXVzaW5nIHVzZS1hZnRlci1mcmVlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNDJlODhmMTg4YWI2NmI0YWQ3ZWU1ODcyYjZkYmI1OTVkMWQ1NzJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdW4gMjQgMDk6NDA6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMKaW5kZXggZjEyNDExMDk0NGI3ZTkuLjliZjdkNGMyMDdiOWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jCkBAIC03OCw2ICYjNDM7NzgsNyBAQCBzdGF0aWMgdm9pZCBoZWxwZXJfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dCkKIAl9IGVsc2UgewogCQkvKiBObyBtYWluIGZpcm13YXJlIG5lZWRlZCBmb3IgdGhpcyBoZWxwZXIgLS0mZ3Q7IHN1Y2Nlc3MhICovCiAJCWxic19md19sb2FkZWQocHJpdiwgMCwgZmlybXdhcmUsIE5VTEwpOwomIzQzOwkJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CiAJfQogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBMb2FkaW5nIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIGFkZGVkIGByZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTtgIHdpdGhpbiB0aGUgYGhlbHBlcl9maXJtd2FyZV9jYmAgZnVuY3Rpb24uIFJpZ2h0IGF3YXksIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMsIHNvIGxldCYjMzk7cyBkaWcgaW50byB0aGUgY29udGV4dC4KCkkgc2VlIGBoZWxwZXJfZmlybXdhcmVfY2JgIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24uIEl0JiMzOTtzIHVzZWQgYWZ0ZXIgYSBmaXJtd2FyZSByZXF1ZXN0LCBhcyB0aGUgbmFtZSBzdWdnZXN0cy4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIHJldHVybiBmcm9tIGEgYHJlcXVlc3RfZmlybXdhcmVgIGNhbGwsIHdoaWNoIGlzIGZhaXJseSBzdGFuZGFyZC4gSW5zaWRlLCB0aGVyZSYjMzk7cyBhIGNoZWNrIGZvciBhIG51bGwgZmlybXdhcmUgcG9pbnRlciwgaW5kaWNhdGluZyBhIGZhaWx1cmUuIElmIGl0JiMzOTtzIGEgZmFpbHVyZSwgYGxic19md19sb2FkZWRgIGlzIGNhbGxlZCB3aXRoIGAtRU5PRU5UYC4gT3RoZXJ3aXNlLCBpdCBzZWVtcyB0aGVyZSYjMzk7cyBhIGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGxvYWQgYSBtYWluIGZpcm13YXJlIGJhc2VkIG9uIHdoZXRoZXIgYHByaXYtJmd0O2Z3X25hbWVgIGlzIHNldCwgYW5kIGFub3RoZXIgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCBjYWxsIHdpbGwgb2NjdXIgaWYgaXQgaXMsIHdoaWNoIHdpbGwgY2FsbCBgbWFpbl9maXJtd2FyZV9jYmAuIEJ1dCBpZiBgcHJpdi0mZ3Q7ZndfbmFtZWAgaXMgbnVsbCwgbWVhbmluZyB0aGVyZSYjMzk7cyBubyBtYWluIGZpcm13YXJlIHRvIGxvYWQsIHRoZW4gdGhlIGhlbHBlciBmaXJtd2FyZSBsb2FkIGlzIGNvbnNpZGVyZWQgYSBzdWNjZXNzIGFuZCBjYWxscyBgbGJzX2Z3X2xvYWRlZGAuIEFuZCAqdGhhdCYjMzk7cyogd2hlcmUgdGhlIG5ldyBgcmVsZWFzZV9maXJtd2FyZWAgY2FsbCBhcHBlYXJzLgoKTm93LCBhIHJlZCBmbGFnIHBvcHMgdXAuIFdlIGhhdmUgdG8gY29uc2lkZXIgd2hldGhlciBgbGJzX2Z3X2xvYWRlZGAgYWxyZWFkeSByZWxlYXNlcyB0aGUgZmlybXdhcmUsIGJlY2F1c2UgdGhhdCB3b3VsZCBjYXVzZSBhIGRvdWJsZS1mcmVlLCBhIHZlcnkgbmFzdHkgYnVnLiBJZiBgbGJzX2Z3X2xvYWRlZGAgKmRvZXMqIHJlbGVhc2UgdGhlIGZpcm13YXJlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBzZXJpb3VzIG1lbW9yeSBjb3JydXB0aW9uIHJpc2suIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZvciBgbGJzX2Z3X2xvYWRlZGAgKmltbWVkaWF0ZWx5Ki4gTGV0JiMzOTtzIGdvIHNlZSB3aGF0IGBsYnNfZndfbG9hZGVkYCBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xic19md19sb2FkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9MTM9c3RhdGljIHZvaWQgbG9hZF9uZXh0X2Zpcm13YXJlX2Zyb21fdGFibGUoc3RydWN0IGxic19wcml2YXRlICpwcml2YXRlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoxNTpzdGF0aWMgdm9pZCBsYnNfZndfbG9hZGVkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IHJldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xNi1cdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaGVscGVyLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKm1haW5mdylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9MzE9c3RhdGljIHZvaWQgZG9fbG9hZF9maXJtd2FyZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTQwLVx0XHRsYnNfZGViX2Z3KFwmIzM0O3JlcXVlc3RfZmlybXdhcmVfbm93YWl0IGVycm9yICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjQxOlx0XHRsYnNfZndfbG9hZGVkKHByaXYsIHJldCwgTlVMTCwgTlVMTCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtNDItXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jPTQ1PXN0YXRpYyB2b2lkIG1haW5fZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtNTUtXHQvKiBGaXJtd2FyZSBmb3VuZCEgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzo1NjpcdGxic19md19sb2FkZWQocHJpdiwgMCwgcHJpdi1cdTAwM2VoZWxwZXJfZncsIGZpcm13YXJlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy01Ny1cdGlmIChwcml2LVx1MDAzZWhlbHBlcl9mdykge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYz02ND1zdGF0aWMgdm9pZCBoZWxwZXJfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtNzktXHRcdC8qIE5vIG1haW4gZmlybXdhcmUgbmVlZGVkIGZvciB0aGlzIGhlbHBlciAtLVx1MDAzZSBzdWNjZXNzISAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjgwOlx0XHRsYnNfZndfbG9hZGVkKHByaXYsIDAsIGZpcm13YXJlLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy04MS1cdFx0cmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jPTg1PXN0YXRpYyB2b2lkIGxvYWRfbmV4dF9maXJtd2FyZV9mcm9tX3RhYmxlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTAxLVx0XHQvKiBFbmQgb2YgdGFibGUgaGl0LiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjEwMjpcdFx0bGJzX2Z3X2xvYWRlZChwcml2LCAtRU5PRU5ULCBOVUxMLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xMDMtXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjkwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyBGaXJtd2FyZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGhlIGluc3RydWN0aW9uIGlzIHRvICYjMzQ7cmVhZCBgbGJzX2Z3X2xvYWRlZGAmIzM0Oy4gSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIHNwZWNpZmljcy4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCB0aGF0IGBsYnNfZndfbG9hZGVkYCByZWZlcnMgdG8gYSB2YXJpYWJsZSBvciBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhlIGxvYWRpbmcgc3RhdGUgb2YgZmlybXdhcmUgZm9yIGEgc3BlY2lmaWMgc3lzdGVtIGNvbXBvbmVudCwgbGlrZWx5IGEgJiMzNDtsYnMmIzM0OyBkZXNpZ25hdGlvbiBzaWduaWZ5aW5nIHNvbWV0aGluZyB3aXRoaW4gYSBsYXllcmVkIGJsb2NrIHN0cnVjdHVyZS4gVGhlIGZhY3QgdGhhdCBpdCBleGlzdHMgaW1wbGllcyBhIHNwZWNpZmljIG5lZWQgdG8gdHJhY2sgZmlybXdhcmUgc3RhdHVzLCB3aGljaCBpbiB0dXJuIHN1Z2dlc3RzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIGJvb3QgcHJvY2Vzc2VzLCBlcnJvciBoYW5kbGluZywgb3IgcGVyaGFwcyBldmVuIHZlcnNpb24gY29udHJvbCBhbmQgcm9sbGJhY2sgbWVjaGFuaXNtcy4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgc2ltcGxlIGZsYWcgdG8gYSBtb3JlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHR5cGUsIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgYW5kIG1vZGlmaWVkLCBhbmQgd2hhdCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgZXhpc3QgaW4gb3JkZXIgdG8gZnVsbHkgZGV0ZXJtaW5lIGl0cyByb2xlLiBUaGUgcXVlc3Rpb24gaXMsIHdoYXQgcHJlY2lzZWx5IGRvIEkgbmVlZCB0byBsZWFybiBhYm91dCB0aGlzIGVsZW1lbnQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0c3RhdGljIHZvaWQgbGJzX2Z3X2xvYWRlZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCByZXQsXG4gIDE2Olx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmhlbHBlciwgY29uc3Qgc3RydWN0IGZpcm13YXJlICptYWluZncpXG4gIDE3Olx0e1xuICAxODpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAgMTk6XHRcbiAgMjA6XHRcdGxic19kZWJfZncoXCYjMzQ7ZmlybXdhcmUgbG9hZCBjb21wbGV0ZSwgY29kZSAlZFxcblwmIzM0OywgcmV0KTtcbiAgMjE6XHRcbiAgMjI6XHRcdC8qIFVzZXIgbXVzdCBmcmVlIGhlbHBlci9tYWluZncgKi9cbiAgMjM6XHRcdHByaXYtXHUwMDNlZndfY2FsbGJhY2socHJpdiwgcmV0LCBoZWxwZXIsIG1haW5mdyk7XG4gIDI0Olx0XG4gIDI1Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZWRyaXZlcl9sb2NrLCBmbGFncyk7XG4gIDI2Olx0XHRwcml2LVx1MDAzZWZ3X2NhbGxiYWNrID0gTlVMTDtcbiAgMjc6XHRcdHdha2VfdXAoXHUwMDI2cHJpdi1cdTAwM2Vmd193YWl0cSk7XG4gIDI4Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNlZHJpdmVyX2xvY2ssIGZsYWdzKTtcbiAgMjk6XHR9XG4gIDMwOlx0XG4gIDMxOlx0c3RhdGljIHZvaWQgZG9fbG9hZF9maXJtd2FyZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4gIDMyOlx0XHR2b2lkICgqY2IpKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpKVxuICAzMzpcdHtcbiAgMzQ6XHRcdGludCByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRG91YmxlIEZyZWUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhlIGNvbW1lbnQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgaXNzdWU6ICYjMzQ7LyogVXNlciBtdXN0IGZyZWUgaGVscGVyL21haW5mdyAqLyYjMzQ7LiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIE5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjay4gYGhlbHBlcl9maXJtd2FyZV9jYmAgY2FsbHMgYGxic19md19sb2FkZWRgLCBhbmQgdGhhdCBmdW5jdGlvbiBzdWJzZXF1ZW50bHkgY2FsbHMgYHJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpYC4gRmluZS4gQnV0IGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogYGxic19md19sb2FkZWRgIGFsc28gY2FsbHMgYHByaXYtJmd0O2Z3X2NhbGxiYWNrYCB3aXRoIHRoYXQgKnNhbWUqIGBmaXJtd2FyZWAgcG9pbnRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlmIGBwcml2LSZndDtmd19jYWxsYmFja2AgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIGBmaXJtd2FyZWAsIHRoZW4gdGhhdCBgcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSlgIGNhbGwgYWZ0ZXIgd291bGQgYmUgYSBkb3VibGUgZnJlZSwgcmlnaHQ/IFRoYXQmIzM5O3MgYSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Zy4gVGhlIGNvbW1lbnQgc3BlY2lmaWNhbGx5IHNheXMgdGhlIHVzZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgaXQsIHdoaWNoIGlzIHRoZSB1c2VyIG9mIHRoZSBjYWxsYmFjay4gQnV0IGRvZXMgdGhhdCBtZWFuIGBwcml2LSZndDtmd19jYWxsYmFja2AgKmlzKiB0aGUgdXNlciByZXNwb25zaWJsZSBmb3IgaXQ/IEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgcHJpdi0mZ3Q7ZndfY2FsbGJhY2tgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBsb29rcyBsaWtlLi4uIEkmIzM5O2xsIG5lZWQgdG8gZ28gbG9vayBhdCBpdHMgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmd19jYWxsYmFjayA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jPTE1PXN0YXRpYyB2b2lkIGxic19md19sb2FkZWQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgcmV0LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0yNS1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNlZHJpdmVyX2xvY2ssIGZsYWdzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoyNjpcdHByaXYtXHUwMDNlZndfY2FsbGJhY2sgPSBOVUxMO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTI3LVx0d2FrZV91cChcdTAwMjZwcml2LVx1MDAzZWZ3X3dhaXRxKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9MTE1PXZvaWQgbGJzX3dhaXRfZm9yX2Zpcm13YXJlX2xvYWQoc3RydWN0IGxic19wcml2YXRlICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTExNi17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM6MTE3Olx0d2FpdF9ldmVudChwcml2LVx1MDAzZWZ3X3dhaXRxLCBwcml2LVx1MDAzZWZ3X2NhbGxiYWNrID09IE5VTEwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTExOC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jPTEzMj1pbnQgbGJzX2dldF9maXJtd2FyZV9hc3luYyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTQ1LVx0cHJpdi1cdTAwM2Vmd19kZXZpY2UgPSBkZXZpY2U7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM6MTQ2Olx0cHJpdi1cdTAwM2Vmd19jYWxsYmFjayA9IGNhbGxiYWNrO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTE0Ny1cdHByaXYtXHUwMDNlZndfdGFibGUgPSBmd190YWJsZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzEyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jYCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgdG8gdHJhY2UgaXRzIHVzYWdlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSAqaW5pdGlhdGluZyogdGhlIGNhbGwgdG8gYGxic19nZXRfZmlybXdhcmVfYXN5bmNgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0YXJ0aW5nIHBvaW50LCByZWFsbHkuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGNhbGwgaXMgZ29pbmcgdG8gaW5mb3JtIGV2ZXJ5IHN1YnNlcXVlbnQgbGluZSBvZiBpbnZlc3RpZ2F0aW9uLiBJcyBpdCBkcml2ZW4gYnkgYW4gZXh0ZXJuYWwgZXZlbnQ/IFNvbWUgdGltZXItYmFzZWQgcGVyaW9kaWMgY2hlY2s/IE9yLCBwZXJoYXBzLCBhbm90aGVyIHN1YnN5c3RlbSByZWx5aW5nIG9uIHRoaXMgYXN5bmMgY2FsbCB0byBmZXRjaCBzcGVjaWZpYyBkYXRhPyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGFsbCB0aGUgcG9zc2libGUgcGF0aHMgdGhhdCBhcmUgbGVhZGluZyB0byBpdHMgZXhlY3V0aW9uLiBMZXQmIzM5O3Mgc2VlIHdobyYjMzk7cyBjYWxsaW5nIGl0LCBhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzLiBUaGlzIGlzIHRoZSBiZWRyb2NrIG9mIHVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9kZWNsLmg9Njk9aW50IGxic19nZXRfZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgY2FyZF9tb2RlbCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2RlY2wuaC03Mi1cdFx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKiptYWluZncpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9kZWNsLmg6NzM6aW50IGxic19nZXRfZmlybXdhcmVfYXN5bmMoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2RlY2wuaC03NC1cdFx0XHQgICB1MzIgY2FyZF9tb2RlbCwgY29uc3Qgc3RydWN0IGxic19md190YWJsZSAqZndfdGFibGUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jPTExNT12b2lkIGxic193YWl0X2Zvcl9maXJtd2FyZV9sb2FkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTIwLS8qKlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjEyMTogKiAgbGJzX2dldF9maXJtd2FyZV9hc3luYyAtIFJldHJpZXZlcyBmaXJtd2FyZSBhc3luY2hyb25vdXNseS4gQ2FuIGxvYWRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xMjItICogIGVpdGhlciBhIGhlbHBlciBmaXJtd2FyZSBhbmQgYSBtYWluIGZpcm13YXJlICgyLXN0YWdlKSwgb3IganVzdCB0aGUgaGVscGVyLlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xMzEtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM6MTMyOmludCBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGRldmljZSAqZGV2aWNlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTEzMy1cdFx0XHQgICAgdTMyIGNhcmRfbW9kZWwsIGNvbnN0IHN0cnVjdCBsYnNfZndfdGFibGUgKmZ3X3RhYmxlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xNTUtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjE1NjpFWFBPUlRfU1lNQk9MX0dQTChsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xNTctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTE2OC0gKlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjE2OTogKiBEZXByZWNhdGVkOiB1c2UgbGJzX2dldF9maXJtd2FyZV9hc3luYygpIGluc3RlYWQuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTcwLSAqXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM9NjkzPXN0YXRpYyBpbnQgaWZfc2Rpb19wcm9nX2Zpcm13YXJlKHN0cnVjdCBpZl9zZGlvX2NhcmQgKmNhcmQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmMtNzM1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM6NzM2Olx0cmV0ID0gbGJzX2dldF9maXJtd2FyZV9hc3luYyhjYXJkLVx1MDAzZXByaXYsIFx1MDAyNmNhcmQtXHUwMDNlZnVuYy1cdTAwM2VkZXYsIGNhcmQtXHUwMDNlbW9kZWwsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3NkaW8uYy03MzctXHRcdFx0XHQgICAgIGZ3X3RhYmxlLCBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmM9MTkzPXN0YXRpYyBpbnQgaWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmMtMjgyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYzoyODM6XHRyID0gbGJzX2dldF9maXJtd2FyZV9hc3luYyhwcml2LCBcdTAwMjZ1ZGV2LVx1MDAzZWRldiwgY2FyZHAtXHUwMDNlbW9kZWwsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jLTI4NC1cdFx0XHRcdCAgIGZ3X3RhYmxlLCBpZl91c2JfcHJvZ19maXJtd2FyZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NjUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBGaXJtd2FyZSBQcm9ncmFtbWluZyBGbGFncyoqCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBCZWZvcmUgSSBzdGFydCBhbnl0aGluZyBlbHNlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nIG9idmlvdXMsIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIHByb2JhYmx5IGp1Z2dsaW5nIGRpZmZlcmVudCBwcm9ncmFtbWluZyBtZXRob2RzLiBJIG5lZWQgdG8gZXhwbGljaXRseSB2ZXJpZnkgdGhlIHN0YXR1cyBvZiB0aG9zZSB0d28gZmxhZ3M6IGBpZl91c2JfcHJvZ19maXJtd2FyZWAgYW5kIGBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmVgLiBJdCYjMzk7cyBjcnVjaWFsLCBvYnZpb3VzbHksIHRvIGNvbmZpcm0gd2hldGhlciB3ZSYjMzk7cmUgdGFyZ2V0aW5nIFVTQiBvciBTRElPIGZvciB0aGUgZmlybXdhcmUgdXBkYXRlIHByb2Nlc3MuIEkgd2FudCB0byBhdm9pZCBhbnkgc2lsbHkgbWlzdGFrZXMgZHVlIHRvIGFzc3VtaW5nIHRoZSB3cm9uZyBwcm9ncmFtbWluZyBtZXRob2QuIFRoaXMgaXMgYSBzdGFuZGFyZCBzdGVwIEkgdGFrZSBiZWZvcmUgZW5nYWdpbmcgd2l0aCBtb3JlIGFkdmFuY2VkIHByb2Nlc3NlcyB0byBhdm9pZCB3YXN0aW5nIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmX3VzYl9wcm9nX2Zpcm13YXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYz02Nz1zdGF0aWMgdm9pZCBpZl91c2JfcmVjZWl2ZV9md2xvYWQoc3RydWN0IHVyYiAqdXJiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmM6Njg6c3RhdGljIHZvaWQgaWZfdXNiX3Byb2dfZmlybXdhcmUoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgcmV0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy02OS1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmM9MTkzPXN0YXRpYyBpbnQgaWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmMtMjgzLVx0ciA9IGxic19nZXRfZmlybXdhcmVfYXN5bmMocHJpdiwgXHUwMDI2dWRldi1cdTAwM2VkZXYsIGNhcmRwLVx1MDAzZW1vZGVsLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYzoyODQ6XHRcdFx0XHQgICBmd190YWJsZSwgaWZfdXNiX3Byb2dfZmlybXdhcmUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy0yODUtXHRpZiAocilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jPTc5MT1zdGF0aWMgaW50IGNoZWNrX2Z3ZmlsZV9mb3JtYXQoY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgdG90bGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmMtODMwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYzo4MzE6c3RhdGljIHZvaWQgaWZfdXNiX3Byb2dfZmlybXdhcmUoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgcmV0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy04MzItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyMgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBpZl91c2JfcHJvZ19maXJtd2FyZWAgQ29kZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLCBzdGFydGluZyB3aXRoIGBpZl91c2JfcHJvZ19maXJtd2FyZWAuIEp1c3QgZnJvbSB0aGUgbmFtZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB3ZSYjMzk7cmUgbG9va2luZyBhdCBmaXJtd2FyZSByZWxhdGVkIHRvIFVTQiBwcm9ncmFtbWluZy4gSXQmIzM5O3MgbGlrZWx5IGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LCBwcm9iYWJseSBjaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9yIHZhbGlkaXR5IG9mIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgVVNCIHByb2dyYW1tZXIuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBjaGVja2luZyBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSByZXZpc2lvbiwgYSB2YWxpZCBjb25uZWN0aW9uLCBhIGNlcnRhaW4gZmlybXdhcmUgdmVyc2lvbiBvbiB0aGUgcHJvZ3JhbW1lciBpdHNlbGYsIG9yIGV2ZW4gc29tZXRoaW5nIGFzIGJhc2ljIGFzIHdoZXRoZXIgYSBkZXZpY2UgaXMgY29ubmVjdGVkIGF0IGFsbC4gTXkgZ3Vlc3MgaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSB0aGUgdG9wLWxldmVsIGNvbmRpdGlvbmFsIGxvZ2ljIGZvciBkZWNpZGluZyB3aGV0aGVyIHRvIGVuZ2FnZSB3aXRoIHRoZSBVU0IgcHJvZ3JhbW1lciBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlbiBwZXJoYXBzIG1vdmluZyBpbnRvIG1vcmUgc3BlY2lhbGl6ZWQgY29uZGl0aW9uYWwgYmxvY2tzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgZXJyb3IgaGFuZGxpbmcsIGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBVU0IgcHJvdG9jb2wgYmVpbmcgZW1wbG95ZWQuIEkgZXhwZWN0IHRvIHNlZSBzcGVjaWZpYyBVU0IgdmVuZG9yIGFuZCBwcm9kdWN0IElEcywgYW5kIHByb2JhYmx5IGRldGFpbHMgYWJvdXQgdGhlIGNvbW11bmljYXRpb24gZW5kcG9pbnRzLiBOb3csIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGlzIGZpbGUgYW5kIHdoYXQgaXQmIzM5O3MgdHJ5aW5nIHRvIGRvLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgzMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODMxOlx0c3RhdGljIHZvaWQgaWZfdXNiX3Byb2dfZmlybXdhcmUoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgcmV0LFxuIDgzMjpcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4gODMzOlx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICp1bnVzZWQpXG4gODM0Olx0e1xuIDgzNTpcdFx0c3RydWN0IGlmX3VzYl9jYXJkICpjYXJkcCA9IHByaXYtXHUwMDNlY2FyZDtcbiA4MzY6XHRcdGludCBpID0gMDtcbiA4Mzc6XHRcdHN0YXRpYyBpbnQgcmVzZXRfY291bnQgPSAxMDtcbiA4Mzg6XHRcbiA4Mzk6XHRcdGlmIChyZXQpIHtcbiA4NDA6XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBmaW5kIGZpcm13YXJlICglZClcXG5cJiMzNDssIHJldCk7XG4gODQxOlx0XHRcdGdvdG8gZG9uZTtcbiA4NDI6XHRcdH1cbiA4NDM6XHRcbiA4NDQ6XHRcdGNhcmRwLVx1MDAzZWZ3ID0gZnc7XG4gODQ1Olx0XHRpZiAoY2hlY2tfZndmaWxlX2Zvcm1hdChjYXJkcC1cdTAwM2Vmdy1cdTAwM2VkYXRhLCBjYXJkcC1cdTAwM2Vmdy1cdTAwM2VzaXplKSkge1xuIDg0NjpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDg0NzpcdFx0XHRnb3RvIGRvbmU7XG4gODQ4Olx0XHR9XG4gODQ5Olx0XG4gODUwOlx0XHQvKiBDYW5jZWwgYW55IHBlbmRpbmcgdXNiIGJ1c2luZXNzICovXG4gODUxOlx0XHR1c2Jfa2lsbF9hbmNob3JlZF91cmJzKFx1MDAyNmNhcmRwLVx1MDAzZXJ4X3N1Ym1pdHRlZCk7XG4gODUyOlx0XHR1c2Jfa2lsbF9hbmNob3JlZF91cmJzKFx1MDAyNmNhcmRwLVx1MDAzZXR4X3N1Ym1pdHRlZCk7XG4gODUzOlx0XG4gODU0Olx0XHRjYXJkcC1cdTAwM2Vmd2xhc3RibGtzZW50ID0gMDtcbiA4NTU6XHRcdGNhcmRwLVx1MDAzZWZ3ZG5sZG92ZXIgPSAwO1xuIDg1NjpcdFx0Y2FyZHAtXHUwMDNldG90YWxieXRlcyA9IDA7XG4gODU3Olx0XHRjYXJkcC1cdTAwM2Vmd2ZpbmFsYmxrID0gMDtcbiA4NTg6XHRcdGNhcmRwLVx1MDAzZWJvb3RjbWRyZXNwID0gMDtcbiA4NTk6XHRcbiA4NjA6XHRyZXN0YXJ0OlxuIDg2MTpcdFx0aWYgKGlmX3VzYl9zdWJtaXRfcnhfdXJiX2Z3bG9hZChjYXJkcCkgXHUwMDNjIDApIHtcbiA4NjI6XHRcdFx0bGJzX2RlYl91c2JkKFx1MDAyNmNhcmRwLVx1MDAzZXVkZXYtXHUwMDNlZGV2LCBcJiMzNDtVUkIgc3VibWlzc2lvbiBpcyBmYWlsZWRcXG5cJiMzNDspO1xuIDg2MzpcdFx0XHRyZXQgPSAtRUlPO1xuIDg2NDpcdFx0XHRnb3RvIGRvbmU7XG4gODY1Olx0XHR9XG4gODY2Olx0XG4gODY3Olx0XHRjYXJkcC1cdTAwM2Vib290Y21kcmVzcCA9IDA7XG4gODY4Olx0XHRkbyB7XG4gODY5Olx0XHRcdGludCBqID0gMDtcbiA4NzA6XHRcdFx0aSYjNDM7JiM0Mzs7XG4gODcxOlx0XHRcdGlmX3VzYl9pc3N1ZV9ib290X2NvbW1hbmQoY2FyZHAsIEJPT1RfQ01EX0ZXX0JZX1VTQik7XG4gODcyOlx0XHRcdC8qIHdhaXQgZm9yIGNvbW1hbmQgcmVzcG9uc2UgKi9cbiA4NzM6XHRcdFx0ZG8ge1xuIDg3NDpcdFx0XHRcdGomIzQzOyYjNDM7O1xuIDg3NTpcdFx0XHRcdG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7XG4gODc2Olx0XHRcdH0gd2hpbGUgKGNhcmRwLVx1MDAzZWJvb3RjbWRyZXNwID09IDAgXHUwMDI2XHUwMDI2IGogXHUwMDNjIDEwKTtcbiA4Nzc6XHRcdH0gd2hpbGUgKGNhcmRwLVx1MDAzZWJvb3RjbWRyZXNwID09IDAgXHUwMDI2XHUwMDI2IGkgXHUwMDNjIDUpO1xuIDg3ODpcdFxuIDg3OTpcdFx0aWYgKGNhcmRwLVx1MDAzZWJvb3RjbWRyZXNwID09IEJPT1RfQ01EX1JFU1BfTk9UX1NVUFBPUlRFRCkge1xuIDg4MDpcdFx0XHQvKiBSZXR1cm4gdG8gbm9ybWFsIG9wZXJhdGlvbiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjE1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZToKCioqQ2hlY2tpbmcgRmlybXdhcmUgSGFuZGxpbmcgaW4gYGlmX3VzYl9wcm9nX2Zpcm13YXJlYCoqCgpPa2F5LCBzbyBgaWZfdXNiX3Byb2dfZmlybXdhcmVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIFVTQiBmaXJtd2FyZSBwcm9ncmFtbWluZywgYW5kIGl0IGFwcGVhcnMgaXQgc2F2ZXMgdGhlIGxvYWRlZCBmaXJtd2FyZSwgYGZ3YCwgaW50byBgY2FyZHAtJmd0O2Z3YC4gTXkgbWFpbiBjb25jZXJuIHJpZ2h0IG5vdyBpcyBtZW1vcnkgbWFuYWdlbWVudC4gRGlkIGl0IHJlbGVhc2UgdGhlIGFsbG9jYXRlZCBtZW1vcnkgYWZ0ZXIgaXQgaGFzIHNhdmVkIHRoZSBmaXJtd2FyZT8gSSByZWFsbHkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBgZndgIGJ1ZmZlciBhdCBzb21lIHBvaW50IHRvIGF2b2lkIG1lbW9yeSBsZWFrcy4gSSBuZWVkIHRvIHJlYWQgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uIGNhcmVmdWxseSB0byBlbnN1cmUgdGhhdCBpdCBoYXMgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODgxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4ODE6XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4gODgyOlx0XHRcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXHUwMDI2Y2FyZHAtXHUwMDNlcnhfc3VibWl0dGVkKTtcbiA4ODM6XHRcdFx0dXNiX2tpbGxfYW5jaG9yZWRfdXJicyhcdTAwMjZjYXJkcC1cdTAwM2V0eF9zdWJtaXR0ZWQpO1xuIDg4NDpcdFx0XHRpZiAoaWZfdXNiX3N1Ym1pdF9yeF91cmIoY2FyZHApIFx1MDAzYyAwKVxuIDg4NTpcdFx0XHRcdHJldCA9IC1FSU87XG4gODg2Olx0XHRcdGdvdG8gZG9uZTtcbiA4ODc6XHRcdH0gZWxzZSBpZiAoY2FyZHAtXHUwMDNlYm9vdGNtZHJlc3AgXHUwMDNjPSAwKSB7XG4gODg4Olx0XHRcdGlmICgtLXJlc2V0X2NvdW50IFx1MDAzZT0gMCkge1xuIDg4OTpcdFx0XHRcdGlmX3VzYl9yZXNldF9kZXZpY2UoY2FyZHApO1xuIDg5MDpcdFx0XHRcdGdvdG8gcmVzdGFydDtcbiA4OTE6XHRcdFx0fVxuIDg5MjpcdFx0XHRyZXQgPSAtRUlPO1xuIDg5MzpcdFx0XHRnb3RvIGRvbmU7XG4gODk0Olx0XHR9XG4gODk1Olx0XG4gODk2Olx0XHRpID0gMDtcbiA4OTc6XHRcbiA4OTg6XHRcdGNhcmRwLVx1MDAzZXRvdGFsYnl0ZXMgPSAwO1xuIDg5OTpcdFx0Y2FyZHAtXHUwMDNlZndsYXN0Ymxrc2VudCA9IDA7XG4gOTAwOlx0XHRjYXJkcC1cdTAwM2VDUkNfT0sgPSAxO1xuIDkwMTpcdFx0Y2FyZHAtXHUwMDNlZndkbmxkb3ZlciA9IDA7XG4gOTAyOlx0XHRjYXJkcC1cdTAwM2Vmd3NlcW51bSA9IC0xO1xuIDkwMzpcdFx0Y2FyZHAtXHUwMDNldG90YWxieXRlcyA9IDA7XG4gOTA0Olx0XHRjYXJkcC1cdTAwM2Vmd2ZpbmFsYmxrID0gMDtcbiA5MDU6XHRcbiA5MDY6XHRcdC8qIFNlbmQgdGhlIGZpcnN0IGZpcm13YXJlIHBhY2tldC4uLiAqL1xuIDkwNzpcdFx0aWZfdXNiX3NlbmRfZndfcGt0KGNhcmRwKTtcbiA5MDg6XHRcbiA5MDk6XHRcdC8qIC4uLiBhbmQgd2FpdCBmb3IgdGhlIHByb2Nlc3MgdG8gY29tcGxldGUgKi9cbiA5MTA6XHRcdHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjYXJkcC1cdTAwM2Vmd193cSwgY2FyZHAtXHUwMDNlc3VycHJpc2VfcmVtb3ZlZCB8fCBjYXJkcC1cdTAwM2Vmd2RubGRvdmVyKTtcbiA5MTE6XHRcbiA5MTI6XHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNmNhcmRwLVx1MDAzZWZ3X3RpbWVvdXQpO1xuIDkxMzpcdFx0dXNiX2tpbGxfYW5jaG9yZWRfdXJicyhcdTAwMjZjYXJkcC1cdTAwM2VyeF9zdWJtaXR0ZWQpO1xuIDkxNDpcdFxuIDkxNTpcdFx0aWYgKCFjYXJkcC1cdTAwM2Vmd2RubGRvdmVyKSB7XG4gOTE2Olx0XHRcdHByX2luZm8oXCYjMzQ7ZmFpbGVkIHRvIGxvYWQgZncsIHJlc2V0dGluZyBkZXZpY2UhXFxuXCYjMzQ7KTtcbiA5MTc6XHRcdFx0aWYgKC0tcmVzZXRfY291bnQgXHUwMDNlPSAwKSB7XG4gOTE4Olx0XHRcdFx0aWZfdXNiX3Jlc2V0X2RldmljZShjYXJkcCk7XG4gOTE5Olx0XHRcdFx0Z290byByZXN0YXJ0O1xuIDkyMDpcdFx0XHR9XG4gOTIxOlx0XG4gOTIyOlx0XHRcdHByX2luZm8oXCYjMzQ7RlcgZG93bmxvYWQgZmFpbHVyZSwgdGltZSA9ICVkIG1zXFxuXCYjMzQ7LCBpICogMTAwKTtcbiA5MjM6XHRcdFx0cmV0ID0gLUVJTztcbiA5MjQ6XHRcdFx0Z290byBkb25lO1xuIDkyNTpcdFx0fVxuIDkyNjpcdFxuIDkyNzpcdFx0Y2FyZHAtXHUwMDNlcHJpdi1cdTAwM2Vmd19yZWFkeSA9IDE7XG4gOTI4Olx0XHRpZl91c2Jfc3VibWl0X3J4X3VyYihjYXJkcCk7XG4gOTI5Olx0XG4gOTMwOlx0XHRpZiAobGJzX3N0YXJ0X2NhcmQocHJpdikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MTgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBpZl91c2JfcHJvZ19maXJtd2FyZWAgQ29uZGl0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBgaWZfdXNiX3Byb2dfZmlybXdhcmVgIGNvbmRpdGlvbiBpcyBjb250aW51aW5nLi4uIEkgbmVlZCB0byBpbW1lZGlhdGVseSBldmFsdWF0ZSB3aGF0IHRoYXQgaW1wbGllcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBsaWtlbHkgaW5kaWNhdGVzIHRoZSBzeXN0ZW0gaXMgc3RpbGwgaW4gYSBVU0IgcHJvZ3JhbW1pbmcgb3IgZmlybXdhcmUgdXBkYXRlIHN0YXRlLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGhhbmctdXAsIGEgY29udGludWVkIHdhaXQgZm9yIGEgdmFsaWQgZmlybXdhcmUgaW1hZ2UsIG9yIG1heWJlIGV2ZW4gYW4gdW5leHBlY3RlZCByZXR1cm4gZnJvbSBhIHJlbGF0ZWQgZnVuY3Rpb24uIEkgaGF2ZSB0byBxdWlja2x5IGRlZHVjZSB3aHkgdGhpcyBpcyBoYXBwZW5pbmcuIElzIHRoZXJlIGFuIGlzc3VlIHdpdGggdGhlIFVTQiBjb25uZWN0aW9uLCB0aGUgZmlybXdhcmUgaW1hZ2UgaXRzZWxmLCB0aGUgcHJvZ3JhbW1pbmcgc2VxdWVuY2UsIG9yIGV2ZW4gdGhlIGhhcmR3YXJlIGludm9sdmVkPyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHBvc3NpYmxlIGZhY3RvcnMgY29udHJpYnV0aW5nIHRvIHRoaXMgb25nb2luZyBjb25kaXRpb24sIHNpbmNlIHRoaXMgY291bGQgYmUgYSBwb2ludCBvZiBmYWlsdXJlIGZvciB0aGUgdXBkYXRlIHByb2NlZHVyZSBvciwgaW4gdGhlIHdvcnN0IGNhc2UsIGJyaWNraW5nIHRoZSBkZXZpY2UuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgcGF0aCB0aGF0IHVzZXMgYGlmX3VzYl9wcm9nX2Zpcm13YXJlYCB0byB1bmRlcnN0YW5kIHRoZSBzdGF0ZSBpdCByZXByZXNlbnRzIGFuZCBwb3RlbnRpYWwgbmV4dCBzdGVwcywgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTMxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MzE6XHRcdFx0Z290byBkb25lO1xuIDkzMjpcdFxuIDkzMzpcdFx0aWZfdXNiX3NldHVwX2Zpcm13YXJlKHByaXYpO1xuIDkzNDpcdFxuIDkzNTpcdFx0LypcbiA5MzY6XHRcdCAqIEVIU19SRU1PVkVfV0FLRVVQIGlzIG5vdCBzdXBwb3J0ZWQgb24gYWxsIHZlcnNpb25zIG9mIHRoZSBmaXJtd2FyZS5cbiA5Mzc6XHRcdCAqL1xuIDkzODpcdFx0cHJpdi1cdTAwM2V3b2xfY3JpdGVyaWEgPSBFSFNfUkVNT1ZFX1dBS0VVUDtcbiA5Mzk6XHRcdGlmIChsYnNfaG9zdF9zbGVlcF9jZmcocHJpdiwgcHJpdi1cdTAwM2V3b2xfY3JpdGVyaWEsIE5VTEwpKVxuIDk0MDpcdFx0XHRwcml2LVx1MDAzZWVoc19yZW1vdmVfc3VwcG9ydGVkID0gZmFsc2U7XG4gOTQxOlx0XG4gOTQyOlx0IGRvbmU6XG4gOTQzOlx0XHRjYXJkcC1cdTAwM2VmdyA9IE5VTEw7XG4gOTQ0Olx0fVxuIDk0NTpcdFxuIDk0NjpcdFxuIDk0NzpcdCNpZmRlZiBDT05GSUdfUE1cbiA5NDg6XHRzdGF0aWMgaW50IGlmX3VzYl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbiA5NDk6XHR7XG4gOTUwOlx0XHRzdHJ1Y3QgaWZfdXNiX2NhcmQgKmNhcmRwID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcbiA5NTE6XHRcdHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNhcmRwLVx1MDAzZXByaXY7XG4gOTUyOlx0XHRpbnQgcmV0O1xuIDk1MzpcdFxuIDk1NDpcdFx0aWYgKHByaXYtXHUwMDNlcHNzdGF0ZSAhPSBQU19TVEFURV9GVUxMX1BPV0VSKSB7XG4gOTU1Olx0XHRcdHJldCA9IC0xO1xuIDk1NjpcdFx0XHRnb3RvIG91dDtcbiA5NTc6XHRcdH1cbiA5NTg6XHRcbiA5NTk6XHQjaWZkZWYgQ09ORklHX09MUENcbiA5NjA6XHRcdGlmIChtYWNoaW5lX2lzX29scGMoKSkge1xuIDk2MTpcdFx0XHRpZiAocHJpdi1cdTAwM2V3b2xfY3JpdGVyaWEgPT0gRUhTX1JFTU9WRV9XQUtFVVApXG4gOTYyOlx0XHRcdFx0b2xwY19lY193YWtldXBfY2xlYXIoRUNfU0NJX1NSQ19XTEFOKTtcbiA5NjM6XHRcdFx0ZWxzZVxuIDk2NDpcdFx0XHRcdG9scGNfZWNfd2FrZXVwX3NldChFQ19TQ0lfU1JDX1dMQU4pO1xuIDk2NTpcdFx0fVxuIDk2NjpcdCNlbmRpZlxuIDk2NzpcdFxuIDk2ODpcdFx0cmV0ID0gbGJzX3N1c3BlbmQocHJpdik7XG4gOTY5Olx0XHRpZiAocmV0KVxuIDk3MDpcdFx0XHRnb3RvIG91dDtcbiA5NzE6XHRcbiA5NzI6XHRcdC8qIFVubGluayB0eCBcdTAwMjYgcnggdXJiICovXG4gOTczOlx0XHR1c2Jfa2lsbF9hbmNob3JlZF91cmJzKFx1MDAyNmNhcmRwLVx1MDAzZXR4X3N1Ym1pdHRlZCk7XG4gOTc0Olx0XHR1c2Jfa2lsbF9hbmNob3JlZF91cmJzKFx1MDAyNmNhcmRwLVx1MDAzZXJ4X3N1Ym1pdHRlZCk7XG4gOTc1Olx0XG4gOTc2Olx0IG91dDpcbiA5Nzc6XHRcdHJldHVybiByZXQ7XG4gOTc4Olx0fVxuIDk3OTpcdFxuIDk4MDpcdHN0YXRpYyBpbnQgaWZfdXNiX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU5MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipVU0IgRmlybXdhcmUgUHJvZ3JhbW1pbmcgR290Y2hhISoqCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGp1c3QgcmUtcmVhZGluZyB0aGUgY29kZSBpbiBgaWZfdXNiX3Byb2dfZmlybXdhcmVgLi4uIGRhbmcgaXQhIEkga25ldyBJIHNob3VsZCBoYXZlIGJlZW4gbW9yZSBjYXJlZnVsLiBJdCAqKmRvZXNuJiMzOTt0KiogYWN0dWFsbHkgYGZyZWUoZncpYCEgSXQgY2xldmVybHkgc2V0cyBgY2FyZHAtJmd0O2Z3ID0gTlVMTDtgIGF0IHRoZSBlbmQgb2YgdGhlIHByb2Nlc3MsIHdoaWNoIGlzIGhvdyBpdCBzaWduYWxzIHRoYXQgdGhlIGZpcm13YXJlIGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoYXQmIzM5O3MgYSBjbGV2ZXIgdHJpY2ssIGJ1dCBlYXN5IHRvIG1pc3MuIEkgaGF2ZSB0byBtYWtlIGEgbm90ZSBvZiB0aGlzIHRvIGJlIGNlcnRhaW4gdGhhdCBJIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYSBtZW1vcnkgbGVhayBzb21ld2hlcmUgZWxzZS4KCk5vdywgbGV0JiMzOTtzIHNlZSwgd2hhdCBhYm91dCB0aGF0IGBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmVgIHJvdXRpbmU/IEkgbmVlZCB0byBxdWlja2x5IGNvbXBhcmUgdGhlIGFwcHJvYWNoIHRoZXJlLiBBcmUgd2Ugc2V0dGluZyB0aGUgYGNhcmRwLSZndDtmdyA9IE5VTEw7YCBwb2ludGVyIHRvbz8gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSBoYXZlIHRoZSByaWdodCBhcHByb2FjaCwgdG8gcHJldmVudCBlaXRoZXIgYSBtZW1vcnkgbGVhaywgb3IgYSBkb3VibGUtZnJlZSBzaXR1YXRpb24uIFRoaXMgYXJlYSBvZiB0aGUgY29kZSBpcyBoaWdobHkgc2Vuc2l0aXZlLCBzbyBhbnkgcG90ZW50aWFsIGVycm9ycyBuZWVkIHRvIGJlIGZvdW5kIHF1aWNrbHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmX3NkaW9fZG9fcHJvZ19maXJtd2FyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jPTUzNj1zdGF0aWMgaW50IGlmX3NkaW9fcHJvZ19yZWFsKHN0cnVjdCBpZl9zZGlvX2NhcmQgKmNhcmQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmMtNjY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM6NjY4OnN0YXRpYyB2b2lkIGlmX3NkaW9fZG9fcHJvZ19maXJtd2FyZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCByZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3NkaW8uYy02NjktXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaGVscGVyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jPTY5Mz1zdGF0aWMgaW50IGlmX3NkaW9fcHJvZ19maXJtd2FyZShzdHJ1Y3QgaWZfc2Rpb19jYXJkICpjYXJkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jLTczNi1cdHJldCA9IGxic19nZXRfZmlybXdhcmVfYXN5bmMoY2FyZC1cdTAwM2Vwcml2LCBcdTAwMjZjYXJkLVx1MDAzZWZ1bmMtXHUwMDNlZGV2LCBjYXJkLVx1MDAzZW1vZGVsLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM6NzM3Olx0XHRcdFx0ICAgICBmd190YWJsZSwgaWZfc2Rpb19kb19wcm9nX2Zpcm13YXJlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jLTczOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNTcKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIGVtYmVkZGVkIHN5c3RlbXMgYW5kIFNESU86CgoqKkRpdmluZyBpbnRvIGBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmVgKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gYGlmX3NkaW9fZG9fcHJvZ19maXJtd2FyZWAuIFNvdW5kcyBsaWtlIHdlJiMzOTtyZSBhYm91dCB0byBkZWx2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgZmlybXdhcmUgcHJvZ3JhbW1pbmcgdmlhIFNESU8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcm91dGluZSB0aG9yb3VnaGx5LiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHF1ZXN0aW9ucyBhYm91dCBlcnJvciBoYW5kbGluZywgaW50ZXJydXB0IG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJcyB0aGlzIGhhbmRsaW5nIHRoZSBpbml0aWFsIGxvYWQsIHVwZGF0ZXMsIG9yIGJvdGg/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBwcm9wcmlldGFyeSBvciBzdGFuZGFyZGl6ZWQgcHJvdG9jb2wgb3ZlciB0aGUgU0RJTyBpbnRlcmZhY2UgZm9yIHRoZSBmaXJtd2FyZSB0cmFuc2Zlcj8gQW55IG1lbnRpb24gb2YgRE1BPyBUaGF0IHdvdWxkIGJlIGdvb2QgdG8gdW5kZXJzdGFuZC4gSSYjMzk7bSBrZWVuIHRvIGxvb2sgZm9yIGFueSBvcHRpbWl6YXRpb25zIOKAkyBpcyBpdCBjaGVja2luZyBkZXZpY2UgY29tcGF0aWJpbGl0eSBiZWZvcmUgdGhlIHByb2dyYW1taW5nPyBJcyB0aGVyZSBhIHRpbWVvdXQgbWVjaGFuaXNtIGluIHBsYWNlLCBhbmQgaWYgc28sIHdoYXQmIzM5O3MgaXRzIGNvbmZpZ3VyYXRpb24/IEkgYWxzbyBob3BlIHRvIHNlZSBzb21lIHNvcnQgb2YgdmVyaWZpY2F0aW9uIOKAkyBjaGVja3N1bXMgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIHRvIGVuc3VyZSBmaXJtd2FyZSBpbnRlZ3JpdHkuIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgaGFyZHdhcmUgcGxhdGZvcm0gaXMgY3JpdGljYWwsIHNvIGFueSByZWZlcmVuY2VzIHRvIHNwZWNpZmljIHJlZ2lzdGVycywgbWVtb3J5IGFkZHJlc3Nlcywgb3IgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBpbXBvcnRhbnQuIEkgbmVlZCB0byBtZW50YWxseSBwcmVwYXJlIG15c2VsZiBmb3IgcG90ZW50aWFsIGNoYWxsZW5nZXMgYXNzb2NpYXRlZCB3aXRoIFNESU8mIzM5O3MgY29tcGxleGl0aWVzLCBsaWtlIHRoZSBpbnRlcnJ1cHQgbWFza2luZywgY29tbWFuZCBzZXF1ZW5jZSBhbmQgdGltaW5ncy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZSBmdW5jdGlvbiBtYW5hZ2VzIHBvd2VyIGNvbnNpZGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2Njg6XHRzdGF0aWMgdm9pZCBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmUoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgcmV0LFxuIDY2OTpcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmhlbHBlcixcbiA2NzA6XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICptYWluZncpXG4gNjcxOlx0e1xuIDY3MjpcdFx0c3RydWN0IGlmX3NkaW9fY2FyZCAqY2FyZCA9IHByaXYtXHUwMDNlY2FyZDtcbiA2NzM6XHRcbiA2NzQ6XHRcdGlmIChyZXQpIHtcbiA2NzU6XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBmaW5kIGZpcm13YXJlICglZClcXG5cJiMzNDssIHJldCk7XG4gNjc2Olx0XHRcdHJldHVybjtcbiA2Nzc6XHRcdH1cbiA2Nzg6XHRcbiA2Nzk6XHRcdHJldCA9IGlmX3NkaW9fcHJvZ19oZWxwZXIoY2FyZCwgaGVscGVyKTtcbiA2ODA6XHRcdGlmIChyZXQpXG4gNjgxOlx0XHRcdHJldHVybjtcbiA2ODI6XHRcbiA2ODM6XHRcdGxic19kZWJfc2RpbyhcJiMzNDtIZWxwZXIgZmlybXdhcmUgbG9hZGVkXFxuXCYjMzQ7KTtcbiA2ODQ6XHRcbiA2ODU6XHRcdHJldCA9IGlmX3NkaW9fcHJvZ19yZWFsKGNhcmQsIG1haW5mdyk7XG4gNjg2Olx0XHRpZiAocmV0KVxuIDY4NzpcdFx0XHRyZXR1cm47XG4gNjg4Olx0XG4gNjg5Olx0XHRsYnNfZGViX3NkaW8oXCYjMzQ7RmlybXdhcmUgbG9hZGVkXFxuXCYjMzQ7KTtcbiA2OTA6XHRcdGlmX3NkaW9fZmluaXNoX3Bvd2VyX29uKGNhcmQpO1xuIDY5MTpcdH1cbiA2OTI6XHRcbiA2OTM6XHRzdGF0aWMgaW50IGlmX3NkaW9fcHJvZ19maXJtd2FyZShzdHJ1Y3QgaWZfc2Rpb19jYXJkICpjYXJkKVxuIDY5NDpcdHtcbiA2OTU6XHRcdGludCByZXQ7XG4gNjk2Olx0XHR1MTYgc2NyYXRjaDtcbiA2OTc6XHRcbiA2OTg6XHRcdC8qXG4gNjk5Olx0XHQgKiBEaXNhYmxlIGludGVycnVwdHNcbiA3MDA6XHRcdCAqL1xuIDcwMTpcdFx0c2Rpb19jbGFpbV9ob3N0KGNhcmQtXHUwMDNlZnVuYyk7XG4gNzAyOlx0XHRzZGlvX3dyaXRlYihjYXJkLVx1MDAzZWZ1bmMsIDB4MDAsIElGX1NESU9fSF9JTlRfTUFTSywgXHUwMDI2cmV0KTtcbiA3MDM6XHRcdHNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtXHUwMDNlZnVuYyk7XG4gNzA0Olx0XG4gNzA1Olx0XHRzZGlvX2NsYWltX2hvc3QoY2FyZC1cdTAwM2VmdW5jKTtcbiA3MDY6XHRcdHNjcmF0Y2ggPSBpZl9zZGlvX3JlYWRfc2NyYXRjaChjYXJkLCBcdTAwMjZyZXQpO1xuIDcwNzpcdFx0c2Rpb19yZWxlYXNlX2hvc3QoY2FyZC1cdTAwM2VmdW5jKTtcbiA3MDg6XHRcbiA3MDk6XHRcdGxic19kZWJfc2RpbyhcJiMzNDtmaXJtd2FyZSBzdGF0dXMgPSAlI3hcXG5cJiMzNDssIHNjcmF0Y2gpO1xuIDcxMDpcdFx0bGJzX2RlYl9zZGlvKFwmIzM0O3NjcmF0Y2ggcmV0ID0gJWRcXG5cJiMzNDssIHJldCk7XG4gNzExOlx0XG4gNzEyOlx0XHRpZiAocmV0KVxuIDcxMzpcdFx0XHRnb3RvIG91dDtcbiA3MTQ6XHRcbiA3MTU6XHRcbiA3MTY6XHRcdC8qXG4gNzE3Olx0XHQgKiBUaGUgbWFudWFsIGNsZWFybHkgZGVzY3JpYmVzIHRoYXQgRkVEQyBpcyB0aGUgcmlnaHQgY29kZSB0byB1c2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMDgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRmlybXdhcmUgTG9hZGluZyBHb3RjaGFzKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgYGlmX3NkaW9fZG9fcHJvZ19maXJtd2FyZWAgZnVuY3Rpb24uLi4gaXQmIzM5O3MgbG9va2luZyBsaWtlIGl0JiMzOTtzICpub3QqIGZyZWVpbmcgdGhlIGBoZWxwZXJgIG9yIGBtYWluZndgIHBvaW50ZXJzIGFmdGVyIHVzZS4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayByaWdodCB0aGVyZSEgTGV0JiMzOTtzIGZpbGUgdGhhdCBhd2F5IGZvciBhIGxhdGVyIGxvb2suCgpCdXQgaGFuZyBvbiwgbGV0IG1lIHRyYWNlIHRoaXMgYmFjayBhIGJpdC4gYGxic19nZXRfZmlybXdhcmVfYXN5bmNgIGNhbGxzIGBkb19sb2FkX2Zpcm13YXJlYCwgd2hpY2ggaW4gdHVybiwgdXNlcyBgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXRgLiBBaCwgYW5kICp0aGF0KiBmdW5jdGlvbiBpcyBhc3luY2hyb25vdXMsIHdoaWNoIG1lYW5zIHdlIGhhdmUgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgd2hlbiB0aGUgZmlybXdhcmUgbG9hZGluZyBpcyBjb21wbGV0ZS4gVGhlIGNhbGxiYWNrIGZvciBgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXRgIGlzIGVpdGhlciBgaGVscGVyX2Zpcm13YXJlX2NiYCBvciBgbWFpbl9maXJtd2FyZV9jYmAsIGFuZCwgZnJvbSB0aGUgbG9va3Mgb2YgdGhlIGNhbGwsIGl0IHNob3VsZCBiZSBgbWFpbl9maXJtd2FyZV9jYmAuIE9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYG1haW5fZmlybXdhcmVfY2JgIGFuZCBtYWtlIHN1cmUgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIHJlc291cmNlcyBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQ1Olx0c3RhdGljIHZvaWQgbWFpbl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxuICA0NjpcdHtcbiAgNDc6XHRcdHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNvbnRleHQ7XG4gIDQ4Olx0XG4gIDQ5Olx0XHRpZiAoIWZpcm13YXJlKSB7XG4gIDUwOlx0XHRcdC8qIEZhaWxlZCB0byBmaW5kIGZpcm13YXJlOiB0cnkgbmV4dCB0YWJsZSBlbnRyeSAqL1xuICA1MTpcdFx0XHRsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZShwcml2KTtcbiAgNTI6XHRcdFx0cmV0dXJuO1xuICA1MzpcdFx0fVxuICA1NDpcdFxuICA1NTpcdFx0LyogRmlybXdhcmUgZm91bmQhICovXG4gIDU2Olx0XHRsYnNfZndfbG9hZGVkKHByaXYsIDAsIHByaXYtXHUwMDNlaGVscGVyX2Z3LCBmaXJtd2FyZSk7XG4gIDU3Olx0XHRpZiAocHJpdi1cdTAwM2VoZWxwZXJfZncpIHtcbiAgNTg6XHRcdFx0cmVsZWFzZV9maXJtd2FyZSAocHJpdi1cdTAwM2VoZWxwZXJfZncpO1xuICA1OTpcdFx0XHRwcml2LVx1MDAzZWhlbHBlcl9mdyA9IE5VTEw7XG4gIDYwOlx0XHR9XG4gIDYxOlx0XHRyZWxlYXNlX2Zpcm13YXJlIChmaXJtd2FyZSk7XG4gIDYyOlx0fVxuICA2MzpcdFxuICA2NDpcdHN0YXRpYyB2b2lkIGhlbHBlcl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxuICA2NTpcdHtcbiAgNjY6XHRcdHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNvbnRleHQ7XG4gIDY3Olx0XG4gIDY4Olx0XHRpZiAoIWZpcm13YXJlKSB7XG4gIDY5Olx0XHRcdC8qIEZhaWxlZCB0byBmaW5kIGZpcm13YXJlOiB0cnkgbmV4dCB0YWJsZSBlbnRyeSAqL1xuICA3MDpcdFx0XHRsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZShwcml2KTtcbiAgNzE6XHRcdFx0cmV0dXJuO1xuICA3MjpcdFx0fVxuICA3MzpcdFxuICA3NDpcdFx0LyogRmlybXdhcmUgZm91bmQhICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDcxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTM3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBhIEZpcm13YXJlIExvYWRpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaGVyZSBzdGFydHMgd2l0aCBjb25maXJtaW5nIGhvdyBgbWFpbl9maXJtd2FyZV9jYmAgaGFuZGxlcyBmcmVlaW5nIGZpcm13YXJlIHJlc291cmNlcy4gWWVzLCBpdCBkb2VzIHJlbGVhc2UgYm90aCBgcHJpdi0mZ3Q7aGVscGVyX2Z3YCBhbmQgYGZpcm13YXJlYCwgd2hpY2ggaXMgYG1haW5md2AuIFRoZSBvcmRlciBpcyBjcnVjaWFsOiBgbGJzX2Z3X2xvYWRlZGAgaXMgY2FsbGVkIGZpcnN0LCBhbmQgKnRoZW4qIHRoZSBgcmVsZWFzZV9maXJtd2FyZWAgY2FsbHMgYXJlIG1hZGUuIEkgcmVjYWxsIHRoZSBjb21tZW50IGluIGBsYnNfZndfbG9hZGVkYCBzdGF0aW5nIHRoYXQgdGhlICYjMzQ7VXNlciBtdXN0IGZyZWUgaGVscGVyL21haW5mdy4mIzM0OyAgQnV0IHRoaXMgY29kZSAqaXMqIGZyZWVpbmcgdGhlbS4gQWhhISBUaGF0IG1lYW5zIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgdGhlICYjMzQ7dXNlciwmIzM0OyAqbXVzdCBub3QqIGZyZWUgdGhlIGZpcm13YXJlIGlmIGBtYWluX2Zpcm13YXJlX2NiYCBnZXRzIGNhbGxlZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIHRydWUgd2l0aCBgaWZfdXNiX3Byb2dfZmlybXdhcmVgIGFuZCBgaWZfc2Rpb19kb19wcm9nX2Zpcm13YXJlYCwgd2hpY2ggYXJlIFVTQiBhbmQgU0RJTyBmdW5jdGlvbnMgcmVzcGVjdGl2ZWx5LiBJIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgKmRvIG5vdCogZnJlZSBgaGVscGVyX2Z3YCBvciBgbWFpbmZ3YC4KCk5vdywgdGhlIGZvY3VzIHNoaWZ0cyB0byBgaGVscGVyX2Zpcm13YXJlX2NiYC4gVGhlIGNvZGUgaGFzIGEgc3RydWN0dXJlOiBpZiBgZmlybXdhcmVgIGlzIG5vdCBmb3VuZCwgaXQgdHJpZXMgdG8gbG9hZCB0aGUgbmV4dCB0YWJsZSBlbnRyeS4gQnV0LCB3aGF0IGlmIHRoZSBmaXJtd2FyZSAqaXMqIGZvdW5kPyBUaGUgcGF0Y2ggaW5jbHVkZXMgYSBgcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSlgIGNhbGwgd2l0aGluIGFuIGBlbHNlYCBicmFuY2ggb2YgYGhlbHBlcl9maXJtd2FyZV9jYmAhIE9rYXksIEkgdW5kZXJzdGFuZDsgd2l0aG91dCB0aGUgcGF0Y2gsIHRoZXJlIHdvdWxkIGhhdmUgYmVlbiBhIG1lbW9yeSBsZWFrIHdoZXJlIHRoZSBgZmlybXdhcmVgIHJlc291cmNlIHdvdWxkIG5vdCBoYXZlIGJlZW4gZnJlZWQgd2hlbiBvbmx5IHRoZSBoZWxwZXIgZmlybXdhcmUgd2FzIG5lZWRlZC4gVGhlIHBhdGNoIGlzIG5vdyBmaXhpbmcgYSBtZW1vcnkgbGVhay4KClNvLCBpcyB0aGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IFRlY2huaWNhbGx5LCB5ZXMsIGl0IG1vZGlmaWVzIHRoZSBzeXN0ZW0gc3RhdGUgYnkgZnJlZWluZyBtZW1vcnkuIElzIGl0ICp3b3J0aCogZnV6emluZz8gQSBzaW1wbGUgbWVtb3J5IGxlYWsgZml4IGxpa2UgdGhpcyBpcyB1bmxpa2VseSB0byBpbnRyb2R1Y2UgbmV3IHJlYWNoYWJsZSBzdGF0ZXMgdGhhdCBuZWVkIGZ1enppbmcsIHVubGVzcyB0aGUgZnJlZSBvcGVyYXRpb24gaXRzZWxmIGNhbiBsZWFkIHRvIGEgdXNlLWFmdGVyLWZyZWUsIGlmIHRoZSBtZW1vcnkgaXMgc3RpbGwgaW4gdXNlLgoKRG9lcyB0aGUgYHByaXYtJmd0O2Z3X2NhbGxiYWNrYCBzYXZlIHRoZSBgZmlybXdhcmVgIHBvaW50ZXIsIHdoaWNoIGNvdWxkIGNhdXNlIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlPyBMZXQmIzM5O3MgY2hlY2sgYGlmX3VzYl9wcm9nX2Zpcm13YXJlYC4gSXQgKmRvZXMqIHNhdmUgYGZ3YCB0byBgY2FyZHAtJmd0O2Z3YCwgYnV0IGNydWNpYWxseSwgaXQgc2V0cyBgY2FyZHAtJmd0O2Z3YCB0byBgTlVMTGAgYmVmb3JlIHJldHVybmluZy4gTm93LCBsZXQmIzM5O3MgYWxzbyBjaGVjayBgaWZfc2Rpb19kb19wcm9nX2Zpcm13YXJlYC4gSXQgdXNlcyBgaGVscGVyYCBhbmQgYG1haW5md2Agc3luY2hyb25vdXNseS4gVGhhdCYjMzk7cyBnb29kLgoKVGhlcmVmb3JlLCBhZGRpbmcgYHJlbGVhc2VfZmlybXdhcmVgIGlzIHRoZSBjb3JyZWN0IGNvdXJzZSBvZiBhY3Rpb24sIGFuZCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgKnNob3VsZCogd2UgZnV6eiBpdD8gSWYgd2UgZnV6eiBpdCwgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyAqd2lsbCogYmUgdHJpZ2dlcmVkLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcuIEhvd2V2ZXIsIFN5emthbGxlciBhbHJlYWR5IGZ1enplcyBVU0IgYW5kIFNESU8sIHdoaWNoIGlzIHdoZXJlIHRoaXMgY29kZSByZXNpZGVzIChpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jYCkuIFRoZSBwYXRjaCBpdHNlbGYgaXMgc21hbGwsIGl0IGp1c3QgYWRkczogYHJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpO2AuCgpHaXZlbiBhbGwgb2YgdGhpcyBhbmQgY29uc2lkZXJpbmcgdGhlIGluc3RydWN0aW9ucywgd2hhdCBpcyB0aGUgYmVzdCB0aGluZyB0byBkbz8gVG8gcHJvdmlkZSB0aGUgbW9zdCBjb21wcmVoZW5zaXZlIGV2YWx1YXRpb24sIEkgc2hvdWxkIGluZGljYXRlIHRoYXQgZnV6emluZyBpcyBhcHByb3ByaWF0ZS4gVGhlIGFkZGVkIGNvZGUgaXMgcmVhY2hlZCB2aWEgdGhlIFVTQiBnYWRnZXQgb3IgU0RJTyBwYXRoLgoKVGhlcmVmb3JlLCBJJiMzOTtkIHNheSBgV29ydGhGdXp6aW5nPXRydWVgLiBUbyBnbyB3aXRoIHRoaXMsIEkgbmVlZCB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmc6IGBGb2N1c1N5bWJvbHM6IGhlbHBlcl9maXJtd2FyZV9jYmAsIGBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jYC4gQW5kIGZvciBgRW5hYmxlQ29uZmlnc2AsIEkmIzM5O2QgbmVlZDogYExJQkVSVEFTYCwgYExJQkVSVEFTX1VTQmAsIGBMSUJFUlRBU19TRElPYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExJQkVSVEFTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWc6Mjpjb25maWcgTElCRVJUQVNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCA4eHh4IExpYmVydGFzIFdMQU4gZHJpdmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWctOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZzoxMDpjb25maWcgTElCRVJUQVNfVVNCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIExpYmVydGFzIDgzODggVVNCIDgwMi4xMWIvZyBjYXJkc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0xNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZzoxNjpjb25maWcgTElCRVJUQVNfU0RJT1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTE3LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBMaWJlcnRhcyA4Mzg1Lzg2ODYvODY4OCBTRElPIDgwMi4xMWIvZyBjYXJkc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0yMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZzoyMjpjb25maWcgTElCRVJUQVNfU1BJXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIExpYmVydGFzIDg2ODYgU1BJIDgwMi4xMWIvZyBjYXJkc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0yNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZzoyODpjb25maWcgTElCRVJUQVNfREVCVUdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0yOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGZ1bGwgZGVidWdnaW5nIG91dHB1dCBpbiB0aGUgTGliZXJ0YXMgbW9kdWxlLlwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0zMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZzozNDpjb25maWcgTElCRVJUQVNfTUVTSFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVzaCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODAzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IGFuZCBGdXp6aW5nIFdvcnRoaW5lc3Mgb2YgYSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBpcyB0aGlzIGNvZGUgZXZlbiByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gWWVzLCBkZWZpbml0ZWx5LiBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiAobGlrZSBkdW1teV9oY2QpIGFuZCBwb3RlbnRpYWxseSBTRElPIGVtdWxhdGlvbiwgaWYgdGhhdCYjMzk7cyBpbiBwbGF5LCBwcm92aWRlIGEgcGF0aC4gVVNCIGlzIHRoZSBndWFyYW50ZWVkIG9uZSB0aG91Z2gsIHNvIGdvb2QgdG8gZ28gdGhlcmUuCgpOb3csIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAg4oCTIHJpZ2h0LCB0aGF0IHJlcXVpcmVzIHRoZSBmaXJtd2FyZSB0byAqYWN0dWFsbHkqIGJlIHByZXNlbnQgb24gdGhlIGZpbGVzeXN0ZW0sIG9yIGl0JiMzOTtsbCBmYWlsLiBBbmQgaWYgaXQgZmFpbHMsIHRoYXQgYGhlbHBlcl9maXJtd2FyZV9jYmAgY2FsbGJhY2sgaXMgaW52b2tlZCwgYnV0IHdpdGggYGZpcm13YXJlID09IE5VTExgLiBBaCwgcmlnaHQsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHBhdGNoIGNvbWVzIGluIHRvIHByZXZlbnQgdGhlIG1lbW9yeSBsZWFrLgoKYGBgYwoJaWYgKCFmaXJtd2FyZSkgewoJCS8qIEZhaWxlZCB0byBmaW5kIGhlbHBlciBmaXJtd2FyZS4gKi8KCQlsYnNfZndfbG9hZGVkKHByaXYsIC1FTk9FTlQsIE5VTEwsIE5VTEwpOwoJCXJldHVybjsKCX0KYGBgCgpPa2F5LCB0aGUgcGF0Y2ggaXRzZWxmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6CmBgYGMKIAlpZiAocHJpdi0mZ3Q7ZndfbmFtZSkgewogCQkvKiBXZSBuZWVkIGEgbWFpbiBmaXJtd2FyZS4gKi8KIAkJcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIHRydWUsIHByaXYtJmd0O2Z3X25hbWUsCiAJCQkJCXByaXYtJmd0O2RldiwgR0ZQX0tFUk5FTCwgcHJpdiwKIAkJCQkJbWFpbl9maXJtd2FyZV9jYik7CiAJfSBlbHNlIHsKIAkJLyogTm8gbWFpbiBmaXJtd2FyZSBuZWVkZWQgZm9yIHRoaXMgaGVscGVyIC0tJmd0OyBzdWNjZXNzISAqLwogCQlsYnNfZndfbG9hZGVkKHByaXYsIDAsIGZpcm13YXJlLCBOVUxMKTsKJiM0MzsJCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwogCX0KYGBgCgpJZiBgZmlybXdhcmVgIGlzbiYjMzk7dCBOVUxMLCB0aGUgbG9hZCB3YXMgc3VjY2Vzc2Z1bC4gSW4gYSBmdXp6aW5nIHNldHVwLCBhIHN1Y2Nlc3NmdWwgZmlybXdhcmUgbG9hZCB1c3VhbGx5IGhpbmdlcyBvbiB0aGUgZnV6emVyIHByb3ZpZGluZyB0aGUgZmlybXdhcmUgdmlhIHRoZSBmaXJtd2FyZSBmYWxsYmFjayBtZWNoYW5pc20gKHN5c2ZzKSBvciB0aGUgZmlybXdhcmUgZXhpc3RpbmcgaW4gdGhlIHJvb3Rmcy4gU3l6a2FsbGVyLCB0aGFua2Z1bGx5LCBoYXMgdGhlIGFiaWxpdHkgdG8gaW50ZXJjZXB0IGZpcm13YXJlIHJlcXVlc3RzIGFuZCBzdXBwbHkgZHVtbXkgZmlybXdhcmUsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpCdXQsIGlzIGEgc2ltcGxlIG1lbW9yeSBsZWFrICp3b3J0aCogZnV6emluZz8gVGhlIGd1aWRlbGluZXMgSSYjMzk7bSB1c2luZyBzYXkgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LiYjMzQ7IFRoaXMgaXMgYSBtZW1vcnkgbGVhayBmaXguIEl0IGRvZXNuJiMzOTt0IGZ1bmN0aW9uYWxseSBhbHRlciBmbG93LCBpdCBqdXN0IGZyZWVzIG1lbW9yeS4KCkhvd2V2ZXIsIGlmIGl0JiMzOTtzIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgcmlzaywgdGhhdCBtaWdodCB3YXJyYW50IGZ1enppbmcuIEJ1dCwgd2FpdCwgd2UgbG9va2VkIGF0IHRoZSBjb2RlLCBpdOKAmXMgbm90IFVBRiwgc28gdGhhdCYjMzk7cyBub3QgdGhlIGlzc3VlLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBwcm9tcHQgYWdhaW46ICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBJdCAqZG9lcyogbW9kaWZ5IGEgZHJpdmVyLiBJdCAqaXMqIGV4ZWN1dGFibGUuIElzIGl0ICYjMzQ7ZnVuY3Rpb25hbCYjMzQ7PyBZZXMsIGl0IGZpeGVzIGEgbWVtb3J5IGxlYWsgd2hpY2ggaXMgYSBmdW5jdGlvbmFsaXR5LgoKT2theSwgSSYjMzk7bSBnb2luZyB0byBnbyB3aXRoIFdvcnRoRnV6emluZz10cnVlLiBGb2N1c1N5bWJvbHM9WyYjMzQ7aGVscGVyX2Zpcm13YXJlX2NiJiMzNDtdLCBhbmQgbGV04oCZcyBlbmFibGUgdGhlIGNvbmZpZ3M6IEVuYWJsZUNvbmZpZ3M9WyYjMzQ7TElCRVJUQVMmIzM0OywgJiMzNDtMSUJFUlRBU19VU0ImIzM0O10uCgpPa2F5LCBub3cgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgcmVtZW1iZXIgaG93IGBoZWxwZXJfZmlybXdhcmVfY2JgIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZWxwZXJfZmlybXdhcmVfY2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9NDU9c3RhdGljIHZvaWQgbWFpbl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy02My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzo2NDpzdGF0aWMgdm9pZCBoZWxwZXJfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy02NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jPTg1PXN0YXRpYyB2b2lkIGxvYWRfbmV4dF9maXJtd2FyZV9mcm9tX3RhYmxlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTExLVx0cHJpdi1cdTAwM2Vmd19pdGVyID0gaXRlcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoxMTI6XHRkb19sb2FkX2Zpcm13YXJlKHByaXYsIGl0ZXItXHUwMDNlaGVscGVyLCBoZWxwZXJfZmlybXdhcmVfY2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTExMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzgxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpcm13YXJlIExvYWRpbmcgQW5hbHlzaXMqKgoKT2theSwgc28gYGhlbHBlcl9maXJtd2FyZV9jYmAgaXMgaW5kZWVkIGNhbGxlZCBieSBgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXRgIHdpdGhpbiB0aGUgYGRvX2xvYWRfZmlybXdhcmVgIGZ1bmN0aW9uLiBJIGNvbmZpcm1lZCBpdHMgcmVhY2hhYmlsaXR5LiAgSSBkb3VibGUtY2hlY2tlZDsgaXQgbG9va3MgbGlrZSBgaGVscGVyX2Zpcm13YXJlX2NiYCBpcyBvbmx5IHVzZWQgd2l0aGluIGBsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZWAuCgpHaXZlbiB0aGUgc2ltcGxpY2l0eSBvZiB0aGlzIG1lbW9yeSBsZWFrIGZpeCAoanVzdCBhZGRpbmcgYSBgcmVsZWFzZV9maXJtd2FyZWAgY2FsbCksIGZ1enppbmcgaXMgdW5saWtlbHkgdG8gdW5jb3ZlciBuZXcgYnVncyBkaXJlY3RseSByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggaXRzZWxmLiBIb3dldmVyLCBiZWNhdXNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5ICYjMzQ7aWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBJJiMzOTttIG9ibGlnYXRlZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4KCkkmIzM5O3ZlIGNvbmZpcm1lZCBgTElCRVJUQVNfU1BJYCBpcyBhdmFpbGFibGUuIEl0IHNlZW1zIGBGV19MT0FERVJgIGlzIHJlbGV2YW50IGFzIGl0IGlzIHVzdWFsbHkgc2VsZWN0ZWQgYnkgZHJpdmVycyBuZWVkaW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRldfTE9BREVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnPTI9Y29uZmlnIExJQkVSVEFTXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTUtXHRkZXBlbmRzIG9uIENGRzgwMjExXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWc6NjpcdHNlbGVjdCBGV19MT0FERVJcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy03LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIwNAoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCwgYXMgSSB1bmRlcnN0YW5kIGl0LgoKKipGaXJtd2FyZSBMb2FkaW5nIE1lbW9yeSBMZWFrIGluIExpYmVydHVzIFdpcmVsZXNzIERyaXZlcioqCgpPa2F5LCBzbyBgRldfTE9BREVSYCBpcyBkZWZpbml0ZWx5IHNlbGVjdGVkIGJ5IGBMSUJFUlRBU2AsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSB0aGlua2luZyBpcywgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNvcmUgaXNzdWUuIFRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgbWVtb3J5IGxlYWsgd2l0aGluIHRoZSBhc3luY2hyb25vdXMgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzIG9mIHRoZSBMaWJlcnR1cyB3aXJlbGVzcyBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgYSBzY2VuYXJpbyB3aGVyZSBhICpoZWxwZXIqIGZpcm13YXJlIGlzIGxvYWRlZCwgYnV0IHRoZSAqbWFpbiogZmlybXdhcmUgaXNuJiMzOTt0IG5lZWRlZC4gSW4gdGhpcyBzaXR1YXRpb24sIHRoZSBoZWxwZXIgZmlybXdhcmUgaXNuJiMzOTt0IGJlaW5nIHByb3Blcmx5IHJlbGVhc2VkLCB3aGljaCBsZWFkcyB0byBhIG1lbW9yeSBsZWFrLgoKVGhlIGtleSB0aGluZyBpcywgdGhpcyBjb2RlIHBhdGggY2FuIGJlIGhpdCBkdXJpbmcgVVNCLCBTRElPLCBvciBTUEkgZGV2aWNlIGluaXRpYWxpemF0aW9uIHdoZW5ldmVyIGZpcm13YXJlIGlzIHJlcXVlc3RlZC4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQuIEZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIG1ha2VzIGl0IGEgZ3JlYXQgdGFyZ2V0OiBpZiB3ZSBmdXp6IHRoaXMgaW5pdGlhbGl6YXRpb24sIHdlIGNhbiBwdXNoIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHN0YXRlIG1hY2hpbmUgaW50byBhIHZhcmlldHkgb2Ygc3VjY2VzcyBhbmQgZmFpbHVyZSBzdGF0ZXMuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSBpdCBoYW5kbGVzIGFsbCB0aGVzZSBjb25kaXRpb25zIGNvcnJlY3RseSwgd2l0aG91dCBsZWFraW5nIG1lbW9yeSBvciBvcGVuaW5nIHVwIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSwgd2hpY2ggd291bGQgYmUgYSBzZXZlcmUgcHJvYmxlbS4KCkkgc2VlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhZmZlY3RlZCBhcmUgYExJQkVSVEFTYCwgYExJQkVSVEFTX1VTQmAsIGBMSUJFUlRBU19TRElPYCwgYW5kIGBMSUJFUlRBU19TUElgLCBtZWFuaW5nIGl0IHRvdWNoZXMgbXVsdGlwbGUgcG90ZW50aWFsIGhhcmR3YXJlIGludGVyZmFjZXMuIFRoZSBpbXBvcnRhbnQgc3ltYm9scyBpbiBteSBoZWFkIHJpZ2h0IG5vdyBhcmUgYGhlbHBlcl9maXJtd2FyZV9jYmAsIGBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jYCwgYW5kIGBsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHZlcnkgbGlrZWx5IHRvIGJlIGNlbnRyYWwgdG8gd2hlcmUgdGhlIHByb2JsZW0gbGllcy4KCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkIHdpdGggdGhpcyBhbmFseXNpcywgSSYjMzk7bSBnb2luZyB0byBzZXQgbXkgcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMSUJFUlRBUyYjMzQ7LAogICAgJiMzNDtMSUJFUlRBU19VU0ImIzM0OywKICAgICYjMzQ7TElCRVJUQVNfU0RJTyYjMzQ7LAogICAgJiMzNDtMSUJFUlRBU19TUEkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZWxwZXJfZmlybXdhcmVfY2ImIzM0OywKICAgICYjMzQ7bGJzX2dldF9maXJtd2FyZV9hc3luYyYjMzQ7LAogICAgJiMzNDtsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBsaWJlcnRhcyB3aXJlbGVzcyBkcml2ZXImIzM5O3MgYXN5bmNocm9ub3VzIGZpcm13YXJlIGxvYWRpbmcgcGF0aC4gV2hlbiBhIGhlbHBlciBmaXJtd2FyZSBpcyBsb2FkZWQgYnV0IG5vIG1haW4gZmlybXdhcmUgaXMgcmVxdWlyZWQsIHRoZSBoZWxwZXIgZmlybXdhcmUgd2FzIG5vdCBiZWluZyByZWxlYXNlZC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCL1NESU8vU1BJIGRldmljZSBpbml0aWFsaXphdGlvbiB3aGVuIGZpcm13YXJlIGlzIHJlcXVlc3RlZC4gRnV6emluZyB0aGlzIHBhdGggY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHN0YXRlIG1hY2hpbmUgaGFuZGxlcyB2YXJpb3VzIHN1Y2Nlc3MvZmFpbHVyZSBjb25kaXRpb25zIGNvcnJlY3RseSB3aXRob3V0IGxlYWtpbmcgbWVtb3J5IG9yIGNhdXNpbmcgdXNlLWFmdGVyLWZyZWUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xJQkVSVEFTJiMzNDssCiAgICAmIzM0O0xJQkVSVEFTX1VTQiYjMzQ7LAogICAgJiMzNDtMSUJFUlRBU19TRElPJiMzNDssCiAgICAmIzM0O0xJQkVSVEFTX1NQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hlbHBlcl9maXJtd2FyZV9jYiYjMzQ7LAogICAgJiMzNDtsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jJiMzNDssCiAgICAmIzM0O2xvYWRfbmV4dF9maXJtd2FyZV9mcm9tX3RhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGxpYmVydGFzIHdpcmVsZXNzIGRyaXZlciYjMzk7cyBhc3luY2hyb25vdXMgZmlybXdhcmUgbG9hZGluZyBwYXRoLiBXaGVuIGEgaGVscGVyIGZpcm13YXJlIGlzIGxvYWRlZCBidXQgbm8gbWFpbiBmaXJtd2FyZSBpcyByZXF1aXJlZCwgdGhlIGhlbHBlciBmaXJtd2FyZSB3YXMgbm90IGJlaW5nIHJlbGVhc2VkLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IvU0RJTy9TUEkgZGV2aWNlIGluaXRpYWxpemF0aW9uIHdoZW4gZmlybXdhcmUgaXMgcmVxdWVzdGVkLiBGdXp6aW5nIHRoaXMgcGF0aCBjYW4gaGVscCBlbnN1cmUgdGhlIGZpcm13YXJlIGxvYWRpbmcgc3RhdGUgbWFjaGluZSBoYW5kbGVzIHZhcmlvdXMgc3VjY2Vzcy9mYWlsdXJlIGNvbmRpdGlvbnMgY29ycmVjdGx5IHdpdGhvdXQgbGVha2luZyBtZW1vcnkgb3IgY2F1c2luZyB1c2UtYWZ0ZXItZnJlZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQwOjMxLjUzNzA4NzI2M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODY3Mzc3MTUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMSUJFUlRBU1wiLFxuICAgIFwiTElCRVJUQVNfVVNCXCIsXG4gICAgXCJMSUJFUlRBU19TRElPXCIsXG4gICAgXCJMSUJFUlRBU19TUElcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZWxwZXJfZmlybXdhcmVfY2JcIixcbiAgICBcImxic19nZXRfZmlybXdhcmVfYXN5bmNcIixcbiAgICBcImxvYWRfbmV4dF9maXJtd2FyZV9mcm9tX3RhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgbGliZXJ0YXMgd2lyZWxlc3MgZHJpdmVyJ3MgYXN5bmNocm9ub3VzIGZpcm13YXJlIGxvYWRpbmcgcGF0aC4gV2hlbiBhIGhlbHBlciBmaXJtd2FyZSBpcyBsb2FkZWQgYnV0IG5vIG1haW4gZmlybXdhcmUgaXMgcmVxdWlyZWQsIHRoZSBoZWxwZXIgZmlybXdhcmUgd2FzIG5vdCBiZWluZyByZWxlYXNlZC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCL1NESU8vU1BJIGRldmljZSBpbml0aWFsaXphdGlvbiB3aGVuIGZpcm13YXJlIGlzIHJlcXVlc3RlZC4gRnV6emluZyB0aGlzIHBhdGggY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHN0YXRlIG1hY2hpbmUgaGFuZGxlcyB2YXJpb3VzIHN1Y2Nlc3MvZmFpbHVyZSBjb25kaXRpb25zIGNvcnJlY3RseSB3aXRob3V0IGxlYWtpbmcgbWVtb3J5IG9yIGNhdXNpbmcgdXNlLWFmdGVyLWZyZWUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQwOjMxLjUzNzA5MTc5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkwNDQwNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTQyZTg4ZjE4OGFiNjZiNGFkN2VlNTg3MmI2ZGJiNTk1ZDFkNTcyZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1biAyNCAwOTo0MDozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmNcXG5pbmRleCBmMTI0MTEwOTQ0YjdlOS4uOWJmN2Q0YzIwN2I5ZWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jXFxuQEAgLTc4LDYgKzc4LDcgQEAgc3RhdGljIHZvaWQgaGVscGVyX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsIHZvaWQgKmNvbnRleHQpXFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qIE5vIG1haW4gZmlybXdhcmUgbmVlZGVkIGZvciB0aGlzIGhlbHBlciAtLVxcdTAwM2Ugc3VjY2VzcyEgKi9cXG4gXFx0XFx0bGJzX2Z3X2xvYWRlZChwcml2LCAwLCBmaXJtd2FyZSwgTlVMTCk7XFxuK1xcdFxcdHJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpO1xcbiBcXHR9XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQwOjMxLjkyODM5NzMxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY4MjgyNDUzOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxJQkVSVEFTXCIsXG4gICAgXCJMSUJFUlRBU19VU0JcIixcbiAgICBcIkxJQkVSVEFTX1NESU9cIixcbiAgICBcIkxJQkVSVEFTX1NQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhlbHBlcl9maXJtd2FyZV9jYlwiLFxuICAgIFwibGJzX2dldF9maXJtd2FyZV9hc3luY1wiLFxuICAgIFwibG9hZF9uZXh0X2Zpcm13YXJlX2Zyb21fdGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBsaWJlcnRhcyB3aXJlbGVzcyBkcml2ZXIncyBhc3luY2hyb25vdXMgZmlybXdhcmUgbG9hZGluZyBwYXRoLiBXaGVuIGEgaGVscGVyIGZpcm13YXJlIGlzIGxvYWRlZCBidXQgbm8gbWFpbiBmaXJtd2FyZSBpcyByZXF1aXJlZCwgdGhlIGhlbHBlciBmaXJtd2FyZSB3YXMgbm90IGJlaW5nIHJlbGVhc2VkLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IvU0RJTy9TUEkgZGV2aWNlIGluaXRpYWxpemF0aW9uIHdoZW4gZmlybXdhcmUgaXMgcmVxdWVzdGVkLiBGdXp6aW5nIHRoaXMgcGF0aCBjYW4gaGVscCBlbnN1cmUgdGhlIGZpcm13YXJlIGxvYWRpbmcgc3RhdGUgbWFjaGluZSBoYW5kbGVzIHZhcmlvdXMgc3VjY2Vzcy9mYWlsdXJlIGNvbmRpdGlvbnMgY29ycmVjdGx5IHdpdGhvdXQgbGVha2luZyBtZW1vcnkgb3IgY2F1c2luZyB1c2UtYWZ0ZXItZnJlZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNDJlODhmMTg4YWI2NmI0YWQ3ZWU1ODcyYjZkYmI1OTVkMWQ1NzJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMDk6NDA6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmNcbmluZGV4IGYxMjQxMTA5NDRiN2U5Li45YmY3ZDRjMjA3YjllZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jXG5AQCAtNzgsNiArNzgsNyBAQCBzdGF0aWMgdm9pZCBoZWxwZXJfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dClcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIE5vIG1haW4gZmlybXdhcmUgbmVlZGVkIGZvciB0aGlzIGhlbHBlciAtLVx1MDAzZSBzdWNjZXNzISAqL1xuIFx0XHRsYnNfZndfbG9hZGVkKHByaXYsIDAsIGZpcm13YXJlLCBOVUxMKTtcbitcdFx0cmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7XG4gXHR9XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDA6MzEuOTI4Mzk4NzA3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA1MjkyNjUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZpcm13YXJlIExvYWRpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgYWRkZWQgYHJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpO2Agd2l0aGluIHRoZSBgaGVscGVyX2Zpcm13YXJlX2NiYCBmdW5jdGlvbi4gUmlnaHQgYXdheSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcywgc28gbGV0J3MgZGlnIGludG8gdGhlIGNvbnRleHQuXG5cbkkgc2VlIGBoZWxwZXJfZmlybXdhcmVfY2JgIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24uIEl0J3MgdXNlZCBhZnRlciBhIGZpcm13YXJlIHJlcXVlc3QsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLiBJdCdzIGhhbmRsaW5nIHRoZSByZXR1cm4gZnJvbSBhIGByZXF1ZXN0X2Zpcm13YXJlYCBjYWxsLCB3aGljaCBpcyBmYWlybHkgc3RhbmRhcmQuIEluc2lkZSwgdGhlcmUncyBhIGNoZWNrIGZvciBhIG51bGwgZmlybXdhcmUgcG9pbnRlciwgaW5kaWNhdGluZyBhIGZhaWx1cmUuIElmIGl0J3MgYSBmYWlsdXJlLCBgbGJzX2Z3X2xvYWRlZGAgaXMgY2FsbGVkIHdpdGggYC1FTk9FTlRgLiBPdGhlcndpc2UsIGl0IHNlZW1zIHRoZXJlJ3MgYSBjaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBsb2FkIGEgbWFpbiBmaXJtd2FyZSBiYXNlZCBvbiB3aGV0aGVyIGBwcml2LVx1MDAzZWZ3X25hbWVgIGlzIHNldCwgYW5kIGFub3RoZXIgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCBjYWxsIHdpbGwgb2NjdXIgaWYgaXQgaXMsIHdoaWNoIHdpbGwgY2FsbCBgbWFpbl9maXJtd2FyZV9jYmAuIEJ1dCBpZiBgcHJpdi1cdTAwM2Vmd19uYW1lYCBpcyBudWxsLCBtZWFuaW5nIHRoZXJlJ3Mgbm8gbWFpbiBmaXJtd2FyZSB0byBsb2FkLCB0aGVuIHRoZSBoZWxwZXIgZmlybXdhcmUgbG9hZCBpcyBjb25zaWRlcmVkIGEgc3VjY2VzcyBhbmQgY2FsbHMgYGxic19md19sb2FkZWRgLiBBbmQgKnRoYXQncyogd2hlcmUgdGhlIG5ldyBgcmVsZWFzZV9maXJtd2FyZWAgY2FsbCBhcHBlYXJzLlxuXG5Ob3csIGEgcmVkIGZsYWcgcG9wcyB1cC4gV2UgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIGBsYnNfZndfbG9hZGVkYCBhbHJlYWR5IHJlbGVhc2VzIHRoZSBmaXJtd2FyZSwgYmVjYXVzZSB0aGF0IHdvdWxkIGNhdXNlIGEgZG91YmxlLWZyZWUsIGEgdmVyeSBuYXN0eSBidWcuIElmIGBsYnNfZndfbG9hZGVkYCAqZG9lcyogcmVsZWFzZSB0aGUgZmlybXdhcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHNlcmlvdXMgbWVtb3J5IGNvcnJ1cHRpb24gcmlzay4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIGBsYnNfZndfbG9hZGVkYCAqaW1tZWRpYXRlbHkqLiBMZXQncyBnbyBzZWUgd2hhdCBgbGJzX2Z3X2xvYWRlZGAgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQwOjM3Ljk4MTMyNjY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjExMzUwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsYnNfZndfbG9hZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYz0xMz1zdGF0aWMgdm9pZCBsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXZhdGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM6MTU6c3RhdGljIHZvaWQgbGJzX2Z3X2xvYWRlZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCByZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTE2LVxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaGVscGVyLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKm1haW5mdylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYz0zMT1zdGF0aWMgdm9pZCBkb19sb2FkX2Zpcm13YXJlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy00MC1cXHRcXHRsYnNfZGViX2Z3KFxcXCJyZXF1ZXN0X2Zpcm13YXJlX25vd2FpdCBlcnJvciAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM6NDE6XFx0XFx0bGJzX2Z3X2xvYWRlZChwcml2LCByZXQsIE5VTEwsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy00Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9NDU9c3RhdGljIHZvaWQgbWFpbl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTU1LVxcdC8qIEZpcm13YXJlIGZvdW5kISAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzo1NjpcXHRsYnNfZndfbG9hZGVkKHByaXYsIDAsIHByaXYtXFx1MDAzZWhlbHBlcl9mdywgZmlybXdhcmUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy01Ny1cXHRpZiAocHJpdi1cXHUwMDNlaGVscGVyX2Z3KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9NjQ9c3RhdGljIHZvaWQgaGVscGVyX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsIHZvaWQgKmNvbnRleHQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtNzktXFx0XFx0LyogTm8gbWFpbiBmaXJtd2FyZSBuZWVkZWQgZm9yIHRoaXMgaGVscGVyIC0tXFx1MDAzZSBzdWNjZXNzISAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzo4MDpcXHRcXHRsYnNfZndfbG9hZGVkKHByaXYsIDAsIGZpcm13YXJlLCBOVUxMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtODEtXFx0XFx0cmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9ODU9c3RhdGljIHZvaWQgbG9hZF9uZXh0X2Zpcm13YXJlX2Zyb21fdGFibGUoc3RydWN0IGxic19wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTEwMS1cXHRcXHQvKiBFbmQgb2YgdGFibGUgaGl0LiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoxMDI6XFx0XFx0bGJzX2Z3X2xvYWRlZChwcml2LCAtRU5PRU5ULCBOVUxMLCBOVUxMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTAzLVxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDA6MzguMjk3NDQzMTE2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4MzUzMjkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyBGaXJtd2FyZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gXCJyZWFkIGBsYnNfZndfbG9hZGVkYFwiLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgc3BlY2lmaWNzLiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgdGhhdCBgbGJzX2Z3X2xvYWRlZGAgcmVmZXJzIHRvIGEgdmFyaWFibGUgb3IgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRoZSBsb2FkaW5nIHN0YXRlIG9mIGZpcm13YXJlIGZvciBhIHNwZWNpZmljIHN5c3RlbSBjb21wb25lbnQsIGxpa2VseSBhIFwibGJzXCIgZGVzaWduYXRpb24gc2lnbmlmeWluZyBzb21ldGhpbmcgd2l0aGluIGEgbGF5ZXJlZCBibG9jayBzdHJ1Y3R1cmUuIFRoZSBmYWN0IHRoYXQgaXQgZXhpc3RzIGltcGxpZXMgYSBzcGVjaWZpYyBuZWVkIHRvIHRyYWNrIGZpcm13YXJlIHN0YXR1cywgd2hpY2ggaW4gdHVybiBzdWdnZXN0cyBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBib290IHByb2Nlc3NlcywgZXJyb3IgaGFuZGxpbmcsIG9yIHBlcmhhcHMgZXZlbiB2ZXJzaW9uIGNvbnRyb2wgYW5kIHJvbGxiYWNrIG1lY2hhbmlzbXMuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhIHNpbXBsZSBmbGFnIHRvIGEgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSB0eXBlLCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCwgYW5kIHdoYXQgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGV4aXN0IGluIG9yZGVyIHRvIGZ1bGx5IGRldGVybWluZSBpdHMgcm9sZS4gVGhlIHF1ZXN0aW9uIGlzLCB3aGF0IHByZWNpc2VseSBkbyBJIG5lZWQgdG8gbGVhcm4gYWJvdXQgdGhpcyBlbGVtZW50P1xuXG5cbiIsIklucHV0VG9rZW5zIjozMjkwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDA6NDEuOTgwOTc3NzEzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdHN0YXRpYyB2b2lkIGxic19md19sb2FkZWQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgcmV0LFxcbiAgMTY6XFx0XFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpoZWxwZXIsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqbWFpbmZ3KVxcbiAgMTc6XFx0e1xcbiAgMTg6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0bGJzX2RlYl9mdyhcXFwiZmlybXdhcmUgbG9hZCBjb21wbGV0ZSwgY29kZSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0LyogVXNlciBtdXN0IGZyZWUgaGVscGVyL21haW5mdyAqL1xcbiAgMjM6XFx0XFx0cHJpdi1cXHUwMDNlZndfY2FsbGJhY2socHJpdiwgcmV0LCBoZWxwZXIsIG1haW5mdyk7XFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2Vkcml2ZXJfbG9jaywgZmxhZ3MpO1xcbiAgMjY6XFx0XFx0cHJpdi1cXHUwMDNlZndfY2FsbGJhY2sgPSBOVUxMO1xcbiAgMjc6XFx0XFx0d2FrZV91cChcXHUwMDI2cHJpdi1cXHUwMDNlZndfd2FpdHEpO1xcbiAgMjg6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHJpdi1cXHUwMDNlZHJpdmVyX2xvY2ssIGZsYWdzKTtcXG4gIDI5OlxcdH1cXG4gIDMwOlxcdFxcbiAgMzE6XFx0c3RhdGljIHZvaWQgZG9fbG9hZF9maXJtd2FyZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuICAzMjpcXHRcXHR2b2lkICgqY2IpKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpKVxcbiAgMzM6XFx0e1xcbiAgMzQ6XFx0XFx0aW50IHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDA6NDEuOTgxMDUyOTUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3OTE3MzkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRG91YmxlIEZyZWUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZSBjb21tZW50IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlOiBcIi8qIFVzZXIgbXVzdCBmcmVlIGhlbHBlci9tYWluZncgKi9cIi4gVGhhdCdzIGEgcmVkIGZsYWcuIE5vdywgbGV0J3MgdHJhY2UgdGhpcyBiYWNrLiBgaGVscGVyX2Zpcm13YXJlX2NiYCBjYWxscyBgbGJzX2Z3X2xvYWRlZGAsIGFuZCB0aGF0IGZ1bmN0aW9uIHN1YnNlcXVlbnRseSBjYWxscyBgcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSlgLiBGaW5lLiBCdXQgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IGBsYnNfZndfbG9hZGVkYCBhbHNvIGNhbGxzIGBwcml2LVx1MDAzZWZ3X2NhbGxiYWNrYCB3aXRoIHRoYXQgKnNhbWUqIGBmaXJtd2FyZWAgcG9pbnRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlmIGBwcml2LVx1MDAzZWZ3X2NhbGxiYWNrYCBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUgYGZpcm13YXJlYCwgdGhlbiB0aGF0IGByZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKWAgY2FsbCBhZnRlciB3b3VsZCBiZSBhIGRvdWJsZSBmcmVlLCByaWdodD8gVGhhdCdzIGEgY2xhc3NpYyBtZW1vcnkgbWFuYWdlbWVudCBidWcuIFRoZSBjb21tZW50IHNwZWNpZmljYWxseSBzYXlzIHRoZSB1c2VyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIGl0LCB3aGljaCBpcyB0aGUgdXNlciBvZiB0aGUgY2FsbGJhY2suIEJ1dCBkb2VzIHRoYXQgbWVhbiBgcHJpdi1cdTAwM2Vmd19jYWxsYmFja2AgKmlzKiB0aGUgdXNlciByZXNwb25zaWJsZSBmb3IgaXQ/IEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgcHJpdi1cdTAwM2Vmd19jYWxsYmFja2AuIExldCdzIHNlZSB3aGF0IHRoYXQgbG9va3MgbGlrZS4uLiBJJ2xsIG5lZWQgdG8gZ28gbG9vayBhdCBpdHMgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQwOjQ2Ljc2MDIyODk4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTgzMTM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmd19jYWxsYmFjayA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYz0xNT1zdGF0aWMgdm9pZCBsYnNfZndfbG9hZGVkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IHJldCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0yNS1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cHJpdi1cXHUwMDNlZHJpdmVyX2xvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM6MjY6XFx0cHJpdi1cXHUwMDNlZndfY2FsbGJhY2sgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0yNy1cXHR3YWtlX3VwKFxcdTAwMjZwcml2LVxcdTAwM2Vmd193YWl0cSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9MTE1PXZvaWQgbGJzX3dhaXRfZm9yX2Zpcm13YXJlX2xvYWQoc3RydWN0IGxic19wcml2YXRlICpwcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xMTYte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoxMTc6XFx0d2FpdF9ldmVudChwcml2LVxcdTAwM2Vmd193YWl0cSwgcHJpdi1cXHUwMDNlZndfY2FsbGJhY2sgPT0gTlVMTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTExOC19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9MTMyPWludCBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTE0NS1cXHRwcml2LVxcdTAwM2Vmd19kZXZpY2UgPSBkZXZpY2U7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjE0NjpcXHRwcml2LVxcdTAwM2Vmd19jYWxsYmFjayA9IGNhbGxiYWNrO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xNDctXFx0cHJpdi1cXHUwMDNlZndfdGFibGUgPSBmd190YWJsZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDA6NDYuODIyMDY0NzIzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0OTk1MTUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyBvciB1bmRlcnN0YW5kaW5nIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlICppbml0aWF0aW5nKiB0aGUgY2FsbCB0byBgbGJzX2dldF9maXJtd2FyZV9hc3luY2AuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGFydGluZyBwb2ludCwgcmVhbGx5LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsIGlzIGdvaW5nIHRvIGluZm9ybSBldmVyeSBzdWJzZXF1ZW50IGxpbmUgb2YgaW52ZXN0aWdhdGlvbi4gSXMgaXQgZHJpdmVuIGJ5IGFuIGV4dGVybmFsIGV2ZW50PyBTb21lIHRpbWVyLWJhc2VkIHBlcmlvZGljIGNoZWNrPyBPciwgcGVyaGFwcywgYW5vdGhlciBzdWJzeXN0ZW0gcmVseWluZyBvbiB0aGlzIGFzeW5jIGNhbGwgdG8gZmV0Y2ggc3BlY2lmaWMgZGF0YT8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBhbGwgdGhlIHBvc3NpYmxlIHBhdGhzIHRoYXQgYXJlIGxlYWRpbmcgdG8gaXRzIGV4ZWN1dGlvbi4gTGV0J3Mgc2VlIHdobydzIGNhbGxpbmcgaXQsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMuIFRoaXMgaXMgdGhlIGJlZHJvY2sgb2YgdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MDo1MC4xNzIwMTgzMjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzQ5MDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZGVjbC5oPTY5PWludCBsYnNfZ2V0X2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGNhcmRfbW9kZWwsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2RlY2wuaC03Mi1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKiptYWluZncpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZGVjbC5oOjczOmludCBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZGVjbC5oLTc0LVxcdFxcdFxcdCAgIHUzMiBjYXJkX21vZGVsLCBjb25zdCBzdHJ1Y3QgbGJzX2Z3X3RhYmxlICpmd190YWJsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYz0xMTU9dm9pZCBsYnNfd2FpdF9mb3JfZmlybXdhcmVfbG9hZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTIwLS8qKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoxMjE6ICogIGxic19nZXRfZmlybXdhcmVfYXN5bmMgLSBSZXRyaWV2ZXMgZmlybXdhcmUgYXN5bmNocm9ub3VzbHkuIENhbiBsb2FkXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTEyMi0gKiAgZWl0aGVyIGEgaGVscGVyIGZpcm13YXJlIGFuZCBhIG1haW4gZmlybXdhcmUgKDItc3RhZ2UpLCBvciBqdXN0IHRoZSBoZWxwZXIuXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTMxLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoxMzI6aW50IGxic19nZXRfZmlybXdhcmVfYXN5bmMoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTEzMy1cXHRcXHRcXHQgICAgdTMyIGNhcmRfbW9kZWwsIGNvbnN0IHN0cnVjdCBsYnNfZndfdGFibGUgKmZ3X3RhYmxlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTE1NS19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjE1NjpFWFBPUlRfU1lNQk9MX0dQTChsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTU3LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTE2OC0gKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoxNjk6ICogRGVwcmVjYXRlZDogdXNlIGxic19nZXRfZmlybXdhcmVfYXN5bmMoKSBpbnN0ZWFkLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xNzAtICpcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jPTY5Mz1zdGF0aWMgaW50IGlmX3NkaW9fcHJvZ19maXJtd2FyZShzdHJ1Y3QgaWZfc2Rpb19jYXJkICpjYXJkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmMtNzM1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jOjczNjpcXHRyZXQgPSBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jKGNhcmQtXFx1MDAzZXByaXYsIFxcdTAwMjZjYXJkLVxcdTAwM2VmdW5jLVxcdTAwM2VkZXYsIGNhcmQtXFx1MDAzZW1vZGVsLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jLTczNy1cXHRcXHRcXHRcXHQgICAgIGZ3X3RhYmxlLCBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYz0xOTM9c3RhdGljIGludCBpZl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jLTI4Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jOjI4MzpcXHRyID0gbGJzX2dldF9maXJtd2FyZV9hc3luYyhwcml2LCBcXHUwMDI2dWRldi1cXHUwMDNlZGV2LCBjYXJkcC1cXHUwMDNlbW9kZWwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy0yODQtXFx0XFx0XFx0XFx0ICAgZndfdGFibGUsIGlmX3VzYl9wcm9nX2Zpcm13YXJlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDA6NTAuNDY1NTE2NTUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDMwMTE1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIEZpcm13YXJlIFByb2dyYW1taW5nIEZsYWdzKipcblxuUmlnaHQsIGxldCdzIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBCZWZvcmUgSSBzdGFydCBhbnl0aGluZyBlbHNlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgb2J2aW91cywgZXNwZWNpYWxseSBzaW5jZSB3ZSdyZSBwcm9iYWJseSBqdWdnbGluZyBkaWZmZXJlbnQgcHJvZ3JhbW1pbmcgbWV0aG9kcy4gSSBuZWVkIHRvIGV4cGxpY2l0bHkgdmVyaWZ5IHRoZSBzdGF0dXMgb2YgdGhvc2UgdHdvIGZsYWdzOiBgaWZfdXNiX3Byb2dfZmlybXdhcmVgIGFuZCBgaWZfc2Rpb19kb19wcm9nX2Zpcm13YXJlYC4gSXQncyBjcnVjaWFsLCBvYnZpb3VzbHksIHRvIGNvbmZpcm0gd2hldGhlciB3ZSdyZSB0YXJnZXRpbmcgVVNCIG9yIFNESU8gZm9yIHRoZSBmaXJtd2FyZSB1cGRhdGUgcHJvY2Vzcy4gSSB3YW50IHRvIGF2b2lkIGFueSBzaWxseSBtaXN0YWtlcyBkdWUgdG8gYXNzdW1pbmcgdGhlIHdyb25nIHByb2dyYW1taW5nIG1ldGhvZC4gVGhpcyBpcyBhIHN0YW5kYXJkIHN0ZXAgSSB0YWtlIGJlZm9yZSBlbmdhZ2luZyB3aXRoIG1vcmUgYWR2YW5jZWQgcHJvY2Vzc2VzIHRvIGF2b2lkIHdhc3RpbmcgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg2NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQwOjU0LjgwODUzMDA4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MzU1NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmX3VzYl9wcm9nX2Zpcm13YXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmM9Njc9c3RhdGljIHZvaWQgaWZfdXNiX3JlY2VpdmVfZndsb2FkKHN0cnVjdCB1cmIgKnVyYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYzo2ODpzdGF0aWMgdm9pZCBpZl91c2JfcHJvZ19maXJtd2FyZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCByZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy02OS1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmM9MTkzPXN0YXRpYyBpbnQgaWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy0yODMtXFx0ciA9IGxic19nZXRfZmlybXdhcmVfYXN5bmMocHJpdiwgXFx1MDAyNnVkZXYtXFx1MDAzZWRldiwgY2FyZHAtXFx1MDAzZW1vZGVsLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmM6Mjg0OlxcdFxcdFxcdFxcdCAgIGZ3X3RhYmxlLCBpZl91c2JfcHJvZ19maXJtd2FyZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy0yODUtXFx0aWYgKHIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jPTc5MT1zdGF0aWMgaW50IGNoZWNrX2Z3ZmlsZV9mb3JtYXQoY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgdG90bGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy04MzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYzo4MzE6c3RhdGljIHZvaWQgaWZfdXNiX3Byb2dfZmlybXdhcmUoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgcmV0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmMtODMyLVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MDo1NC45MjU4ODc1NDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3ODg2NDg5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBpZl91c2JfcHJvZ19maXJtd2FyZWAgQ29kZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIExldCdzIHNlZSB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlLCBzdGFydGluZyB3aXRoIGBpZl91c2JfcHJvZ19maXJtd2FyZWAuIEp1c3QgZnJvbSB0aGUgbmFtZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdlJ3JlIGxvb2tpbmcgYXQgZmlybXdhcmUgcmVsYXRlZCB0byBVU0IgcHJvZ3JhbW1pbmcuIEl0J3MgbGlrZWx5IGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LCBwcm9iYWJseSBjaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9yIHZhbGlkaXR5IG9mIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgVVNCIHByb2dyYW1tZXIuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBjaGVja2luZyBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSByZXZpc2lvbiwgYSB2YWxpZCBjb25uZWN0aW9uLCBhIGNlcnRhaW4gZmlybXdhcmUgdmVyc2lvbiBvbiB0aGUgcHJvZ3JhbW1lciBpdHNlbGYsIG9yIGV2ZW4gc29tZXRoaW5nIGFzIGJhc2ljIGFzIHdoZXRoZXIgYSBkZXZpY2UgaXMgY29ubmVjdGVkIGF0IGFsbC4gTXkgZ3Vlc3MgaXMgdGhhdCBpdCdzIHByb2JhYmx5IHRoZSB0b3AtbGV2ZWwgY29uZGl0aW9uYWwgbG9naWMgZm9yIGRlY2lkaW5nIHdoZXRoZXIgdG8gZW5nYWdlIHdpdGggdGhlIFVTQiBwcm9ncmFtbWVyIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGVuIHBlcmhhcHMgbW92aW5nIGludG8gbW9yZSBzcGVjaWFsaXplZCBjb25kaXRpb25hbCBibG9ja3MuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGVycm9yIGhhbmRsaW5nLCBhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgVVNCIHByb3RvY29sIGJlaW5nIGVtcGxveWVkLiBJIGV4cGVjdCB0byBzZWUgc3BlY2lmaWMgVVNCIHZlbmRvciBhbmQgcHJvZHVjdCBJRHMsIGFuZCBwcm9iYWJseSBkZXRhaWxzIGFib3V0IHRoZSBjb21tdW5pY2F0aW9uIGVuZHBvaW50cy4gTm93LCBsZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGluIHRoaXMgZmlsZSBhbmQgd2hhdCBpdCdzIHRyeWluZyB0byBkby4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTIyLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDA6NTguNjA0NzU0NzI0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgzMTpcXHRzdGF0aWMgdm9pZCBpZl91c2JfcHJvZ19maXJtd2FyZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCByZXQsXFxuIDgzMjpcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4gODMzOlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVudXNlZClcXG4gODM0OlxcdHtcXG4gODM1OlxcdFxcdHN0cnVjdCBpZl91c2JfY2FyZCAqY2FyZHAgPSBwcml2LVxcdTAwM2VjYXJkO1xcbiA4MzY6XFx0XFx0aW50IGkgPSAwO1xcbiA4Mzc6XFx0XFx0c3RhdGljIGludCByZXNldF9jb3VudCA9IDEwO1xcbiA4Mzg6XFx0XFxuIDgzOTpcXHRcXHRpZiAocmV0KSB7XFxuIDg0MDpcXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBmaW5kIGZpcm13YXJlICglZClcXFxcblxcXCIsIHJldCk7XFxuIDg0MTpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDg0MjpcXHRcXHR9XFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdGNhcmRwLVxcdTAwM2VmdyA9IGZ3O1xcbiA4NDU6XFx0XFx0aWYgKGNoZWNrX2Z3ZmlsZV9mb3JtYXQoY2FyZHAtXFx1MDAzZWZ3LVxcdTAwM2VkYXRhLCBjYXJkcC1cXHUwMDNlZnctXFx1MDAzZXNpemUpKSB7XFxuIDg0NjpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiA4NDc6XFx0XFx0XFx0Z290byBkb25lO1xcbiA4NDg6XFx0XFx0fVxcbiA4NDk6XFx0XFxuIDg1MDpcXHRcXHQvKiBDYW5jZWwgYW55IHBlbmRpbmcgdXNiIGJ1c2luZXNzICovXFxuIDg1MTpcXHRcXHR1c2Jfa2lsbF9hbmNob3JlZF91cmJzKFxcdTAwMjZjYXJkcC1cXHUwMDNlcnhfc3VibWl0dGVkKTtcXG4gODUyOlxcdFxcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXFx1MDAyNmNhcmRwLVxcdTAwM2V0eF9zdWJtaXR0ZWQpO1xcbiA4NTM6XFx0XFxuIDg1NDpcXHRcXHRjYXJkcC1cXHUwMDNlZndsYXN0Ymxrc2VudCA9IDA7XFxuIDg1NTpcXHRcXHRjYXJkcC1cXHUwMDNlZndkbmxkb3ZlciA9IDA7XFxuIDg1NjpcXHRcXHRjYXJkcC1cXHUwMDNldG90YWxieXRlcyA9IDA7XFxuIDg1NzpcXHRcXHRjYXJkcC1cXHUwMDNlZndmaW5hbGJsayA9IDA7XFxuIDg1ODpcXHRcXHRjYXJkcC1cXHUwMDNlYm9vdGNtZHJlc3AgPSAwO1xcbiA4NTk6XFx0XFxuIDg2MDpcXHRyZXN0YXJ0OlxcbiA4NjE6XFx0XFx0aWYgKGlmX3VzYl9zdWJtaXRfcnhfdXJiX2Z3bG9hZChjYXJkcCkgXFx1MDAzYyAwKSB7XFxuIDg2MjpcXHRcXHRcXHRsYnNfZGViX3VzYmQoXFx1MDAyNmNhcmRwLVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXYsIFxcXCJVUkIgc3VibWlzc2lvbiBpcyBmYWlsZWRcXFxcblxcXCIpO1xcbiA4NjM6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gODY0OlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gODY1OlxcdFxcdH1cXG4gODY2OlxcdFxcbiA4Njc6XFx0XFx0Y2FyZHAtXFx1MDAzZWJvb3RjbWRyZXNwID0gMDtcXG4gODY4OlxcdFxcdGRvIHtcXG4gODY5OlxcdFxcdFxcdGludCBqID0gMDtcXG4gODcwOlxcdFxcdFxcdGkrKztcXG4gODcxOlxcdFxcdFxcdGlmX3VzYl9pc3N1ZV9ib290X2NvbW1hbmQoY2FyZHAsIEJPT1RfQ01EX0ZXX0JZX1VTQik7XFxuIDg3MjpcXHRcXHRcXHQvKiB3YWl0IGZvciBjb21tYW5kIHJlc3BvbnNlICovXFxuIDg3MzpcXHRcXHRcXHRkbyB7XFxuIDg3NDpcXHRcXHRcXHRcXHRqKys7XFxuIDg3NTpcXHRcXHRcXHRcXHRtc2xlZXBfaW50ZXJydXB0aWJsZSgxMDApO1xcbiA4NzY6XFx0XFx0XFx0fSB3aGlsZSAoY2FyZHAtXFx1MDAzZWJvb3RjbWRyZXNwID09IDAgXFx1MDAyNlxcdTAwMjYgaiBcXHUwMDNjIDEwKTtcXG4gODc3OlxcdFxcdH0gd2hpbGUgKGNhcmRwLVxcdTAwM2Vib290Y21kcmVzcCA9PSAwIFxcdTAwMjZcXHUwMDI2IGkgXFx1MDAzYyA1KTtcXG4gODc4OlxcdFxcbiA4Nzk6XFx0XFx0aWYgKGNhcmRwLVxcdTAwM2Vib290Y21kcmVzcCA9PSBCT09UX0NNRF9SRVNQX05PVF9TVVBQT1JURUQpIHtcXG4gODgwOlxcdFxcdFxcdC8qIFJldHVybiB0byBub3JtYWwgb3BlcmF0aW9uICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQwOjU4LjYwNDg3MTY1NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU4OTE0MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZTpcblxuKipDaGVja2luZyBGaXJtd2FyZSBIYW5kbGluZyBpbiBgaWZfdXNiX3Byb2dfZmlybXdhcmVgKipcblxuT2theSwgc28gYGlmX3VzYl9wcm9nX2Zpcm13YXJlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBVU0IgZmlybXdhcmUgcHJvZ3JhbW1pbmcsIGFuZCBpdCBhcHBlYXJzIGl0IHNhdmVzIHRoZSBsb2FkZWQgZmlybXdhcmUsIGBmd2AsIGludG8gYGNhcmRwLVx1MDAzZWZ3YC4gTXkgbWFpbiBjb25jZXJuIHJpZ2h0IG5vdyBpcyBtZW1vcnkgbWFuYWdlbWVudC4gRGlkIGl0IHJlbGVhc2UgdGhlIGFsbG9jYXRlZCBtZW1vcnkgYWZ0ZXIgaXQgaGFzIHNhdmVkIHRoZSBmaXJtd2FyZT8gSSByZWFsbHkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBgZndgIGJ1ZmZlciBhdCBzb21lIHBvaW50IHRvIGF2b2lkIG1lbW9yeSBsZWFrcy4gSSBuZWVkIHRvIHJlYWQgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uIGNhcmVmdWxseSB0byBlbnN1cmUgdGhhdCBpdCBoYXMgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYxNSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDE6MDEuOTYzNzg3MjM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg4MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg4MTpcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4gODgyOlxcdFxcdFxcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXFx1MDAyNmNhcmRwLVxcdTAwM2VyeF9zdWJtaXR0ZWQpO1xcbiA4ODM6XFx0XFx0XFx0dXNiX2tpbGxfYW5jaG9yZWRfdXJicyhcXHUwMDI2Y2FyZHAtXFx1MDAzZXR4X3N1Ym1pdHRlZCk7XFxuIDg4NDpcXHRcXHRcXHRpZiAoaWZfdXNiX3N1Ym1pdF9yeF91cmIoY2FyZHApIFxcdTAwM2MgMClcXG4gODg1OlxcdFxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDg4NjpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDg4NzpcXHRcXHR9IGVsc2UgaWYgKGNhcmRwLVxcdTAwM2Vib290Y21kcmVzcCBcXHUwMDNjPSAwKSB7XFxuIDg4ODpcXHRcXHRcXHRpZiAoLS1yZXNldF9jb3VudCBcXHUwMDNlPSAwKSB7XFxuIDg4OTpcXHRcXHRcXHRcXHRpZl91c2JfcmVzZXRfZGV2aWNlKGNhcmRwKTtcXG4gODkwOlxcdFxcdFxcdFxcdGdvdG8gcmVzdGFydDtcXG4gODkxOlxcdFxcdFxcdH1cXG4gODkyOlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDg5MzpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDg5NDpcXHRcXHR9XFxuIDg5NTpcXHRcXG4gODk2OlxcdFxcdGkgPSAwO1xcbiA4OTc6XFx0XFxuIDg5ODpcXHRcXHRjYXJkcC1cXHUwMDNldG90YWxieXRlcyA9IDA7XFxuIDg5OTpcXHRcXHRjYXJkcC1cXHUwMDNlZndsYXN0Ymxrc2VudCA9IDA7XFxuIDkwMDpcXHRcXHRjYXJkcC1cXHUwMDNlQ1JDX09LID0gMTtcXG4gOTAxOlxcdFxcdGNhcmRwLVxcdTAwM2Vmd2RubGRvdmVyID0gMDtcXG4gOTAyOlxcdFxcdGNhcmRwLVxcdTAwM2Vmd3NlcW51bSA9IC0xO1xcbiA5MDM6XFx0XFx0Y2FyZHAtXFx1MDAzZXRvdGFsYnl0ZXMgPSAwO1xcbiA5MDQ6XFx0XFx0Y2FyZHAtXFx1MDAzZWZ3ZmluYWxibGsgPSAwO1xcbiA5MDU6XFx0XFxuIDkwNjpcXHRcXHQvKiBTZW5kIHRoZSBmaXJzdCBmaXJtd2FyZSBwYWNrZXQuLi4gKi9cXG4gOTA3OlxcdFxcdGlmX3VzYl9zZW5kX2Z3X3BrdChjYXJkcCk7XFxuIDkwODpcXHRcXG4gOTA5OlxcdFxcdC8qIC4uLiBhbmQgd2FpdCBmb3IgdGhlIHByb2Nlc3MgdG8gY29tcGxldGUgKi9cXG4gOTEwOlxcdFxcdHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjYXJkcC1cXHUwMDNlZndfd3EsIGNhcmRwLVxcdTAwM2VzdXJwcmlzZV9yZW1vdmVkIHx8IGNhcmRwLVxcdTAwM2Vmd2RubGRvdmVyKTtcXG4gOTExOlxcdFxcbiA5MTI6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNmNhcmRwLVxcdTAwM2Vmd190aW1lb3V0KTtcXG4gOTEzOlxcdFxcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXFx1MDAyNmNhcmRwLVxcdTAwM2VyeF9zdWJtaXR0ZWQpO1xcbiA5MTQ6XFx0XFxuIDkxNTpcXHRcXHRpZiAoIWNhcmRwLVxcdTAwM2Vmd2RubGRvdmVyKSB7XFxuIDkxNjpcXHRcXHRcXHRwcl9pbmZvKFxcXCJmYWlsZWQgdG8gbG9hZCBmdywgcmVzZXR0aW5nIGRldmljZSFcXFxcblxcXCIpO1xcbiA5MTc6XFx0XFx0XFx0aWYgKC0tcmVzZXRfY291bnQgXFx1MDAzZT0gMCkge1xcbiA5MTg6XFx0XFx0XFx0XFx0aWZfdXNiX3Jlc2V0X2RldmljZShjYXJkcCk7XFxuIDkxOTpcXHRcXHRcXHRcXHRnb3RvIHJlc3RhcnQ7XFxuIDkyMDpcXHRcXHRcXHR9XFxuIDkyMTpcXHRcXG4gOTIyOlxcdFxcdFxcdHByX2luZm8oXFxcIkZXIGRvd25sb2FkIGZhaWx1cmUsIHRpbWUgPSAlZCBtc1xcXFxuXFxcIiwgaSAqIDEwMCk7XFxuIDkyMzpcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbiA5MjQ6XFx0XFx0XFx0Z290byBkb25lO1xcbiA5MjU6XFx0XFx0fVxcbiA5MjY6XFx0XFxuIDkyNzpcXHRcXHRjYXJkcC1cXHUwMDNlcHJpdi1cXHUwMDNlZndfcmVhZHkgPSAxO1xcbiA5Mjg6XFx0XFx0aWZfdXNiX3N1Ym1pdF9yeF91cmIoY2FyZHApO1xcbiA5Mjk6XFx0XFxuIDkzMDpcXHRcXHRpZiAobGJzX3N0YXJ0X2NhcmQocHJpdikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQxOjAxLjk2MzkzMTk4NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTgwNjQ3NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBpZl91c2JfcHJvZ19maXJtd2FyZWAgQ29uZGl0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGBpZl91c2JfcHJvZ19maXJtd2FyZWAgY29uZGl0aW9uIGlzIGNvbnRpbnVpbmcuLi4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGV2YWx1YXRlIHdoYXQgdGhhdCBpbXBsaWVzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGxpa2VseSBpbmRpY2F0ZXMgdGhlIHN5c3RlbSBpcyBzdGlsbCBpbiBhIFVTQiBwcm9ncmFtbWluZyBvciBmaXJtd2FyZSB1cGRhdGUgc3RhdGUuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaGFuZy11cCwgYSBjb250aW51ZWQgd2FpdCBmb3IgYSB2YWxpZCBmaXJtd2FyZSBpbWFnZSwgb3IgbWF5YmUgZXZlbiBhbiB1bmV4cGVjdGVkIHJldHVybiBmcm9tIGEgcmVsYXRlZCBmdW5jdGlvbi4gSSBoYXZlIHRvIHF1aWNrbHkgZGVkdWNlIHdoeSB0aGlzIGlzIGhhcHBlbmluZy4gSXMgdGhlcmUgYW4gaXNzdWUgd2l0aCB0aGUgVVNCIGNvbm5lY3Rpb24sIHRoZSBmaXJtd2FyZSBpbWFnZSBpdHNlbGYsIHRoZSBwcm9ncmFtbWluZyBzZXF1ZW5jZSwgb3IgZXZlbiB0aGUgaGFyZHdhcmUgaW52b2x2ZWQ/IEkgbmVlZCB0byBjb25zaWRlciBhbGwgcG9zc2libGUgZmFjdG9ycyBjb250cmlidXRpbmcgdG8gdGhpcyBvbmdvaW5nIGNvbmRpdGlvbiwgc2luY2UgdGhpcyBjb3VsZCBiZSBhIHBvaW50IG9mIGZhaWx1cmUgZm9yIHRoZSB1cGRhdGUgcHJvY2VkdXJlIG9yLCBpbiB0aGUgd29yc3QgY2FzZSwgYnJpY2tpbmcgdGhlIGRldmljZS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBwYXRoIHRoYXQgdXNlcyBgaWZfdXNiX3Byb2dfZmlybXdhcmVgIHRvIHVuZGVyc3RhbmQgdGhlIHN0YXRlIGl0IHJlcHJlc2VudHMgYW5kIHBvdGVudGlhbCBuZXh0IHN0ZXBzLCBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjE4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MTowNS41NDQ1ODExNjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTMxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTMxOlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gOTMyOlxcdFxcbiA5MzM6XFx0XFx0aWZfdXNiX3NldHVwX2Zpcm13YXJlKHByaXYpO1xcbiA5MzQ6XFx0XFxuIDkzNTpcXHRcXHQvKlxcbiA5MzY6XFx0XFx0ICogRUhTX1JFTU9WRV9XQUtFVVAgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgdmVyc2lvbnMgb2YgdGhlIGZpcm13YXJlLlxcbiA5Mzc6XFx0XFx0ICovXFxuIDkzODpcXHRcXHRwcml2LVxcdTAwM2V3b2xfY3JpdGVyaWEgPSBFSFNfUkVNT1ZFX1dBS0VVUDtcXG4gOTM5OlxcdFxcdGlmIChsYnNfaG9zdF9zbGVlcF9jZmcocHJpdiwgcHJpdi1cXHUwMDNld29sX2NyaXRlcmlhLCBOVUxMKSlcXG4gOTQwOlxcdFxcdFxcdHByaXYtXFx1MDAzZWVoc19yZW1vdmVfc3VwcG9ydGVkID0gZmFsc2U7XFxuIDk0MTpcXHRcXG4gOTQyOlxcdCBkb25lOlxcbiA5NDM6XFx0XFx0Y2FyZHAtXFx1MDAzZWZ3ID0gTlVMTDtcXG4gOTQ0OlxcdH1cXG4gOTQ1OlxcdFxcbiA5NDY6XFx0XFxuIDk0NzpcXHQjaWZkZWYgQ09ORklHX1BNXFxuIDk0ODpcXHRzdGF0aWMgaW50IGlmX3VzYl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcXG4gOTQ5OlxcdHtcXG4gOTUwOlxcdFxcdHN0cnVjdCBpZl91c2JfY2FyZCAqY2FyZHAgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xcbiA5NTE6XFx0XFx0c3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY2FyZHAtXFx1MDAzZXByaXY7XFxuIDk1MjpcXHRcXHRpbnQgcmV0O1xcbiA5NTM6XFx0XFxuIDk1NDpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcHNzdGF0ZSAhPSBQU19TVEFURV9GVUxMX1BPV0VSKSB7XFxuIDk1NTpcXHRcXHRcXHRyZXQgPSAtMTtcXG4gOTU2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA5NTc6XFx0XFx0fVxcbiA5NTg6XFx0XFxuIDk1OTpcXHQjaWZkZWYgQ09ORklHX09MUENcXG4gOTYwOlxcdFxcdGlmIChtYWNoaW5lX2lzX29scGMoKSkge1xcbiA5NjE6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZXdvbF9jcml0ZXJpYSA9PSBFSFNfUkVNT1ZFX1dBS0VVUClcXG4gOTYyOlxcdFxcdFxcdFxcdG9scGNfZWNfd2FrZXVwX2NsZWFyKEVDX1NDSV9TUkNfV0xBTik7XFxuIDk2MzpcXHRcXHRcXHRlbHNlXFxuIDk2NDpcXHRcXHRcXHRcXHRvbHBjX2VjX3dha2V1cF9zZXQoRUNfU0NJX1NSQ19XTEFOKTtcXG4gOTY1OlxcdFxcdH1cXG4gOTY2OlxcdCNlbmRpZlxcbiA5Njc6XFx0XFxuIDk2ODpcXHRcXHRyZXQgPSBsYnNfc3VzcGVuZChwcml2KTtcXG4gOTY5OlxcdFxcdGlmIChyZXQpXFxuIDk3MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gOTcxOlxcdFxcbiA5NzI6XFx0XFx0LyogVW5saW5rIHR4IFxcdTAwMjYgcnggdXJiICovXFxuIDk3MzpcXHRcXHR1c2Jfa2lsbF9hbmNob3JlZF91cmJzKFxcdTAwMjZjYXJkcC1cXHUwMDNldHhfc3VibWl0dGVkKTtcXG4gOTc0OlxcdFxcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXFx1MDAyNmNhcmRwLVxcdTAwM2VyeF9zdWJtaXR0ZWQpO1xcbiA5NzU6XFx0XFxuIDk3NjpcXHQgb3V0OlxcbiA5Nzc6XFx0XFx0cmV0dXJuIHJldDtcXG4gOTc4OlxcdH1cXG4gOTc5OlxcdFxcbiA5ODA6XFx0c3RhdGljIGludCBpZl91c2JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MTowNS41NDQ3NDkyNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxNzUzOTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlVTQiBGaXJtd2FyZSBQcm9ncmFtbWluZyBHb3RjaGEhKipcblxuSG9sZCBvbiBhIHNlY29uZC4uLiBqdXN0IHJlLXJlYWRpbmcgdGhlIGNvZGUgaW4gYGlmX3VzYl9wcm9nX2Zpcm13YXJlYC4uLiBkYW5nIGl0ISBJIGtuZXcgSSBzaG91bGQgaGF2ZSBiZWVuIG1vcmUgY2FyZWZ1bC4gSXQgKipkb2Vzbid0KiogYWN0dWFsbHkgYGZyZWUoZncpYCEgSXQgY2xldmVybHkgc2V0cyBgY2FyZHAtXHUwMDNlZncgPSBOVUxMO2AgYXQgdGhlIGVuZCBvZiB0aGUgcHJvY2Vzcywgd2hpY2ggaXMgaG93IGl0IHNpZ25hbHMgdGhhdCB0aGUgZmlybXdhcmUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhhdCdzIGEgY2xldmVyIHRyaWNrLCBidXQgZWFzeSB0byBtaXNzLiBJIGhhdmUgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcyB0byBiZSBjZXJ0YWluIHRoYXQgSSBkb24ndCBpbnRyb2R1Y2UgYSBtZW1vcnkgbGVhayBzb21ld2hlcmUgZWxzZS5cblxuTm93LCBsZXQncyBzZWUsIHdoYXQgYWJvdXQgdGhhdCBgaWZfc2Rpb19kb19wcm9nX2Zpcm13YXJlYCByb3V0aW5lPyBJIG5lZWQgdG8gcXVpY2tseSBjb21wYXJlIHRoZSBhcHByb2FjaCB0aGVyZS4gQXJlIHdlIHNldHRpbmcgdGhlIGBjYXJkcC1cdTAwM2VmdyA9IE5VTEw7YCBwb2ludGVyIHRvbz8gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSBoYXZlIHRoZSByaWdodCBhcHByb2FjaCwgdG8gcHJldmVudCBlaXRoZXIgYSBtZW1vcnkgbGVhaywgb3IgYSBkb3VibGUtZnJlZSBzaXR1YXRpb24uIFRoaXMgYXJlYSBvZiB0aGUgY29kZSBpcyBoaWdobHkgc2Vuc2l0aXZlLCBzbyBhbnkgcG90ZW50aWFsIGVycm9ycyBuZWVkIHRvIGJlIGZvdW5kIHF1aWNrbHkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQxOjA5LjA2MjI5MDQ5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NjQ4OTg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM9NTM2PXN0YXRpYyBpbnQgaWZfc2Rpb19wcm9nX3JlYWwoc3RydWN0IGlmX3NkaW9fY2FyZCAqY2FyZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jLTY2Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3NkaW8uYzo2Njg6c3RhdGljIHZvaWQgaWZfc2Rpb19kb19wcm9nX2Zpcm13YXJlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IHJldCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3NkaW8uYy02NjktXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmhlbHBlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jPTY5Mz1zdGF0aWMgaW50IGlmX3NkaW9fcHJvZ19maXJtd2FyZShzdHJ1Y3QgaWZfc2Rpb19jYXJkICpjYXJkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmMtNzM2LVxcdHJldCA9IGxic19nZXRfZmlybXdhcmVfYXN5bmMoY2FyZC1cXHUwMDNlcHJpdiwgXFx1MDAyNmNhcmQtXFx1MDAzZWZ1bmMtXFx1MDAzZWRldiwgY2FyZC1cXHUwMDNlbW9kZWwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM6NzM3OlxcdFxcdFxcdFxcdCAgICAgZndfdGFibGUsIGlmX3NkaW9fZG9fcHJvZ19maXJtd2FyZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmMtNzM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MToxMC4xNDg3ODcxNThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyODQxMDE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBTRElPOlxuXG4qKkRpdmluZyBpbnRvIGBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmVgKipcblxuUmlnaHQsIGxldCdzIGdldCBpbnRvIGBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmVgLiBTb3VuZHMgbGlrZSB3ZSdyZSBhYm91dCB0byBkZWx2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgZmlybXdhcmUgcHJvZ3JhbW1pbmcgdmlhIFNESU8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcm91dGluZSB0aG9yb3VnaGx5LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcXVlc3Rpb25zIGFib3V0IGVycm9yIGhhbmRsaW5nLCBpbnRlcnJ1cHQgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIElzIHRoaXMgaGFuZGxpbmcgdGhlIGluaXRpYWwgbG9hZCwgdXBkYXRlcywgb3IgYm90aD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHByb3ByaWV0YXJ5IG9yIHN0YW5kYXJkaXplZCBwcm90b2NvbCBvdmVyIHRoZSBTRElPIGludGVyZmFjZSBmb3IgdGhlIGZpcm13YXJlIHRyYW5zZmVyPyBBbnkgbWVudGlvbiBvZiBETUE/IFRoYXQgd291bGQgYmUgZ29vZCB0byB1bmRlcnN0YW5kLiBJJ20ga2VlbiB0byBsb29rIGZvciBhbnkgb3B0aW1pemF0aW9ucyDigJMgaXMgaXQgY2hlY2tpbmcgZGV2aWNlIGNvbXBhdGliaWxpdHkgYmVmb3JlIHRoZSBwcm9ncmFtbWluZz8gSXMgdGhlcmUgYSB0aW1lb3V0IG1lY2hhbmlzbSBpbiBwbGFjZSwgYW5kIGlmIHNvLCB3aGF0J3MgaXRzIGNvbmZpZ3VyYXRpb24/IEkgYWxzbyBob3BlIHRvIHNlZSBzb21lIHNvcnQgb2YgdmVyaWZpY2F0aW9uIOKAkyBjaGVja3N1bXMgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIHRvIGVuc3VyZSBmaXJtd2FyZSBpbnRlZ3JpdHkuIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgaGFyZHdhcmUgcGxhdGZvcm0gaXMgY3JpdGljYWwsIHNvIGFueSByZWZlcmVuY2VzIHRvIHNwZWNpZmljIHJlZ2lzdGVycywgbWVtb3J5IGFkZHJlc3Nlcywgb3IgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBpbXBvcnRhbnQuIEkgbmVlZCB0byBtZW50YWxseSBwcmVwYXJlIG15c2VsZiBmb3IgcG90ZW50aWFsIGNoYWxsZW5nZXMgYXNzb2NpYXRlZCB3aXRoIFNESU8ncyBjb21wbGV4aXRpZXMsIGxpa2UgdGhlIGludGVycnVwdCBtYXNraW5nLCBjb21tYW5kIHNlcXVlbmNlIGFuZCB0aW1pbmdzLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGUgZnVuY3Rpb24gbWFuYWdlcyBwb3dlciBjb25zaWRlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNTcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MToxNC4wNzcxOTg5NjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjY4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjY4OlxcdHN0YXRpYyB2b2lkIGlmX3NkaW9fZG9fcHJvZ19maXJtd2FyZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCByZXQsXFxuIDY2OTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaGVscGVyLFxcbiA2NzA6XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKm1haW5mdylcXG4gNjcxOlxcdHtcXG4gNjcyOlxcdFxcdHN0cnVjdCBpZl9zZGlvX2NhcmQgKmNhcmQgPSBwcml2LVxcdTAwM2VjYXJkO1xcbiA2NzM6XFx0XFxuIDY3NDpcXHRcXHRpZiAocmV0KSB7XFxuIDY3NTpcXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBmaW5kIGZpcm13YXJlICglZClcXFxcblxcXCIsIHJldCk7XFxuIDY3NjpcXHRcXHRcXHRyZXR1cm47XFxuIDY3NzpcXHRcXHR9XFxuIDY3ODpcXHRcXG4gNjc5OlxcdFxcdHJldCA9IGlmX3NkaW9fcHJvZ19oZWxwZXIoY2FyZCwgaGVscGVyKTtcXG4gNjgwOlxcdFxcdGlmIChyZXQpXFxuIDY4MTpcXHRcXHRcXHRyZXR1cm47XFxuIDY4MjpcXHRcXG4gNjgzOlxcdFxcdGxic19kZWJfc2RpbyhcXFwiSGVscGVyIGZpcm13YXJlIGxvYWRlZFxcXFxuXFxcIik7XFxuIDY4NDpcXHRcXG4gNjg1OlxcdFxcdHJldCA9IGlmX3NkaW9fcHJvZ19yZWFsKGNhcmQsIG1haW5mdyk7XFxuIDY4NjpcXHRcXHRpZiAocmV0KVxcbiA2ODc6XFx0XFx0XFx0cmV0dXJuO1xcbiA2ODg6XFx0XFxuIDY4OTpcXHRcXHRsYnNfZGViX3NkaW8oXFxcIkZpcm13YXJlIGxvYWRlZFxcXFxuXFxcIik7XFxuIDY5MDpcXHRcXHRpZl9zZGlvX2ZpbmlzaF9wb3dlcl9vbihjYXJkKTtcXG4gNjkxOlxcdH1cXG4gNjkyOlxcdFxcbiA2OTM6XFx0c3RhdGljIGludCBpZl9zZGlvX3Byb2dfZmlybXdhcmUoc3RydWN0IGlmX3NkaW9fY2FyZCAqY2FyZClcXG4gNjk0OlxcdHtcXG4gNjk1OlxcdFxcdGludCByZXQ7XFxuIDY5NjpcXHRcXHR1MTYgc2NyYXRjaDtcXG4gNjk3OlxcdFxcbiA2OTg6XFx0XFx0LypcXG4gNjk5OlxcdFxcdCAqIERpc2FibGUgaW50ZXJydXB0c1xcbiA3MDA6XFx0XFx0ICovXFxuIDcwMTpcXHRcXHRzZGlvX2NsYWltX2hvc3QoY2FyZC1cXHUwMDNlZnVuYyk7XFxuIDcwMjpcXHRcXHRzZGlvX3dyaXRlYihjYXJkLVxcdTAwM2VmdW5jLCAweDAwLCBJRl9TRElPX0hfSU5UX01BU0ssIFxcdTAwMjZyZXQpO1xcbiA3MDM6XFx0XFx0c2Rpb19yZWxlYXNlX2hvc3QoY2FyZC1cXHUwMDNlZnVuYyk7XFxuIDcwNDpcXHRcXG4gNzA1OlxcdFxcdHNkaW9fY2xhaW1faG9zdChjYXJkLVxcdTAwM2VmdW5jKTtcXG4gNzA2OlxcdFxcdHNjcmF0Y2ggPSBpZl9zZGlvX3JlYWRfc2NyYXRjaChjYXJkLCBcXHUwMDI2cmV0KTtcXG4gNzA3OlxcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtXFx1MDAzZWZ1bmMpO1xcbiA3MDg6XFx0XFxuIDcwOTpcXHRcXHRsYnNfZGViX3NkaW8oXFxcImZpcm13YXJlIHN0YXR1cyA9ICUjeFxcXFxuXFxcIiwgc2NyYXRjaCk7XFxuIDcxMDpcXHRcXHRsYnNfZGViX3NkaW8oXFxcInNjcmF0Y2ggcmV0ID0gJWRcXFxcblxcXCIsIHJldCk7XFxuIDcxMTpcXHRcXG4gNzEyOlxcdFxcdGlmIChyZXQpXFxuIDcxMzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNzE0OlxcdFxcbiA3MTU6XFx0XFxuIDcxNjpcXHRcXHQvKlxcbiA3MTc6XFx0XFx0ICogVGhlIG1hbnVhbCBjbGVhcmx5IGRlc2NyaWJlcyB0aGF0IEZFREMgaXMgdGhlIHJpZ2h0IGNvZGUgdG8gdXNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQxOjE0LjA3NzI5ODIyMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTY0MTM5NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpcm13YXJlIExvYWRpbmcgR290Y2hhcyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgYGlmX3NkaW9fZG9fcHJvZ19maXJtd2FyZWAgZnVuY3Rpb24uLi4gaXQncyBsb29raW5nIGxpa2UgaXQncyAqbm90KiBmcmVlaW5nIHRoZSBgaGVscGVyYCBvciBgbWFpbmZ3YCBwb2ludGVycyBhZnRlciB1c2UuIFRoYXQncyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayByaWdodCB0aGVyZSEgTGV0J3MgZmlsZSB0aGF0IGF3YXkgZm9yIGEgbGF0ZXIgbG9vay5cblxuQnV0IGhhbmcgb24sIGxldCBtZSB0cmFjZSB0aGlzIGJhY2sgYSBiaXQuIGBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jYCBjYWxscyBgZG9fbG9hZF9maXJtd2FyZWAsIHdoaWNoIGluIHR1cm4sIHVzZXMgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YC4gQWgsIGFuZCAqdGhhdCogZnVuY3Rpb24gaXMgYXN5bmNocm9ub3VzLCB3aGljaCBtZWFucyB3ZSBoYXZlIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHdoZW4gdGhlIGZpcm13YXJlIGxvYWRpbmcgaXMgY29tcGxldGUuIFRoZSBjYWxsYmFjayBmb3IgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCBpcyBlaXRoZXIgYGhlbHBlcl9maXJtd2FyZV9jYmAgb3IgYG1haW5fZmlybXdhcmVfY2JgLCBhbmQsIGZyb20gdGhlIGxvb2tzIG9mIHRoZSBjYWxsLCBpdCBzaG91bGQgYmUgYG1haW5fZmlybXdhcmVfY2JgLiBPa2F5LCBsZXQncyBkaXZlIGludG8gYG1haW5fZmlybXdhcmVfY2JgIGFuZCBtYWtlIHN1cmUgaXQncyBoYW5kbGluZyB0aGUgcmVzb3VyY2VzIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwOCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQxOjE5LjY0MTQzOTk5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDU6XFx0c3RhdGljIHZvaWQgbWFpbl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxcbiAgNDY6XFx0e1xcbiAgNDc6XFx0XFx0c3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY29udGV4dDtcXG4gIDQ4OlxcdFxcbiAgNDk6XFx0XFx0aWYgKCFmaXJtd2FyZSkge1xcbiAgNTA6XFx0XFx0XFx0LyogRmFpbGVkIHRvIGZpbmQgZmlybXdhcmU6IHRyeSBuZXh0IHRhYmxlIGVudHJ5ICovXFxuICA1MTpcXHRcXHRcXHRsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZShwcml2KTtcXG4gIDUyOlxcdFxcdFxcdHJldHVybjtcXG4gIDUzOlxcdFxcdH1cXG4gIDU0OlxcdFxcbiAgNTU6XFx0XFx0LyogRmlybXdhcmUgZm91bmQhICovXFxuICA1NjpcXHRcXHRsYnNfZndfbG9hZGVkKHByaXYsIDAsIHByaXYtXFx1MDAzZWhlbHBlcl9mdywgZmlybXdhcmUpO1xcbiAgNTc6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWhlbHBlcl9mdykge1xcbiAgNTg6XFx0XFx0XFx0cmVsZWFzZV9maXJtd2FyZSAocHJpdi1cXHUwMDNlaGVscGVyX2Z3KTtcXG4gIDU5OlxcdFxcdFxcdHByaXYtXFx1MDAzZWhlbHBlcl9mdyA9IE5VTEw7XFxuICA2MDpcXHRcXHR9XFxuICA2MTpcXHRcXHRyZWxlYXNlX2Zpcm13YXJlIChmaXJtd2FyZSk7XFxuICA2MjpcXHR9XFxuICA2MzpcXHRcXG4gIDY0OlxcdHN0YXRpYyB2b2lkIGhlbHBlcl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxcbiAgNjU6XFx0e1xcbiAgNjY6XFx0XFx0c3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY29udGV4dDtcXG4gIDY3OlxcdFxcbiAgNjg6XFx0XFx0aWYgKCFmaXJtd2FyZSkge1xcbiAgNjk6XFx0XFx0XFx0LyogRmFpbGVkIHRvIGZpbmQgZmlybXdhcmU6IHRyeSBuZXh0IHRhYmxlIGVudHJ5ICovXFxuICA3MDpcXHRcXHRcXHRsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZShwcml2KTtcXG4gIDcxOlxcdFxcdFxcdHJldHVybjtcXG4gIDcyOlxcdFxcdH1cXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0LyogRmlybXdhcmUgZm91bmQhICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQxOjE5LjY0MTUwNzQ5MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDMwMjIzNzMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhIEZpcm13YXJlIExvYWRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGhlcmUgc3RhcnRzIHdpdGggY29uZmlybWluZyBob3cgYG1haW5fZmlybXdhcmVfY2JgIGhhbmRsZXMgZnJlZWluZyBmaXJtd2FyZSByZXNvdXJjZXMuIFllcywgaXQgZG9lcyByZWxlYXNlIGJvdGggYHByaXYtXHUwMDNlaGVscGVyX2Z3YCBhbmQgYGZpcm13YXJlYCwgd2hpY2ggaXMgYG1haW5md2AuIFRoZSBvcmRlciBpcyBjcnVjaWFsOiBgbGJzX2Z3X2xvYWRlZGAgaXMgY2FsbGVkIGZpcnN0LCBhbmQgKnRoZW4qIHRoZSBgcmVsZWFzZV9maXJtd2FyZWAgY2FsbHMgYXJlIG1hZGUuIEkgcmVjYWxsIHRoZSBjb21tZW50IGluIGBsYnNfZndfbG9hZGVkYCBzdGF0aW5nIHRoYXQgdGhlIFwiVXNlciBtdXN0IGZyZWUgaGVscGVyL21haW5mdy5cIiAgQnV0IHRoaXMgY29kZSAqaXMqIGZyZWVpbmcgdGhlbS4gQWhhISBUaGF0IG1lYW5zIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgdGhlIFwidXNlcixcIiAqbXVzdCBub3QqIGZyZWUgdGhlIGZpcm13YXJlIGlmIGBtYWluX2Zpcm13YXJlX2NiYCBnZXRzIGNhbGxlZC4gTGV0J3Mgc2VlIGlmIHRoYXQncyB0cnVlIHdpdGggYGlmX3VzYl9wcm9nX2Zpcm13YXJlYCBhbmQgYGlmX3NkaW9fZG9fcHJvZ19maXJtd2FyZWAsIHdoaWNoIGFyZSBVU0IgYW5kIFNESU8gZnVuY3Rpb25zIHJlc3BlY3RpdmVseS4gSSBjb25maXJtIHRoYXQgdGhlc2UgZnVuY3Rpb25zICpkbyBub3QqIGZyZWUgYGhlbHBlcl9md2Agb3IgYG1haW5md2AuXG5cbk5vdywgdGhlIGZvY3VzIHNoaWZ0cyB0byBgaGVscGVyX2Zpcm13YXJlX2NiYC4gVGhlIGNvZGUgaGFzIGEgc3RydWN0dXJlOiBpZiBgZmlybXdhcmVgIGlzIG5vdCBmb3VuZCwgaXQgdHJpZXMgdG8gbG9hZCB0aGUgbmV4dCB0YWJsZSBlbnRyeS4gQnV0LCB3aGF0IGlmIHRoZSBmaXJtd2FyZSAqaXMqIGZvdW5kPyBUaGUgcGF0Y2ggaW5jbHVkZXMgYSBgcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSlgIGNhbGwgd2l0aGluIGFuIGBlbHNlYCBicmFuY2ggb2YgYGhlbHBlcl9maXJtd2FyZV9jYmAhIE9rYXksIEkgdW5kZXJzdGFuZDsgd2l0aG91dCB0aGUgcGF0Y2gsIHRoZXJlIHdvdWxkIGhhdmUgYmVlbiBhIG1lbW9yeSBsZWFrIHdoZXJlIHRoZSBgZmlybXdhcmVgIHJlc291cmNlIHdvdWxkIG5vdCBoYXZlIGJlZW4gZnJlZWQgd2hlbiBvbmx5IHRoZSBoZWxwZXIgZmlybXdhcmUgd2FzIG5lZWRlZC4gVGhlIHBhdGNoIGlzIG5vdyBmaXhpbmcgYSBtZW1vcnkgbGVhay5cblxuU28sIGlzIHRoaXMgYSBmdW5jdGlvbmFsIGNoYW5nZT8gVGVjaG5pY2FsbHksIHllcywgaXQgbW9kaWZpZXMgdGhlIHN5c3RlbSBzdGF0ZSBieSBmcmVlaW5nIG1lbW9yeS4gSXMgaXQgKndvcnRoKiBmdXp6aW5nPyBBIHNpbXBsZSBtZW1vcnkgbGVhayBmaXggbGlrZSB0aGlzIGlzIHVubGlrZWx5IHRvIGludHJvZHVjZSBuZXcgcmVhY2hhYmxlIHN0YXRlcyB0aGF0IG5lZWQgZnV6emluZywgdW5sZXNzIHRoZSBmcmVlIG9wZXJhdGlvbiBpdHNlbGYgY2FuIGxlYWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSwgaWYgdGhlIG1lbW9yeSBpcyBzdGlsbCBpbiB1c2UuXG5cbkRvZXMgdGhlIGBwcml2LVx1MDAzZWZ3X2NhbGxiYWNrYCBzYXZlIHRoZSBgZmlybXdhcmVgIHBvaW50ZXIsIHdoaWNoIGNvdWxkIGNhdXNlIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlPyBMZXQncyBjaGVjayBgaWZfdXNiX3Byb2dfZmlybXdhcmVgLiBJdCAqZG9lcyogc2F2ZSBgZndgIHRvIGBjYXJkcC1cdTAwM2Vmd2AsIGJ1dCBjcnVjaWFsbHksIGl0IHNldHMgYGNhcmRwLVx1MDAzZWZ3YCB0byBgTlVMTGAgYmVmb3JlIHJldHVybmluZy4gTm93LCBsZXQncyBhbHNvIGNoZWNrIGBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmVgLiBJdCB1c2VzIGBoZWxwZXJgIGFuZCBgbWFpbmZ3YCBzeW5jaHJvbm91c2x5LiBUaGF0J3MgZ29vZC5cblxuVGhlcmVmb3JlLCBhZGRpbmcgYHJlbGVhc2VfZmlybXdhcmVgIGlzIHRoZSBjb3JyZWN0IGNvdXJzZSBvZiBhY3Rpb24sIGFuZCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgKnNob3VsZCogd2UgZnV6eiBpdD8gSWYgd2UgZnV6eiBpdCwgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyAqd2lsbCogYmUgdHJpZ2dlcmVkLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcuIEhvd2V2ZXIsIFN5emthbGxlciBhbHJlYWR5IGZ1enplcyBVU0IgYW5kIFNESU8sIHdoaWNoIGlzIHdoZXJlIHRoaXMgY29kZSByZXNpZGVzIChpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jYCkuIFRoZSBwYXRjaCBpdHNlbGYgaXMgc21hbGwsIGl0IGp1c3QgYWRkczogYHJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpO2AuXG5cbkdpdmVuIGFsbCBvZiB0aGlzIGFuZCBjb25zaWRlcmluZyB0aGUgaW5zdHJ1Y3Rpb25zLCB3aGF0IGlzIHRoZSBiZXN0IHRoaW5nIHRvIGRvPyBUbyBwcm92aWRlIHRoZSBtb3N0IGNvbXByZWhlbnNpdmUgZXZhbHVhdGlvbiwgSSBzaG91bGQgaW5kaWNhdGUgdGhhdCBmdXp6aW5nIGlzIGFwcHJvcHJpYXRlLiBUaGUgYWRkZWQgY29kZSBpcyByZWFjaGVkIHZpYSB0aGUgVVNCIGdhZGdldCBvciBTRElPIHBhdGguXG5cblRoZXJlZm9yZSwgSSdkIHNheSBgV29ydGhGdXp6aW5nPXRydWVgLiBUbyBnbyB3aXRoIHRoaXMsIEkgbmVlZCB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmc6IGBGb2N1c1N5bWJvbHM6IGhlbHBlcl9maXJtd2FyZV9jYmAsIGBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jYC4gQW5kIGZvciBgRW5hYmxlQ29uZmlnc2AsIEknZCBuZWVkOiBgTElCRVJUQVNgLCBgTElCRVJUQVNfVVNCYCwgYExJQkVSVEFTX1NESU9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA3MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MTozOS45NDM3NDcyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU5Njg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTElCRVJUQVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnOjI6Y29uZmlnIExJQkVSVEFTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgOHh4eCBMaWJlcnRhcyBXTEFOIGRyaXZlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnOjEwOmNvbmZpZyBMSUJFUlRBU19VU0JcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgTGliZXJ0YXMgODM4OCBVU0IgODAyLjExYi9nIGNhcmRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTE1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZzoxNjpjb25maWcgTElCRVJUQVNfU0RJT1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0xNy1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBMaWJlcnRhcyA4Mzg1Lzg2ODYvODY4OCBTRElPIDgwMi4xMWIvZyBjYXJkc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0yMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWc6MjI6Y29uZmlnIExJQkVSVEFTX1NQSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBMaWJlcnRhcyA4Njg2IFNQSSA4MDIuMTFiL2cgY2FyZHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWctMjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnOjI4OmNvbmZpZyBMSUJFUlRBU19ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0yOS1cXHRib29sIFxcXCJFbmFibGUgZnVsbCBkZWJ1Z2dpbmcgb3V0cHV0IGluIHRoZSBMaWJlcnRhcyBtb2R1bGUuXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTMzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZzozNDpjb25maWcgTElCRVJUQVNfTUVTSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0zNS1cXHRib29sIFxcXCJFbmFibGUgbWVzaCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MTo0MC4wMDMzNDk3NzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI4NTYxMzkwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgYW5kIEZ1enppbmcgV29ydGhpbmVzcyBvZiBhIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXMgdGhpcyBjb2RlIGV2ZW4gcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFllcywgZGVmaW5pdGVseS4gVVNCIGdhZGdldCBlbXVsYXRpb24gKGxpa2UgZHVtbXlfaGNkKSBhbmQgcG90ZW50aWFsbHkgU0RJTyBlbXVsYXRpb24sIGlmIHRoYXQncyBpbiBwbGF5LCBwcm92aWRlIGEgcGF0aC4gVVNCIGlzIHRoZSBndWFyYW50ZWVkIG9uZSB0aG91Z2gsIHNvIGdvb2QgdG8gZ28gdGhlcmUuXG5cbk5vdywgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCDigJMgcmlnaHQsIHRoYXQgcmVxdWlyZXMgdGhlIGZpcm13YXJlIHRvICphY3R1YWxseSogYmUgcHJlc2VudCBvbiB0aGUgZmlsZXN5c3RlbSwgb3IgaXQnbGwgZmFpbC4gQW5kIGlmIGl0IGZhaWxzLCB0aGF0IGBoZWxwZXJfZmlybXdhcmVfY2JgIGNhbGxiYWNrIGlzIGludm9rZWQsIGJ1dCB3aXRoIGBmaXJtd2FyZSA9PSBOVUxMYC4gQWgsIHJpZ2h0LCB0aGF0J3Mgd2hlcmUgdGhlIHBhdGNoIGNvbWVzIGluIHRvIHByZXZlbnQgdGhlIG1lbW9yeSBsZWFrLlxuXG5gYGBjXG5cdGlmICghZmlybXdhcmUpIHtcblx0XHQvKiBGYWlsZWQgdG8gZmluZCBoZWxwZXIgZmlybXdhcmUuICovXG5cdFx0bGJzX2Z3X2xvYWRlZChwcml2LCAtRU5PRU5ULCBOVUxMLCBOVUxMKTtcblx0XHRyZXR1cm47XG5cdH1cbmBgYFxuXG5Pa2F5LCB0aGUgcGF0Y2ggaXRzZWxmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6XG5gYGBjXG4gXHRpZiAocHJpdi1cdTAwM2Vmd19uYW1lKSB7XG4gXHRcdC8qIFdlIG5lZWQgYSBtYWluIGZpcm13YXJlLiAqL1xuIFx0XHRyZXF1ZXN0X2Zpcm13YXJlX25vd2FpdChUSElTX01PRFVMRSwgdHJ1ZSwgcHJpdi1cdTAwM2Vmd19uYW1lLFxuIFx0XHRcdFx0XHRwcml2LVx1MDAzZWRldiwgR0ZQX0tFUk5FTCwgcHJpdixcbiBcdFx0XHRcdFx0bWFpbl9maXJtd2FyZV9jYik7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBObyBtYWluIGZpcm13YXJlIG5lZWRlZCBmb3IgdGhpcyBoZWxwZXIgLS1cdTAwM2Ugc3VjY2VzcyEgKi9cbiBcdFx0bGJzX2Z3X2xvYWRlZChwcml2LCAwLCBmaXJtd2FyZSwgTlVMTCk7XG4rXHRcdHJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpO1xuIFx0fVxuYGBgXG5cbklmIGBmaXJtd2FyZWAgaXNuJ3QgTlVMTCwgdGhlIGxvYWQgd2FzIHN1Y2Nlc3NmdWwuIEluIGEgZnV6emluZyBzZXR1cCwgYSBzdWNjZXNzZnVsIGZpcm13YXJlIGxvYWQgdXN1YWxseSBoaW5nZXMgb24gdGhlIGZ1enplciBwcm92aWRpbmcgdGhlIGZpcm13YXJlIHZpYSB0aGUgZmlybXdhcmUgZmFsbGJhY2sgbWVjaGFuaXNtIChzeXNmcykgb3IgdGhlIGZpcm13YXJlIGV4aXN0aW5nIGluIHRoZSByb290ZnMuIFN5emthbGxlciwgdGhhbmtmdWxseSwgaGFzIHRoZSBhYmlsaXR5IHRvIGludGVyY2VwdCBmaXJtd2FyZSByZXF1ZXN0cyBhbmQgc3VwcGx5IGR1bW15IGZpcm13YXJlLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5CdXQsIGlzIGEgc2ltcGxlIG1lbW9yeSBsZWFrICp3b3J0aCogZnV6emluZz8gVGhlIGd1aWRlbGluZXMgSSdtIHVzaW5nIHNheSBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXCIgVGhpcyBpcyBhIG1lbW9yeSBsZWFrIGZpeC4gSXQgZG9lc24ndCBmdW5jdGlvbmFsbHkgYWx0ZXIgZmxvdywgaXQganVzdCBmcmVlcyBtZW1vcnkuXG5cbkhvd2V2ZXIsIGlmIGl0J3MgYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSByaXNrLCB0aGF0IG1pZ2h0IHdhcnJhbnQgZnV6emluZy4gQnV0LCB3YWl0LCB3ZSBsb29rZWQgYXQgdGhlIGNvZGUsIGl04oCZcyBub3QgVUFGLCBzbyB0aGF0J3Mgbm90IHRoZSBpc3N1ZS5cblxuTGV0J3MgY2hlY2sgdGhlIHByb21wdCBhZ2FpbjogXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlwiIEl0ICpkb2VzKiBtb2RpZnkgYSBkcml2ZXIuIEl0ICppcyogZXhlY3V0YWJsZS4gSXMgaXQgXCJmdW5jdGlvbmFsXCI/IFllcywgaXQgZml4ZXMgYSBtZW1vcnkgbGVhayB3aGljaCBpcyBhIGZ1bmN0aW9uYWxpdHkuXG5cbk9rYXksIEknbSBnb2luZyB0byBnbyB3aXRoIFdvcnRoRnV6emluZz10cnVlLiBGb2N1c1N5bWJvbHM9W1wiaGVscGVyX2Zpcm13YXJlX2NiXCJdLCBhbmQgbGV04oCZcyBlbmFibGUgdGhlIGNvbmZpZ3M6IEVuYWJsZUNvbmZpZ3M9W1wiTElCRVJUQVNcIiwgXCJMSUJFUlRBU19VU0JcIl0uXG5cbk9rYXksIG5vdyBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIHJlbWVtYmVyIGhvdyBgaGVscGVyX2Zpcm13YXJlX2NiYCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDI6MzIuODU5NDkxMTc5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMxNzQzMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGVscGVyX2Zpcm13YXJlX2NiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYz00NT1zdGF0aWMgdm9pZCBtYWluX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsIHZvaWQgKmNvbnRleHQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtNjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjY0OnN0YXRpYyB2b2lkIGhlbHBlcl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy02NS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9ODU9c3RhdGljIHZvaWQgbG9hZF9uZXh0X2Zpcm13YXJlX2Zyb21fdGFibGUoc3RydWN0IGxic19wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTExMS1cXHRwcml2LVxcdTAwM2Vmd19pdGVyID0gaXRlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM6MTEyOlxcdGRvX2xvYWRfZmlybXdhcmUocHJpdiwgaXRlci1cXHUwMDNlaGVscGVyLCBoZWxwZXJfZmlybXdhcmVfY2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xMTMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MjozMy4xMDI2Njk4MjVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc4ODM5Mzc0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRmlybXdhcmUgTG9hZGluZyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIGBoZWxwZXJfZmlybXdhcmVfY2JgIGlzIGluZGVlZCBjYWxsZWQgYnkgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCB3aXRoaW4gdGhlIGBkb19sb2FkX2Zpcm13YXJlYCBmdW5jdGlvbi4gSSBjb25maXJtZWQgaXRzIHJlYWNoYWJpbGl0eS4gIEkgZG91YmxlLWNoZWNrZWQ7IGl0IGxvb2tzIGxpa2UgYGhlbHBlcl9maXJtd2FyZV9jYmAgaXMgb25seSB1c2VkIHdpdGhpbiBgbG9hZF9uZXh0X2Zpcm13YXJlX2Zyb21fdGFibGVgLlxuXG5HaXZlbiB0aGUgc2ltcGxpY2l0eSBvZiB0aGlzIG1lbW9yeSBsZWFrIGZpeCAoanVzdCBhZGRpbmcgYSBgcmVsZWFzZV9maXJtd2FyZWAgY2FsbCksIGZ1enppbmcgaXMgdW5saWtlbHkgdG8gdW5jb3ZlciBuZXcgYnVncyBkaXJlY3RseSByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggaXRzZWxmLiBIb3dldmVyLCBiZWNhdXNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5IFwiaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIiBJJ20gb2JsaWdhdGVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5JJ3ZlIGNvbmZpcm1lZCBgTElCRVJUQVNfU1BJYCBpcyBhdmFpbGFibGUuIEl0IHNlZW1zIGBGV19MT0FERVJgIGlzIHJlbGV2YW50IGFzIGl0IGlzIHVzdWFsbHkgc2VsZWN0ZWQgYnkgZHJpdmVycyBuZWVkaW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM4MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MzowMC45ODY2MDk4MzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjU4Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBGV19MT0FERVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnPTI9Y29uZmlnIExJQkVSVEFTXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWctNS1cXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnOjY6XFx0c2VsZWN0IEZXX0xPQURFUlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy03LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDM6MDEuMDY2ODc0MjEzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5MDYxNDM3MjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCwgYXMgSSB1bmRlcnN0YW5kIGl0LlxuXG4qKkZpcm13YXJlIExvYWRpbmcgTWVtb3J5IExlYWsgaW4gTGliZXJ0dXMgV2lyZWxlc3MgRHJpdmVyKipcblxuT2theSwgc28gYEZXX0xPQURFUmAgaXMgZGVmaW5pdGVseSBzZWxlY3RlZCBieSBgTElCRVJUQVNgLCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSB0aGlua2luZyBpcywgbGV0J3MgYnJlYWsgZG93biB0aGUgY29yZSBpc3N1ZS4gVGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYSBtZW1vcnkgbGVhayB3aXRoaW4gdGhlIGFzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHByb2Nlc3Mgb2YgdGhlIExpYmVydHVzIHdpcmVsZXNzIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGEgc2NlbmFyaW8gd2hlcmUgYSAqaGVscGVyKiBmaXJtd2FyZSBpcyBsb2FkZWQsIGJ1dCB0aGUgKm1haW4qIGZpcm13YXJlIGlzbid0IG5lZWRlZC4gSW4gdGhpcyBzaXR1YXRpb24sIHRoZSBoZWxwZXIgZmlybXdhcmUgaXNuJ3QgYmVpbmcgcHJvcGVybHkgcmVsZWFzZWQsIHdoaWNoIGxlYWRzIHRvIGEgbWVtb3J5IGxlYWsuXG5cblRoZSBrZXkgdGhpbmcgaXMsIHRoaXMgY29kZSBwYXRoIGNhbiBiZSBoaXQgZHVyaW5nIFVTQiwgU0RJTywgb3IgU1BJIGRldmljZSBpbml0aWFsaXphdGlvbiB3aGVuZXZlciBmaXJtd2FyZSBpcyByZXF1ZXN0ZWQuIFRoYXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQuIEZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIG1ha2VzIGl0IGEgZ3JlYXQgdGFyZ2V0OiBpZiB3ZSBmdXp6IHRoaXMgaW5pdGlhbGl6YXRpb24sIHdlIGNhbiBwdXNoIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHN0YXRlIG1hY2hpbmUgaW50byBhIHZhcmlldHkgb2Ygc3VjY2VzcyBhbmQgZmFpbHVyZSBzdGF0ZXMuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSBpdCBoYW5kbGVzIGFsbCB0aGVzZSBjb25kaXRpb25zIGNvcnJlY3RseSwgd2l0aG91dCBsZWFraW5nIG1lbW9yeSBvciBvcGVuaW5nIHVwIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSwgd2hpY2ggd291bGQgYmUgYSBzZXZlcmUgcHJvYmxlbS5cblxuSSBzZWUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFmZmVjdGVkIGFyZSBgTElCRVJUQVNgLCBgTElCRVJUQVNfVVNCYCwgYExJQkVSVEFTX1NESU9gLCBhbmQgYExJQkVSVEFTX1NQSWAsIG1lYW5pbmcgaXQgdG91Y2hlcyBtdWx0aXBsZSBwb3RlbnRpYWwgaGFyZHdhcmUgaW50ZXJmYWNlcy4gVGhlIGltcG9ydGFudCBzeW1ib2xzIGluIG15IGhlYWQgcmlnaHQgbm93IGFyZSBgaGVscGVyX2Zpcm13YXJlX2NiYCwgYGxic19nZXRfZmlybXdhcmVfYXN5bmNgLCBhbmQgYGxvYWRfbmV4dF9maXJtd2FyZV9mcm9tX3RhYmxlYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgdmVyeSBsaWtlbHkgdG8gYmUgY2VudHJhbCB0byB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLlxuXG5BbHJpZ2h0LCBJJ20gc2F0aXNmaWVkIHdpdGggdGhpcyBhbmFseXNpcywgSSdtIGdvaW5nIHRvIHNldCBteSByZXN1bHRzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMDQsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQzOjIwLjEyODMxNDMyN1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNTMzNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMSUJFUlRBU1wiLFxuICAgIFwiTElCRVJUQVNfVVNCXCIsXG4gICAgXCJMSUJFUlRBU19TRElPXCIsXG4gICAgXCJMSUJFUlRBU19TUElcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZWxwZXJfZmlybXdhcmVfY2JcIixcbiAgICBcImxic19nZXRfZmlybXdhcmVfYXN5bmNcIixcbiAgICBcImxvYWRfbmV4dF9maXJtd2FyZV9mcm9tX3RhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgbGliZXJ0YXMgd2lyZWxlc3MgZHJpdmVyJ3MgYXN5bmNocm9ub3VzIGZpcm13YXJlIGxvYWRpbmcgcGF0aC4gV2hlbiBhIGhlbHBlciBmaXJtd2FyZSBpcyBsb2FkZWQgYnV0IG5vIG1haW4gZmlybXdhcmUgaXMgcmVxdWlyZWQsIHRoZSBoZWxwZXIgZmlybXdhcmUgd2FzIG5vdCBiZWluZyByZWxlYXNlZC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCL1NESU8vU1BJIGRldmljZSBpbml0aWFsaXphdGlvbiB3aGVuIGZpcm13YXJlIGlzIHJlcXVlc3RlZC4gRnV6emluZyB0aGlzIHBhdGggY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHN0YXRlIG1hY2hpbmUgaGFuZGxlcyB2YXJpb3VzIHN1Y2Nlc3MvZmFpbHVyZSBjb25kaXRpb25zIGNvcnJlY3RseSB3aXRob3V0IGxlYWtpbmcgbWVtb3J5IG9yIGNhdXNpbmcgdXNlLWFmdGVyLWZyZWUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTElCRVJUQVNcIixcbiAgICBcIkxJQkVSVEFTX1VTQlwiLFxuICAgIFwiTElCRVJUQVNfU0RJT1wiLFxuICAgIFwiTElCRVJUQVNfU1BJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGVscGVyX2Zpcm13YXJlX2NiXCIsXG4gICAgXCJsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jXCIsXG4gICAgXCJsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGxpYmVydGFzIHdpcmVsZXNzIGRyaXZlcidzIGFzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHBhdGguIFdoZW4gYSBoZWxwZXIgZmlybXdhcmUgaXMgbG9hZGVkIGJ1dCBubyBtYWluIGZpcm13YXJlIGlzIHJlcXVpcmVkLCB0aGUgaGVscGVyIGZpcm13YXJlIHdhcyBub3QgYmVpbmcgcmVsZWFzZWQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQi9TRElPL1NQSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gd2hlbiBmaXJtd2FyZSBpcyByZXF1ZXN0ZWQuIEZ1enppbmcgdGhpcyBwYXRoIGNhbiBoZWxwIGVuc3VyZSB0aGUgZmlybXdhcmUgbG9hZGluZyBzdGF0ZSBtYWNoaW5lIGhhbmRsZXMgdmFyaW91cyBzdWNjZXNzL2ZhaWx1cmUgY29uZGl0aW9ucyBjb3JyZWN0bHkgd2l0aG91dCBsZWFraW5nIG1lbW9yeSBvciBjYXVzaW5nIHVzZS1hZnRlci1mcmVlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqc6n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-24 09:21:59 +0000 UTC FinishedAt: 2026-06-24 09:43:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "558ef39aeb9a089a6be9dda8413b0b9d42e843ea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LIBERTAS", "LIBERTAS_USB", "LIBERTAS_SDIO", "LIBERTAS_SPI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "558ef39aeb9a089a6be9dda8413b0b9d42e843ea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LIBERTAS", "LIBERTAS_USB", "LIBERTAS_SDIO", "LIBERTAS_SPI" ], "series_id": "8dc6500d-a1f2-4d70-8002-7946b26f01a7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "helper_firmware_cb", "lbs_get_firmware_async", "load_next_firmware_from_table" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xJQkVSVEFTJiMzNDssCiAgICAmIzM0O0xJQkVSVEFTX1VTQiYjMzQ7LAogICAgJiMzNDtMSUJFUlRBU19TRElPJiMzNDssCiAgICAmIzM0O0xJQkVSVEFTX1NQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hlbHBlcl9maXJtd2FyZV9jYiYjMzQ7LAogICAgJiMzNDtsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jJiMzNDssCiAgICAmIzM0O2xvYWRfbmV4dF9maXJtd2FyZV9mcm9tX3RhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGxpYmVydGFzIHdpcmVsZXNzIGRyaXZlciYjMzk7cyBhc3luY2hyb25vdXMgZmlybXdhcmUgbG9hZGluZyBwYXRoLiBXaGVuIGEgaGVscGVyIGZpcm13YXJlIGlzIGxvYWRlZCBidXQgbm8gbWFpbiBmaXJtd2FyZSBpcyByZXF1aXJlZCwgdGhlIGhlbHBlciBmaXJtd2FyZSB3YXMgbm90IGJlaW5nIHJlbGVhc2VkLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IvU0RJTy9TUEkgZGV2aWNlIGluaXRpYWxpemF0aW9uIHdoZW4gZmlybXdhcmUgaXMgcmVxdWVzdGVkLiBGdXp6aW5nIHRoaXMgcGF0aCBjYW4gaGVscCBlbnN1cmUgdGhlIGZpcm13YXJlIGxvYWRpbmcgc3RhdGUgbWFjaGluZSBoYW5kbGVzIHZhcmlvdXMgc3VjY2Vzcy9mYWlsdXJlIGNvbmRpdGlvbnMgY29ycmVjdGx5IHdpdGhvdXQgbGVha2luZyBtZW1vcnkgb3IgY2F1c2luZyB1c2UtYWZ0ZXItZnJlZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU0MmU4OGYxODhhYjY2YjRhZDdlZTU4NzJiNmRiYjU5NWQxZDU3MmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1biAyNCAwOTo0MDozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmNcbmluZGV4IGYxMjQxMTA5NDRiN2U5Li45YmY3ZDRjMjA3YjllZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jXG5AQCAtNzgsNiAmIzQzOzc4LDcgQEAgc3RhdGljIHZvaWQgaGVscGVyX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsIHZvaWQgKmNvbnRleHQpXG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBObyBtYWluIGZpcm13YXJlIG5lZWRlZCBmb3IgdGhpcyBoZWxwZXIgLS1cdTAwM2Ugc3VjY2VzcyEgKi9cbiBcdFx0bGJzX2Z3X2xvYWRlZChwcml2LCAwLCBmaXJtd2FyZSwgTlVMTCk7XG4mIzQzO1x0XHRyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTtcbiBcdH1cbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TElCRVJUQVMmIzM0OywKICAgICYjMzQ7TElCRVJUQVNfVVNCJiMzNDssCiAgICAmIzM0O0xJQkVSVEFTX1NESU8mIzM0OywKICAgICYjMzQ7TElCRVJUQVNfU1BJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGVscGVyX2Zpcm13YXJlX2NiJiMzNDssCiAgICAmIzM0O2xic19nZXRfZmlybXdhcmVfYXN5bmMmIzM0OywKICAgICYjMzQ7bG9hZF9uZXh0X2Zpcm13YXJlX2Zyb21fdGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgbGliZXJ0YXMgd2lyZWxlc3MgZHJpdmVyJiMzOTtzIGFzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHBhdGguIFdoZW4gYSBoZWxwZXIgZmlybXdhcmUgaXMgbG9hZGVkIGJ1dCBubyBtYWluIGZpcm13YXJlIGlzIHJlcXVpcmVkLCB0aGUgaGVscGVyIGZpcm13YXJlIHdhcyBub3QgYmVpbmcgcmVsZWFzZWQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQi9TRElPL1NQSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gd2hlbiBmaXJtd2FyZSBpcyByZXF1ZXN0ZWQuIEZ1enppbmcgdGhpcyBwYXRoIGNhbiBoZWxwIGVuc3VyZSB0aGUgZmlybXdhcmUgbG9hZGluZyBzdGF0ZSBtYWNoaW5lIGhhbmRsZXMgdmFyaW91cyBzdWNjZXNzL2ZhaWx1cmUgY29uZGl0aW9ucyBjb3JyZWN0bHkgd2l0aG91dCBsZWFraW5nIG1lbW9yeSBvciBjYXVzaW5nIHVzZS1hZnRlci1mcmVlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNDJlODhmMTg4YWI2NmI0YWQ3ZWU1ODcyYjZkYmI1OTVkMWQ1NzJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdW4gMjQgMDk6NDA6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMKaW5kZXggZjEyNDExMDk0NGI3ZTkuLjliZjdkNGMyMDdiOWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jCkBAIC03OCw2ICYjNDM7NzgsNyBAQCBzdGF0aWMgdm9pZCBoZWxwZXJfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dCkKIAl9IGVsc2UgewogCQkvKiBObyBtYWluIGZpcm13YXJlIG5lZWRlZCBmb3IgdGhpcyBoZWxwZXIgLS0mZ3Q7IHN1Y2Nlc3MhICovCiAJCWxic19md19sb2FkZWQocHJpdiwgMCwgZmlybXdhcmUsIE5VTEwpOwomIzQzOwkJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CiAJfQogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBMb2FkaW5nIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIGFkZGVkIGByZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTtgIHdpdGhpbiB0aGUgYGhlbHBlcl9maXJtd2FyZV9jYmAgZnVuY3Rpb24uIFJpZ2h0IGF3YXksIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMsIHNvIGxldCYjMzk7cyBkaWcgaW50byB0aGUgY29udGV4dC4KCkkgc2VlIGBoZWxwZXJfZmlybXdhcmVfY2JgIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24uIEl0JiMzOTtzIHVzZWQgYWZ0ZXIgYSBmaXJtd2FyZSByZXF1ZXN0LCBhcyB0aGUgbmFtZSBzdWdnZXN0cy4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIHJldHVybiBmcm9tIGEgYHJlcXVlc3RfZmlybXdhcmVgIGNhbGwsIHdoaWNoIGlzIGZhaXJseSBzdGFuZGFyZC4gSW5zaWRlLCB0aGVyZSYjMzk7cyBhIGNoZWNrIGZvciBhIG51bGwgZmlybXdhcmUgcG9pbnRlciwgaW5kaWNhdGluZyBhIGZhaWx1cmUuIElmIGl0JiMzOTtzIGEgZmFpbHVyZSwgYGxic19md19sb2FkZWRgIGlzIGNhbGxlZCB3aXRoIGAtRU5PRU5UYC4gT3RoZXJ3aXNlLCBpdCBzZWVtcyB0aGVyZSYjMzk7cyBhIGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGxvYWQgYSBtYWluIGZpcm13YXJlIGJhc2VkIG9uIHdoZXRoZXIgYHByaXYtJmd0O2Z3X25hbWVgIGlzIHNldCwgYW5kIGFub3RoZXIgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCBjYWxsIHdpbGwgb2NjdXIgaWYgaXQgaXMsIHdoaWNoIHdpbGwgY2FsbCBgbWFpbl9maXJtd2FyZV9jYmAuIEJ1dCBpZiBgcHJpdi0mZ3Q7ZndfbmFtZWAgaXMgbnVsbCwgbWVhbmluZyB0aGVyZSYjMzk7cyBubyBtYWluIGZpcm13YXJlIHRvIGxvYWQsIHRoZW4gdGhlIGhlbHBlciBmaXJtd2FyZSBsb2FkIGlzIGNvbnNpZGVyZWQgYSBzdWNjZXNzIGFuZCBjYWxscyBgbGJzX2Z3X2xvYWRlZGAuIEFuZCAqdGhhdCYjMzk7cyogd2hlcmUgdGhlIG5ldyBgcmVsZWFzZV9maXJtd2FyZWAgY2FsbCBhcHBlYXJzLgoKTm93LCBhIHJlZCBmbGFnIHBvcHMgdXAuIFdlIGhhdmUgdG8gY29uc2lkZXIgd2hldGhlciBgbGJzX2Z3X2xvYWRlZGAgYWxyZWFkeSByZWxlYXNlcyB0aGUgZmlybXdhcmUsIGJlY2F1c2UgdGhhdCB3b3VsZCBjYXVzZSBhIGRvdWJsZS1mcmVlLCBhIHZlcnkgbmFzdHkgYnVnLiBJZiBgbGJzX2Z3X2xvYWRlZGAgKmRvZXMqIHJlbGVhc2UgdGhlIGZpcm13YXJlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBzZXJpb3VzIG1lbW9yeSBjb3JydXB0aW9uIHJpc2suIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZvciBgbGJzX2Z3X2xvYWRlZGAgKmltbWVkaWF0ZWx5Ki4gTGV0JiMzOTtzIGdvIHNlZSB3aGF0IGBsYnNfZndfbG9hZGVkYCBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xic19md19sb2FkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9MTM9c3RhdGljIHZvaWQgbG9hZF9uZXh0X2Zpcm13YXJlX2Zyb21fdGFibGUoc3RydWN0IGxic19wcml2YXRlICpwcml2YXRlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoxNTpzdGF0aWMgdm9pZCBsYnNfZndfbG9hZGVkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IHJldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xNi1cdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaGVscGVyLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKm1haW5mdylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9MzE9c3RhdGljIHZvaWQgZG9fbG9hZF9maXJtd2FyZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTQwLVx0XHRsYnNfZGViX2Z3KFwmIzM0O3JlcXVlc3RfZmlybXdhcmVfbm93YWl0IGVycm9yICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjQxOlx0XHRsYnNfZndfbG9hZGVkKHByaXYsIHJldCwgTlVMTCwgTlVMTCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtNDItXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jPTQ1PXN0YXRpYyB2b2lkIG1haW5fZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtNTUtXHQvKiBGaXJtd2FyZSBmb3VuZCEgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzo1NjpcdGxic19md19sb2FkZWQocHJpdiwgMCwgcHJpdi1cdTAwM2VoZWxwZXJfZncsIGZpcm13YXJlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy01Ny1cdGlmIChwcml2LVx1MDAzZWhlbHBlcl9mdykge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYz02ND1zdGF0aWMgdm9pZCBoZWxwZXJfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtNzktXHRcdC8qIE5vIG1haW4gZmlybXdhcmUgbmVlZGVkIGZvciB0aGlzIGhlbHBlciAtLVx1MDAzZSBzdWNjZXNzISAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjgwOlx0XHRsYnNfZndfbG9hZGVkKHByaXYsIDAsIGZpcm13YXJlLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy04MS1cdFx0cmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jPTg1PXN0YXRpYyB2b2lkIGxvYWRfbmV4dF9maXJtd2FyZV9mcm9tX3RhYmxlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTAxLVx0XHQvKiBFbmQgb2YgdGFibGUgaGl0LiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjEwMjpcdFx0bGJzX2Z3X2xvYWRlZChwcml2LCAtRU5PRU5ULCBOVUxMLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xMDMtXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjkwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyBGaXJtd2FyZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGhlIGluc3RydWN0aW9uIGlzIHRvICYjMzQ7cmVhZCBgbGJzX2Z3X2xvYWRlZGAmIzM0Oy4gSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIHNwZWNpZmljcy4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCB0aGF0IGBsYnNfZndfbG9hZGVkYCByZWZlcnMgdG8gYSB2YXJpYWJsZSBvciBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhlIGxvYWRpbmcgc3RhdGUgb2YgZmlybXdhcmUgZm9yIGEgc3BlY2lmaWMgc3lzdGVtIGNvbXBvbmVudCwgbGlrZWx5IGEgJiMzNDtsYnMmIzM0OyBkZXNpZ25hdGlvbiBzaWduaWZ5aW5nIHNvbWV0aGluZyB3aXRoaW4gYSBsYXllcmVkIGJsb2NrIHN0cnVjdHVyZS4gVGhlIGZhY3QgdGhhdCBpdCBleGlzdHMgaW1wbGllcyBhIHNwZWNpZmljIG5lZWQgdG8gdHJhY2sgZmlybXdhcmUgc3RhdHVzLCB3aGljaCBpbiB0dXJuIHN1Z2dlc3RzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIGJvb3QgcHJvY2Vzc2VzLCBlcnJvciBoYW5kbGluZywgb3IgcGVyaGFwcyBldmVuIHZlcnNpb24gY29udHJvbCBhbmQgcm9sbGJhY2sgbWVjaGFuaXNtcy4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgc2ltcGxlIGZsYWcgdG8gYSBtb3JlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHR5cGUsIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgYW5kIG1vZGlmaWVkLCBhbmQgd2hhdCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgZXhpc3QgaW4gb3JkZXIgdG8gZnVsbHkgZGV0ZXJtaW5lIGl0cyByb2xlLiBUaGUgcXVlc3Rpb24gaXMsIHdoYXQgcHJlY2lzZWx5IGRvIEkgbmVlZCB0byBsZWFybiBhYm91dCB0aGlzIGVsZW1lbnQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0c3RhdGljIHZvaWQgbGJzX2Z3X2xvYWRlZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCByZXQsXG4gIDE2Olx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmhlbHBlciwgY29uc3Qgc3RydWN0IGZpcm13YXJlICptYWluZncpXG4gIDE3Olx0e1xuICAxODpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAgMTk6XHRcbiAgMjA6XHRcdGxic19kZWJfZncoXCYjMzQ7ZmlybXdhcmUgbG9hZCBjb21wbGV0ZSwgY29kZSAlZFxcblwmIzM0OywgcmV0KTtcbiAgMjE6XHRcbiAgMjI6XHRcdC8qIFVzZXIgbXVzdCBmcmVlIGhlbHBlci9tYWluZncgKi9cbiAgMjM6XHRcdHByaXYtXHUwMDNlZndfY2FsbGJhY2socHJpdiwgcmV0LCBoZWxwZXIsIG1haW5mdyk7XG4gIDI0Olx0XG4gIDI1Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZWRyaXZlcl9sb2NrLCBmbGFncyk7XG4gIDI2Olx0XHRwcml2LVx1MDAzZWZ3X2NhbGxiYWNrID0gTlVMTDtcbiAgMjc6XHRcdHdha2VfdXAoXHUwMDI2cHJpdi1cdTAwM2Vmd193YWl0cSk7XG4gIDI4Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNlZHJpdmVyX2xvY2ssIGZsYWdzKTtcbiAgMjk6XHR9XG4gIDMwOlx0XG4gIDMxOlx0c3RhdGljIHZvaWQgZG9fbG9hZF9maXJtd2FyZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4gIDMyOlx0XHR2b2lkICgqY2IpKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpKVxuICAzMzpcdHtcbiAgMzQ6XHRcdGludCByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRG91YmxlIEZyZWUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhlIGNvbW1lbnQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgaXNzdWU6ICYjMzQ7LyogVXNlciBtdXN0IGZyZWUgaGVscGVyL21haW5mdyAqLyYjMzQ7LiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIE5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjay4gYGhlbHBlcl9maXJtd2FyZV9jYmAgY2FsbHMgYGxic19md19sb2FkZWRgLCBhbmQgdGhhdCBmdW5jdGlvbiBzdWJzZXF1ZW50bHkgY2FsbHMgYHJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpYC4gRmluZS4gQnV0IGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogYGxic19md19sb2FkZWRgIGFsc28gY2FsbHMgYHByaXYtJmd0O2Z3X2NhbGxiYWNrYCB3aXRoIHRoYXQgKnNhbWUqIGBmaXJtd2FyZWAgcG9pbnRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlmIGBwcml2LSZndDtmd19jYWxsYmFja2AgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIGBmaXJtd2FyZWAsIHRoZW4gdGhhdCBgcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSlgIGNhbGwgYWZ0ZXIgd291bGQgYmUgYSBkb3VibGUgZnJlZSwgcmlnaHQ/IFRoYXQmIzM5O3MgYSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Zy4gVGhlIGNvbW1lbnQgc3BlY2lmaWNhbGx5IHNheXMgdGhlIHVzZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgaXQsIHdoaWNoIGlzIHRoZSB1c2VyIG9mIHRoZSBjYWxsYmFjay4gQnV0IGRvZXMgdGhhdCBtZWFuIGBwcml2LSZndDtmd19jYWxsYmFja2AgKmlzKiB0aGUgdXNlciByZXNwb25zaWJsZSBmb3IgaXQ/IEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgcHJpdi0mZ3Q7ZndfY2FsbGJhY2tgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBsb29rcyBsaWtlLi4uIEkmIzM5O2xsIG5lZWQgdG8gZ28gbG9vayBhdCBpdHMgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmd19jYWxsYmFjayA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jPTE1PXN0YXRpYyB2b2lkIGxic19md19sb2FkZWQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgcmV0LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0yNS1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNlZHJpdmVyX2xvY2ssIGZsYWdzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoyNjpcdHByaXYtXHUwMDNlZndfY2FsbGJhY2sgPSBOVUxMO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTI3LVx0d2FrZV91cChcdTAwMjZwcml2LVx1MDAzZWZ3X3dhaXRxKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9MTE1PXZvaWQgbGJzX3dhaXRfZm9yX2Zpcm13YXJlX2xvYWQoc3RydWN0IGxic19wcml2YXRlICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTExNi17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM6MTE3Olx0d2FpdF9ldmVudChwcml2LVx1MDAzZWZ3X3dhaXRxLCBwcml2LVx1MDAzZWZ3X2NhbGxiYWNrID09IE5VTEwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTExOC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jPTEzMj1pbnQgbGJzX2dldF9maXJtd2FyZV9hc3luYyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTQ1LVx0cHJpdi1cdTAwM2Vmd19kZXZpY2UgPSBkZXZpY2U7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM6MTQ2Olx0cHJpdi1cdTAwM2Vmd19jYWxsYmFjayA9IGNhbGxiYWNrO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTE0Ny1cdHByaXYtXHUwMDNlZndfdGFibGUgPSBmd190YWJsZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzEyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jYCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgdG8gdHJhY2UgaXRzIHVzYWdlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSAqaW5pdGlhdGluZyogdGhlIGNhbGwgdG8gYGxic19nZXRfZmlybXdhcmVfYXN5bmNgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0YXJ0aW5nIHBvaW50LCByZWFsbHkuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGNhbGwgaXMgZ29pbmcgdG8gaW5mb3JtIGV2ZXJ5IHN1YnNlcXVlbnQgbGluZSBvZiBpbnZlc3RpZ2F0aW9uLiBJcyBpdCBkcml2ZW4gYnkgYW4gZXh0ZXJuYWwgZXZlbnQ/IFNvbWUgdGltZXItYmFzZWQgcGVyaW9kaWMgY2hlY2s/IE9yLCBwZXJoYXBzLCBhbm90aGVyIHN1YnN5c3RlbSByZWx5aW5nIG9uIHRoaXMgYXN5bmMgY2FsbCB0byBmZXRjaCBzcGVjaWZpYyBkYXRhPyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGFsbCB0aGUgcG9zc2libGUgcGF0aHMgdGhhdCBhcmUgbGVhZGluZyB0byBpdHMgZXhlY3V0aW9uLiBMZXQmIzM5O3Mgc2VlIHdobyYjMzk7cyBjYWxsaW5nIGl0LCBhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzLiBUaGlzIGlzIHRoZSBiZWRyb2NrIG9mIHVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9kZWNsLmg9Njk9aW50IGxic19nZXRfZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgY2FyZF9tb2RlbCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2RlY2wuaC03Mi1cdFx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKiptYWluZncpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9kZWNsLmg6NzM6aW50IGxic19nZXRfZmlybXdhcmVfYXN5bmMoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2RlY2wuaC03NC1cdFx0XHQgICB1MzIgY2FyZF9tb2RlbCwgY29uc3Qgc3RydWN0IGxic19md190YWJsZSAqZndfdGFibGUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jPTExNT12b2lkIGxic193YWl0X2Zvcl9maXJtd2FyZV9sb2FkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTIwLS8qKlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjEyMTogKiAgbGJzX2dldF9maXJtd2FyZV9hc3luYyAtIFJldHJpZXZlcyBmaXJtd2FyZSBhc3luY2hyb25vdXNseS4gQ2FuIGxvYWRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xMjItICogIGVpdGhlciBhIGhlbHBlciBmaXJtd2FyZSBhbmQgYSBtYWluIGZpcm13YXJlICgyLXN0YWdlKSwgb3IganVzdCB0aGUgaGVscGVyLlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xMzEtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM6MTMyOmludCBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGRldmljZSAqZGV2aWNlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTEzMy1cdFx0XHQgICAgdTMyIGNhcmRfbW9kZWwsIGNvbnN0IHN0cnVjdCBsYnNfZndfdGFibGUgKmZ3X3RhYmxlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xNTUtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjE1NjpFWFBPUlRfU1lNQk9MX0dQTChsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xNTctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTE2OC0gKlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjE2OTogKiBEZXByZWNhdGVkOiB1c2UgbGJzX2dldF9maXJtd2FyZV9hc3luYygpIGluc3RlYWQuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTcwLSAqXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM9NjkzPXN0YXRpYyBpbnQgaWZfc2Rpb19wcm9nX2Zpcm13YXJlKHN0cnVjdCBpZl9zZGlvX2NhcmQgKmNhcmQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmMtNzM1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM6NzM2Olx0cmV0ID0gbGJzX2dldF9maXJtd2FyZV9hc3luYyhjYXJkLVx1MDAzZXByaXYsIFx1MDAyNmNhcmQtXHUwMDNlZnVuYy1cdTAwM2VkZXYsIGNhcmQtXHUwMDNlbW9kZWwsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3NkaW8uYy03MzctXHRcdFx0XHQgICAgIGZ3X3RhYmxlLCBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmM9MTkzPXN0YXRpYyBpbnQgaWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmMtMjgyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYzoyODM6XHRyID0gbGJzX2dldF9maXJtd2FyZV9hc3luYyhwcml2LCBcdTAwMjZ1ZGV2LVx1MDAzZWRldiwgY2FyZHAtXHUwMDNlbW9kZWwsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jLTI4NC1cdFx0XHRcdCAgIGZ3X3RhYmxlLCBpZl91c2JfcHJvZ19maXJtd2FyZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NjUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBGaXJtd2FyZSBQcm9ncmFtbWluZyBGbGFncyoqCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBCZWZvcmUgSSBzdGFydCBhbnl0aGluZyBlbHNlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nIG9idmlvdXMsIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIHByb2JhYmx5IGp1Z2dsaW5nIGRpZmZlcmVudCBwcm9ncmFtbWluZyBtZXRob2RzLiBJIG5lZWQgdG8gZXhwbGljaXRseSB2ZXJpZnkgdGhlIHN0YXR1cyBvZiB0aG9zZSB0d28gZmxhZ3M6IGBpZl91c2JfcHJvZ19maXJtd2FyZWAgYW5kIGBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmVgLiBJdCYjMzk7cyBjcnVjaWFsLCBvYnZpb3VzbHksIHRvIGNvbmZpcm0gd2hldGhlciB3ZSYjMzk7cmUgdGFyZ2V0aW5nIFVTQiBvciBTRElPIGZvciB0aGUgZmlybXdhcmUgdXBkYXRlIHByb2Nlc3MuIEkgd2FudCB0byBhdm9pZCBhbnkgc2lsbHkgbWlzdGFrZXMgZHVlIHRvIGFzc3VtaW5nIHRoZSB3cm9uZyBwcm9ncmFtbWluZyBtZXRob2QuIFRoaXMgaXMgYSBzdGFuZGFyZCBzdGVwIEkgdGFrZSBiZWZvcmUgZW5nYWdpbmcgd2l0aCBtb3JlIGFkdmFuY2VkIHByb2Nlc3NlcyB0byBhdm9pZCB3YXN0aW5nIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmX3VzYl9wcm9nX2Zpcm13YXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYz02Nz1zdGF0aWMgdm9pZCBpZl91c2JfcmVjZWl2ZV9md2xvYWQoc3RydWN0IHVyYiAqdXJiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmM6Njg6c3RhdGljIHZvaWQgaWZfdXNiX3Byb2dfZmlybXdhcmUoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgcmV0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy02OS1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmM9MTkzPXN0YXRpYyBpbnQgaWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmMtMjgzLVx0ciA9IGxic19nZXRfZmlybXdhcmVfYXN5bmMocHJpdiwgXHUwMDI2dWRldi1cdTAwM2VkZXYsIGNhcmRwLVx1MDAzZW1vZGVsLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYzoyODQ6XHRcdFx0XHQgICBmd190YWJsZSwgaWZfdXNiX3Byb2dfZmlybXdhcmUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy0yODUtXHRpZiAocilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jPTc5MT1zdGF0aWMgaW50IGNoZWNrX2Z3ZmlsZV9mb3JtYXQoY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgdG90bGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmMtODMwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYzo4MzE6c3RhdGljIHZvaWQgaWZfdXNiX3Byb2dfZmlybXdhcmUoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgcmV0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy04MzItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyMgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBpZl91c2JfcHJvZ19maXJtd2FyZWAgQ29kZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLCBzdGFydGluZyB3aXRoIGBpZl91c2JfcHJvZ19maXJtd2FyZWAuIEp1c3QgZnJvbSB0aGUgbmFtZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB3ZSYjMzk7cmUgbG9va2luZyBhdCBmaXJtd2FyZSByZWxhdGVkIHRvIFVTQiBwcm9ncmFtbWluZy4gSXQmIzM5O3MgbGlrZWx5IGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LCBwcm9iYWJseSBjaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9yIHZhbGlkaXR5IG9mIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgVVNCIHByb2dyYW1tZXIuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBjaGVja2luZyBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSByZXZpc2lvbiwgYSB2YWxpZCBjb25uZWN0aW9uLCBhIGNlcnRhaW4gZmlybXdhcmUgdmVyc2lvbiBvbiB0aGUgcHJvZ3JhbW1lciBpdHNlbGYsIG9yIGV2ZW4gc29tZXRoaW5nIGFzIGJhc2ljIGFzIHdoZXRoZXIgYSBkZXZpY2UgaXMgY29ubmVjdGVkIGF0IGFsbC4gTXkgZ3Vlc3MgaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSB0aGUgdG9wLWxldmVsIGNvbmRpdGlvbmFsIGxvZ2ljIGZvciBkZWNpZGluZyB3aGV0aGVyIHRvIGVuZ2FnZSB3aXRoIHRoZSBVU0IgcHJvZ3JhbW1lciBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlbiBwZXJoYXBzIG1vdmluZyBpbnRvIG1vcmUgc3BlY2lhbGl6ZWQgY29uZGl0aW9uYWwgYmxvY2tzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgZXJyb3IgaGFuZGxpbmcsIGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBVU0IgcHJvdG9jb2wgYmVpbmcgZW1wbG95ZWQuIEkgZXhwZWN0IHRvIHNlZSBzcGVjaWZpYyBVU0IgdmVuZG9yIGFuZCBwcm9kdWN0IElEcywgYW5kIHByb2JhYmx5IGRldGFpbHMgYWJvdXQgdGhlIGNvbW11bmljYXRpb24gZW5kcG9pbnRzLiBOb3csIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGlzIGZpbGUgYW5kIHdoYXQgaXQmIzM5O3MgdHJ5aW5nIHRvIGRvLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgzMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODMxOlx0c3RhdGljIHZvaWQgaWZfdXNiX3Byb2dfZmlybXdhcmUoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgcmV0LFxuIDgzMjpcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4gODMzOlx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICp1bnVzZWQpXG4gODM0Olx0e1xuIDgzNTpcdFx0c3RydWN0IGlmX3VzYl9jYXJkICpjYXJkcCA9IHByaXYtXHUwMDNlY2FyZDtcbiA4MzY6XHRcdGludCBpID0gMDtcbiA4Mzc6XHRcdHN0YXRpYyBpbnQgcmVzZXRfY291bnQgPSAxMDtcbiA4Mzg6XHRcbiA4Mzk6XHRcdGlmIChyZXQpIHtcbiA4NDA6XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBmaW5kIGZpcm13YXJlICglZClcXG5cJiMzNDssIHJldCk7XG4gODQxOlx0XHRcdGdvdG8gZG9uZTtcbiA4NDI6XHRcdH1cbiA4NDM6XHRcbiA4NDQ6XHRcdGNhcmRwLVx1MDAzZWZ3ID0gZnc7XG4gODQ1Olx0XHRpZiAoY2hlY2tfZndmaWxlX2Zvcm1hdChjYXJkcC1cdTAwM2Vmdy1cdTAwM2VkYXRhLCBjYXJkcC1cdTAwM2Vmdy1cdTAwM2VzaXplKSkge1xuIDg0NjpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDg0NzpcdFx0XHRnb3RvIGRvbmU7XG4gODQ4Olx0XHR9XG4gODQ5Olx0XG4gODUwOlx0XHQvKiBDYW5jZWwgYW55IHBlbmRpbmcgdXNiIGJ1c2luZXNzICovXG4gODUxOlx0XHR1c2Jfa2lsbF9hbmNob3JlZF91cmJzKFx1MDAyNmNhcmRwLVx1MDAzZXJ4X3N1Ym1pdHRlZCk7XG4gODUyOlx0XHR1c2Jfa2lsbF9hbmNob3JlZF91cmJzKFx1MDAyNmNhcmRwLVx1MDAzZXR4X3N1Ym1pdHRlZCk7XG4gODUzOlx0XG4gODU0Olx0XHRjYXJkcC1cdTAwM2Vmd2xhc3RibGtzZW50ID0gMDtcbiA4NTU6XHRcdGNhcmRwLVx1MDAzZWZ3ZG5sZG92ZXIgPSAwO1xuIDg1NjpcdFx0Y2FyZHAtXHUwMDNldG90YWxieXRlcyA9IDA7XG4gODU3Olx0XHRjYXJkcC1cdTAwM2Vmd2ZpbmFsYmxrID0gMDtcbiA4NTg6XHRcdGNhcmRwLVx1MDAzZWJvb3RjbWRyZXNwID0gMDtcbiA4NTk6XHRcbiA4NjA6XHRyZXN0YXJ0OlxuIDg2MTpcdFx0aWYgKGlmX3VzYl9zdWJtaXRfcnhfdXJiX2Z3bG9hZChjYXJkcCkgXHUwMDNjIDApIHtcbiA4NjI6XHRcdFx0bGJzX2RlYl91c2JkKFx1MDAyNmNhcmRwLVx1MDAzZXVkZXYtXHUwMDNlZGV2LCBcJiMzNDtVUkIgc3VibWlzc2lvbiBpcyBmYWlsZWRcXG5cJiMzNDspO1xuIDg2MzpcdFx0XHRyZXQgPSAtRUlPO1xuIDg2NDpcdFx0XHRnb3RvIGRvbmU7XG4gODY1Olx0XHR9XG4gODY2Olx0XG4gODY3Olx0XHRjYXJkcC1cdTAwM2Vib290Y21kcmVzcCA9IDA7XG4gODY4Olx0XHRkbyB7XG4gODY5Olx0XHRcdGludCBqID0gMDtcbiA4NzA6XHRcdFx0aSYjNDM7JiM0Mzs7XG4gODcxOlx0XHRcdGlmX3VzYl9pc3N1ZV9ib290X2NvbW1hbmQoY2FyZHAsIEJPT1RfQ01EX0ZXX0JZX1VTQik7XG4gODcyOlx0XHRcdC8qIHdhaXQgZm9yIGNvbW1hbmQgcmVzcG9uc2UgKi9cbiA4NzM6XHRcdFx0ZG8ge1xuIDg3NDpcdFx0XHRcdGomIzQzOyYjNDM7O1xuIDg3NTpcdFx0XHRcdG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7XG4gODc2Olx0XHRcdH0gd2hpbGUgKGNhcmRwLVx1MDAzZWJvb3RjbWRyZXNwID09IDAgXHUwMDI2XHUwMDI2IGogXHUwMDNjIDEwKTtcbiA4Nzc6XHRcdH0gd2hpbGUgKGNhcmRwLVx1MDAzZWJvb3RjbWRyZXNwID09IDAgXHUwMDI2XHUwMDI2IGkgXHUwMDNjIDUpO1xuIDg3ODpcdFxuIDg3OTpcdFx0aWYgKGNhcmRwLVx1MDAzZWJvb3RjbWRyZXNwID09IEJPT1RfQ01EX1JFU1BfTk9UX1NVUFBPUlRFRCkge1xuIDg4MDpcdFx0XHQvKiBSZXR1cm4gdG8gbm9ybWFsIG9wZXJhdGlvbiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjE1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZToKCioqQ2hlY2tpbmcgRmlybXdhcmUgSGFuZGxpbmcgaW4gYGlmX3VzYl9wcm9nX2Zpcm13YXJlYCoqCgpPa2F5LCBzbyBgaWZfdXNiX3Byb2dfZmlybXdhcmVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIFVTQiBmaXJtd2FyZSBwcm9ncmFtbWluZywgYW5kIGl0IGFwcGVhcnMgaXQgc2F2ZXMgdGhlIGxvYWRlZCBmaXJtd2FyZSwgYGZ3YCwgaW50byBgY2FyZHAtJmd0O2Z3YC4gTXkgbWFpbiBjb25jZXJuIHJpZ2h0IG5vdyBpcyBtZW1vcnkgbWFuYWdlbWVudC4gRGlkIGl0IHJlbGVhc2UgdGhlIGFsbG9jYXRlZCBtZW1vcnkgYWZ0ZXIgaXQgaGFzIHNhdmVkIHRoZSBmaXJtd2FyZT8gSSByZWFsbHkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBgZndgIGJ1ZmZlciBhdCBzb21lIHBvaW50IHRvIGF2b2lkIG1lbW9yeSBsZWFrcy4gSSBuZWVkIHRvIHJlYWQgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uIGNhcmVmdWxseSB0byBlbnN1cmUgdGhhdCBpdCBoYXMgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODgxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4ODE6XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4gODgyOlx0XHRcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXHUwMDI2Y2FyZHAtXHUwMDNlcnhfc3VibWl0dGVkKTtcbiA4ODM6XHRcdFx0dXNiX2tpbGxfYW5jaG9yZWRfdXJicyhcdTAwMjZjYXJkcC1cdTAwM2V0eF9zdWJtaXR0ZWQpO1xuIDg4NDpcdFx0XHRpZiAoaWZfdXNiX3N1Ym1pdF9yeF91cmIoY2FyZHApIFx1MDAzYyAwKVxuIDg4NTpcdFx0XHRcdHJldCA9IC1FSU87XG4gODg2Olx0XHRcdGdvdG8gZG9uZTtcbiA4ODc6XHRcdH0gZWxzZSBpZiAoY2FyZHAtXHUwMDNlYm9vdGNtZHJlc3AgXHUwMDNjPSAwKSB7XG4gODg4Olx0XHRcdGlmICgtLXJlc2V0X2NvdW50IFx1MDAzZT0gMCkge1xuIDg4OTpcdFx0XHRcdGlmX3VzYl9yZXNldF9kZXZpY2UoY2FyZHApO1xuIDg5MDpcdFx0XHRcdGdvdG8gcmVzdGFydDtcbiA4OTE6XHRcdFx0fVxuIDg5MjpcdFx0XHRyZXQgPSAtRUlPO1xuIDg5MzpcdFx0XHRnb3RvIGRvbmU7XG4gODk0Olx0XHR9XG4gODk1Olx0XG4gODk2Olx0XHRpID0gMDtcbiA4OTc6XHRcbiA4OTg6XHRcdGNhcmRwLVx1MDAzZXRvdGFsYnl0ZXMgPSAwO1xuIDg5OTpcdFx0Y2FyZHAtXHUwMDNlZndsYXN0Ymxrc2VudCA9IDA7XG4gOTAwOlx0XHRjYXJkcC1cdTAwM2VDUkNfT0sgPSAxO1xuIDkwMTpcdFx0Y2FyZHAtXHUwMDNlZndkbmxkb3ZlciA9IDA7XG4gOTAyOlx0XHRjYXJkcC1cdTAwM2Vmd3NlcW51bSA9IC0xO1xuIDkwMzpcdFx0Y2FyZHAtXHUwMDNldG90YWxieXRlcyA9IDA7XG4gOTA0Olx0XHRjYXJkcC1cdTAwM2Vmd2ZpbmFsYmxrID0gMDtcbiA5MDU6XHRcbiA5MDY6XHRcdC8qIFNlbmQgdGhlIGZpcnN0IGZpcm13YXJlIHBhY2tldC4uLiAqL1xuIDkwNzpcdFx0aWZfdXNiX3NlbmRfZndfcGt0KGNhcmRwKTtcbiA5MDg6XHRcbiA5MDk6XHRcdC8qIC4uLiBhbmQgd2FpdCBmb3IgdGhlIHByb2Nlc3MgdG8gY29tcGxldGUgKi9cbiA5MTA6XHRcdHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjYXJkcC1cdTAwM2Vmd193cSwgY2FyZHAtXHUwMDNlc3VycHJpc2VfcmVtb3ZlZCB8fCBjYXJkcC1cdTAwM2Vmd2RubGRvdmVyKTtcbiA5MTE6XHRcbiA5MTI6XHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNmNhcmRwLVx1MDAzZWZ3X3RpbWVvdXQpO1xuIDkxMzpcdFx0dXNiX2tpbGxfYW5jaG9yZWRfdXJicyhcdTAwMjZjYXJkcC1cdTAwM2VyeF9zdWJtaXR0ZWQpO1xuIDkxNDpcdFxuIDkxNTpcdFx0aWYgKCFjYXJkcC1cdTAwM2Vmd2RubGRvdmVyKSB7XG4gOTE2Olx0XHRcdHByX2luZm8oXCYjMzQ7ZmFpbGVkIHRvIGxvYWQgZncsIHJlc2V0dGluZyBkZXZpY2UhXFxuXCYjMzQ7KTtcbiA5MTc6XHRcdFx0aWYgKC0tcmVzZXRfY291bnQgXHUwMDNlPSAwKSB7XG4gOTE4Olx0XHRcdFx0aWZfdXNiX3Jlc2V0X2RldmljZShjYXJkcCk7XG4gOTE5Olx0XHRcdFx0Z290byByZXN0YXJ0O1xuIDkyMDpcdFx0XHR9XG4gOTIxOlx0XG4gOTIyOlx0XHRcdHByX2luZm8oXCYjMzQ7RlcgZG93bmxvYWQgZmFpbHVyZSwgdGltZSA9ICVkIG1zXFxuXCYjMzQ7LCBpICogMTAwKTtcbiA5MjM6XHRcdFx0cmV0ID0gLUVJTztcbiA5MjQ6XHRcdFx0Z290byBkb25lO1xuIDkyNTpcdFx0fVxuIDkyNjpcdFxuIDkyNzpcdFx0Y2FyZHAtXHUwMDNlcHJpdi1cdTAwM2Vmd19yZWFkeSA9IDE7XG4gOTI4Olx0XHRpZl91c2Jfc3VibWl0X3J4X3VyYihjYXJkcCk7XG4gOTI5Olx0XG4gOTMwOlx0XHRpZiAobGJzX3N0YXJ0X2NhcmQocHJpdikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MTgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBpZl91c2JfcHJvZ19maXJtd2FyZWAgQ29uZGl0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBgaWZfdXNiX3Byb2dfZmlybXdhcmVgIGNvbmRpdGlvbiBpcyBjb250aW51aW5nLi4uIEkgbmVlZCB0byBpbW1lZGlhdGVseSBldmFsdWF0ZSB3aGF0IHRoYXQgaW1wbGllcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBsaWtlbHkgaW5kaWNhdGVzIHRoZSBzeXN0ZW0gaXMgc3RpbGwgaW4gYSBVU0IgcHJvZ3JhbW1pbmcgb3IgZmlybXdhcmUgdXBkYXRlIHN0YXRlLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGhhbmctdXAsIGEgY29udGludWVkIHdhaXQgZm9yIGEgdmFsaWQgZmlybXdhcmUgaW1hZ2UsIG9yIG1heWJlIGV2ZW4gYW4gdW5leHBlY3RlZCByZXR1cm4gZnJvbSBhIHJlbGF0ZWQgZnVuY3Rpb24uIEkgaGF2ZSB0byBxdWlja2x5IGRlZHVjZSB3aHkgdGhpcyBpcyBoYXBwZW5pbmcuIElzIHRoZXJlIGFuIGlzc3VlIHdpdGggdGhlIFVTQiBjb25uZWN0aW9uLCB0aGUgZmlybXdhcmUgaW1hZ2UgaXRzZWxmLCB0aGUgcHJvZ3JhbW1pbmcgc2VxdWVuY2UsIG9yIGV2ZW4gdGhlIGhhcmR3YXJlIGludm9sdmVkPyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHBvc3NpYmxlIGZhY3RvcnMgY29udHJpYnV0aW5nIHRvIHRoaXMgb25nb2luZyBjb25kaXRpb24sIHNpbmNlIHRoaXMgY291bGQgYmUgYSBwb2ludCBvZiBmYWlsdXJlIGZvciB0aGUgdXBkYXRlIHByb2NlZHVyZSBvciwgaW4gdGhlIHdvcnN0IGNhc2UsIGJyaWNraW5nIHRoZSBkZXZpY2UuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgcGF0aCB0aGF0IHVzZXMgYGlmX3VzYl9wcm9nX2Zpcm13YXJlYCB0byB1bmRlcnN0YW5kIHRoZSBzdGF0ZSBpdCByZXByZXNlbnRzIGFuZCBwb3RlbnRpYWwgbmV4dCBzdGVwcywgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTMxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MzE6XHRcdFx0Z290byBkb25lO1xuIDkzMjpcdFxuIDkzMzpcdFx0aWZfdXNiX3NldHVwX2Zpcm13YXJlKHByaXYpO1xuIDkzNDpcdFxuIDkzNTpcdFx0LypcbiA5MzY6XHRcdCAqIEVIU19SRU1PVkVfV0FLRVVQIGlzIG5vdCBzdXBwb3J0ZWQgb24gYWxsIHZlcnNpb25zIG9mIHRoZSBmaXJtd2FyZS5cbiA5Mzc6XHRcdCAqL1xuIDkzODpcdFx0cHJpdi1cdTAwM2V3b2xfY3JpdGVyaWEgPSBFSFNfUkVNT1ZFX1dBS0VVUDtcbiA5Mzk6XHRcdGlmIChsYnNfaG9zdF9zbGVlcF9jZmcocHJpdiwgcHJpdi1cdTAwM2V3b2xfY3JpdGVyaWEsIE5VTEwpKVxuIDk0MDpcdFx0XHRwcml2LVx1MDAzZWVoc19yZW1vdmVfc3VwcG9ydGVkID0gZmFsc2U7XG4gOTQxOlx0XG4gOTQyOlx0IGRvbmU6XG4gOTQzOlx0XHRjYXJkcC1cdTAwM2VmdyA9IE5VTEw7XG4gOTQ0Olx0fVxuIDk0NTpcdFxuIDk0NjpcdFxuIDk0NzpcdCNpZmRlZiBDT05GSUdfUE1cbiA5NDg6XHRzdGF0aWMgaW50IGlmX3VzYl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbiA5NDk6XHR7XG4gOTUwOlx0XHRzdHJ1Y3QgaWZfdXNiX2NhcmQgKmNhcmRwID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcbiA5NTE6XHRcdHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNhcmRwLVx1MDAzZXByaXY7XG4gOTUyOlx0XHRpbnQgcmV0O1xuIDk1MzpcdFxuIDk1NDpcdFx0aWYgKHByaXYtXHUwMDNlcHNzdGF0ZSAhPSBQU19TVEFURV9GVUxMX1BPV0VSKSB7XG4gOTU1Olx0XHRcdHJldCA9IC0xO1xuIDk1NjpcdFx0XHRnb3RvIG91dDtcbiA5NTc6XHRcdH1cbiA5NTg6XHRcbiA5NTk6XHQjaWZkZWYgQ09ORklHX09MUENcbiA5NjA6XHRcdGlmIChtYWNoaW5lX2lzX29scGMoKSkge1xuIDk2MTpcdFx0XHRpZiAocHJpdi1cdTAwM2V3b2xfY3JpdGVyaWEgPT0gRUhTX1JFTU9WRV9XQUtFVVApXG4gOTYyOlx0XHRcdFx0b2xwY19lY193YWtldXBfY2xlYXIoRUNfU0NJX1NSQ19XTEFOKTtcbiA5NjM6XHRcdFx0ZWxzZVxuIDk2NDpcdFx0XHRcdG9scGNfZWNfd2FrZXVwX3NldChFQ19TQ0lfU1JDX1dMQU4pO1xuIDk2NTpcdFx0fVxuIDk2NjpcdCNlbmRpZlxuIDk2NzpcdFxuIDk2ODpcdFx0cmV0ID0gbGJzX3N1c3BlbmQocHJpdik7XG4gOTY5Olx0XHRpZiAocmV0KVxuIDk3MDpcdFx0XHRnb3RvIG91dDtcbiA5NzE6XHRcbiA5NzI6XHRcdC8qIFVubGluayB0eCBcdTAwMjYgcnggdXJiICovXG4gOTczOlx0XHR1c2Jfa2lsbF9hbmNob3JlZF91cmJzKFx1MDAyNmNhcmRwLVx1MDAzZXR4X3N1Ym1pdHRlZCk7XG4gOTc0Olx0XHR1c2Jfa2lsbF9hbmNob3JlZF91cmJzKFx1MDAyNmNhcmRwLVx1MDAzZXJ4X3N1Ym1pdHRlZCk7XG4gOTc1Olx0XG4gOTc2Olx0IG91dDpcbiA5Nzc6XHRcdHJldHVybiByZXQ7XG4gOTc4Olx0fVxuIDk3OTpcdFxuIDk4MDpcdHN0YXRpYyBpbnQgaWZfdXNiX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU5MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipVU0IgRmlybXdhcmUgUHJvZ3JhbW1pbmcgR290Y2hhISoqCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGp1c3QgcmUtcmVhZGluZyB0aGUgY29kZSBpbiBgaWZfdXNiX3Byb2dfZmlybXdhcmVgLi4uIGRhbmcgaXQhIEkga25ldyBJIHNob3VsZCBoYXZlIGJlZW4gbW9yZSBjYXJlZnVsLiBJdCAqKmRvZXNuJiMzOTt0KiogYWN0dWFsbHkgYGZyZWUoZncpYCEgSXQgY2xldmVybHkgc2V0cyBgY2FyZHAtJmd0O2Z3ID0gTlVMTDtgIGF0IHRoZSBlbmQgb2YgdGhlIHByb2Nlc3MsIHdoaWNoIGlzIGhvdyBpdCBzaWduYWxzIHRoYXQgdGhlIGZpcm13YXJlIGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoYXQmIzM5O3MgYSBjbGV2ZXIgdHJpY2ssIGJ1dCBlYXN5IHRvIG1pc3MuIEkgaGF2ZSB0byBtYWtlIGEgbm90ZSBvZiB0aGlzIHRvIGJlIGNlcnRhaW4gdGhhdCBJIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYSBtZW1vcnkgbGVhayBzb21ld2hlcmUgZWxzZS4KCk5vdywgbGV0JiMzOTtzIHNlZSwgd2hhdCBhYm91dCB0aGF0IGBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmVgIHJvdXRpbmU/IEkgbmVlZCB0byBxdWlja2x5IGNvbXBhcmUgdGhlIGFwcHJvYWNoIHRoZXJlLiBBcmUgd2Ugc2V0dGluZyB0aGUgYGNhcmRwLSZndDtmdyA9IE5VTEw7YCBwb2ludGVyIHRvbz8gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSBoYXZlIHRoZSByaWdodCBhcHByb2FjaCwgdG8gcHJldmVudCBlaXRoZXIgYSBtZW1vcnkgbGVhaywgb3IgYSBkb3VibGUtZnJlZSBzaXR1YXRpb24uIFRoaXMgYXJlYSBvZiB0aGUgY29kZSBpcyBoaWdobHkgc2Vuc2l0aXZlLCBzbyBhbnkgcG90ZW50aWFsIGVycm9ycyBuZWVkIHRvIGJlIGZvdW5kIHF1aWNrbHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmX3NkaW9fZG9fcHJvZ19maXJtd2FyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jPTUzNj1zdGF0aWMgaW50IGlmX3NkaW9fcHJvZ19yZWFsKHN0cnVjdCBpZl9zZGlvX2NhcmQgKmNhcmQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmMtNjY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM6NjY4OnN0YXRpYyB2b2lkIGlmX3NkaW9fZG9fcHJvZ19maXJtd2FyZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCByZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3NkaW8uYy02NjktXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaGVscGVyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jPTY5Mz1zdGF0aWMgaW50IGlmX3NkaW9fcHJvZ19maXJtd2FyZShzdHJ1Y3QgaWZfc2Rpb19jYXJkICpjYXJkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jLTczNi1cdHJldCA9IGxic19nZXRfZmlybXdhcmVfYXN5bmMoY2FyZC1cdTAwM2Vwcml2LCBcdTAwMjZjYXJkLVx1MDAzZWZ1bmMtXHUwMDNlZGV2LCBjYXJkLVx1MDAzZW1vZGVsLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM6NzM3Olx0XHRcdFx0ICAgICBmd190YWJsZSwgaWZfc2Rpb19kb19wcm9nX2Zpcm13YXJlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jLTczOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNTcKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIGVtYmVkZGVkIHN5c3RlbXMgYW5kIFNESU86CgoqKkRpdmluZyBpbnRvIGBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmVgKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gYGlmX3NkaW9fZG9fcHJvZ19maXJtd2FyZWAuIFNvdW5kcyBsaWtlIHdlJiMzOTtyZSBhYm91dCB0byBkZWx2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgZmlybXdhcmUgcHJvZ3JhbW1pbmcgdmlhIFNESU8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcm91dGluZSB0aG9yb3VnaGx5LiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHF1ZXN0aW9ucyBhYm91dCBlcnJvciBoYW5kbGluZywgaW50ZXJydXB0IG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJcyB0aGlzIGhhbmRsaW5nIHRoZSBpbml0aWFsIGxvYWQsIHVwZGF0ZXMsIG9yIGJvdGg/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBwcm9wcmlldGFyeSBvciBzdGFuZGFyZGl6ZWQgcHJvdG9jb2wgb3ZlciB0aGUgU0RJTyBpbnRlcmZhY2UgZm9yIHRoZSBmaXJtd2FyZSB0cmFuc2Zlcj8gQW55IG1lbnRpb24gb2YgRE1BPyBUaGF0IHdvdWxkIGJlIGdvb2QgdG8gdW5kZXJzdGFuZC4gSSYjMzk7bSBrZWVuIHRvIGxvb2sgZm9yIGFueSBvcHRpbWl6YXRpb25zIOKAkyBpcyBpdCBjaGVja2luZyBkZXZpY2UgY29tcGF0aWJpbGl0eSBiZWZvcmUgdGhlIHByb2dyYW1taW5nPyBJcyB0aGVyZSBhIHRpbWVvdXQgbWVjaGFuaXNtIGluIHBsYWNlLCBhbmQgaWYgc28sIHdoYXQmIzM5O3MgaXRzIGNvbmZpZ3VyYXRpb24/IEkgYWxzbyBob3BlIHRvIHNlZSBzb21lIHNvcnQgb2YgdmVyaWZpY2F0aW9uIOKAkyBjaGVja3N1bXMgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIHRvIGVuc3VyZSBmaXJtd2FyZSBpbnRlZ3JpdHkuIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgaGFyZHdhcmUgcGxhdGZvcm0gaXMgY3JpdGljYWwsIHNvIGFueSByZWZlcmVuY2VzIHRvIHNwZWNpZmljIHJlZ2lzdGVycywgbWVtb3J5IGFkZHJlc3Nlcywgb3IgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBpbXBvcnRhbnQuIEkgbmVlZCB0byBtZW50YWxseSBwcmVwYXJlIG15c2VsZiBmb3IgcG90ZW50aWFsIGNoYWxsZW5nZXMgYXNzb2NpYXRlZCB3aXRoIFNESU8mIzM5O3MgY29tcGxleGl0aWVzLCBsaWtlIHRoZSBpbnRlcnJ1cHQgbWFza2luZywgY29tbWFuZCBzZXF1ZW5jZSBhbmQgdGltaW5ncy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZSBmdW5jdGlvbiBtYW5hZ2VzIHBvd2VyIGNvbnNpZGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2Njg6XHRzdGF0aWMgdm9pZCBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmUoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgcmV0LFxuIDY2OTpcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmhlbHBlcixcbiA2NzA6XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICptYWluZncpXG4gNjcxOlx0e1xuIDY3MjpcdFx0c3RydWN0IGlmX3NkaW9fY2FyZCAqY2FyZCA9IHByaXYtXHUwMDNlY2FyZDtcbiA2NzM6XHRcbiA2NzQ6XHRcdGlmIChyZXQpIHtcbiA2NzU6XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBmaW5kIGZpcm13YXJlICglZClcXG5cJiMzNDssIHJldCk7XG4gNjc2Olx0XHRcdHJldHVybjtcbiA2Nzc6XHRcdH1cbiA2Nzg6XHRcbiA2Nzk6XHRcdHJldCA9IGlmX3NkaW9fcHJvZ19oZWxwZXIoY2FyZCwgaGVscGVyKTtcbiA2ODA6XHRcdGlmIChyZXQpXG4gNjgxOlx0XHRcdHJldHVybjtcbiA2ODI6XHRcbiA2ODM6XHRcdGxic19kZWJfc2RpbyhcJiMzNDtIZWxwZXIgZmlybXdhcmUgbG9hZGVkXFxuXCYjMzQ7KTtcbiA2ODQ6XHRcbiA2ODU6XHRcdHJldCA9IGlmX3NkaW9fcHJvZ19yZWFsKGNhcmQsIG1haW5mdyk7XG4gNjg2Olx0XHRpZiAocmV0KVxuIDY4NzpcdFx0XHRyZXR1cm47XG4gNjg4Olx0XG4gNjg5Olx0XHRsYnNfZGViX3NkaW8oXCYjMzQ7RmlybXdhcmUgbG9hZGVkXFxuXCYjMzQ7KTtcbiA2OTA6XHRcdGlmX3NkaW9fZmluaXNoX3Bvd2VyX29uKGNhcmQpO1xuIDY5MTpcdH1cbiA2OTI6XHRcbiA2OTM6XHRzdGF0aWMgaW50IGlmX3NkaW9fcHJvZ19maXJtd2FyZShzdHJ1Y3QgaWZfc2Rpb19jYXJkICpjYXJkKVxuIDY5NDpcdHtcbiA2OTU6XHRcdGludCByZXQ7XG4gNjk2Olx0XHR1MTYgc2NyYXRjaDtcbiA2OTc6XHRcbiA2OTg6XHRcdC8qXG4gNjk5Olx0XHQgKiBEaXNhYmxlIGludGVycnVwdHNcbiA3MDA6XHRcdCAqL1xuIDcwMTpcdFx0c2Rpb19jbGFpbV9ob3N0KGNhcmQtXHUwMDNlZnVuYyk7XG4gNzAyOlx0XHRzZGlvX3dyaXRlYihjYXJkLVx1MDAzZWZ1bmMsIDB4MDAsIElGX1NESU9fSF9JTlRfTUFTSywgXHUwMDI2cmV0KTtcbiA3MDM6XHRcdHNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtXHUwMDNlZnVuYyk7XG4gNzA0Olx0XG4gNzA1Olx0XHRzZGlvX2NsYWltX2hvc3QoY2FyZC1cdTAwM2VmdW5jKTtcbiA3MDY6XHRcdHNjcmF0Y2ggPSBpZl9zZGlvX3JlYWRfc2NyYXRjaChjYXJkLCBcdTAwMjZyZXQpO1xuIDcwNzpcdFx0c2Rpb19yZWxlYXNlX2hvc3QoY2FyZC1cdTAwM2VmdW5jKTtcbiA3MDg6XHRcbiA3MDk6XHRcdGxic19kZWJfc2RpbyhcJiMzNDtmaXJtd2FyZSBzdGF0dXMgPSAlI3hcXG5cJiMzNDssIHNjcmF0Y2gpO1xuIDcxMDpcdFx0bGJzX2RlYl9zZGlvKFwmIzM0O3NjcmF0Y2ggcmV0ID0gJWRcXG5cJiMzNDssIHJldCk7XG4gNzExOlx0XG4gNzEyOlx0XHRpZiAocmV0KVxuIDcxMzpcdFx0XHRnb3RvIG91dDtcbiA3MTQ6XHRcbiA3MTU6XHRcbiA3MTY6XHRcdC8qXG4gNzE3Olx0XHQgKiBUaGUgbWFudWFsIGNsZWFybHkgZGVzY3JpYmVzIHRoYXQgRkVEQyBpcyB0aGUgcmlnaHQgY29kZSB0byB1c2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMDgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRmlybXdhcmUgTG9hZGluZyBHb3RjaGFzKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgYGlmX3NkaW9fZG9fcHJvZ19maXJtd2FyZWAgZnVuY3Rpb24uLi4gaXQmIzM5O3MgbG9va2luZyBsaWtlIGl0JiMzOTtzICpub3QqIGZyZWVpbmcgdGhlIGBoZWxwZXJgIG9yIGBtYWluZndgIHBvaW50ZXJzIGFmdGVyIHVzZS4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayByaWdodCB0aGVyZSEgTGV0JiMzOTtzIGZpbGUgdGhhdCBhd2F5IGZvciBhIGxhdGVyIGxvb2suCgpCdXQgaGFuZyBvbiwgbGV0IG1lIHRyYWNlIHRoaXMgYmFjayBhIGJpdC4gYGxic19nZXRfZmlybXdhcmVfYXN5bmNgIGNhbGxzIGBkb19sb2FkX2Zpcm13YXJlYCwgd2hpY2ggaW4gdHVybiwgdXNlcyBgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXRgLiBBaCwgYW5kICp0aGF0KiBmdW5jdGlvbiBpcyBhc3luY2hyb25vdXMsIHdoaWNoIG1lYW5zIHdlIGhhdmUgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgd2hlbiB0aGUgZmlybXdhcmUgbG9hZGluZyBpcyBjb21wbGV0ZS4gVGhlIGNhbGxiYWNrIGZvciBgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXRgIGlzIGVpdGhlciBgaGVscGVyX2Zpcm13YXJlX2NiYCBvciBgbWFpbl9maXJtd2FyZV9jYmAsIGFuZCwgZnJvbSB0aGUgbG9va3Mgb2YgdGhlIGNhbGwsIGl0IHNob3VsZCBiZSBgbWFpbl9maXJtd2FyZV9jYmAuIE9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYG1haW5fZmlybXdhcmVfY2JgIGFuZCBtYWtlIHN1cmUgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIHJlc291cmNlcyBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQ1Olx0c3RhdGljIHZvaWQgbWFpbl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxuICA0NjpcdHtcbiAgNDc6XHRcdHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNvbnRleHQ7XG4gIDQ4Olx0XG4gIDQ5Olx0XHRpZiAoIWZpcm13YXJlKSB7XG4gIDUwOlx0XHRcdC8qIEZhaWxlZCB0byBmaW5kIGZpcm13YXJlOiB0cnkgbmV4dCB0YWJsZSBlbnRyeSAqL1xuICA1MTpcdFx0XHRsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZShwcml2KTtcbiAgNTI6XHRcdFx0cmV0dXJuO1xuICA1MzpcdFx0fVxuICA1NDpcdFxuICA1NTpcdFx0LyogRmlybXdhcmUgZm91bmQhICovXG4gIDU2Olx0XHRsYnNfZndfbG9hZGVkKHByaXYsIDAsIHByaXYtXHUwMDNlaGVscGVyX2Z3LCBmaXJtd2FyZSk7XG4gIDU3Olx0XHRpZiAocHJpdi1cdTAwM2VoZWxwZXJfZncpIHtcbiAgNTg6XHRcdFx0cmVsZWFzZV9maXJtd2FyZSAocHJpdi1cdTAwM2VoZWxwZXJfZncpO1xuICA1OTpcdFx0XHRwcml2LVx1MDAzZWhlbHBlcl9mdyA9IE5VTEw7XG4gIDYwOlx0XHR9XG4gIDYxOlx0XHRyZWxlYXNlX2Zpcm13YXJlIChmaXJtd2FyZSk7XG4gIDYyOlx0fVxuICA2MzpcdFxuICA2NDpcdHN0YXRpYyB2b2lkIGhlbHBlcl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxuICA2NTpcdHtcbiAgNjY6XHRcdHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNvbnRleHQ7XG4gIDY3Olx0XG4gIDY4Olx0XHRpZiAoIWZpcm13YXJlKSB7XG4gIDY5Olx0XHRcdC8qIEZhaWxlZCB0byBmaW5kIGZpcm13YXJlOiB0cnkgbmV4dCB0YWJsZSBlbnRyeSAqL1xuICA3MDpcdFx0XHRsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZShwcml2KTtcbiAgNzE6XHRcdFx0cmV0dXJuO1xuICA3MjpcdFx0fVxuICA3MzpcdFxuICA3NDpcdFx0LyogRmlybXdhcmUgZm91bmQhICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDcxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTM3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBhIEZpcm13YXJlIExvYWRpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaGVyZSBzdGFydHMgd2l0aCBjb25maXJtaW5nIGhvdyBgbWFpbl9maXJtd2FyZV9jYmAgaGFuZGxlcyBmcmVlaW5nIGZpcm13YXJlIHJlc291cmNlcy4gWWVzLCBpdCBkb2VzIHJlbGVhc2UgYm90aCBgcHJpdi0mZ3Q7aGVscGVyX2Z3YCBhbmQgYGZpcm13YXJlYCwgd2hpY2ggaXMgYG1haW5md2AuIFRoZSBvcmRlciBpcyBjcnVjaWFsOiBgbGJzX2Z3X2xvYWRlZGAgaXMgY2FsbGVkIGZpcnN0LCBhbmQgKnRoZW4qIHRoZSBgcmVsZWFzZV9maXJtd2FyZWAgY2FsbHMgYXJlIG1hZGUuIEkgcmVjYWxsIHRoZSBjb21tZW50IGluIGBsYnNfZndfbG9hZGVkYCBzdGF0aW5nIHRoYXQgdGhlICYjMzQ7VXNlciBtdXN0IGZyZWUgaGVscGVyL21haW5mdy4mIzM0OyAgQnV0IHRoaXMgY29kZSAqaXMqIGZyZWVpbmcgdGhlbS4gQWhhISBUaGF0IG1lYW5zIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgdGhlICYjMzQ7dXNlciwmIzM0OyAqbXVzdCBub3QqIGZyZWUgdGhlIGZpcm13YXJlIGlmIGBtYWluX2Zpcm13YXJlX2NiYCBnZXRzIGNhbGxlZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIHRydWUgd2l0aCBgaWZfdXNiX3Byb2dfZmlybXdhcmVgIGFuZCBgaWZfc2Rpb19kb19wcm9nX2Zpcm13YXJlYCwgd2hpY2ggYXJlIFVTQiBhbmQgU0RJTyBmdW5jdGlvbnMgcmVzcGVjdGl2ZWx5LiBJIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgKmRvIG5vdCogZnJlZSBgaGVscGVyX2Z3YCBvciBgbWFpbmZ3YC4KCk5vdywgdGhlIGZvY3VzIHNoaWZ0cyB0byBgaGVscGVyX2Zpcm13YXJlX2NiYC4gVGhlIGNvZGUgaGFzIGEgc3RydWN0dXJlOiBpZiBgZmlybXdhcmVgIGlzIG5vdCBmb3VuZCwgaXQgdHJpZXMgdG8gbG9hZCB0aGUgbmV4dCB0YWJsZSBlbnRyeS4gQnV0LCB3aGF0IGlmIHRoZSBmaXJtd2FyZSAqaXMqIGZvdW5kPyBUaGUgcGF0Y2ggaW5jbHVkZXMgYSBgcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSlgIGNhbGwgd2l0aGluIGFuIGBlbHNlYCBicmFuY2ggb2YgYGhlbHBlcl9maXJtd2FyZV9jYmAhIE9rYXksIEkgdW5kZXJzdGFuZDsgd2l0aG91dCB0aGUgcGF0Y2gsIHRoZXJlIHdvdWxkIGhhdmUgYmVlbiBhIG1lbW9yeSBsZWFrIHdoZXJlIHRoZSBgZmlybXdhcmVgIHJlc291cmNlIHdvdWxkIG5vdCBoYXZlIGJlZW4gZnJlZWQgd2hlbiBvbmx5IHRoZSBoZWxwZXIgZmlybXdhcmUgd2FzIG5lZWRlZC4gVGhlIHBhdGNoIGlzIG5vdyBmaXhpbmcgYSBtZW1vcnkgbGVhay4KClNvLCBpcyB0aGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IFRlY2huaWNhbGx5LCB5ZXMsIGl0IG1vZGlmaWVzIHRoZSBzeXN0ZW0gc3RhdGUgYnkgZnJlZWluZyBtZW1vcnkuIElzIGl0ICp3b3J0aCogZnV6emluZz8gQSBzaW1wbGUgbWVtb3J5IGxlYWsgZml4IGxpa2UgdGhpcyBpcyB1bmxpa2VseSB0byBpbnRyb2R1Y2UgbmV3IHJlYWNoYWJsZSBzdGF0ZXMgdGhhdCBuZWVkIGZ1enppbmcsIHVubGVzcyB0aGUgZnJlZSBvcGVyYXRpb24gaXRzZWxmIGNhbiBsZWFkIHRvIGEgdXNlLWFmdGVyLWZyZWUsIGlmIHRoZSBtZW1vcnkgaXMgc3RpbGwgaW4gdXNlLgoKRG9lcyB0aGUgYHByaXYtJmd0O2Z3X2NhbGxiYWNrYCBzYXZlIHRoZSBgZmlybXdhcmVgIHBvaW50ZXIsIHdoaWNoIGNvdWxkIGNhdXNlIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlPyBMZXQmIzM5O3MgY2hlY2sgYGlmX3VzYl9wcm9nX2Zpcm13YXJlYC4gSXQgKmRvZXMqIHNhdmUgYGZ3YCB0byBgY2FyZHAtJmd0O2Z3YCwgYnV0IGNydWNpYWxseSwgaXQgc2V0cyBgY2FyZHAtJmd0O2Z3YCB0byBgTlVMTGAgYmVmb3JlIHJldHVybmluZy4gTm93LCBsZXQmIzM5O3MgYWxzbyBjaGVjayBgaWZfc2Rpb19kb19wcm9nX2Zpcm13YXJlYC4gSXQgdXNlcyBgaGVscGVyYCBhbmQgYG1haW5md2Agc3luY2hyb25vdXNseS4gVGhhdCYjMzk7cyBnb29kLgoKVGhlcmVmb3JlLCBhZGRpbmcgYHJlbGVhc2VfZmlybXdhcmVgIGlzIHRoZSBjb3JyZWN0IGNvdXJzZSBvZiBhY3Rpb24sIGFuZCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgKnNob3VsZCogd2UgZnV6eiBpdD8gSWYgd2UgZnV6eiBpdCwgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyAqd2lsbCogYmUgdHJpZ2dlcmVkLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcuIEhvd2V2ZXIsIFN5emthbGxlciBhbHJlYWR5IGZ1enplcyBVU0IgYW5kIFNESU8sIHdoaWNoIGlzIHdoZXJlIHRoaXMgY29kZSByZXNpZGVzIChpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jYCkuIFRoZSBwYXRjaCBpdHNlbGYgaXMgc21hbGwsIGl0IGp1c3QgYWRkczogYHJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpO2AuCgpHaXZlbiBhbGwgb2YgdGhpcyBhbmQgY29uc2lkZXJpbmcgdGhlIGluc3RydWN0aW9ucywgd2hhdCBpcyB0aGUgYmVzdCB0aGluZyB0byBkbz8gVG8gcHJvdmlkZSB0aGUgbW9zdCBjb21wcmVoZW5zaXZlIGV2YWx1YXRpb24sIEkgc2hvdWxkIGluZGljYXRlIHRoYXQgZnV6emluZyBpcyBhcHByb3ByaWF0ZS4gVGhlIGFkZGVkIGNvZGUgaXMgcmVhY2hlZCB2aWEgdGhlIFVTQiBnYWRnZXQgb3IgU0RJTyBwYXRoLgoKVGhlcmVmb3JlLCBJJiMzOTtkIHNheSBgV29ydGhGdXp6aW5nPXRydWVgLiBUbyBnbyB3aXRoIHRoaXMsIEkgbmVlZCB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmc6IGBGb2N1c1N5bWJvbHM6IGhlbHBlcl9maXJtd2FyZV9jYmAsIGBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jYC4gQW5kIGZvciBgRW5hYmxlQ29uZmlnc2AsIEkmIzM5O2QgbmVlZDogYExJQkVSVEFTYCwgYExJQkVSVEFTX1VTQmAsIGBMSUJFUlRBU19TRElPYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExJQkVSVEFTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWc6Mjpjb25maWcgTElCRVJUQVNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCA4eHh4IExpYmVydGFzIFdMQU4gZHJpdmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWctOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZzoxMDpjb25maWcgTElCRVJUQVNfVVNCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIExpYmVydGFzIDgzODggVVNCIDgwMi4xMWIvZyBjYXJkc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0xNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZzoxNjpjb25maWcgTElCRVJUQVNfU0RJT1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTE3LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBMaWJlcnRhcyA4Mzg1Lzg2ODYvODY4OCBTRElPIDgwMi4xMWIvZyBjYXJkc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0yMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZzoyMjpjb25maWcgTElCRVJUQVNfU1BJXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIExpYmVydGFzIDg2ODYgU1BJIDgwMi4xMWIvZyBjYXJkc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0yNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZzoyODpjb25maWcgTElCRVJUQVNfREVCVUdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0yOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGZ1bGwgZGVidWdnaW5nIG91dHB1dCBpbiB0aGUgTGliZXJ0YXMgbW9kdWxlLlwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0zMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZzozNDpjb25maWcgTElCRVJUQVNfTUVTSFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVzaCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODAzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IGFuZCBGdXp6aW5nIFdvcnRoaW5lc3Mgb2YgYSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBpcyB0aGlzIGNvZGUgZXZlbiByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gWWVzLCBkZWZpbml0ZWx5LiBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiAobGlrZSBkdW1teV9oY2QpIGFuZCBwb3RlbnRpYWxseSBTRElPIGVtdWxhdGlvbiwgaWYgdGhhdCYjMzk7cyBpbiBwbGF5LCBwcm92aWRlIGEgcGF0aC4gVVNCIGlzIHRoZSBndWFyYW50ZWVkIG9uZSB0aG91Z2gsIHNvIGdvb2QgdG8gZ28gdGhlcmUuCgpOb3csIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAg4oCTIHJpZ2h0LCB0aGF0IHJlcXVpcmVzIHRoZSBmaXJtd2FyZSB0byAqYWN0dWFsbHkqIGJlIHByZXNlbnQgb24gdGhlIGZpbGVzeXN0ZW0sIG9yIGl0JiMzOTtsbCBmYWlsLiBBbmQgaWYgaXQgZmFpbHMsIHRoYXQgYGhlbHBlcl9maXJtd2FyZV9jYmAgY2FsbGJhY2sgaXMgaW52b2tlZCwgYnV0IHdpdGggYGZpcm13YXJlID09IE5VTExgLiBBaCwgcmlnaHQsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHBhdGNoIGNvbWVzIGluIHRvIHByZXZlbnQgdGhlIG1lbW9yeSBsZWFrLgoKYGBgYwoJaWYgKCFmaXJtd2FyZSkgewoJCS8qIEZhaWxlZCB0byBmaW5kIGhlbHBlciBmaXJtd2FyZS4gKi8KCQlsYnNfZndfbG9hZGVkKHByaXYsIC1FTk9FTlQsIE5VTEwsIE5VTEwpOwoJCXJldHVybjsKCX0KYGBgCgpPa2F5LCB0aGUgcGF0Y2ggaXRzZWxmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6CmBgYGMKIAlpZiAocHJpdi0mZ3Q7ZndfbmFtZSkgewogCQkvKiBXZSBuZWVkIGEgbWFpbiBmaXJtd2FyZS4gKi8KIAkJcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIHRydWUsIHByaXYtJmd0O2Z3X25hbWUsCiAJCQkJCXByaXYtJmd0O2RldiwgR0ZQX0tFUk5FTCwgcHJpdiwKIAkJCQkJbWFpbl9maXJtd2FyZV9jYik7CiAJfSBlbHNlIHsKIAkJLyogTm8gbWFpbiBmaXJtd2FyZSBuZWVkZWQgZm9yIHRoaXMgaGVscGVyIC0tJmd0OyBzdWNjZXNzISAqLwogCQlsYnNfZndfbG9hZGVkKHByaXYsIDAsIGZpcm13YXJlLCBOVUxMKTsKJiM0MzsJCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwogCX0KYGBgCgpJZiBgZmlybXdhcmVgIGlzbiYjMzk7dCBOVUxMLCB0aGUgbG9hZCB3YXMgc3VjY2Vzc2Z1bC4gSW4gYSBmdXp6aW5nIHNldHVwLCBhIHN1Y2Nlc3NmdWwgZmlybXdhcmUgbG9hZCB1c3VhbGx5IGhpbmdlcyBvbiB0aGUgZnV6emVyIHByb3ZpZGluZyB0aGUgZmlybXdhcmUgdmlhIHRoZSBmaXJtd2FyZSBmYWxsYmFjayBtZWNoYW5pc20gKHN5c2ZzKSBvciB0aGUgZmlybXdhcmUgZXhpc3RpbmcgaW4gdGhlIHJvb3Rmcy4gU3l6a2FsbGVyLCB0aGFua2Z1bGx5LCBoYXMgdGhlIGFiaWxpdHkgdG8gaW50ZXJjZXB0IGZpcm13YXJlIHJlcXVlc3RzIGFuZCBzdXBwbHkgZHVtbXkgZmlybXdhcmUsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpCdXQsIGlzIGEgc2ltcGxlIG1lbW9yeSBsZWFrICp3b3J0aCogZnV6emluZz8gVGhlIGd1aWRlbGluZXMgSSYjMzk7bSB1c2luZyBzYXkgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LiYjMzQ7IFRoaXMgaXMgYSBtZW1vcnkgbGVhayBmaXguIEl0IGRvZXNuJiMzOTt0IGZ1bmN0aW9uYWxseSBhbHRlciBmbG93LCBpdCBqdXN0IGZyZWVzIG1lbW9yeS4KCkhvd2V2ZXIsIGlmIGl0JiMzOTtzIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgcmlzaywgdGhhdCBtaWdodCB3YXJyYW50IGZ1enppbmcuIEJ1dCwgd2FpdCwgd2UgbG9va2VkIGF0IHRoZSBjb2RlLCBpdOKAmXMgbm90IFVBRiwgc28gdGhhdCYjMzk7cyBub3QgdGhlIGlzc3VlLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBwcm9tcHQgYWdhaW46ICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBJdCAqZG9lcyogbW9kaWZ5IGEgZHJpdmVyLiBJdCAqaXMqIGV4ZWN1dGFibGUuIElzIGl0ICYjMzQ7ZnVuY3Rpb25hbCYjMzQ7PyBZZXMsIGl0IGZpeGVzIGEgbWVtb3J5IGxlYWsgd2hpY2ggaXMgYSBmdW5jdGlvbmFsaXR5LgoKT2theSwgSSYjMzk7bSBnb2luZyB0byBnbyB3aXRoIFdvcnRoRnV6emluZz10cnVlLiBGb2N1c1N5bWJvbHM9WyYjMzQ7aGVscGVyX2Zpcm13YXJlX2NiJiMzNDtdLCBhbmQgbGV04oCZcyBlbmFibGUgdGhlIGNvbmZpZ3M6IEVuYWJsZUNvbmZpZ3M9WyYjMzQ7TElCRVJUQVMmIzM0OywgJiMzNDtMSUJFUlRBU19VU0ImIzM0O10uCgpPa2F5LCBub3cgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgcmVtZW1iZXIgaG93IGBoZWxwZXJfZmlybXdhcmVfY2JgIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZWxwZXJfZmlybXdhcmVfY2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9NDU9c3RhdGljIHZvaWQgbWFpbl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy02My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzo2NDpzdGF0aWMgdm9pZCBoZWxwZXJfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy02NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jPTg1PXN0YXRpYyB2b2lkIGxvYWRfbmV4dF9maXJtd2FyZV9mcm9tX3RhYmxlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTExLVx0cHJpdi1cdTAwM2Vmd19pdGVyID0gaXRlcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoxMTI6XHRkb19sb2FkX2Zpcm13YXJlKHByaXYsIGl0ZXItXHUwMDNlaGVscGVyLCBoZWxwZXJfZmlybXdhcmVfY2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTExMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzgxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpcm13YXJlIExvYWRpbmcgQW5hbHlzaXMqKgoKT2theSwgc28gYGhlbHBlcl9maXJtd2FyZV9jYmAgaXMgaW5kZWVkIGNhbGxlZCBieSBgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXRgIHdpdGhpbiB0aGUgYGRvX2xvYWRfZmlybXdhcmVgIGZ1bmN0aW9uLiBJIGNvbmZpcm1lZCBpdHMgcmVhY2hhYmlsaXR5LiAgSSBkb3VibGUtY2hlY2tlZDsgaXQgbG9va3MgbGlrZSBgaGVscGVyX2Zpcm13YXJlX2NiYCBpcyBvbmx5IHVzZWQgd2l0aGluIGBsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZWAuCgpHaXZlbiB0aGUgc2ltcGxpY2l0eSBvZiB0aGlzIG1lbW9yeSBsZWFrIGZpeCAoanVzdCBhZGRpbmcgYSBgcmVsZWFzZV9maXJtd2FyZWAgY2FsbCksIGZ1enppbmcgaXMgdW5saWtlbHkgdG8gdW5jb3ZlciBuZXcgYnVncyBkaXJlY3RseSByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggaXRzZWxmLiBIb3dldmVyLCBiZWNhdXNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5ICYjMzQ7aWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBJJiMzOTttIG9ibGlnYXRlZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4KCkkmIzM5O3ZlIGNvbmZpcm1lZCBgTElCRVJUQVNfU1BJYCBpcyBhdmFpbGFibGUuIEl0IHNlZW1zIGBGV19MT0FERVJgIGlzIHJlbGV2YW50IGFzIGl0IGlzIHVzdWFsbHkgc2VsZWN0ZWQgYnkgZHJpdmVycyBuZWVkaW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRldfTE9BREVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnPTI9Y29uZmlnIExJQkVSVEFTXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTUtXHRkZXBlbmRzIG9uIENGRzgwMjExXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWc6NjpcdHNlbGVjdCBGV19MT0FERVJcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy03LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIwNAoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCwgYXMgSSB1bmRlcnN0YW5kIGl0LgoKKipGaXJtd2FyZSBMb2FkaW5nIE1lbW9yeSBMZWFrIGluIExpYmVydHVzIFdpcmVsZXNzIERyaXZlcioqCgpPa2F5LCBzbyBgRldfTE9BREVSYCBpcyBkZWZpbml0ZWx5IHNlbGVjdGVkIGJ5IGBMSUJFUlRBU2AsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSB0aGlua2luZyBpcywgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNvcmUgaXNzdWUuIFRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgbWVtb3J5IGxlYWsgd2l0aGluIHRoZSBhc3luY2hyb25vdXMgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzIG9mIHRoZSBMaWJlcnR1cyB3aXJlbGVzcyBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgYSBzY2VuYXJpbyB3aGVyZSBhICpoZWxwZXIqIGZpcm13YXJlIGlzIGxvYWRlZCwgYnV0IHRoZSAqbWFpbiogZmlybXdhcmUgaXNuJiMzOTt0IG5lZWRlZC4gSW4gdGhpcyBzaXR1YXRpb24sIHRoZSBoZWxwZXIgZmlybXdhcmUgaXNuJiMzOTt0IGJlaW5nIHByb3Blcmx5IHJlbGVhc2VkLCB3aGljaCBsZWFkcyB0byBhIG1lbW9yeSBsZWFrLgoKVGhlIGtleSB0aGluZyBpcywgdGhpcyBjb2RlIHBhdGggY2FuIGJlIGhpdCBkdXJpbmcgVVNCLCBTRElPLCBvciBTUEkgZGV2aWNlIGluaXRpYWxpemF0aW9uIHdoZW5ldmVyIGZpcm13YXJlIGlzIHJlcXVlc3RlZC4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQuIEZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIG1ha2VzIGl0IGEgZ3JlYXQgdGFyZ2V0OiBpZiB3ZSBmdXp6IHRoaXMgaW5pdGlhbGl6YXRpb24sIHdlIGNhbiBwdXNoIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHN0YXRlIG1hY2hpbmUgaW50byBhIHZhcmlldHkgb2Ygc3VjY2VzcyBhbmQgZmFpbHVyZSBzdGF0ZXMuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSBpdCBoYW5kbGVzIGFsbCB0aGVzZSBjb25kaXRpb25zIGNvcnJlY3RseSwgd2l0aG91dCBsZWFraW5nIG1lbW9yeSBvciBvcGVuaW5nIHVwIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSwgd2hpY2ggd291bGQgYmUgYSBzZXZlcmUgcHJvYmxlbS4KCkkgc2VlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhZmZlY3RlZCBhcmUgYExJQkVSVEFTYCwgYExJQkVSVEFTX1VTQmAsIGBMSUJFUlRBU19TRElPYCwgYW5kIGBMSUJFUlRBU19TUElgLCBtZWFuaW5nIGl0IHRvdWNoZXMgbXVsdGlwbGUgcG90ZW50aWFsIGhhcmR3YXJlIGludGVyZmFjZXMuIFRoZSBpbXBvcnRhbnQgc3ltYm9scyBpbiBteSBoZWFkIHJpZ2h0IG5vdyBhcmUgYGhlbHBlcl9maXJtd2FyZV9jYmAsIGBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jYCwgYW5kIGBsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHZlcnkgbGlrZWx5IHRvIGJlIGNlbnRyYWwgdG8gd2hlcmUgdGhlIHByb2JsZW0gbGllcy4KCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkIHdpdGggdGhpcyBhbmFseXNpcywgSSYjMzk7bSBnb2luZyB0byBzZXQgbXkgcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMSUJFUlRBUyYjMzQ7LAogICAgJiMzNDtMSUJFUlRBU19VU0ImIzM0OywKICAgICYjMzQ7TElCRVJUQVNfU0RJTyYjMzQ7LAogICAgJiMzNDtMSUJFUlRBU19TUEkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZWxwZXJfZmlybXdhcmVfY2ImIzM0OywKICAgICYjMzQ7bGJzX2dldF9maXJtd2FyZV9hc3luYyYjMzQ7LAogICAgJiMzNDtsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBsaWJlcnRhcyB3aXJlbGVzcyBkcml2ZXImIzM5O3MgYXN5bmNocm9ub3VzIGZpcm13YXJlIGxvYWRpbmcgcGF0aC4gV2hlbiBhIGhlbHBlciBmaXJtd2FyZSBpcyBsb2FkZWQgYnV0IG5vIG1haW4gZmlybXdhcmUgaXMgcmVxdWlyZWQsIHRoZSBoZWxwZXIgZmlybXdhcmUgd2FzIG5vdCBiZWluZyByZWxlYXNlZC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCL1NESU8vU1BJIGRldmljZSBpbml0aWFsaXphdGlvbiB3aGVuIGZpcm13YXJlIGlzIHJlcXVlc3RlZC4gRnV6emluZyB0aGlzIHBhdGggY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHN0YXRlIG1hY2hpbmUgaGFuZGxlcyB2YXJpb3VzIHN1Y2Nlc3MvZmFpbHVyZSBjb25kaXRpb25zIGNvcnJlY3RseSB3aXRob3V0IGxlYWtpbmcgbWVtb3J5IG9yIGNhdXNpbmcgdXNlLWFmdGVyLWZyZWUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xJQkVSVEFTJiMzNDssCiAgICAmIzM0O0xJQkVSVEFTX1VTQiYjMzQ7LAogICAgJiMzNDtMSUJFUlRBU19TRElPJiMzNDssCiAgICAmIzM0O0xJQkVSVEFTX1NQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hlbHBlcl9maXJtd2FyZV9jYiYjMzQ7LAogICAgJiMzNDtsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jJiMzNDssCiAgICAmIzM0O2xvYWRfbmV4dF9maXJtd2FyZV9mcm9tX3RhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGxpYmVydGFzIHdpcmVsZXNzIGRyaXZlciYjMzk7cyBhc3luY2hyb25vdXMgZmlybXdhcmUgbG9hZGluZyBwYXRoLiBXaGVuIGEgaGVscGVyIGZpcm13YXJlIGlzIGxvYWRlZCBidXQgbm8gbWFpbiBmaXJtd2FyZSBpcyByZXF1aXJlZCwgdGhlIGhlbHBlciBmaXJtd2FyZSB3YXMgbm90IGJlaW5nIHJlbGVhc2VkLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IvU0RJTy9TUEkgZGV2aWNlIGluaXRpYWxpemF0aW9uIHdoZW4gZmlybXdhcmUgaXMgcmVxdWVzdGVkLiBGdXp6aW5nIHRoaXMgcGF0aCBjYW4gaGVscCBlbnN1cmUgdGhlIGZpcm13YXJlIGxvYWRpbmcgc3RhdGUgbWFjaGluZSBoYW5kbGVzIHZhcmlvdXMgc3VjY2Vzcy9mYWlsdXJlIGNvbmRpdGlvbnMgY29ycmVjdGx5IHdpdGhvdXQgbGVha2luZyBtZW1vcnkgb3IgY2F1c2luZyB1c2UtYWZ0ZXItZnJlZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQwOjMxLjUzNzA4NzI2M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODY3Mzc3MTUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMSUJFUlRBU1wiLFxuICAgIFwiTElCRVJUQVNfVVNCXCIsXG4gICAgXCJMSUJFUlRBU19TRElPXCIsXG4gICAgXCJMSUJFUlRBU19TUElcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZWxwZXJfZmlybXdhcmVfY2JcIixcbiAgICBcImxic19nZXRfZmlybXdhcmVfYXN5bmNcIixcbiAgICBcImxvYWRfbmV4dF9maXJtd2FyZV9mcm9tX3RhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgbGliZXJ0YXMgd2lyZWxlc3MgZHJpdmVyJ3MgYXN5bmNocm9ub3VzIGZpcm13YXJlIGxvYWRpbmcgcGF0aC4gV2hlbiBhIGhlbHBlciBmaXJtd2FyZSBpcyBsb2FkZWQgYnV0IG5vIG1haW4gZmlybXdhcmUgaXMgcmVxdWlyZWQsIHRoZSBoZWxwZXIgZmlybXdhcmUgd2FzIG5vdCBiZWluZyByZWxlYXNlZC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCL1NESU8vU1BJIGRldmljZSBpbml0aWFsaXphdGlvbiB3aGVuIGZpcm13YXJlIGlzIHJlcXVlc3RlZC4gRnV6emluZyB0aGlzIHBhdGggY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHN0YXRlIG1hY2hpbmUgaGFuZGxlcyB2YXJpb3VzIHN1Y2Nlc3MvZmFpbHVyZSBjb25kaXRpb25zIGNvcnJlY3RseSB3aXRob3V0IGxlYWtpbmcgbWVtb3J5IG9yIGNhdXNpbmcgdXNlLWFmdGVyLWZyZWUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQwOjMxLjUzNzA5MTc5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkwNDQwNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTQyZTg4ZjE4OGFiNjZiNGFkN2VlNTg3MmI2ZGJiNTk1ZDFkNTcyZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1biAyNCAwOTo0MDozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmNcXG5pbmRleCBmMTI0MTEwOTQ0YjdlOS4uOWJmN2Q0YzIwN2I5ZWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jXFxuQEAgLTc4LDYgKzc4LDcgQEAgc3RhdGljIHZvaWQgaGVscGVyX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsIHZvaWQgKmNvbnRleHQpXFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qIE5vIG1haW4gZmlybXdhcmUgbmVlZGVkIGZvciB0aGlzIGhlbHBlciAtLVxcdTAwM2Ugc3VjY2VzcyEgKi9cXG4gXFx0XFx0bGJzX2Z3X2xvYWRlZChwcml2LCAwLCBmaXJtd2FyZSwgTlVMTCk7XFxuK1xcdFxcdHJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpO1xcbiBcXHR9XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQwOjMxLjkyODM5NzMxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY4MjgyNDUzOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxJQkVSVEFTXCIsXG4gICAgXCJMSUJFUlRBU19VU0JcIixcbiAgICBcIkxJQkVSVEFTX1NESU9cIixcbiAgICBcIkxJQkVSVEFTX1NQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhlbHBlcl9maXJtd2FyZV9jYlwiLFxuICAgIFwibGJzX2dldF9maXJtd2FyZV9hc3luY1wiLFxuICAgIFwibG9hZF9uZXh0X2Zpcm13YXJlX2Zyb21fdGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBsaWJlcnRhcyB3aXJlbGVzcyBkcml2ZXIncyBhc3luY2hyb25vdXMgZmlybXdhcmUgbG9hZGluZyBwYXRoLiBXaGVuIGEgaGVscGVyIGZpcm13YXJlIGlzIGxvYWRlZCBidXQgbm8gbWFpbiBmaXJtd2FyZSBpcyByZXF1aXJlZCwgdGhlIGhlbHBlciBmaXJtd2FyZSB3YXMgbm90IGJlaW5nIHJlbGVhc2VkLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IvU0RJTy9TUEkgZGV2aWNlIGluaXRpYWxpemF0aW9uIHdoZW4gZmlybXdhcmUgaXMgcmVxdWVzdGVkLiBGdXp6aW5nIHRoaXMgcGF0aCBjYW4gaGVscCBlbnN1cmUgdGhlIGZpcm13YXJlIGxvYWRpbmcgc3RhdGUgbWFjaGluZSBoYW5kbGVzIHZhcmlvdXMgc3VjY2Vzcy9mYWlsdXJlIGNvbmRpdGlvbnMgY29ycmVjdGx5IHdpdGhvdXQgbGVha2luZyBtZW1vcnkgb3IgY2F1c2luZyB1c2UtYWZ0ZXItZnJlZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNDJlODhmMTg4YWI2NmI0YWQ3ZWU1ODcyYjZkYmI1OTVkMWQ1NzJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMDk6NDA6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmNcbmluZGV4IGYxMjQxMTA5NDRiN2U5Li45YmY3ZDRjMjA3YjllZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jXG5AQCAtNzgsNiArNzgsNyBAQCBzdGF0aWMgdm9pZCBoZWxwZXJfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dClcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIE5vIG1haW4gZmlybXdhcmUgbmVlZGVkIGZvciB0aGlzIGhlbHBlciAtLVx1MDAzZSBzdWNjZXNzISAqL1xuIFx0XHRsYnNfZndfbG9hZGVkKHByaXYsIDAsIGZpcm13YXJlLCBOVUxMKTtcbitcdFx0cmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7XG4gXHR9XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDA6MzEuOTI4Mzk4NzA3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA1MjkyNjUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZpcm13YXJlIExvYWRpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgYWRkZWQgYHJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpO2Agd2l0aGluIHRoZSBgaGVscGVyX2Zpcm13YXJlX2NiYCBmdW5jdGlvbi4gUmlnaHQgYXdheSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcywgc28gbGV0J3MgZGlnIGludG8gdGhlIGNvbnRleHQuXG5cbkkgc2VlIGBoZWxwZXJfZmlybXdhcmVfY2JgIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24uIEl0J3MgdXNlZCBhZnRlciBhIGZpcm13YXJlIHJlcXVlc3QsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLiBJdCdzIGhhbmRsaW5nIHRoZSByZXR1cm4gZnJvbSBhIGByZXF1ZXN0X2Zpcm13YXJlYCBjYWxsLCB3aGljaCBpcyBmYWlybHkgc3RhbmRhcmQuIEluc2lkZSwgdGhlcmUncyBhIGNoZWNrIGZvciBhIG51bGwgZmlybXdhcmUgcG9pbnRlciwgaW5kaWNhdGluZyBhIGZhaWx1cmUuIElmIGl0J3MgYSBmYWlsdXJlLCBgbGJzX2Z3X2xvYWRlZGAgaXMgY2FsbGVkIHdpdGggYC1FTk9FTlRgLiBPdGhlcndpc2UsIGl0IHNlZW1zIHRoZXJlJ3MgYSBjaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBsb2FkIGEgbWFpbiBmaXJtd2FyZSBiYXNlZCBvbiB3aGV0aGVyIGBwcml2LVx1MDAzZWZ3X25hbWVgIGlzIHNldCwgYW5kIGFub3RoZXIgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCBjYWxsIHdpbGwgb2NjdXIgaWYgaXQgaXMsIHdoaWNoIHdpbGwgY2FsbCBgbWFpbl9maXJtd2FyZV9jYmAuIEJ1dCBpZiBgcHJpdi1cdTAwM2Vmd19uYW1lYCBpcyBudWxsLCBtZWFuaW5nIHRoZXJlJ3Mgbm8gbWFpbiBmaXJtd2FyZSB0byBsb2FkLCB0aGVuIHRoZSBoZWxwZXIgZmlybXdhcmUgbG9hZCBpcyBjb25zaWRlcmVkIGEgc3VjY2VzcyBhbmQgY2FsbHMgYGxic19md19sb2FkZWRgLiBBbmQgKnRoYXQncyogd2hlcmUgdGhlIG5ldyBgcmVsZWFzZV9maXJtd2FyZWAgY2FsbCBhcHBlYXJzLlxuXG5Ob3csIGEgcmVkIGZsYWcgcG9wcyB1cC4gV2UgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIGBsYnNfZndfbG9hZGVkYCBhbHJlYWR5IHJlbGVhc2VzIHRoZSBmaXJtd2FyZSwgYmVjYXVzZSB0aGF0IHdvdWxkIGNhdXNlIGEgZG91YmxlLWZyZWUsIGEgdmVyeSBuYXN0eSBidWcuIElmIGBsYnNfZndfbG9hZGVkYCAqZG9lcyogcmVsZWFzZSB0aGUgZmlybXdhcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHNlcmlvdXMgbWVtb3J5IGNvcnJ1cHRpb24gcmlzay4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIGBsYnNfZndfbG9hZGVkYCAqaW1tZWRpYXRlbHkqLiBMZXQncyBnbyBzZWUgd2hhdCBgbGJzX2Z3X2xvYWRlZGAgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQwOjM3Ljk4MTMyNjY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjExMzUwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsYnNfZndfbG9hZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYz0xMz1zdGF0aWMgdm9pZCBsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXZhdGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM6MTU6c3RhdGljIHZvaWQgbGJzX2Z3X2xvYWRlZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCByZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTE2LVxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaGVscGVyLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKm1haW5mdylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYz0zMT1zdGF0aWMgdm9pZCBkb19sb2FkX2Zpcm13YXJlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy00MC1cXHRcXHRsYnNfZGViX2Z3KFxcXCJyZXF1ZXN0X2Zpcm13YXJlX25vd2FpdCBlcnJvciAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM6NDE6XFx0XFx0bGJzX2Z3X2xvYWRlZChwcml2LCByZXQsIE5VTEwsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy00Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9NDU9c3RhdGljIHZvaWQgbWFpbl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTU1LVxcdC8qIEZpcm13YXJlIGZvdW5kISAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzo1NjpcXHRsYnNfZndfbG9hZGVkKHByaXYsIDAsIHByaXYtXFx1MDAzZWhlbHBlcl9mdywgZmlybXdhcmUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy01Ny1cXHRpZiAocHJpdi1cXHUwMDNlaGVscGVyX2Z3KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9NjQ9c3RhdGljIHZvaWQgaGVscGVyX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsIHZvaWQgKmNvbnRleHQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtNzktXFx0XFx0LyogTm8gbWFpbiBmaXJtd2FyZSBuZWVkZWQgZm9yIHRoaXMgaGVscGVyIC0tXFx1MDAzZSBzdWNjZXNzISAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzo4MDpcXHRcXHRsYnNfZndfbG9hZGVkKHByaXYsIDAsIGZpcm13YXJlLCBOVUxMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtODEtXFx0XFx0cmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9ODU9c3RhdGljIHZvaWQgbG9hZF9uZXh0X2Zpcm13YXJlX2Zyb21fdGFibGUoc3RydWN0IGxic19wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTEwMS1cXHRcXHQvKiBFbmQgb2YgdGFibGUgaGl0LiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoxMDI6XFx0XFx0bGJzX2Z3X2xvYWRlZChwcml2LCAtRU5PRU5ULCBOVUxMLCBOVUxMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTAzLVxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDA6MzguMjk3NDQzMTE2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4MzUzMjkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyBGaXJtd2FyZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gXCJyZWFkIGBsYnNfZndfbG9hZGVkYFwiLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgc3BlY2lmaWNzLiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgdGhhdCBgbGJzX2Z3X2xvYWRlZGAgcmVmZXJzIHRvIGEgdmFyaWFibGUgb3IgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRoZSBsb2FkaW5nIHN0YXRlIG9mIGZpcm13YXJlIGZvciBhIHNwZWNpZmljIHN5c3RlbSBjb21wb25lbnQsIGxpa2VseSBhIFwibGJzXCIgZGVzaWduYXRpb24gc2lnbmlmeWluZyBzb21ldGhpbmcgd2l0aGluIGEgbGF5ZXJlZCBibG9jayBzdHJ1Y3R1cmUuIFRoZSBmYWN0IHRoYXQgaXQgZXhpc3RzIGltcGxpZXMgYSBzcGVjaWZpYyBuZWVkIHRvIHRyYWNrIGZpcm13YXJlIHN0YXR1cywgd2hpY2ggaW4gdHVybiBzdWdnZXN0cyBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBib290IHByb2Nlc3NlcywgZXJyb3IgaGFuZGxpbmcsIG9yIHBlcmhhcHMgZXZlbiB2ZXJzaW9uIGNvbnRyb2wgYW5kIHJvbGxiYWNrIG1lY2hhbmlzbXMuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhIHNpbXBsZSBmbGFnIHRvIGEgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSB0eXBlLCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCwgYW5kIHdoYXQgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGV4aXN0IGluIG9yZGVyIHRvIGZ1bGx5IGRldGVybWluZSBpdHMgcm9sZS4gVGhlIHF1ZXN0aW9uIGlzLCB3aGF0IHByZWNpc2VseSBkbyBJIG5lZWQgdG8gbGVhcm4gYWJvdXQgdGhpcyBlbGVtZW50P1xuXG5cbiIsIklucHV0VG9rZW5zIjozMjkwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDA6NDEuOTgwOTc3NzEzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdHN0YXRpYyB2b2lkIGxic19md19sb2FkZWQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgcmV0LFxcbiAgMTY6XFx0XFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpoZWxwZXIsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqbWFpbmZ3KVxcbiAgMTc6XFx0e1xcbiAgMTg6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0bGJzX2RlYl9mdyhcXFwiZmlybXdhcmUgbG9hZCBjb21wbGV0ZSwgY29kZSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0LyogVXNlciBtdXN0IGZyZWUgaGVscGVyL21haW5mdyAqL1xcbiAgMjM6XFx0XFx0cHJpdi1cXHUwMDNlZndfY2FsbGJhY2socHJpdiwgcmV0LCBoZWxwZXIsIG1haW5mdyk7XFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2Vkcml2ZXJfbG9jaywgZmxhZ3MpO1xcbiAgMjY6XFx0XFx0cHJpdi1cXHUwMDNlZndfY2FsbGJhY2sgPSBOVUxMO1xcbiAgMjc6XFx0XFx0d2FrZV91cChcXHUwMDI2cHJpdi1cXHUwMDNlZndfd2FpdHEpO1xcbiAgMjg6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHJpdi1cXHUwMDNlZHJpdmVyX2xvY2ssIGZsYWdzKTtcXG4gIDI5OlxcdH1cXG4gIDMwOlxcdFxcbiAgMzE6XFx0c3RhdGljIHZvaWQgZG9fbG9hZF9maXJtd2FyZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuICAzMjpcXHRcXHR2b2lkICgqY2IpKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpKVxcbiAgMzM6XFx0e1xcbiAgMzQ6XFx0XFx0aW50IHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDA6NDEuOTgxMDUyOTUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3OTE3MzkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRG91YmxlIEZyZWUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZSBjb21tZW50IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlOiBcIi8qIFVzZXIgbXVzdCBmcmVlIGhlbHBlci9tYWluZncgKi9cIi4gVGhhdCdzIGEgcmVkIGZsYWcuIE5vdywgbGV0J3MgdHJhY2UgdGhpcyBiYWNrLiBgaGVscGVyX2Zpcm13YXJlX2NiYCBjYWxscyBgbGJzX2Z3X2xvYWRlZGAsIGFuZCB0aGF0IGZ1bmN0aW9uIHN1YnNlcXVlbnRseSBjYWxscyBgcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSlgLiBGaW5lLiBCdXQgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IGBsYnNfZndfbG9hZGVkYCBhbHNvIGNhbGxzIGBwcml2LVx1MDAzZWZ3X2NhbGxiYWNrYCB3aXRoIHRoYXQgKnNhbWUqIGBmaXJtd2FyZWAgcG9pbnRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlmIGBwcml2LVx1MDAzZWZ3X2NhbGxiYWNrYCBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUgYGZpcm13YXJlYCwgdGhlbiB0aGF0IGByZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKWAgY2FsbCBhZnRlciB3b3VsZCBiZSBhIGRvdWJsZSBmcmVlLCByaWdodD8gVGhhdCdzIGEgY2xhc3NpYyBtZW1vcnkgbWFuYWdlbWVudCBidWcuIFRoZSBjb21tZW50IHNwZWNpZmljYWxseSBzYXlzIHRoZSB1c2VyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIGl0LCB3aGljaCBpcyB0aGUgdXNlciBvZiB0aGUgY2FsbGJhY2suIEJ1dCBkb2VzIHRoYXQgbWVhbiBgcHJpdi1cdTAwM2Vmd19jYWxsYmFja2AgKmlzKiB0aGUgdXNlciByZXNwb25zaWJsZSBmb3IgaXQ/IEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgcHJpdi1cdTAwM2Vmd19jYWxsYmFja2AuIExldCdzIHNlZSB3aGF0IHRoYXQgbG9va3MgbGlrZS4uLiBJJ2xsIG5lZWQgdG8gZ28gbG9vayBhdCBpdHMgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQwOjQ2Ljc2MDIyODk4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTgzMTM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmd19jYWxsYmFjayA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYz0xNT1zdGF0aWMgdm9pZCBsYnNfZndfbG9hZGVkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IHJldCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0yNS1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cHJpdi1cXHUwMDNlZHJpdmVyX2xvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM6MjY6XFx0cHJpdi1cXHUwMDNlZndfY2FsbGJhY2sgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0yNy1cXHR3YWtlX3VwKFxcdTAwMjZwcml2LVxcdTAwM2Vmd193YWl0cSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9MTE1PXZvaWQgbGJzX3dhaXRfZm9yX2Zpcm13YXJlX2xvYWQoc3RydWN0IGxic19wcml2YXRlICpwcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xMTYte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoxMTc6XFx0d2FpdF9ldmVudChwcml2LVxcdTAwM2Vmd193YWl0cSwgcHJpdi1cXHUwMDNlZndfY2FsbGJhY2sgPT0gTlVMTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTExOC19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9MTMyPWludCBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTE0NS1cXHRwcml2LVxcdTAwM2Vmd19kZXZpY2UgPSBkZXZpY2U7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjE0NjpcXHRwcml2LVxcdTAwM2Vmd19jYWxsYmFjayA9IGNhbGxiYWNrO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xNDctXFx0cHJpdi1cXHUwMDNlZndfdGFibGUgPSBmd190YWJsZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDA6NDYuODIyMDY0NzIzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0OTk1MTUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyBvciB1bmRlcnN0YW5kaW5nIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlICppbml0aWF0aW5nKiB0aGUgY2FsbCB0byBgbGJzX2dldF9maXJtd2FyZV9hc3luY2AuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGFydGluZyBwb2ludCwgcmVhbGx5LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsIGlzIGdvaW5nIHRvIGluZm9ybSBldmVyeSBzdWJzZXF1ZW50IGxpbmUgb2YgaW52ZXN0aWdhdGlvbi4gSXMgaXQgZHJpdmVuIGJ5IGFuIGV4dGVybmFsIGV2ZW50PyBTb21lIHRpbWVyLWJhc2VkIHBlcmlvZGljIGNoZWNrPyBPciwgcGVyaGFwcywgYW5vdGhlciBzdWJzeXN0ZW0gcmVseWluZyBvbiB0aGlzIGFzeW5jIGNhbGwgdG8gZmV0Y2ggc3BlY2lmaWMgZGF0YT8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBhbGwgdGhlIHBvc3NpYmxlIHBhdGhzIHRoYXQgYXJlIGxlYWRpbmcgdG8gaXRzIGV4ZWN1dGlvbi4gTGV0J3Mgc2VlIHdobydzIGNhbGxpbmcgaXQsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMuIFRoaXMgaXMgdGhlIGJlZHJvY2sgb2YgdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MDo1MC4xNzIwMTgzMjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzQ5MDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZGVjbC5oPTY5PWludCBsYnNfZ2V0X2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGNhcmRfbW9kZWwsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2RlY2wuaC03Mi1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKiptYWluZncpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZGVjbC5oOjczOmludCBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZGVjbC5oLTc0LVxcdFxcdFxcdCAgIHUzMiBjYXJkX21vZGVsLCBjb25zdCBzdHJ1Y3QgbGJzX2Z3X3RhYmxlICpmd190YWJsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYz0xMTU9dm9pZCBsYnNfd2FpdF9mb3JfZmlybXdhcmVfbG9hZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTIwLS8qKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoxMjE6ICogIGxic19nZXRfZmlybXdhcmVfYXN5bmMgLSBSZXRyaWV2ZXMgZmlybXdhcmUgYXN5bmNocm9ub3VzbHkuIENhbiBsb2FkXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTEyMi0gKiAgZWl0aGVyIGEgaGVscGVyIGZpcm13YXJlIGFuZCBhIG1haW4gZmlybXdhcmUgKDItc3RhZ2UpLCBvciBqdXN0IHRoZSBoZWxwZXIuXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTMxLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoxMzI6aW50IGxic19nZXRfZmlybXdhcmVfYXN5bmMoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTEzMy1cXHRcXHRcXHQgICAgdTMyIGNhcmRfbW9kZWwsIGNvbnN0IHN0cnVjdCBsYnNfZndfdGFibGUgKmZ3X3RhYmxlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTE1NS19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjE1NjpFWFBPUlRfU1lNQk9MX0dQTChsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtMTU3LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTE2OC0gKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYzoxNjk6ICogRGVwcmVjYXRlZDogdXNlIGxic19nZXRfZmlybXdhcmVfYXN5bmMoKSBpbnN0ZWFkLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xNzAtICpcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jPTY5Mz1zdGF0aWMgaW50IGlmX3NkaW9fcHJvZ19maXJtd2FyZShzdHJ1Y3QgaWZfc2Rpb19jYXJkICpjYXJkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmMtNzM1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jOjczNjpcXHRyZXQgPSBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jKGNhcmQtXFx1MDAzZXByaXYsIFxcdTAwMjZjYXJkLVxcdTAwM2VmdW5jLVxcdTAwM2VkZXYsIGNhcmQtXFx1MDAzZW1vZGVsLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jLTczNy1cXHRcXHRcXHRcXHQgICAgIGZ3X3RhYmxlLCBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYz0xOTM9c3RhdGljIGludCBpZl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jLTI4Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jOjI4MzpcXHRyID0gbGJzX2dldF9maXJtd2FyZV9hc3luYyhwcml2LCBcXHUwMDI2dWRldi1cXHUwMDNlZGV2LCBjYXJkcC1cXHUwMDNlbW9kZWwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy0yODQtXFx0XFx0XFx0XFx0ICAgZndfdGFibGUsIGlmX3VzYl9wcm9nX2Zpcm13YXJlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDA6NTAuNDY1NTE2NTUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDMwMTE1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIEZpcm13YXJlIFByb2dyYW1taW5nIEZsYWdzKipcblxuUmlnaHQsIGxldCdzIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBCZWZvcmUgSSBzdGFydCBhbnl0aGluZyBlbHNlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgb2J2aW91cywgZXNwZWNpYWxseSBzaW5jZSB3ZSdyZSBwcm9iYWJseSBqdWdnbGluZyBkaWZmZXJlbnQgcHJvZ3JhbW1pbmcgbWV0aG9kcy4gSSBuZWVkIHRvIGV4cGxpY2l0bHkgdmVyaWZ5IHRoZSBzdGF0dXMgb2YgdGhvc2UgdHdvIGZsYWdzOiBgaWZfdXNiX3Byb2dfZmlybXdhcmVgIGFuZCBgaWZfc2Rpb19kb19wcm9nX2Zpcm13YXJlYC4gSXQncyBjcnVjaWFsLCBvYnZpb3VzbHksIHRvIGNvbmZpcm0gd2hldGhlciB3ZSdyZSB0YXJnZXRpbmcgVVNCIG9yIFNESU8gZm9yIHRoZSBmaXJtd2FyZSB1cGRhdGUgcHJvY2Vzcy4gSSB3YW50IHRvIGF2b2lkIGFueSBzaWxseSBtaXN0YWtlcyBkdWUgdG8gYXNzdW1pbmcgdGhlIHdyb25nIHByb2dyYW1taW5nIG1ldGhvZC4gVGhpcyBpcyBhIHN0YW5kYXJkIHN0ZXAgSSB0YWtlIGJlZm9yZSBlbmdhZ2luZyB3aXRoIG1vcmUgYWR2YW5jZWQgcHJvY2Vzc2VzIHRvIGF2b2lkIHdhc3RpbmcgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg2NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQwOjU0LjgwODUzMDA4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MzU1NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmX3VzYl9wcm9nX2Zpcm13YXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmM9Njc9c3RhdGljIHZvaWQgaWZfdXNiX3JlY2VpdmVfZndsb2FkKHN0cnVjdCB1cmIgKnVyYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYzo2ODpzdGF0aWMgdm9pZCBpZl91c2JfcHJvZ19maXJtd2FyZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCByZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy02OS1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmM9MTkzPXN0YXRpYyBpbnQgaWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy0yODMtXFx0ciA9IGxic19nZXRfZmlybXdhcmVfYXN5bmMocHJpdiwgXFx1MDAyNnVkZXYtXFx1MDAzZWRldiwgY2FyZHAtXFx1MDAzZW1vZGVsLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmM6Mjg0OlxcdFxcdFxcdFxcdCAgIGZ3X3RhYmxlLCBpZl91c2JfcHJvZ19maXJtd2FyZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy0yODUtXFx0aWYgKHIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jPTc5MT1zdGF0aWMgaW50IGNoZWNrX2Z3ZmlsZV9mb3JtYXQoY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgdG90bGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYy04MzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl91c2IuYzo4MzE6c3RhdGljIHZvaWQgaWZfdXNiX3Byb2dfZmlybXdhcmUoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgcmV0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmMtODMyLVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MDo1NC45MjU4ODc1NDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3ODg2NDg5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBpZl91c2JfcHJvZ19maXJtd2FyZWAgQ29kZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIExldCdzIHNlZSB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlLCBzdGFydGluZyB3aXRoIGBpZl91c2JfcHJvZ19maXJtd2FyZWAuIEp1c3QgZnJvbSB0aGUgbmFtZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdlJ3JlIGxvb2tpbmcgYXQgZmlybXdhcmUgcmVsYXRlZCB0byBVU0IgcHJvZ3JhbW1pbmcuIEl0J3MgbGlrZWx5IGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LCBwcm9iYWJseSBjaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9yIHZhbGlkaXR5IG9mIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgVVNCIHByb2dyYW1tZXIuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBjaGVja2luZyBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSByZXZpc2lvbiwgYSB2YWxpZCBjb25uZWN0aW9uLCBhIGNlcnRhaW4gZmlybXdhcmUgdmVyc2lvbiBvbiB0aGUgcHJvZ3JhbW1lciBpdHNlbGYsIG9yIGV2ZW4gc29tZXRoaW5nIGFzIGJhc2ljIGFzIHdoZXRoZXIgYSBkZXZpY2UgaXMgY29ubmVjdGVkIGF0IGFsbC4gTXkgZ3Vlc3MgaXMgdGhhdCBpdCdzIHByb2JhYmx5IHRoZSB0b3AtbGV2ZWwgY29uZGl0aW9uYWwgbG9naWMgZm9yIGRlY2lkaW5nIHdoZXRoZXIgdG8gZW5nYWdlIHdpdGggdGhlIFVTQiBwcm9ncmFtbWVyIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGVuIHBlcmhhcHMgbW92aW5nIGludG8gbW9yZSBzcGVjaWFsaXplZCBjb25kaXRpb25hbCBibG9ja3MuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGVycm9yIGhhbmRsaW5nLCBhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgVVNCIHByb3RvY29sIGJlaW5nIGVtcGxveWVkLiBJIGV4cGVjdCB0byBzZWUgc3BlY2lmaWMgVVNCIHZlbmRvciBhbmQgcHJvZHVjdCBJRHMsIGFuZCBwcm9iYWJseSBkZXRhaWxzIGFib3V0IHRoZSBjb21tdW5pY2F0aW9uIGVuZHBvaW50cy4gTm93LCBsZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGluIHRoaXMgZmlsZSBhbmQgd2hhdCBpdCdzIHRyeWluZyB0byBkby4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTIyLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDA6NTguNjA0NzU0NzI0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgzMTpcXHRzdGF0aWMgdm9pZCBpZl91c2JfcHJvZ19maXJtd2FyZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCByZXQsXFxuIDgzMjpcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4gODMzOlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVudXNlZClcXG4gODM0OlxcdHtcXG4gODM1OlxcdFxcdHN0cnVjdCBpZl91c2JfY2FyZCAqY2FyZHAgPSBwcml2LVxcdTAwM2VjYXJkO1xcbiA4MzY6XFx0XFx0aW50IGkgPSAwO1xcbiA4Mzc6XFx0XFx0c3RhdGljIGludCByZXNldF9jb3VudCA9IDEwO1xcbiA4Mzg6XFx0XFxuIDgzOTpcXHRcXHRpZiAocmV0KSB7XFxuIDg0MDpcXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBmaW5kIGZpcm13YXJlICglZClcXFxcblxcXCIsIHJldCk7XFxuIDg0MTpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDg0MjpcXHRcXHR9XFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdGNhcmRwLVxcdTAwM2VmdyA9IGZ3O1xcbiA4NDU6XFx0XFx0aWYgKGNoZWNrX2Z3ZmlsZV9mb3JtYXQoY2FyZHAtXFx1MDAzZWZ3LVxcdTAwM2VkYXRhLCBjYXJkcC1cXHUwMDNlZnctXFx1MDAzZXNpemUpKSB7XFxuIDg0NjpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiA4NDc6XFx0XFx0XFx0Z290byBkb25lO1xcbiA4NDg6XFx0XFx0fVxcbiA4NDk6XFx0XFxuIDg1MDpcXHRcXHQvKiBDYW5jZWwgYW55IHBlbmRpbmcgdXNiIGJ1c2luZXNzICovXFxuIDg1MTpcXHRcXHR1c2Jfa2lsbF9hbmNob3JlZF91cmJzKFxcdTAwMjZjYXJkcC1cXHUwMDNlcnhfc3VibWl0dGVkKTtcXG4gODUyOlxcdFxcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXFx1MDAyNmNhcmRwLVxcdTAwM2V0eF9zdWJtaXR0ZWQpO1xcbiA4NTM6XFx0XFxuIDg1NDpcXHRcXHRjYXJkcC1cXHUwMDNlZndsYXN0Ymxrc2VudCA9IDA7XFxuIDg1NTpcXHRcXHRjYXJkcC1cXHUwMDNlZndkbmxkb3ZlciA9IDA7XFxuIDg1NjpcXHRcXHRjYXJkcC1cXHUwMDNldG90YWxieXRlcyA9IDA7XFxuIDg1NzpcXHRcXHRjYXJkcC1cXHUwMDNlZndmaW5hbGJsayA9IDA7XFxuIDg1ODpcXHRcXHRjYXJkcC1cXHUwMDNlYm9vdGNtZHJlc3AgPSAwO1xcbiA4NTk6XFx0XFxuIDg2MDpcXHRyZXN0YXJ0OlxcbiA4NjE6XFx0XFx0aWYgKGlmX3VzYl9zdWJtaXRfcnhfdXJiX2Z3bG9hZChjYXJkcCkgXFx1MDAzYyAwKSB7XFxuIDg2MjpcXHRcXHRcXHRsYnNfZGViX3VzYmQoXFx1MDAyNmNhcmRwLVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXYsIFxcXCJVUkIgc3VibWlzc2lvbiBpcyBmYWlsZWRcXFxcblxcXCIpO1xcbiA4NjM6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gODY0OlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gODY1OlxcdFxcdH1cXG4gODY2OlxcdFxcbiA4Njc6XFx0XFx0Y2FyZHAtXFx1MDAzZWJvb3RjbWRyZXNwID0gMDtcXG4gODY4OlxcdFxcdGRvIHtcXG4gODY5OlxcdFxcdFxcdGludCBqID0gMDtcXG4gODcwOlxcdFxcdFxcdGkrKztcXG4gODcxOlxcdFxcdFxcdGlmX3VzYl9pc3N1ZV9ib290X2NvbW1hbmQoY2FyZHAsIEJPT1RfQ01EX0ZXX0JZX1VTQik7XFxuIDg3MjpcXHRcXHRcXHQvKiB3YWl0IGZvciBjb21tYW5kIHJlc3BvbnNlICovXFxuIDg3MzpcXHRcXHRcXHRkbyB7XFxuIDg3NDpcXHRcXHRcXHRcXHRqKys7XFxuIDg3NTpcXHRcXHRcXHRcXHRtc2xlZXBfaW50ZXJydXB0aWJsZSgxMDApO1xcbiA4NzY6XFx0XFx0XFx0fSB3aGlsZSAoY2FyZHAtXFx1MDAzZWJvb3RjbWRyZXNwID09IDAgXFx1MDAyNlxcdTAwMjYgaiBcXHUwMDNjIDEwKTtcXG4gODc3OlxcdFxcdH0gd2hpbGUgKGNhcmRwLVxcdTAwM2Vib290Y21kcmVzcCA9PSAwIFxcdTAwMjZcXHUwMDI2IGkgXFx1MDAzYyA1KTtcXG4gODc4OlxcdFxcbiA4Nzk6XFx0XFx0aWYgKGNhcmRwLVxcdTAwM2Vib290Y21kcmVzcCA9PSBCT09UX0NNRF9SRVNQX05PVF9TVVBQT1JURUQpIHtcXG4gODgwOlxcdFxcdFxcdC8qIFJldHVybiB0byBub3JtYWwgb3BlcmF0aW9uICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQwOjU4LjYwNDg3MTY1NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU4OTE0MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZTpcblxuKipDaGVja2luZyBGaXJtd2FyZSBIYW5kbGluZyBpbiBgaWZfdXNiX3Byb2dfZmlybXdhcmVgKipcblxuT2theSwgc28gYGlmX3VzYl9wcm9nX2Zpcm13YXJlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBVU0IgZmlybXdhcmUgcHJvZ3JhbW1pbmcsIGFuZCBpdCBhcHBlYXJzIGl0IHNhdmVzIHRoZSBsb2FkZWQgZmlybXdhcmUsIGBmd2AsIGludG8gYGNhcmRwLVx1MDAzZWZ3YC4gTXkgbWFpbiBjb25jZXJuIHJpZ2h0IG5vdyBpcyBtZW1vcnkgbWFuYWdlbWVudC4gRGlkIGl0IHJlbGVhc2UgdGhlIGFsbG9jYXRlZCBtZW1vcnkgYWZ0ZXIgaXQgaGFzIHNhdmVkIHRoZSBmaXJtd2FyZT8gSSByZWFsbHkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBgZndgIGJ1ZmZlciBhdCBzb21lIHBvaW50IHRvIGF2b2lkIG1lbW9yeSBsZWFrcy4gSSBuZWVkIHRvIHJlYWQgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uIGNhcmVmdWxseSB0byBlbnN1cmUgdGhhdCBpdCBoYXMgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYxNSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDE6MDEuOTYzNzg3MjM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3VzYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg4MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg4MTpcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4gODgyOlxcdFxcdFxcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXFx1MDAyNmNhcmRwLVxcdTAwM2VyeF9zdWJtaXR0ZWQpO1xcbiA4ODM6XFx0XFx0XFx0dXNiX2tpbGxfYW5jaG9yZWRfdXJicyhcXHUwMDI2Y2FyZHAtXFx1MDAzZXR4X3N1Ym1pdHRlZCk7XFxuIDg4NDpcXHRcXHRcXHRpZiAoaWZfdXNiX3N1Ym1pdF9yeF91cmIoY2FyZHApIFxcdTAwM2MgMClcXG4gODg1OlxcdFxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDg4NjpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDg4NzpcXHRcXHR9IGVsc2UgaWYgKGNhcmRwLVxcdTAwM2Vib290Y21kcmVzcCBcXHUwMDNjPSAwKSB7XFxuIDg4ODpcXHRcXHRcXHRpZiAoLS1yZXNldF9jb3VudCBcXHUwMDNlPSAwKSB7XFxuIDg4OTpcXHRcXHRcXHRcXHRpZl91c2JfcmVzZXRfZGV2aWNlKGNhcmRwKTtcXG4gODkwOlxcdFxcdFxcdFxcdGdvdG8gcmVzdGFydDtcXG4gODkxOlxcdFxcdFxcdH1cXG4gODkyOlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDg5MzpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDg5NDpcXHRcXHR9XFxuIDg5NTpcXHRcXG4gODk2OlxcdFxcdGkgPSAwO1xcbiA4OTc6XFx0XFxuIDg5ODpcXHRcXHRjYXJkcC1cXHUwMDNldG90YWxieXRlcyA9IDA7XFxuIDg5OTpcXHRcXHRjYXJkcC1cXHUwMDNlZndsYXN0Ymxrc2VudCA9IDA7XFxuIDkwMDpcXHRcXHRjYXJkcC1cXHUwMDNlQ1JDX09LID0gMTtcXG4gOTAxOlxcdFxcdGNhcmRwLVxcdTAwM2Vmd2RubGRvdmVyID0gMDtcXG4gOTAyOlxcdFxcdGNhcmRwLVxcdTAwM2Vmd3NlcW51bSA9IC0xO1xcbiA5MDM6XFx0XFx0Y2FyZHAtXFx1MDAzZXRvdGFsYnl0ZXMgPSAwO1xcbiA5MDQ6XFx0XFx0Y2FyZHAtXFx1MDAzZWZ3ZmluYWxibGsgPSAwO1xcbiA5MDU6XFx0XFxuIDkwNjpcXHRcXHQvKiBTZW5kIHRoZSBmaXJzdCBmaXJtd2FyZSBwYWNrZXQuLi4gKi9cXG4gOTA3OlxcdFxcdGlmX3VzYl9zZW5kX2Z3X3BrdChjYXJkcCk7XFxuIDkwODpcXHRcXG4gOTA5OlxcdFxcdC8qIC4uLiBhbmQgd2FpdCBmb3IgdGhlIHByb2Nlc3MgdG8gY29tcGxldGUgKi9cXG4gOTEwOlxcdFxcdHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjYXJkcC1cXHUwMDNlZndfd3EsIGNhcmRwLVxcdTAwM2VzdXJwcmlzZV9yZW1vdmVkIHx8IGNhcmRwLVxcdTAwM2Vmd2RubGRvdmVyKTtcXG4gOTExOlxcdFxcbiA5MTI6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNmNhcmRwLVxcdTAwM2Vmd190aW1lb3V0KTtcXG4gOTEzOlxcdFxcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXFx1MDAyNmNhcmRwLVxcdTAwM2VyeF9zdWJtaXR0ZWQpO1xcbiA5MTQ6XFx0XFxuIDkxNTpcXHRcXHRpZiAoIWNhcmRwLVxcdTAwM2Vmd2RubGRvdmVyKSB7XFxuIDkxNjpcXHRcXHRcXHRwcl9pbmZvKFxcXCJmYWlsZWQgdG8gbG9hZCBmdywgcmVzZXR0aW5nIGRldmljZSFcXFxcblxcXCIpO1xcbiA5MTc6XFx0XFx0XFx0aWYgKC0tcmVzZXRfY291bnQgXFx1MDAzZT0gMCkge1xcbiA5MTg6XFx0XFx0XFx0XFx0aWZfdXNiX3Jlc2V0X2RldmljZShjYXJkcCk7XFxuIDkxOTpcXHRcXHRcXHRcXHRnb3RvIHJlc3RhcnQ7XFxuIDkyMDpcXHRcXHRcXHR9XFxuIDkyMTpcXHRcXG4gOTIyOlxcdFxcdFxcdHByX2luZm8oXFxcIkZXIGRvd25sb2FkIGZhaWx1cmUsIHRpbWUgPSAlZCBtc1xcXFxuXFxcIiwgaSAqIDEwMCk7XFxuIDkyMzpcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbiA5MjQ6XFx0XFx0XFx0Z290byBkb25lO1xcbiA5MjU6XFx0XFx0fVxcbiA5MjY6XFx0XFxuIDkyNzpcXHRcXHRjYXJkcC1cXHUwMDNlcHJpdi1cXHUwMDNlZndfcmVhZHkgPSAxO1xcbiA5Mjg6XFx0XFx0aWZfdXNiX3N1Ym1pdF9yeF91cmIoY2FyZHApO1xcbiA5Mjk6XFx0XFxuIDkzMDpcXHRcXHRpZiAobGJzX3N0YXJ0X2NhcmQocHJpdikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQxOjAxLjk2MzkzMTk4NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTgwNjQ3NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBpZl91c2JfcHJvZ19maXJtd2FyZWAgQ29uZGl0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGBpZl91c2JfcHJvZ19maXJtd2FyZWAgY29uZGl0aW9uIGlzIGNvbnRpbnVpbmcuLi4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGV2YWx1YXRlIHdoYXQgdGhhdCBpbXBsaWVzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGxpa2VseSBpbmRpY2F0ZXMgdGhlIHN5c3RlbSBpcyBzdGlsbCBpbiBhIFVTQiBwcm9ncmFtbWluZyBvciBmaXJtd2FyZSB1cGRhdGUgc3RhdGUuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaGFuZy11cCwgYSBjb250aW51ZWQgd2FpdCBmb3IgYSB2YWxpZCBmaXJtd2FyZSBpbWFnZSwgb3IgbWF5YmUgZXZlbiBhbiB1bmV4cGVjdGVkIHJldHVybiBmcm9tIGEgcmVsYXRlZCBmdW5jdGlvbi4gSSBoYXZlIHRvIHF1aWNrbHkgZGVkdWNlIHdoeSB0aGlzIGlzIGhhcHBlbmluZy4gSXMgdGhlcmUgYW4gaXNzdWUgd2l0aCB0aGUgVVNCIGNvbm5lY3Rpb24sIHRoZSBmaXJtd2FyZSBpbWFnZSBpdHNlbGYsIHRoZSBwcm9ncmFtbWluZyBzZXF1ZW5jZSwgb3IgZXZlbiB0aGUgaGFyZHdhcmUgaW52b2x2ZWQ/IEkgbmVlZCB0byBjb25zaWRlciBhbGwgcG9zc2libGUgZmFjdG9ycyBjb250cmlidXRpbmcgdG8gdGhpcyBvbmdvaW5nIGNvbmRpdGlvbiwgc2luY2UgdGhpcyBjb3VsZCBiZSBhIHBvaW50IG9mIGZhaWx1cmUgZm9yIHRoZSB1cGRhdGUgcHJvY2VkdXJlIG9yLCBpbiB0aGUgd29yc3QgY2FzZSwgYnJpY2tpbmcgdGhlIGRldmljZS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBwYXRoIHRoYXQgdXNlcyBgaWZfdXNiX3Byb2dfZmlybXdhcmVgIHRvIHVuZGVyc3RhbmQgdGhlIHN0YXRlIGl0IHJlcHJlc2VudHMgYW5kIHBvdGVudGlhbCBuZXh0IHN0ZXBzLCBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjE4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MTowNS41NDQ1ODExNjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTMxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTMxOlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gOTMyOlxcdFxcbiA5MzM6XFx0XFx0aWZfdXNiX3NldHVwX2Zpcm13YXJlKHByaXYpO1xcbiA5MzQ6XFx0XFxuIDkzNTpcXHRcXHQvKlxcbiA5MzY6XFx0XFx0ICogRUhTX1JFTU9WRV9XQUtFVVAgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgdmVyc2lvbnMgb2YgdGhlIGZpcm13YXJlLlxcbiA5Mzc6XFx0XFx0ICovXFxuIDkzODpcXHRcXHRwcml2LVxcdTAwM2V3b2xfY3JpdGVyaWEgPSBFSFNfUkVNT1ZFX1dBS0VVUDtcXG4gOTM5OlxcdFxcdGlmIChsYnNfaG9zdF9zbGVlcF9jZmcocHJpdiwgcHJpdi1cXHUwMDNld29sX2NyaXRlcmlhLCBOVUxMKSlcXG4gOTQwOlxcdFxcdFxcdHByaXYtXFx1MDAzZWVoc19yZW1vdmVfc3VwcG9ydGVkID0gZmFsc2U7XFxuIDk0MTpcXHRcXG4gOTQyOlxcdCBkb25lOlxcbiA5NDM6XFx0XFx0Y2FyZHAtXFx1MDAzZWZ3ID0gTlVMTDtcXG4gOTQ0OlxcdH1cXG4gOTQ1OlxcdFxcbiA5NDY6XFx0XFxuIDk0NzpcXHQjaWZkZWYgQ09ORklHX1BNXFxuIDk0ODpcXHRzdGF0aWMgaW50IGlmX3VzYl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcXG4gOTQ5OlxcdHtcXG4gOTUwOlxcdFxcdHN0cnVjdCBpZl91c2JfY2FyZCAqY2FyZHAgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xcbiA5NTE6XFx0XFx0c3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY2FyZHAtXFx1MDAzZXByaXY7XFxuIDk1MjpcXHRcXHRpbnQgcmV0O1xcbiA5NTM6XFx0XFxuIDk1NDpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcHNzdGF0ZSAhPSBQU19TVEFURV9GVUxMX1BPV0VSKSB7XFxuIDk1NTpcXHRcXHRcXHRyZXQgPSAtMTtcXG4gOTU2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA5NTc6XFx0XFx0fVxcbiA5NTg6XFx0XFxuIDk1OTpcXHQjaWZkZWYgQ09ORklHX09MUENcXG4gOTYwOlxcdFxcdGlmIChtYWNoaW5lX2lzX29scGMoKSkge1xcbiA5NjE6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZXdvbF9jcml0ZXJpYSA9PSBFSFNfUkVNT1ZFX1dBS0VVUClcXG4gOTYyOlxcdFxcdFxcdFxcdG9scGNfZWNfd2FrZXVwX2NsZWFyKEVDX1NDSV9TUkNfV0xBTik7XFxuIDk2MzpcXHRcXHRcXHRlbHNlXFxuIDk2NDpcXHRcXHRcXHRcXHRvbHBjX2VjX3dha2V1cF9zZXQoRUNfU0NJX1NSQ19XTEFOKTtcXG4gOTY1OlxcdFxcdH1cXG4gOTY2OlxcdCNlbmRpZlxcbiA5Njc6XFx0XFxuIDk2ODpcXHRcXHRyZXQgPSBsYnNfc3VzcGVuZChwcml2KTtcXG4gOTY5OlxcdFxcdGlmIChyZXQpXFxuIDk3MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gOTcxOlxcdFxcbiA5NzI6XFx0XFx0LyogVW5saW5rIHR4IFxcdTAwMjYgcnggdXJiICovXFxuIDk3MzpcXHRcXHR1c2Jfa2lsbF9hbmNob3JlZF91cmJzKFxcdTAwMjZjYXJkcC1cXHUwMDNldHhfc3VibWl0dGVkKTtcXG4gOTc0OlxcdFxcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXFx1MDAyNmNhcmRwLVxcdTAwM2VyeF9zdWJtaXR0ZWQpO1xcbiA5NzU6XFx0XFxuIDk3NjpcXHQgb3V0OlxcbiA5Nzc6XFx0XFx0cmV0dXJuIHJldDtcXG4gOTc4OlxcdH1cXG4gOTc5OlxcdFxcbiA5ODA6XFx0c3RhdGljIGludCBpZl91c2JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MTowNS41NDQ3NDkyNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxNzUzOTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlVTQiBGaXJtd2FyZSBQcm9ncmFtbWluZyBHb3RjaGEhKipcblxuSG9sZCBvbiBhIHNlY29uZC4uLiBqdXN0IHJlLXJlYWRpbmcgdGhlIGNvZGUgaW4gYGlmX3VzYl9wcm9nX2Zpcm13YXJlYC4uLiBkYW5nIGl0ISBJIGtuZXcgSSBzaG91bGQgaGF2ZSBiZWVuIG1vcmUgY2FyZWZ1bC4gSXQgKipkb2Vzbid0KiogYWN0dWFsbHkgYGZyZWUoZncpYCEgSXQgY2xldmVybHkgc2V0cyBgY2FyZHAtXHUwMDNlZncgPSBOVUxMO2AgYXQgdGhlIGVuZCBvZiB0aGUgcHJvY2Vzcywgd2hpY2ggaXMgaG93IGl0IHNpZ25hbHMgdGhhdCB0aGUgZmlybXdhcmUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhhdCdzIGEgY2xldmVyIHRyaWNrLCBidXQgZWFzeSB0byBtaXNzLiBJIGhhdmUgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcyB0byBiZSBjZXJ0YWluIHRoYXQgSSBkb24ndCBpbnRyb2R1Y2UgYSBtZW1vcnkgbGVhayBzb21ld2hlcmUgZWxzZS5cblxuTm93LCBsZXQncyBzZWUsIHdoYXQgYWJvdXQgdGhhdCBgaWZfc2Rpb19kb19wcm9nX2Zpcm13YXJlYCByb3V0aW5lPyBJIG5lZWQgdG8gcXVpY2tseSBjb21wYXJlIHRoZSBhcHByb2FjaCB0aGVyZS4gQXJlIHdlIHNldHRpbmcgdGhlIGBjYXJkcC1cdTAwM2VmdyA9IE5VTEw7YCBwb2ludGVyIHRvbz8gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSBoYXZlIHRoZSByaWdodCBhcHByb2FjaCwgdG8gcHJldmVudCBlaXRoZXIgYSBtZW1vcnkgbGVhaywgb3IgYSBkb3VibGUtZnJlZSBzaXR1YXRpb24uIFRoaXMgYXJlYSBvZiB0aGUgY29kZSBpcyBoaWdobHkgc2Vuc2l0aXZlLCBzbyBhbnkgcG90ZW50aWFsIGVycm9ycyBuZWVkIHRvIGJlIGZvdW5kIHF1aWNrbHkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQxOjA5LjA2MjI5MDQ5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NjQ4OTg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM9NTM2PXN0YXRpYyBpbnQgaWZfc2Rpb19wcm9nX3JlYWwoc3RydWN0IGlmX3NkaW9fY2FyZCAqY2FyZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jLTY2Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3NkaW8uYzo2Njg6c3RhdGljIHZvaWQgaWZfc2Rpb19kb19wcm9nX2Zpcm13YXJlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IHJldCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3NkaW8uYy02NjktXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmhlbHBlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jPTY5Mz1zdGF0aWMgaW50IGlmX3NkaW9fcHJvZ19maXJtd2FyZShzdHJ1Y3QgaWZfc2Rpb19jYXJkICpjYXJkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmMtNzM2LVxcdHJldCA9IGxic19nZXRfZmlybXdhcmVfYXN5bmMoY2FyZC1cXHUwMDNlcHJpdiwgXFx1MDAyNmNhcmQtXFx1MDAzZWZ1bmMtXFx1MDAzZWRldiwgY2FyZC1cXHUwMDNlbW9kZWwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM6NzM3OlxcdFxcdFxcdFxcdCAgICAgZndfdGFibGUsIGlmX3NkaW9fZG9fcHJvZ19maXJtd2FyZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmMtNzM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MToxMC4xNDg3ODcxNThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyODQxMDE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBTRElPOlxuXG4qKkRpdmluZyBpbnRvIGBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmVgKipcblxuUmlnaHQsIGxldCdzIGdldCBpbnRvIGBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmVgLiBTb3VuZHMgbGlrZSB3ZSdyZSBhYm91dCB0byBkZWx2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgZmlybXdhcmUgcHJvZ3JhbW1pbmcgdmlhIFNESU8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcm91dGluZSB0aG9yb3VnaGx5LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcXVlc3Rpb25zIGFib3V0IGVycm9yIGhhbmRsaW5nLCBpbnRlcnJ1cHQgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIElzIHRoaXMgaGFuZGxpbmcgdGhlIGluaXRpYWwgbG9hZCwgdXBkYXRlcywgb3IgYm90aD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHByb3ByaWV0YXJ5IG9yIHN0YW5kYXJkaXplZCBwcm90b2NvbCBvdmVyIHRoZSBTRElPIGludGVyZmFjZSBmb3IgdGhlIGZpcm13YXJlIHRyYW5zZmVyPyBBbnkgbWVudGlvbiBvZiBETUE/IFRoYXQgd291bGQgYmUgZ29vZCB0byB1bmRlcnN0YW5kLiBJJ20ga2VlbiB0byBsb29rIGZvciBhbnkgb3B0aW1pemF0aW9ucyDigJMgaXMgaXQgY2hlY2tpbmcgZGV2aWNlIGNvbXBhdGliaWxpdHkgYmVmb3JlIHRoZSBwcm9ncmFtbWluZz8gSXMgdGhlcmUgYSB0aW1lb3V0IG1lY2hhbmlzbSBpbiBwbGFjZSwgYW5kIGlmIHNvLCB3aGF0J3MgaXRzIGNvbmZpZ3VyYXRpb24/IEkgYWxzbyBob3BlIHRvIHNlZSBzb21lIHNvcnQgb2YgdmVyaWZpY2F0aW9uIOKAkyBjaGVja3N1bXMgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIHRvIGVuc3VyZSBmaXJtd2FyZSBpbnRlZ3JpdHkuIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgaGFyZHdhcmUgcGxhdGZvcm0gaXMgY3JpdGljYWwsIHNvIGFueSByZWZlcmVuY2VzIHRvIHNwZWNpZmljIHJlZ2lzdGVycywgbWVtb3J5IGFkZHJlc3Nlcywgb3IgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBpbXBvcnRhbnQuIEkgbmVlZCB0byBtZW50YWxseSBwcmVwYXJlIG15c2VsZiBmb3IgcG90ZW50aWFsIGNoYWxsZW5nZXMgYXNzb2NpYXRlZCB3aXRoIFNESU8ncyBjb21wbGV4aXRpZXMsIGxpa2UgdGhlIGludGVycnVwdCBtYXNraW5nLCBjb21tYW5kIHNlcXVlbmNlIGFuZCB0aW1pbmdzLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGUgZnVuY3Rpb24gbWFuYWdlcyBwb3dlciBjb25zaWRlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNTcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MToxNC4wNzcxOTg5NjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjY4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjY4OlxcdHN0YXRpYyB2b2lkIGlmX3NkaW9fZG9fcHJvZ19maXJtd2FyZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCByZXQsXFxuIDY2OTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaGVscGVyLFxcbiA2NzA6XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKm1haW5mdylcXG4gNjcxOlxcdHtcXG4gNjcyOlxcdFxcdHN0cnVjdCBpZl9zZGlvX2NhcmQgKmNhcmQgPSBwcml2LVxcdTAwM2VjYXJkO1xcbiA2NzM6XFx0XFxuIDY3NDpcXHRcXHRpZiAocmV0KSB7XFxuIDY3NTpcXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBmaW5kIGZpcm13YXJlICglZClcXFxcblxcXCIsIHJldCk7XFxuIDY3NjpcXHRcXHRcXHRyZXR1cm47XFxuIDY3NzpcXHRcXHR9XFxuIDY3ODpcXHRcXG4gNjc5OlxcdFxcdHJldCA9IGlmX3NkaW9fcHJvZ19oZWxwZXIoY2FyZCwgaGVscGVyKTtcXG4gNjgwOlxcdFxcdGlmIChyZXQpXFxuIDY4MTpcXHRcXHRcXHRyZXR1cm47XFxuIDY4MjpcXHRcXG4gNjgzOlxcdFxcdGxic19kZWJfc2RpbyhcXFwiSGVscGVyIGZpcm13YXJlIGxvYWRlZFxcXFxuXFxcIik7XFxuIDY4NDpcXHRcXG4gNjg1OlxcdFxcdHJldCA9IGlmX3NkaW9fcHJvZ19yZWFsKGNhcmQsIG1haW5mdyk7XFxuIDY4NjpcXHRcXHRpZiAocmV0KVxcbiA2ODc6XFx0XFx0XFx0cmV0dXJuO1xcbiA2ODg6XFx0XFxuIDY4OTpcXHRcXHRsYnNfZGViX3NkaW8oXFxcIkZpcm13YXJlIGxvYWRlZFxcXFxuXFxcIik7XFxuIDY5MDpcXHRcXHRpZl9zZGlvX2ZpbmlzaF9wb3dlcl9vbihjYXJkKTtcXG4gNjkxOlxcdH1cXG4gNjkyOlxcdFxcbiA2OTM6XFx0c3RhdGljIGludCBpZl9zZGlvX3Byb2dfZmlybXdhcmUoc3RydWN0IGlmX3NkaW9fY2FyZCAqY2FyZClcXG4gNjk0OlxcdHtcXG4gNjk1OlxcdFxcdGludCByZXQ7XFxuIDY5NjpcXHRcXHR1MTYgc2NyYXRjaDtcXG4gNjk3OlxcdFxcbiA2OTg6XFx0XFx0LypcXG4gNjk5OlxcdFxcdCAqIERpc2FibGUgaW50ZXJydXB0c1xcbiA3MDA6XFx0XFx0ICovXFxuIDcwMTpcXHRcXHRzZGlvX2NsYWltX2hvc3QoY2FyZC1cXHUwMDNlZnVuYyk7XFxuIDcwMjpcXHRcXHRzZGlvX3dyaXRlYihjYXJkLVxcdTAwM2VmdW5jLCAweDAwLCBJRl9TRElPX0hfSU5UX01BU0ssIFxcdTAwMjZyZXQpO1xcbiA3MDM6XFx0XFx0c2Rpb19yZWxlYXNlX2hvc3QoY2FyZC1cXHUwMDNlZnVuYyk7XFxuIDcwNDpcXHRcXG4gNzA1OlxcdFxcdHNkaW9fY2xhaW1faG9zdChjYXJkLVxcdTAwM2VmdW5jKTtcXG4gNzA2OlxcdFxcdHNjcmF0Y2ggPSBpZl9zZGlvX3JlYWRfc2NyYXRjaChjYXJkLCBcXHUwMDI2cmV0KTtcXG4gNzA3OlxcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtXFx1MDAzZWZ1bmMpO1xcbiA3MDg6XFx0XFxuIDcwOTpcXHRcXHRsYnNfZGViX3NkaW8oXFxcImZpcm13YXJlIHN0YXR1cyA9ICUjeFxcXFxuXFxcIiwgc2NyYXRjaCk7XFxuIDcxMDpcXHRcXHRsYnNfZGViX3NkaW8oXFxcInNjcmF0Y2ggcmV0ID0gJWRcXFxcblxcXCIsIHJldCk7XFxuIDcxMTpcXHRcXG4gNzEyOlxcdFxcdGlmIChyZXQpXFxuIDcxMzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNzE0OlxcdFxcbiA3MTU6XFx0XFxuIDcxNjpcXHRcXHQvKlxcbiA3MTc6XFx0XFx0ICogVGhlIG1hbnVhbCBjbGVhcmx5IGRlc2NyaWJlcyB0aGF0IEZFREMgaXMgdGhlIHJpZ2h0IGNvZGUgdG8gdXNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQxOjE0LjA3NzI5ODIyMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTY0MTM5NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpcm13YXJlIExvYWRpbmcgR290Y2hhcyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgYGlmX3NkaW9fZG9fcHJvZ19maXJtd2FyZWAgZnVuY3Rpb24uLi4gaXQncyBsb29raW5nIGxpa2UgaXQncyAqbm90KiBmcmVlaW5nIHRoZSBgaGVscGVyYCBvciBgbWFpbmZ3YCBwb2ludGVycyBhZnRlciB1c2UuIFRoYXQncyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayByaWdodCB0aGVyZSEgTGV0J3MgZmlsZSB0aGF0IGF3YXkgZm9yIGEgbGF0ZXIgbG9vay5cblxuQnV0IGhhbmcgb24sIGxldCBtZSB0cmFjZSB0aGlzIGJhY2sgYSBiaXQuIGBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jYCBjYWxscyBgZG9fbG9hZF9maXJtd2FyZWAsIHdoaWNoIGluIHR1cm4sIHVzZXMgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YC4gQWgsIGFuZCAqdGhhdCogZnVuY3Rpb24gaXMgYXN5bmNocm9ub3VzLCB3aGljaCBtZWFucyB3ZSBoYXZlIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHdoZW4gdGhlIGZpcm13YXJlIGxvYWRpbmcgaXMgY29tcGxldGUuIFRoZSBjYWxsYmFjayBmb3IgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCBpcyBlaXRoZXIgYGhlbHBlcl9maXJtd2FyZV9jYmAgb3IgYG1haW5fZmlybXdhcmVfY2JgLCBhbmQsIGZyb20gdGhlIGxvb2tzIG9mIHRoZSBjYWxsLCBpdCBzaG91bGQgYmUgYG1haW5fZmlybXdhcmVfY2JgLiBPa2F5LCBsZXQncyBkaXZlIGludG8gYG1haW5fZmlybXdhcmVfY2JgIGFuZCBtYWtlIHN1cmUgaXQncyBoYW5kbGluZyB0aGUgcmVzb3VyY2VzIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwOCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQxOjE5LjY0MTQzOTk5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDU6XFx0c3RhdGljIHZvaWQgbWFpbl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxcbiAgNDY6XFx0e1xcbiAgNDc6XFx0XFx0c3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY29udGV4dDtcXG4gIDQ4OlxcdFxcbiAgNDk6XFx0XFx0aWYgKCFmaXJtd2FyZSkge1xcbiAgNTA6XFx0XFx0XFx0LyogRmFpbGVkIHRvIGZpbmQgZmlybXdhcmU6IHRyeSBuZXh0IHRhYmxlIGVudHJ5ICovXFxuICA1MTpcXHRcXHRcXHRsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZShwcml2KTtcXG4gIDUyOlxcdFxcdFxcdHJldHVybjtcXG4gIDUzOlxcdFxcdH1cXG4gIDU0OlxcdFxcbiAgNTU6XFx0XFx0LyogRmlybXdhcmUgZm91bmQhICovXFxuICA1NjpcXHRcXHRsYnNfZndfbG9hZGVkKHByaXYsIDAsIHByaXYtXFx1MDAzZWhlbHBlcl9mdywgZmlybXdhcmUpO1xcbiAgNTc6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWhlbHBlcl9mdykge1xcbiAgNTg6XFx0XFx0XFx0cmVsZWFzZV9maXJtd2FyZSAocHJpdi1cXHUwMDNlaGVscGVyX2Z3KTtcXG4gIDU5OlxcdFxcdFxcdHByaXYtXFx1MDAzZWhlbHBlcl9mdyA9IE5VTEw7XFxuICA2MDpcXHRcXHR9XFxuICA2MTpcXHRcXHRyZWxlYXNlX2Zpcm13YXJlIChmaXJtd2FyZSk7XFxuICA2MjpcXHR9XFxuICA2MzpcXHRcXG4gIDY0OlxcdHN0YXRpYyB2b2lkIGhlbHBlcl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxcbiAgNjU6XFx0e1xcbiAgNjY6XFx0XFx0c3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY29udGV4dDtcXG4gIDY3OlxcdFxcbiAgNjg6XFx0XFx0aWYgKCFmaXJtd2FyZSkge1xcbiAgNjk6XFx0XFx0XFx0LyogRmFpbGVkIHRvIGZpbmQgZmlybXdhcmU6IHRyeSBuZXh0IHRhYmxlIGVudHJ5ICovXFxuICA3MDpcXHRcXHRcXHRsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZShwcml2KTtcXG4gIDcxOlxcdFxcdFxcdHJldHVybjtcXG4gIDcyOlxcdFxcdH1cXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0LyogRmlybXdhcmUgZm91bmQhICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQxOjE5LjY0MTUwNzQ5MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDMwMjIzNzMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhIEZpcm13YXJlIExvYWRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGhlcmUgc3RhcnRzIHdpdGggY29uZmlybWluZyBob3cgYG1haW5fZmlybXdhcmVfY2JgIGhhbmRsZXMgZnJlZWluZyBmaXJtd2FyZSByZXNvdXJjZXMuIFllcywgaXQgZG9lcyByZWxlYXNlIGJvdGggYHByaXYtXHUwMDNlaGVscGVyX2Z3YCBhbmQgYGZpcm13YXJlYCwgd2hpY2ggaXMgYG1haW5md2AuIFRoZSBvcmRlciBpcyBjcnVjaWFsOiBgbGJzX2Z3X2xvYWRlZGAgaXMgY2FsbGVkIGZpcnN0LCBhbmQgKnRoZW4qIHRoZSBgcmVsZWFzZV9maXJtd2FyZWAgY2FsbHMgYXJlIG1hZGUuIEkgcmVjYWxsIHRoZSBjb21tZW50IGluIGBsYnNfZndfbG9hZGVkYCBzdGF0aW5nIHRoYXQgdGhlIFwiVXNlciBtdXN0IGZyZWUgaGVscGVyL21haW5mdy5cIiAgQnV0IHRoaXMgY29kZSAqaXMqIGZyZWVpbmcgdGhlbS4gQWhhISBUaGF0IG1lYW5zIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgdGhlIFwidXNlcixcIiAqbXVzdCBub3QqIGZyZWUgdGhlIGZpcm13YXJlIGlmIGBtYWluX2Zpcm13YXJlX2NiYCBnZXRzIGNhbGxlZC4gTGV0J3Mgc2VlIGlmIHRoYXQncyB0cnVlIHdpdGggYGlmX3VzYl9wcm9nX2Zpcm13YXJlYCBhbmQgYGlmX3NkaW9fZG9fcHJvZ19maXJtd2FyZWAsIHdoaWNoIGFyZSBVU0IgYW5kIFNESU8gZnVuY3Rpb25zIHJlc3BlY3RpdmVseS4gSSBjb25maXJtIHRoYXQgdGhlc2UgZnVuY3Rpb25zICpkbyBub3QqIGZyZWUgYGhlbHBlcl9md2Agb3IgYG1haW5md2AuXG5cbk5vdywgdGhlIGZvY3VzIHNoaWZ0cyB0byBgaGVscGVyX2Zpcm13YXJlX2NiYC4gVGhlIGNvZGUgaGFzIGEgc3RydWN0dXJlOiBpZiBgZmlybXdhcmVgIGlzIG5vdCBmb3VuZCwgaXQgdHJpZXMgdG8gbG9hZCB0aGUgbmV4dCB0YWJsZSBlbnRyeS4gQnV0LCB3aGF0IGlmIHRoZSBmaXJtd2FyZSAqaXMqIGZvdW5kPyBUaGUgcGF0Y2ggaW5jbHVkZXMgYSBgcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSlgIGNhbGwgd2l0aGluIGFuIGBlbHNlYCBicmFuY2ggb2YgYGhlbHBlcl9maXJtd2FyZV9jYmAhIE9rYXksIEkgdW5kZXJzdGFuZDsgd2l0aG91dCB0aGUgcGF0Y2gsIHRoZXJlIHdvdWxkIGhhdmUgYmVlbiBhIG1lbW9yeSBsZWFrIHdoZXJlIHRoZSBgZmlybXdhcmVgIHJlc291cmNlIHdvdWxkIG5vdCBoYXZlIGJlZW4gZnJlZWQgd2hlbiBvbmx5IHRoZSBoZWxwZXIgZmlybXdhcmUgd2FzIG5lZWRlZC4gVGhlIHBhdGNoIGlzIG5vdyBmaXhpbmcgYSBtZW1vcnkgbGVhay5cblxuU28sIGlzIHRoaXMgYSBmdW5jdGlvbmFsIGNoYW5nZT8gVGVjaG5pY2FsbHksIHllcywgaXQgbW9kaWZpZXMgdGhlIHN5c3RlbSBzdGF0ZSBieSBmcmVlaW5nIG1lbW9yeS4gSXMgaXQgKndvcnRoKiBmdXp6aW5nPyBBIHNpbXBsZSBtZW1vcnkgbGVhayBmaXggbGlrZSB0aGlzIGlzIHVubGlrZWx5IHRvIGludHJvZHVjZSBuZXcgcmVhY2hhYmxlIHN0YXRlcyB0aGF0IG5lZWQgZnV6emluZywgdW5sZXNzIHRoZSBmcmVlIG9wZXJhdGlvbiBpdHNlbGYgY2FuIGxlYWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSwgaWYgdGhlIG1lbW9yeSBpcyBzdGlsbCBpbiB1c2UuXG5cbkRvZXMgdGhlIGBwcml2LVx1MDAzZWZ3X2NhbGxiYWNrYCBzYXZlIHRoZSBgZmlybXdhcmVgIHBvaW50ZXIsIHdoaWNoIGNvdWxkIGNhdXNlIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlPyBMZXQncyBjaGVjayBgaWZfdXNiX3Byb2dfZmlybXdhcmVgLiBJdCAqZG9lcyogc2F2ZSBgZndgIHRvIGBjYXJkcC1cdTAwM2Vmd2AsIGJ1dCBjcnVjaWFsbHksIGl0IHNldHMgYGNhcmRwLVx1MDAzZWZ3YCB0byBgTlVMTGAgYmVmb3JlIHJldHVybmluZy4gTm93LCBsZXQncyBhbHNvIGNoZWNrIGBpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmVgLiBJdCB1c2VzIGBoZWxwZXJgIGFuZCBgbWFpbmZ3YCBzeW5jaHJvbm91c2x5LiBUaGF0J3MgZ29vZC5cblxuVGhlcmVmb3JlLCBhZGRpbmcgYHJlbGVhc2VfZmlybXdhcmVgIGlzIHRoZSBjb3JyZWN0IGNvdXJzZSBvZiBhY3Rpb24sIGFuZCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgKnNob3VsZCogd2UgZnV6eiBpdD8gSWYgd2UgZnV6eiBpdCwgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyAqd2lsbCogYmUgdHJpZ2dlcmVkLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcuIEhvd2V2ZXIsIFN5emthbGxlciBhbHJlYWR5IGZ1enplcyBVU0IgYW5kIFNESU8sIHdoaWNoIGlzIHdoZXJlIHRoaXMgY29kZSByZXNpZGVzIChpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jYCkuIFRoZSBwYXRjaCBpdHNlbGYgaXMgc21hbGwsIGl0IGp1c3QgYWRkczogYHJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpO2AuXG5cbkdpdmVuIGFsbCBvZiB0aGlzIGFuZCBjb25zaWRlcmluZyB0aGUgaW5zdHJ1Y3Rpb25zLCB3aGF0IGlzIHRoZSBiZXN0IHRoaW5nIHRvIGRvPyBUbyBwcm92aWRlIHRoZSBtb3N0IGNvbXByZWhlbnNpdmUgZXZhbHVhdGlvbiwgSSBzaG91bGQgaW5kaWNhdGUgdGhhdCBmdXp6aW5nIGlzIGFwcHJvcHJpYXRlLiBUaGUgYWRkZWQgY29kZSBpcyByZWFjaGVkIHZpYSB0aGUgVVNCIGdhZGdldCBvciBTRElPIHBhdGguXG5cblRoZXJlZm9yZSwgSSdkIHNheSBgV29ydGhGdXp6aW5nPXRydWVgLiBUbyBnbyB3aXRoIHRoaXMsIEkgbmVlZCB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmc6IGBGb2N1c1N5bWJvbHM6IGhlbHBlcl9maXJtd2FyZV9jYmAsIGBsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jYC4gQW5kIGZvciBgRW5hYmxlQ29uZmlnc2AsIEknZCBuZWVkOiBgTElCRVJUQVNgLCBgTElCRVJUQVNfVVNCYCwgYExJQkVSVEFTX1NESU9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA3MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MTozOS45NDM3NDcyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU5Njg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTElCRVJUQVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnOjI6Y29uZmlnIExJQkVSVEFTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgOHh4eCBMaWJlcnRhcyBXTEFOIGRyaXZlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnOjEwOmNvbmZpZyBMSUJFUlRBU19VU0JcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgTGliZXJ0YXMgODM4OCBVU0IgODAyLjExYi9nIGNhcmRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTE1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZzoxNjpjb25maWcgTElCRVJUQVNfU0RJT1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0xNy1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBMaWJlcnRhcyA4Mzg1Lzg2ODYvODY4OCBTRElPIDgwMi4xMWIvZyBjYXJkc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0yMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWc6MjI6Y29uZmlnIExJQkVSVEFTX1NQSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBMaWJlcnRhcyA4Njg2IFNQSSA4MDIuMTFiL2cgY2FyZHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWctMjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnOjI4OmNvbmZpZyBMSUJFUlRBU19ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0yOS1cXHRib29sIFxcXCJFbmFibGUgZnVsbCBkZWJ1Z2dpbmcgb3V0cHV0IGluIHRoZSBMaWJlcnRhcyBtb2R1bGUuXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnLTMzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZzozNDpjb25maWcgTElCRVJUQVNfTUVTSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy0zNS1cXHRib29sIFxcXCJFbmFibGUgbWVzaCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MTo0MC4wMDMzNDk3NzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI4NTYxMzkwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgYW5kIEZ1enppbmcgV29ydGhpbmVzcyBvZiBhIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXMgdGhpcyBjb2RlIGV2ZW4gcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFllcywgZGVmaW5pdGVseS4gVVNCIGdhZGdldCBlbXVsYXRpb24gKGxpa2UgZHVtbXlfaGNkKSBhbmQgcG90ZW50aWFsbHkgU0RJTyBlbXVsYXRpb24sIGlmIHRoYXQncyBpbiBwbGF5LCBwcm92aWRlIGEgcGF0aC4gVVNCIGlzIHRoZSBndWFyYW50ZWVkIG9uZSB0aG91Z2gsIHNvIGdvb2QgdG8gZ28gdGhlcmUuXG5cbk5vdywgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCDigJMgcmlnaHQsIHRoYXQgcmVxdWlyZXMgdGhlIGZpcm13YXJlIHRvICphY3R1YWxseSogYmUgcHJlc2VudCBvbiB0aGUgZmlsZXN5c3RlbSwgb3IgaXQnbGwgZmFpbC4gQW5kIGlmIGl0IGZhaWxzLCB0aGF0IGBoZWxwZXJfZmlybXdhcmVfY2JgIGNhbGxiYWNrIGlzIGludm9rZWQsIGJ1dCB3aXRoIGBmaXJtd2FyZSA9PSBOVUxMYC4gQWgsIHJpZ2h0LCB0aGF0J3Mgd2hlcmUgdGhlIHBhdGNoIGNvbWVzIGluIHRvIHByZXZlbnQgdGhlIG1lbW9yeSBsZWFrLlxuXG5gYGBjXG5cdGlmICghZmlybXdhcmUpIHtcblx0XHQvKiBGYWlsZWQgdG8gZmluZCBoZWxwZXIgZmlybXdhcmUuICovXG5cdFx0bGJzX2Z3X2xvYWRlZChwcml2LCAtRU5PRU5ULCBOVUxMLCBOVUxMKTtcblx0XHRyZXR1cm47XG5cdH1cbmBgYFxuXG5Pa2F5LCB0aGUgcGF0Y2ggaXRzZWxmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6XG5gYGBjXG4gXHRpZiAocHJpdi1cdTAwM2Vmd19uYW1lKSB7XG4gXHRcdC8qIFdlIG5lZWQgYSBtYWluIGZpcm13YXJlLiAqL1xuIFx0XHRyZXF1ZXN0X2Zpcm13YXJlX25vd2FpdChUSElTX01PRFVMRSwgdHJ1ZSwgcHJpdi1cdTAwM2Vmd19uYW1lLFxuIFx0XHRcdFx0XHRwcml2LVx1MDAzZWRldiwgR0ZQX0tFUk5FTCwgcHJpdixcbiBcdFx0XHRcdFx0bWFpbl9maXJtd2FyZV9jYik7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBObyBtYWluIGZpcm13YXJlIG5lZWRlZCBmb3IgdGhpcyBoZWxwZXIgLS1cdTAwM2Ugc3VjY2VzcyEgKi9cbiBcdFx0bGJzX2Z3X2xvYWRlZChwcml2LCAwLCBmaXJtd2FyZSwgTlVMTCk7XG4rXHRcdHJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpO1xuIFx0fVxuYGBgXG5cbklmIGBmaXJtd2FyZWAgaXNuJ3QgTlVMTCwgdGhlIGxvYWQgd2FzIHN1Y2Nlc3NmdWwuIEluIGEgZnV6emluZyBzZXR1cCwgYSBzdWNjZXNzZnVsIGZpcm13YXJlIGxvYWQgdXN1YWxseSBoaW5nZXMgb24gdGhlIGZ1enplciBwcm92aWRpbmcgdGhlIGZpcm13YXJlIHZpYSB0aGUgZmlybXdhcmUgZmFsbGJhY2sgbWVjaGFuaXNtIChzeXNmcykgb3IgdGhlIGZpcm13YXJlIGV4aXN0aW5nIGluIHRoZSByb290ZnMuIFN5emthbGxlciwgdGhhbmtmdWxseSwgaGFzIHRoZSBhYmlsaXR5IHRvIGludGVyY2VwdCBmaXJtd2FyZSByZXF1ZXN0cyBhbmQgc3VwcGx5IGR1bW15IGZpcm13YXJlLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5CdXQsIGlzIGEgc2ltcGxlIG1lbW9yeSBsZWFrICp3b3J0aCogZnV6emluZz8gVGhlIGd1aWRlbGluZXMgSSdtIHVzaW5nIHNheSBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXCIgVGhpcyBpcyBhIG1lbW9yeSBsZWFrIGZpeC4gSXQgZG9lc24ndCBmdW5jdGlvbmFsbHkgYWx0ZXIgZmxvdywgaXQganVzdCBmcmVlcyBtZW1vcnkuXG5cbkhvd2V2ZXIsIGlmIGl0J3MgYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSByaXNrLCB0aGF0IG1pZ2h0IHdhcnJhbnQgZnV6emluZy4gQnV0LCB3YWl0LCB3ZSBsb29rZWQgYXQgdGhlIGNvZGUsIGl04oCZcyBub3QgVUFGLCBzbyB0aGF0J3Mgbm90IHRoZSBpc3N1ZS5cblxuTGV0J3MgY2hlY2sgdGhlIHByb21wdCBhZ2FpbjogXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlwiIEl0ICpkb2VzKiBtb2RpZnkgYSBkcml2ZXIuIEl0ICppcyogZXhlY3V0YWJsZS4gSXMgaXQgXCJmdW5jdGlvbmFsXCI/IFllcywgaXQgZml4ZXMgYSBtZW1vcnkgbGVhayB3aGljaCBpcyBhIGZ1bmN0aW9uYWxpdHkuXG5cbk9rYXksIEknbSBnb2luZyB0byBnbyB3aXRoIFdvcnRoRnV6emluZz10cnVlLiBGb2N1c1N5bWJvbHM9W1wiaGVscGVyX2Zpcm13YXJlX2NiXCJdLCBhbmQgbGV04oCZcyBlbmFibGUgdGhlIGNvbmZpZ3M6IEVuYWJsZUNvbmZpZ3M9W1wiTElCRVJUQVNcIiwgXCJMSUJFUlRBU19VU0JcIl0uXG5cbk9rYXksIG5vdyBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIHJlbWVtYmVyIGhvdyBgaGVscGVyX2Zpcm13YXJlX2NiYCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDI6MzIuODU5NDkxMTc5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMxNzQzMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGVscGVyX2Zpcm13YXJlX2NiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYz00NT1zdGF0aWMgdm9pZCBtYWluX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsIHZvaWQgKmNvbnRleHQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmMtNjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jOjY0OnN0YXRpYyB2b2lkIGhlbHBlcl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy02NS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM9ODU9c3RhdGljIHZvaWQgbG9hZF9uZXh0X2Zpcm13YXJlX2Zyb21fdGFibGUoc3RydWN0IGxic19wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9maXJtd2FyZS5jLTExMS1cXHRwcml2LVxcdTAwM2Vmd19pdGVyID0gaXRlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2Zpcm13YXJlLmM6MTEyOlxcdGRvX2xvYWRfZmlybXdhcmUocHJpdiwgaXRlci1cXHUwMDNlaGVscGVyLCBoZWxwZXJfZmlybXdhcmVfY2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvZmlybXdhcmUuYy0xMTMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MjozMy4xMDI2Njk4MjVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc4ODM5Mzc0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRmlybXdhcmUgTG9hZGluZyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIGBoZWxwZXJfZmlybXdhcmVfY2JgIGlzIGluZGVlZCBjYWxsZWQgYnkgYHJlcXVlc3RfZmlybXdhcmVfbm93YWl0YCB3aXRoaW4gdGhlIGBkb19sb2FkX2Zpcm13YXJlYCBmdW5jdGlvbi4gSSBjb25maXJtZWQgaXRzIHJlYWNoYWJpbGl0eS4gIEkgZG91YmxlLWNoZWNrZWQ7IGl0IGxvb2tzIGxpa2UgYGhlbHBlcl9maXJtd2FyZV9jYmAgaXMgb25seSB1c2VkIHdpdGhpbiBgbG9hZF9uZXh0X2Zpcm13YXJlX2Zyb21fdGFibGVgLlxuXG5HaXZlbiB0aGUgc2ltcGxpY2l0eSBvZiB0aGlzIG1lbW9yeSBsZWFrIGZpeCAoanVzdCBhZGRpbmcgYSBgcmVsZWFzZV9maXJtd2FyZWAgY2FsbCksIGZ1enppbmcgaXMgdW5saWtlbHkgdG8gdW5jb3ZlciBuZXcgYnVncyBkaXJlY3RseSByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggaXRzZWxmLiBIb3dldmVyLCBiZWNhdXNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5IFwiaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIiBJJ20gb2JsaWdhdGVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5JJ3ZlIGNvbmZpcm1lZCBgTElCRVJUQVNfU1BJYCBpcyBhdmFpbGFibGUuIEl0IHNlZW1zIGBGV19MT0FERVJgIGlzIHJlbGV2YW50IGFzIGl0IGlzIHVzdWFsbHkgc2VsZWN0ZWQgYnkgZHJpdmVycyBuZWVkaW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM4MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOTo0MzowMC45ODY2MDk4MzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjU4Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBGV19MT0FERVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnPTI9Y29uZmlnIExJQkVSVEFTXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL0tjb25maWctNS1cXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9LY29uZmlnOjY6XFx0c2VsZWN0IEZXX0xPQURFUlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvS2NvbmZpZy03LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6NDM6MDEuMDY2ODc0MjEzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5MDYxNDM3MjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCwgYXMgSSB1bmRlcnN0YW5kIGl0LlxuXG4qKkZpcm13YXJlIExvYWRpbmcgTWVtb3J5IExlYWsgaW4gTGliZXJ0dXMgV2lyZWxlc3MgRHJpdmVyKipcblxuT2theSwgc28gYEZXX0xPQURFUmAgaXMgZGVmaW5pdGVseSBzZWxlY3RlZCBieSBgTElCRVJUQVNgLCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSB0aGlua2luZyBpcywgbGV0J3MgYnJlYWsgZG93biB0aGUgY29yZSBpc3N1ZS4gVGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYSBtZW1vcnkgbGVhayB3aXRoaW4gdGhlIGFzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHByb2Nlc3Mgb2YgdGhlIExpYmVydHVzIHdpcmVsZXNzIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGEgc2NlbmFyaW8gd2hlcmUgYSAqaGVscGVyKiBmaXJtd2FyZSBpcyBsb2FkZWQsIGJ1dCB0aGUgKm1haW4qIGZpcm13YXJlIGlzbid0IG5lZWRlZC4gSW4gdGhpcyBzaXR1YXRpb24sIHRoZSBoZWxwZXIgZmlybXdhcmUgaXNuJ3QgYmVpbmcgcHJvcGVybHkgcmVsZWFzZWQsIHdoaWNoIGxlYWRzIHRvIGEgbWVtb3J5IGxlYWsuXG5cblRoZSBrZXkgdGhpbmcgaXMsIHRoaXMgY29kZSBwYXRoIGNhbiBiZSBoaXQgZHVyaW5nIFVTQiwgU0RJTywgb3IgU1BJIGRldmljZSBpbml0aWFsaXphdGlvbiB3aGVuZXZlciBmaXJtd2FyZSBpcyByZXF1ZXN0ZWQuIFRoYXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQuIEZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIG1ha2VzIGl0IGEgZ3JlYXQgdGFyZ2V0OiBpZiB3ZSBmdXp6IHRoaXMgaW5pdGlhbGl6YXRpb24sIHdlIGNhbiBwdXNoIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHN0YXRlIG1hY2hpbmUgaW50byBhIHZhcmlldHkgb2Ygc3VjY2VzcyBhbmQgZmFpbHVyZSBzdGF0ZXMuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSBpdCBoYW5kbGVzIGFsbCB0aGVzZSBjb25kaXRpb25zIGNvcnJlY3RseSwgd2l0aG91dCBsZWFraW5nIG1lbW9yeSBvciBvcGVuaW5nIHVwIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSwgd2hpY2ggd291bGQgYmUgYSBzZXZlcmUgcHJvYmxlbS5cblxuSSBzZWUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFmZmVjdGVkIGFyZSBgTElCRVJUQVNgLCBgTElCRVJUQVNfVVNCYCwgYExJQkVSVEFTX1NESU9gLCBhbmQgYExJQkVSVEFTX1NQSWAsIG1lYW5pbmcgaXQgdG91Y2hlcyBtdWx0aXBsZSBwb3RlbnRpYWwgaGFyZHdhcmUgaW50ZXJmYWNlcy4gVGhlIGltcG9ydGFudCBzeW1ib2xzIGluIG15IGhlYWQgcmlnaHQgbm93IGFyZSBgaGVscGVyX2Zpcm13YXJlX2NiYCwgYGxic19nZXRfZmlybXdhcmVfYXN5bmNgLCBhbmQgYGxvYWRfbmV4dF9maXJtd2FyZV9mcm9tX3RhYmxlYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgdmVyeSBsaWtlbHkgdG8gYmUgY2VudHJhbCB0byB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLlxuXG5BbHJpZ2h0LCBJJ20gc2F0aXNmaWVkIHdpdGggdGhpcyBhbmFseXNpcywgSSdtIGdvaW5nIHRvIHNldCBteSByZXN1bHRzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMDQsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjQzOjIwLjEyODMxNDMyN1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNTMzNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMSUJFUlRBU1wiLFxuICAgIFwiTElCRVJUQVNfVVNCXCIsXG4gICAgXCJMSUJFUlRBU19TRElPXCIsXG4gICAgXCJMSUJFUlRBU19TUElcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZWxwZXJfZmlybXdhcmVfY2JcIixcbiAgICBcImxic19nZXRfZmlybXdhcmVfYXN5bmNcIixcbiAgICBcImxvYWRfbmV4dF9maXJtd2FyZV9mcm9tX3RhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgbGliZXJ0YXMgd2lyZWxlc3MgZHJpdmVyJ3MgYXN5bmNocm9ub3VzIGZpcm13YXJlIGxvYWRpbmcgcGF0aC4gV2hlbiBhIGhlbHBlciBmaXJtd2FyZSBpcyBsb2FkZWQgYnV0IG5vIG1haW4gZmlybXdhcmUgaXMgcmVxdWlyZWQsIHRoZSBoZWxwZXIgZmlybXdhcmUgd2FzIG5vdCBiZWluZyByZWxlYXNlZC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCL1NESU8vU1BJIGRldmljZSBpbml0aWFsaXphdGlvbiB3aGVuIGZpcm13YXJlIGlzIHJlcXVlc3RlZC4gRnV6emluZyB0aGlzIHBhdGggY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHN0YXRlIG1hY2hpbmUgaGFuZGxlcyB2YXJpb3VzIHN1Y2Nlc3MvZmFpbHVyZSBjb25kaXRpb25zIGNvcnJlY3RseSB3aXRob3V0IGxlYWtpbmcgbWVtb3J5IG9yIGNhdXNpbmcgdXNlLWFmdGVyLWZyZWUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTElCRVJUQVNcIixcbiAgICBcIkxJQkVSVEFTX1VTQlwiLFxuICAgIFwiTElCRVJUQVNfU0RJT1wiLFxuICAgIFwiTElCRVJUQVNfU1BJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGVscGVyX2Zpcm13YXJlX2NiXCIsXG4gICAgXCJsYnNfZ2V0X2Zpcm13YXJlX2FzeW5jXCIsXG4gICAgXCJsb2FkX25leHRfZmlybXdhcmVfZnJvbV90YWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGxpYmVydGFzIHdpcmVsZXNzIGRyaXZlcidzIGFzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHBhdGguIFdoZW4gYSBoZWxwZXIgZmlybXdhcmUgaXMgbG9hZGVkIGJ1dCBubyBtYWluIGZpcm13YXJlIGlzIHJlcXVpcmVkLCB0aGUgaGVscGVyIGZpcm13YXJlIHdhcyBub3QgYmVpbmcgcmVsZWFzZWQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQi9TRElPL1NQSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gd2hlbiBmaXJtd2FyZSBpcyByZXF1ZXN0ZWQuIEZ1enppbmcgdGhpcyBwYXRoIGNhbiBoZWxwIGVuc3VyZSB0aGUgZmlybXdhcmUgbG9hZGluZyBzdGF0ZSBtYWNoaW5lIGhhbmRsZXMgdmFyaW91cyBzdWNjZXNzL2ZhaWx1cmUgY29uZGl0aW9ucyBjb3JyZWN0bHkgd2l0aG91dCBsZWFraW5nIG1lbW9yeSBvciBjYXVzaW5nIHVzZS1hZnRlci1mcmVlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqc6n[1] Phase: Succeeded StartedAt: 2026-06-24 09:43:58 +0000 UTC FinishedAt: 2026-06-24 09:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-24 09:43:58 +0000 UTC FinishedAt: 2026-06-24 09:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2] Phase: Succeeded StartedAt: 2026-06-24 09:43:58 +0000 UTC FinishedAt: 2026-06-24 10:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-24 09:43:58 +0000 UTC FinishedAt: 2026-06-24 10:50:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-24 09:43:58 +0000 UTC FinishedAt: 2026-06-24 09:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-24 09:43:58 +0000 UTC FinishedAt: 2026-06-24 09:44:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowlqc6n/series-workflowlqc6n-convert-artifact-3925254684/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-24 09:44:19 +0000 UTC FinishedAt: 2026-06-24 10:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-24 09:44:19 +0000 UTC FinishedAt: 2026-06-24 10:09:29 +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:*a8a7f823-087c-4cbd-ad6b-ab4930ede01d,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-workflowlqc6n/series-workflowlqc6n-convert-artifact-3925254684/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": "7ec577c1-1986-4b58-9624-60734720456b", "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-workflowlqc6n/series-workflowlqc6n-build-action-1755400266/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-24 09:44:19 +0000 UTC FinishedAt: 2026-06-24 10:08:37 +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:*a8a7f823-087c-4cbd-ad6b-ab4930ede01d,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-workflowlqc6n/series-workflowlqc6n-convert-artifact-3925254684/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": "7ec577c1-1986-4b58-9624-60734720456b", "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-workflowlqc6n/series-workflowlqc6n-build-action-1755400266/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-24 10:09:29 +0000 UTC FinishedAt: 2026-06-24 10:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-24 10:09:29 +0000 UTC FinishedAt: 2026-06-24 10:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-24 10:09:29 +0000 UTC FinishedAt: 2026-06-24 10:10:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-24 10:09:29 +0000 UTC FinishedAt: 2026-06-24 10:10:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowlqc6n/series-workflowlqc6n-convert-artifact-1920929115/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-24 10:10:55 +0000 UTC FinishedAt: 2026-06-24 10:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-24 10:10:55 +0000 UTC FinishedAt: 2026-06-24 10:12:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7ec577c1-1986-4b58-9624-60734720456b,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-workflowlqc6n/series-workflowlqc6n-build-action-1755400266/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-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-24 10:12:55 +0000 UTC FinishedAt: 2026-06-24 10:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-24 10:12:55 +0000 UTC FinishedAt: 2026-06-24 10:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-24 10:12:55 +0000 UTC FinishedAt: 2026-06-24 10:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-24 10:12:55 +0000 UTC FinishedAt: 2026-06-24 10:45:10 +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:*a8a7f823-087c-4cbd-ad6b-ab4930ede01d,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-workflowlqc6n/series-workflowlqc6n-convert-artifact-1920929115/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": "9d683a86-c7f6-4a6c-9f84-4379d542d21f", "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-workflowlqc6n/series-workflowlqc6n-build-action-1957868543/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-24 10:12:55 +0000 UTC FinishedAt: 2026-06-24 10:44:59 +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:*a8a7f823-087c-4cbd-ad6b-ab4930ede01d,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-workflowlqc6n/series-workflowlqc6n-convert-artifact-1920929115/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": "9d683a86-c7f6-4a6c-9f84-4379d542d21f", "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-workflowlqc6n/series-workflowlqc6n-build-action-1957868543/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-24 10:45:10 +0000 UTC FinishedAt: 2026-06-24 10:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-24 10:45:10 +0000 UTC FinishedAt: 2026-06-24 10:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-24 10:45:10 +0000 UTC FinishedAt: 2026-06-24 10:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-24 10:45:10 +0000 UTC FinishedAt: 2026-06-24 10:46:54 +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:*9d683a86-c7f6-4a6c-9f84-4379d542d21f,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-workflowlqc6n/series-workflowlqc6n-build-action-1957868543/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-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-24 10:47:05 +0000 UTC FinishedAt: 2026-06-24 10:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-24 10:47:05 +0000 UTC FinishedAt: 2026-06-24 10:50:04 +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":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"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:*7ec577c1-1986-4b58-9624-60734720456b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9d683a86-c7f6-4a6c-9f84-4379d542d21f,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-workflowlqc6n/series-workflowlqc6n-build-action-1755400266/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-workflowlqc6n/series-workflowlqc6n-build-action-1957868543/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-24 10:47:05 +0000 UTC FinishedAt: 2026-06-24 10:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-24 10:47:05 +0000 UTC FinishedAt: 2026-06-24 10:47:28 +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":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"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-workflowlqc6n/series-workflowlqc6n-convert-artifact-1620476500/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-24 10:47:05 +0000 UTC FinishedAt: 2026-06-24 10:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-24 10:47:05 +0000 UTC FinishedAt: 2026-06-24 10:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-24 10:47:05 +0000 UTC FinishedAt: 2026-06-24 10:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-24 10:47:32 +0000 UTC FinishedAt: 2026-06-24 10:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqc6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["helper_firmware_cb","lbs_get_firmware_async","load_next_firmware_from_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"558ef39aeb9a089a6be9dda8413b0b9d42e843ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIBERTAS","LIBERTAS_USB","LIBERTAS_SDIO","LIBERTAS_SPI"],"series_id":"8dc6500d-a1f2-4d70-8002-7946b26f01a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-24 10:47:32 +0000 UTC FinishedAt: 2026-06-24 10:49:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7ec577c1-1986-4b58-9624-60734720456b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9d683a86-c7f6-4a6c-9f84-4379d542d21f,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-workflowlqc6n/series-workflowlqc6n-build-action-1755400266/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-workflowlqc6n/series-workflowlqc6n-build-action-1957868543/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-workflowlqc6n/series-workflowlqc6n-convert-artifact-1620476500/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,}