Name: series-workflow8p7k8 Phase: Succeeded StartedAt: 2026-09-07 14:41:34 +0000 UTC FinishedAt: 2026-09-07 18:44:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[0] Phase: Succeeded StartedAt: 2026-09-07 14:41:34 +0000 UTC FinishedAt: 2026-09-07 15:00:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 14:41:34 +0000 UTC FinishedAt: 2026-09-07 15:00:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS", "INET" ], "series_id": "cc372bb0-3a3e-42c8-b06a-6f72990ab087" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_conn_free", "smc_conn_abort_work", "smc_conn_cancel_abort_work" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19jb25uX2ZyZWUmIzM0OywKICAgICYjMzQ7c21jX2Nvbm5fYWJvcnRfd29yayYjMzQ7LAogICAgJiMzNDtzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRlYWRsb2NrIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gU01DIGNvbm5lY3Rpb24gdGVhcmRvd24gKG5ldC9zbWMvc21jX2NvcmUuYykgYnkgcmVsZWFzaW5nIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgYGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKWAgYW5kIGFkZGluZyBhIGAhY29ubi1cdTAwM2VmcmVlZGAgY2hlY2sgaW4gYHNtY19jb25uX2Fib3J0X3dvcmsoKWAuXG5cblRoZSBjaGFuZ2VzIHNvbGVseSBtb2RpZnkgbG9ja2luZyBiZWhhdmlvciwgd29yayBjYW5jZWxsYXRpb24gc3luY2hyb25pemF0aW9uLCBhbmQgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBidWZmZXIgbGVuZ3RoIG9yIGJvdW5kcyBtYW5pcHVsYXRpb25zLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKExPQ0tERVAsIEtBU0FOKSBhbmQgZG8gbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBTTUMgc29ja2V0IGNvbm5lY3Rpb24gdGVhcmRvd24gYW5kIGFib3J0IHdvcmsgY2FuY2VsbGF0aW9uIGhhbmRsaW5nIGluIHNtY19jb3JlLmMuIFNwZWNpZmljYWxseSwgaXQgZHJvcHMgdGhlIHNvY2tldCBsb2NrIGFyb3VuZCBjYW5jZWxfd29ya19zeW5jIHRvIHByZXZlbnQgcG90ZW50aWFsIGRlYWRsb2NrcywgbWFuYWdlcyBzb2NrZXQgcmVmY291bnRpbmcgb24gd29yayBjYW5jZWxsYXRpb24sIGFuZCBjaGVja3MgY29ubi1cdTAwM2VmcmVlZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWJvcnQgd29yayBleGVjdXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGxvZ2ljIGluIHRoZSBTTUMgbmV0d29ya2luZyBzdWJzeXN0ZW0sIG1ha2luZyBpdCB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE0NmFmOWJiNTBjNDdiMDIwN2Y2OTQ4MWRhYzVmYzk0NzQyODdkMDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE0OjU5OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuYyBiL25ldC9zbWMvc21jX2NvcmUuY1xuaW5kZXggMDRhZWRkOTU3NTQzYS4uOWExMDllYWU3M2I5MiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfY29yZS5jXG5AQCAtMTI1MSw2ICYjNDM7MTI1MSwyNSBAQCBzdGF0aWMgdm9pZCBzbWNfYnVmX3VudXNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbiBcdH1cbiB9XG4gXG4mIzQzOy8qIENhbmNlbCBhIHBlbmRpbmcgYWJvcnQgd29yayBpdGVtLiAgc21jX2Nvbm5fYWJvcnRfd29yaygpIHRha2VzIHRoZSBzb2NrZXRcbiYjNDM7ICogbG9jaywgc28gdGhlIGxvY2sgaGFzIHRvIGJlIGRyb3BwZWQgaGVyZS4gIE90aGVyd2lzZSBjYW5jZWxfd29ya19zeW5jKClcbiYjNDM7ICogd2FpdHMgZm9yIGEgd29ya2VyIHRoYXQgaXMgaXRzZWxmIGJsb2NrZWQgb24gdGhlIGNhbGxlci4gIFRoaXMgaXMgdGhlIGlkaW9tXG4mIzQzOyAqIHNtY19jbG9zZV9jYW5jZWxfd29yaygpIGFscmVhZHkgdXNlcyBmb3IgY2xvc2Vfd29yay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2c21jLVx1MDAzZXNrO1xuJiM0MztcbiYjNDM7XHRpZiAoY3VycmVudF93b3JrKCkgPT0gXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyZWxlYXNlX3NvY2soc2spO1xuJiM0MztcdGlmIChjYW5jZWxfd29ya19zeW5jKFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yaykpXG4mIzQzO1x0XHRzb2NrX3B1dChzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xuJiM0MztcdGxvY2tfc29jayhzayk7XG4mIzQzO31cbiYjNDM7XG4gLyogcmVtb3ZlIGEgZmluaXNoZWQgY29ubmVjdGlvbiBmcm9tIGl0cyBsaW5rIGdyb3VwICovXG4gdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbiB7XG5AQCAtMTI3Niw4ICYjNDM7MTI5NSw3IEBAIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4gXHRcdFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xuIFx0fSBlbHNlIHtcbiBcdFx0c21jX2NkY193YWl0X3BlbmRfdHhfd3IoY29ubik7XG4tXHRcdGlmIChjdXJyZW50X3dvcmsoKSAhPSBcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspXG4tXHRcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspO1xuJiM0MztcdFx0c21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoY29ubik7XG4gXHR9XG4gXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bGdyLVx1MDAzZWxpc3QpKSB7XG4gXHRcdHNtY19idWZfdW51c2UoY29ubiwgbGdyKTsgLyogYWxsb3cgYnVmZmVyIHJldXNlICovXG5AQCAtMTc1MCw3ICYjNDM7MTc2OCwxMiBAQCBzdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7XG4gXG4gXHRsb2NrX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKTtcbi1cdHNtY19jb25uX2tpbGwoY29ubiwgdHJ1ZSk7XG4mIzQzO1x0Lyogc21jX2Nvbm5fZnJlZSgpIHNldHMgZnJlZWQgd2l0aCB0aGlzIGxvY2sgaGVsZCBhbmQgYmVmb3JlIGl0XG4mIzQzO1x0ICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhc1xuJiM0MztcdCAqIG5vdGhpbmcgbGVmdCB0byBkby5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWNvbm4tXHUwMDNlZnJlZWQpXG4mIzQzO1x0XHRzbWNfY29ubl9raWxsKGNvbm4sIHRydWUpO1xuIFx0cmVsZWFzZV9zb2NrKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4gXHRzb2NrX3B1dChcdTAwMjZzbWMtXHUwMDNlc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi9cbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2Nvbm5fZnJlZSYjMzQ7LAogICAgJiMzNDtzbWNfY29ubl9hYm9ydF93b3JrJiMzNDssCiAgICAmIzM0O3NtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFNNQyBzb2NrZXQgY29ubmVjdGlvbiB0ZWFyZG93biBhbmQgYWJvcnQgd29yayBjYW5jZWxsYXRpb24gaGFuZGxpbmcgaW4gc21jX2NvcmUuYy4gU3BlY2lmaWNhbGx5LCBpdCBkcm9wcyB0aGUgc29ja2V0IGxvY2sgYXJvdW5kIGNhbmNlbF93b3JrX3N5bmMgdG8gcHJldmVudCBwb3RlbnRpYWwgZGVhZGxvY2tzLCBtYW5hZ2VzIHNvY2tldCByZWZjb3VudGluZyBvbiB3b3JrIGNhbmNlbGxhdGlvbiwgYW5kIGNoZWNrcyBjb25uLVx1MDAzZWZyZWVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBhYm9ydCB3b3JrIGV4ZWN1dGlvbi4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgbG9naWMgaW4gdGhlIFNNQyBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTQ2YWY5YmI1MGM0N2IwMjA3ZjY5NDgxZGFjNWZjOTQ3NDI4N2QwMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMTQ6NTk6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmMKaW5kZXggMDRhZWRkOTU3NTQzYS4uOWExMDllYWU3M2I5MiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuYwpAQCAtMTI1MSw2ICYjNDM7MTI1MSwyNSBAQCBzdGF0aWMgdm9pZCBzbWNfYnVmX3VudXNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiwKIAl9CiB9CiAKJiM0MzsvKiBDYW5jZWwgYSBwZW5kaW5nIGFib3J0IHdvcmsgaXRlbS4gIHNtY19jb25uX2Fib3J0X3dvcmsoKSB0YWtlcyB0aGUgc29ja2V0CiYjNDM7ICogbG9jaywgc28gdGhlIGxvY2sgaGFzIHRvIGJlIGRyb3BwZWQgaGVyZS4gIE90aGVyd2lzZSBjYW5jZWxfd29ya19zeW5jKCkKJiM0MzsgKiB3YWl0cyBmb3IgYSB3b3JrZXIgdGhhdCBpcyBpdHNlbGYgYmxvY2tlZCBvbiB0aGUgY2FsbGVyLiAgVGhpcyBpcyB0aGUgaWRpb20KJiM0MzsgKiBzbWNfY2xvc2VfY2FuY2VsX3dvcmsoKSBhbHJlYWR5IHVzZXMgZm9yIGNsb3NlX3dvcmsuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKQomIzQzO3sKJiM0MzsJc3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtzbWMtJmd0O3NrOwomIzQzOwomIzQzOwlpZiAoY3VycmVudF93b3JrKCkgPT0gJmFtcDtjb25uLSZndDthYm9ydF93b3JrKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZWxlYXNlX3NvY2soc2spOwomIzQzOwlpZiAoY2FuY2VsX3dvcmtfc3luYygmYW1wO2Nvbm4tJmd0O2Fib3J0X3dvcmspKQomIzQzOwkJc29ja19wdXQoc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi8KJiM0MzsJbG9ja19zb2NrKHNrKTsKJiM0Mzt9CiYjNDM7CiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi8KIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pCiB7CkBAIC0xMjc2LDggJiM0MzsxMjk1LDcgQEAgdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubikKIAkJCXNtY2RfYnVmX2RldGFjaChjb25uKTsKIAl9IGVsc2UgewogCQlzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTsKLQkJaWYgKGN1cnJlbnRfd29yaygpICE9ICZhbXA7Y29ubi0mZ3Q7YWJvcnRfd29yaykKLQkJCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtjb25uLSZndDthYm9ydF93b3JrKTsKJiM0MzsJCXNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKGNvbm4pOwogCX0KIAlpZiAoIWxpc3RfZW1wdHkoJmFtcDtsZ3ItJmd0O2xpc3QpKSB7CiAJCXNtY19idWZfdW51c2UoY29ubiwgbGdyKTsgLyogYWxsb3cgYnVmZmVyIHJldXNlICovCkBAIC0xNzUwLDcgJiM0MzsxNzY4LDEyIEBAIHN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7CiAKIAlsb2NrX3NvY2soJmFtcDtzbWMtJmd0O3NrKTsKLQlzbWNfY29ubl9raWxsKGNvbm4sIHRydWUpOwomIzQzOwkvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXQKJiM0MzsJICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhcwomIzQzOwkgKiBub3RoaW5nIGxlZnQgdG8gZG8uCiYjNDM7CSAqLwomIzQzOwlpZiAoIWNvbm4tJmd0O2ZyZWVkKQomIzQzOwkJc21jX2Nvbm5fa2lsbChjb25uLCB0cnVlKTsKIAlyZWxlYXNlX3NvY2soJmFtcDtzbWMtJmd0O3NrKTsKIAlzb2NrX3B1dCgmYW1wO3NtYy0mZ3Q7c2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi8KIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgU01DIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3NtYy9zbWNfY29yZS5jYCwgc28gaXQmIzM5O3MgZGlyZWN0bHkgaW1wYWN0aW5nIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgcHJvdG9jb2wgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIFNNQywgQUZfU01DIHNwZWNpZmljYWxseSwgaXMgYSBzcGVjaWFsaXplZCBzb2NrZXQgZmFtaWx5LCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIHVuZGVyc3RhbmRpbmcgd2hhdCB0aGlzIGNoYW5nZSBpcyBkb2luZyB0byB0aGF0LgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGBLY29uZmlnYCBmb3IgdGhlIGBuZXQvc21jL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGJ1aWxkLXRpbWUgY2hvaWNlcyB0aWVkIHRvIFNNQy4gVGhlbiwgSSBuZWVkIHRvIHRob3JvdWdobHkgZGlzc2VjdCB0aGUgYHNtY19jb3JlLmNgIGZpbGUgaXRzZWxmLiBXaGF0IHNwZWNpZmljIGZ1bmN0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBiZWhhdmlvcnMgYXJlIGJlaW5nIG1vZGlmaWVkPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXM/CgpJJiMzOTtsbCBiZSByZWFjaGluZyBmb3IgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGVmZmljaWVudGx5IG5hdmlnYXRlIGFuZCBhbmFseXplIHRoZXNlIGZpbGVzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zOiB1bmRlcnN0YW5kaW5nIHRoZSAmIzM5O3doeSYjMzk7IGJlaGluZCB0aGlzIHBhdGNoLiBJcyBpdCBhIGJ1ZyBmaXgsIGEgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnQsIGEgbmV3IGZlYXR1cmUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgYEtjb25maWdgIGNvbWJpbmVkIHdpdGggdGhlIGBzbWNfY29yZS5jYCBjaGFuZ2VzIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXJzIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBTTUNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IERJQlNcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgU01DLVIgcHJvdmlkZXMgYSBcJiMzNDtzb2NrZXRzIG92ZXIgUkRNQVwmIzM0OyBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXG4gICA3Olx0XHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxuICAgODpcdFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxuICAgOTpcdFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXG4gIDEwOlx0XHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgU01DX0RJQUdcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gIDE2Olx0XHRkZXBlbmRzIG9uIFNNQ1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xuICAxOTpcdFx0ICBzbWNzcy5cbiAgMjA6XHRcbiAgMjE6XHRcdCAgaWYgdW5zdXJlLCBzYXkgWS5cbiAgMjI6XHRcbiAgMjM6XHRjb25maWcgU01DX0hTX0NUUkxfQlBGXG4gIDI0Olx0XHRib29sIFwmIzM0O0dlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcJiMzNDtcbiAgMjU6XHRcdGRlcGVuZHMgb24gU01DIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfU1lTQ0FMTFxuICAyNjpcdFx0ZGVmYXVsdCB5XG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIFNNQ19IU19DVFJMX0JQRiBlbmFibGVzIHN1cHBvcnQgdG8gcmVnaXN0ZXIgZ2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQ1xuICAyOTpcdFx0ICBoYW5kc2hha2UgZmxvdywgd2hpY2ggb2ZmZXIgbXVjaCBncmVhdGVyIGZsZXhpYmlsaXR5IGluIG1vZGlmeWluZyB0aGUgYmVoYXZpb3JcbiAgMzA6XHRcdCAgb2YgdGhlIFNNQyBwcm90b2NvbCBzdGFjayBjb21wYXJlZCB0byBhIGNvbXBsZXRlIGtlcm5lbC1iYXNlZCBhcHByb2FjaC4gU2VsZWN0XG4gIDMxOlx0XHQgIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IGZpbHRyaW5nIHRoZSBoYW5kc2hha2UgcHJvY2VzcyB2aWEgZUJQRiBwcm9ncmFtcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mjk1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU01DIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYG5ldC9zbWMvS2NvbmZpZ2AuIEZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgaXQgZGVwZW5kcyBvbiBgSU5FVCAmYW1wOyZhbXA7IElORklOSUJBTkRgIG9yIGBESUJTYC4gV2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZSBoZXJlLiBMaW5lIDQgb2YgdGhlIEtjb25maWcgZmlsZSBzaG91bGQgaGF2ZSB0aGUgYW5zd2VyLiBMZXQgbWUgcXVpY2tseSBjaGVjay4uLiBPa2F5LCBsaW5lIDQgc2F5cyBgZGVwZW5kcyBvbiBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IERJQlNgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0IG1lIGRvdWJsZS1jaGVjayBsaW5lIDQgYWdhaW4uIE9yIHBlcmhhcHMgYSBxdWljayBncmVwIGZvciBTTUMgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIGZhc3Rlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc21jL0tjb25maWc6Mjpjb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTEzLVxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMjItXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFNNQyBDb3JlIGZvciBQb3RlbnRpYWwgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgU01DIGltcGxlbWVudGF0aW9uLiBHaXZlbiB0aGUgc3ltcHRvbXMgd2UmIzM5O3JlIHNlZWluZywgSSBoYXZlIGEgaHVuY2ggdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIGdvaW5nIHNpZGV3YXlzIGluIHRoZSBjb3JlIGxvZ2ljLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgbmV0L3NtYy9zbWNfY29yZS5jYC4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDEyNTAgdGhyb3VnaCAxMzAwIGZpcnN0LiBUaGF0IGFyZWEgb2Z0ZW4gZGVhbHMgd2l0aCBbbWVudGlvbiBzcGVjaWZpYyBmdW5jdGlvbiBvciBkYXRhIHRoYXQgcmVsYXRlcyB0byB5b3VyIGV4cGVydCBmaWVsZCBoZXJlIC0gZS5nLiwgJiMzNDtjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGluaXRpYWwgZGF0YSBleGNoYW5nZSYjMzQ7XSwgc28gaXQmIzM5O3MgYSBsaWtlbHkgY2FuZGlkYXRlIGZvciB0aGUgcHJvYmxlbS4gVGhlbiwgSSYjMzk7bGwganVtcCBkb3duIHRvIHRoZSByZWdpb24gYXJvdW5kIGxpbmVzIDE3NTAtMTc4MC4gVGhpcyB0eXBpY2FsbHkgY292ZXJzIFttZW50aW9uIGFub3RoZXIgc3BlY2lmaWMgZnVuY3Rpb24gb3IgZGF0YSB0aGF0IHJlbGF0ZXMgdG8geW91ciBleHBlcnQgZmllbGQgaGVyZSAtIGUuZy4sICYjMzQ7ZXJyb3IgaGFuZGxpbmcgYW5kIGNvbm5lY3Rpb24gdGVhcmRvd24mIzM0O10sIHdoaWNoIGlzIGFub3RoZXIgYXJlYSB0aGF0IGNvdWxkIGJlIGF0IHBsYXkgaGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMgaW4gdGhvc2Ugc3BvdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNTA6XHRcdFx0U01DX1NUQVRfUk1CX1NJWkUoc21jLCBpc19zbWNkLCB0cnVlLCBmYWxzZSwgYnVmc2l6ZSk7XG4xMjUxOlx0XHR9XG4xMjUyOlx0fVxuMTI1MzpcdFxuMTI1NDpcdC8qIENhbmNlbCBhIHBlbmRpbmcgYWJvcnQgd29yayBpdGVtLiAgc21jX2Nvbm5fYWJvcnRfd29yaygpIHRha2VzIHRoZSBzb2NrZXRcbjEyNTU6XHQgKiBsb2NrLCBzbyB0aGUgbG9jayBoYXMgdG8gYmUgZHJvcHBlZCBoZXJlLiAgT3RoZXJ3aXNlIGNhbmNlbF93b3JrX3N5bmMoKVxuMTI1NjpcdCAqIHdhaXRzIGZvciBhIHdvcmtlciB0aGF0IGlzIGl0c2VsZiBibG9ja2VkIG9uIHRoZSBjYWxsZXIuICBUaGlzIGlzIHRoZSBpZGlvbVxuMTI1NzpcdCAqIHNtY19jbG9zZV9jYW5jZWxfd29yaygpIGFscmVhZHkgdXNlcyBmb3IgY2xvc2Vfd29yay5cbjEyNTg6XHQgKi9cbjEyNTk6XHRzdGF0aWMgdm9pZCBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4xMjYwOlx0e1xuMTI2MTpcdFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbjEyNjI6XHRcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNtYy1cdTAwM2VzaztcbjEyNjM6XHRcbjEyNjQ6XHRcdGlmIChjdXJyZW50X3dvcmsoKSA9PSBcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspXG4xMjY1Olx0XHRcdHJldHVybjtcbjEyNjY6XHRcbjEyNjc6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xMjY4Olx0XHRpZiAoY2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspKVxuMTI2OTpcdFx0XHRzb2NrX3B1dChzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xuMTI3MDpcdFx0bG9ja19zb2NrKHNrKTtcbjEyNzE6XHR9XG4xMjcyOlx0XG4xMjczOlx0LyogcmVtb3ZlIGEgZmluaXNoZWQgY29ubmVjdGlvbiBmcm9tIGl0cyBsaW5rIGdyb3VwICovXG4xMjc0Olx0dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbjEyNzU6XHR7XG4xMjc2Olx0XHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGNvbm4tXHUwMDNlbGdyO1xuMTI3NzpcdFxuMTI3ODpcdFx0aWYgKCFsZ3IgfHwgY29ubi1cdTAwM2VmcmVlZClcbjEyNzk6XHRcdFx0LyogQ29ubmVjdGlvbiBoYXMgbmV2ZXIgYmVlbiByZWdpc3RlcmVkIGluIGFcbjEyODA6XHRcdFx0ICogbGluayBncm91cCwgb3IgaGFzIGFscmVhZHkgYmVlbiBmcmVlZC5cbjEyODE6XHRcdFx0ICovXG4xMjgyOlx0XHRcdHJldHVybjtcbjEyODM6XHRcbjEyODQ6XHRcdGNvbm4tXHUwMDNlZnJlZWQgPSAxO1xuMTI4NTpcdFx0aWYgKCFzbWNfY29ubl9sZ3JfdmFsaWQoY29ubikpXG4xMjg2Olx0XHRcdC8qIENvbm5lY3Rpb24gaGFzIGFscmVhZHkgdW5yZWdpc3RlcmVkIGZyb21cbjEyODc6XHRcdFx0ICogbGluayBncm91cC5cbjEyODg6XHRcdFx0ICovXG4xMjg5Olx0XHRcdGdvdG8gbGdyX3B1dDtcbjEyOTA6XHRcbjEyOTE6XHRcdGlmIChsZ3ItXHUwMDNlaXNfc21jZCkge1xuMTI5MjpcdFx0XHRzbWNfaXNtX3Vuc2V0X2Nvbm4oY29ubik7XG4xMjkzOlx0XHRcdHRhc2tsZXRfa2lsbChcdTAwMjZjb25uLVx1MDAzZXJ4X3Rza2xldCk7XG4xMjk0Olx0XHRcdGlmIChzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShsZ3ItXHUwMDNlc21jZCkpXG4xMjk1Olx0XHRcdFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xuMTI5NjpcdFx0fSBlbHNlIHtcbjEyOTc6XHRcdFx0c21jX2NkY193YWl0X3BlbmRfdHhfd3IoY29ubik7XG4xMjk4Olx0XHRcdHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKGNvbm4pO1xuMTI5OTpcdFx0fVxuMTMwMDpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmxnci1cdTAwM2VsaXN0KSkge1xuMTMwMTpcdFx0XHRzbWNfYnVmX3VudXNlKGNvbm4sIGxncik7IC8qIGFsbG93IGJ1ZmZlciByZXVzZSAqL1xuMTMwMjpcdFx0XHRzbWNfbGdyX3VucmVnaXN0ZXJfY29ubihjb25uKTtcbjEzMDM6XHRcdH1cbjEzMDQ6XHRcbjEzMDU6XHRcdGlmICghbGdyLVx1MDAzZWNvbm5zX251bSlcbjEzMDY6XHRcdFx0c21jX2xncl9zY2hlZHVsZV9mcmVlX3dvcmsobGdyKTtcbjEzMDc6XHRsZ3JfcHV0OlxuMTMwODpcdFx0aWYgKCFsZ3ItXHUwMDNlaXNfc21jZClcbjEzMDk6XHRcdFx0c21jcl9saW5rX3B1dChjb25uLVx1MDAzZWxuayk7IC8qIGxpbmtfaG9sZCBpbiBzbWNfY29ubl9jcmVhdGUoKSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMjEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBEZWVwZXIgaW50byB0aGUgU01DIENvbm5lY3Rpb24gQWJvcnQqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGNpcmNsaW5nIGJhY2sgdG8gdGhlIFNNQyBjb25uZWN0aW9uIGhhbmRsaW5nLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBhYm9ydGluZyBhIGNvbm5lY3Rpb24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLCBgc21jX2Nvbm5fYWJvcnRfd29ya2AsIHdoaWNoIGlzIGxvY2F0ZWQgd2l0aGluIHRoZSBgbmV0L3NtYy9zbWNfY29yZS5jYCBmaWxlLiBJJiMzOTttIHRoaW5raW5nIHRoYXQgZGlnZ2luZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpbGwgbGlrZWx5IHByb3ZpZGUga2V5IGluc2lnaHRzLiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgY29ubmVjdGlvbiB0ZXJtaW5hdGlvbiBsb2dpYyBsaWtlbHkgcmVzaWRlLCBhbmQgdW5kZXJzdGFuZGluZyBpdCB3aWxsIGJlIGltcG9ydGFudCBmb3IgbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBlcnJvciBoYW5kbGluZyBvciBwZXJoYXBzIGEga2V5IHZ1bG5lcmFiaWxpdHkgb3Igb3B0aW1pemF0aW9uIHBvaW50IGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc2MDpcdH1cbjE3NjE6XHRcbjE3NjI6XHQvKiBhYm9ydCBjb25uZWN0aW9uLCBhYm9ydF93b3JrIHNjaGVkdWxlZCBmcm9tIHRhc2tsZXQgY29udGV4dCAqL1xuMTc2MzpcdHN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuMTc2NDpcdHtcbjE3NjU6XHRcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZih3b3JrLFxuMTc2NjpcdFx0XHRcdFx0XHRcdCAgIHN0cnVjdCBzbWNfY29ubmVjdGlvbixcbjE3Njc6XHRcdFx0XHRcdFx0XHQgICBhYm9ydF93b3JrKTtcbjE3Njg6XHRcdHN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7XG4xNzY5Olx0XG4xNzcwOlx0XHRsb2NrX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKTtcbjE3NzE6XHRcdC8qIHNtY19jb25uX2ZyZWUoKSBzZXRzIGZyZWVkIHdpdGggdGhpcyBsb2NrIGhlbGQgYW5kIGJlZm9yZSBpdFxuMTc3MjpcdFx0ICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhc1xuMTc3MzpcdFx0ICogbm90aGluZyBsZWZ0IHRvIGRvLlxuMTc3NDpcdFx0ICovXG4xNzc1Olx0XHRpZiAoIWNvbm4tXHUwMDNlZnJlZWQpXG4xNzc2Olx0XHRcdHNtY19jb25uX2tpbGwoY29ubiwgdHJ1ZSk7XG4xNzc3Olx0XHRyZWxlYXNlX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKTtcbjE3Nzg6XHRcdHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2Vzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xuMTc3OTpcdH1cbjE3ODA6XHRcbjE3ODE6XHR2b2lkIHNtY3JfcG9ydF9hZGQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYnBvcnQpXG4xNzgyOlx0e1xuMTc4MzpcdFx0c3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsICpuO1xuMTc4NDpcdFxuMTc4NTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNtY19sZ3JfbGlzdC5sb2NrKTtcbjE3ODY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsZ3IsIG4sIFx1MDAyNnNtY19sZ3JfbGlzdC5saXN0LCBsaXN0KSB7XG4xNzg3Olx0XHRcdHN0cnVjdCBzbWNfbGluayAqbGluaztcbjE3ODg6XHRcbjE3ODk6XHRcdFx0aWYgKHN0cm5jbXAoc21jaWJkZXYtXHUwMDNlcG5ldGlkW2licG9ydCAtIDFdLCBsZ3ItXHUwMDNlcG5ldF9pZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc4NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFNNQyBDb25uZWN0aW9uIEFib3J0IFByb2Nlc3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBzY2hlZHVsaW5nIG9mIGBzbWNfY29ubl9hYm9ydF93b3JrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHdvcmsgaXRlbSDigJMgd2hlcmUgaXQmIzM5O3Mgc2V0IHVwIGFuZCB3aGVuIGl0IGdldHMgdHJpZ2dlcmVkLiBNeSBndXQgdGVsbHMgbWUgSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnJvbSB0aGUgdG9wLiBUaGUgZmFzdGVzdCB3YXkgdG8gZG8gdGhhdCBpcyBhIGdyZXAgdGhyb3VnaCB0aGUgYG5ldC9zbWMvYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGFsbCB0aGUgaW5zdGFuY2VzIHdoZXJlIGBhYm9ydF93b3JrYCBpcyBtZW50aW9uZWQsIHdoaWNoIHNob3VsZCBoZWxwIG1lIHBpZWNlIHRvZ2V0aGVyIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdGhlIHRyaWdnZXJpbmcgZXZlbnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzZWFyY2ggcmV2ZWFscy4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgY29ubmVjdGlvbnMgYXJlIGFib3J0ZWQgd2l0aGluIHRoZSBTTUMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWJvcnRfd29yayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jLmg9MTk1PXN0cnVjdCBzbWNfY29ubmVjdGlvbiB7XG4tLVxubmV0L3NtYy9zbWMuaC0yNzMtXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGNsb3NlX3dvcms7XHQvKiBwZWVyIHNlbnQgc29tZSBjbG9zaW5nICovXG5uZXQvc21jL3NtYy5oOjI3NDpcdHN0cnVjdCB3b3JrX3N0cnVjdFx0YWJvcnRfd29yaztcdC8qIGFib3J0IHRoZSBjb25uZWN0aW9uICovXG5uZXQvc21jL3NtYy5oLTI3NS1cdHN0cnVjdCB0YXNrbGV0X3N0cnVjdFx0cnhfdHNrbGV0O1x0LyogUmVjZWl2ZXIgdGFza2xldCBmb3IgU01DLUQgKi9cbi0tXG5uZXQvc21jL3NtY19jZGMuYz0zMDg9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfdmFsaWRhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfY2RjX21zZyAqY2RjLFxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTMyMy1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y29ubi1cdTAwM2VzZW5kX2xvY2spO1xubmV0L3NtYy9zbWNfY2RjLmM6MzI0Olx0XHRzb2NrX2hvbGQoXHUwMDI2c21jLVx1MDAzZXNrKTsgLyogc29ja19wdXQgaW4gYWJvcnRfd29yayAqL1xubmV0L3NtYy9zbWNfY2RjLmM6MzI1Olx0XHRpZiAoIXF1ZXVlX3dvcmsoc21jX2Nsb3NlX3dxLCBcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspKVxubmV0L3NtYy9zbWNfY2RjLmMtMzI2LVx0XHRcdHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTEyMjQ9c3RhdGljIHZvaWQgc21jX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTEyNTMtXG5uZXQvc21jL3NtY19jb3JlLmM6MTI1NDovKiBDYW5jZWwgYSBwZW5kaW5nIGFib3J0IHdvcmsgaXRlbS4gIHNtY19jb25uX2Fib3J0X3dvcmsoKSB0YWtlcyB0aGUgc29ja2V0XG5uZXQvc21jL3NtY19jb3JlLmMtMTI1NS0gKiBsb2NrLCBzbyB0aGUgbG9jayBoYXMgdG8gYmUgZHJvcHBlZCBoZXJlLiAgT3RoZXJ3aXNlIGNhbmNlbF93b3JrX3N5bmMoKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjU4LSAqL1xubmV0L3NtYy9zbWNfY29yZS5jOjEyNTk6c3RhdGljIHZvaWQgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxubmV0L3NtYy9zbWNfY29yZS5jLTEyNjAte1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjYzLVxubmV0L3NtYy9zbWNfY29yZS5jOjEyNjQ6XHRpZiAoY3VycmVudF93b3JrKCkgPT0gXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKVxubmV0L3NtYy9zbWNfY29yZS5jLTEyNjUtXHRcdHJldHVybjtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTI2Ny1cdHJlbGVhc2Vfc29jayhzayk7XG5uZXQvc21jL3NtY19jb3JlLmM6MTI2ODpcdGlmIChjYW5jZWxfd29ya19zeW5jKFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yaykpXG5uZXQvc21jL3NtY19jb3JlLmM6MTI2OTpcdFx0c29ja19wdXQoc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi9cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjcwLVx0bG9ja19zb2NrKHNrKTtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTI3ND12b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjk3LVx0XHRzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuYzoxMjk4Olx0XHRzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjk5LVx0fVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xNzU1PXZvaWQgc21jcl9sZ3Jfc2V0X3R5cGVfYXN5bShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTc2MS1cbm5ldC9zbWMvc21jX2NvcmUuYzoxNzYyOi8qIGFib3J0IGNvbm5lY3Rpb24sIGFib3J0X3dvcmsgc2NoZWR1bGVkIGZyb20gdGFza2xldCBjb250ZXh0ICovXG5uZXQvc21jL3NtY19jb3JlLmM6MTc2MzpzdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzY0LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTc2Ni1cdFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24sXG5uZXQvc21jL3NtY19jb3JlLmM6MTc2NzpcdFx0XHRcdFx0XHQgICBhYm9ydF93b3JrKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzY4LVx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTc3Ny1cdHJlbGVhc2Vfc29jayhcdTAwMjZzbWMtXHUwMDNlc2spO1xubmV0L3NtYy9zbWNfY29yZS5jOjE3Nzg6XHRzb2NrX3B1dChcdTAwMjZzbWMtXHUwMDNlc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi9cbm5ldC9zbWMvc21jX2NvcmUuYy0xNzc5LX1cbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MjAwMD1pbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0yMDgyLVx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZjb25uLVx1MDAzZWNkY19wZW5kX3R4X3dxKTtcbm5ldC9zbWMvc21jX2NvcmUuYzoyMDgzOlx0SU5JVF9XT1JLKFx1MDAyNnNtYy1cdTAwM2Vjb25uLmFib3J0X3dvcmssIHNtY19jb25uX2Fib3J0X3dvcmspO1xubmV0L3NtYy9zbWNfY29yZS5jLTIwODQtXHRpZiAoaW5pLVx1MDAzZWlzX3NtY2QpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU01DIGFuZCBpdHMgRnV6emFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIFNNQyB0aGluZy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgKmlzKi4gUmlnaHQsIFNNQyDigJMgdGhhdCYjMzk7cyBBRl9TTUMsIHNvY2tldCBmYW1pbHkgNDMsIGBuZXQvc21jL2AgaW4gTGludXguIEFuZCBJIHJlY2FsbCBzZWVpbmcgaXQgbWVudGlvbmVkIGluIHRoZSBzeXprYWxsZXIgY29udGV4dCwgc28gdGhhdCYjMzk7cyBwcm9taXNpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3ZSBjYW4gcmVhbGlzdGljYWxseSBmdXp6PwoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbnMuIExldCBtZSBjaGVjayB0aGUgYG5ldC9zbWMvS2NvbmZpZ2AgZmlsZS4gQWgsIGBjb25maWcgU01DYC4uLiBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcmUgYGRlcGVuZHMgb24gSU5FVCAmYW1wOyZhbXA7IElORklOSUJBTkRgLiBPa2F5LCB0aGF0JiMzOTtzIGltcG9ydGFudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCwgb3IgYXQgbGVhc3QgdW5kZXJzdGFuZCB3aGF0IGVuYWJsaW5nIHRoZW0gaW1wbGllcy4gSGFuZyBvbiwgbGV0IG1lIHF1aWNrbHkgcmUtcmVhZCB0aGF0IGxpbmUsIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVzLCBJJiMzOTtsbCByZXZpZXcgbGluZXMgMS0xNSBvZiB0aGF0IEtjb25maWcgZmlsZSBqdXN0IHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gSXQmIzM5O3MgYmVzdCB0byBoYXZlIGEgc29saWQgZm91bmRhdGlvbiBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgU01DXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFNNQy1SIHByb3ZpZGVzIGEgXCYjMzQ7c29ja2V0cyBvdmVyIFJETUFcJiMzNDsgc29sdXRpb24gbWFraW5nIHVzZSBvZlxuICAgNzpcdFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcbiAgIDg6XHRcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cbiAgIDk6XHRcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xuICAxMDpcdFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFNNQ19ESUFHXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTY5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIERlcGVuZGVuY2llcyoqCgpIYW5nIG9uIGEgc2Vjb25k4oCmIHRoaXMgY29kZSBoYXMgYSBkZXBlbmRlbmN5IHRoYXQmIzM5O3MgdGllZCB0byBgSU5FVCAmYW1wOyZhbXA7IElORklOSUJBTkQgJmFtcDsmYW1wOyBESUJTYD8gSSBuZWVkIHRvIGNsYXJpZnkgd2hhdCBESUJTIGlzLCBvciBldmVuIGNvbmZpcm0gaWYgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIG1lYW50IGhlcmUuIFRoYXQgY29tYmluYXRpb24gb2YgbmV0d29yayB0ZWNobm9sb2dpZXMgaXMgdW51c3VhbC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGluIHRoZSBgbmV0L3NtYy9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBoaW50IG9yIGRlZmluaXRpb24gdGhlcmUuIEkgc3VzcGVjdCB0aGlzIHdpbGwgb2ZmZXIgY3J1Y2lhbCBjb250ZXh0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXG4gICAzOlx0b2JqLSQoQ09ORklHX1NNQylcdCYjNDM7PSBzbWMub1xuICAgNDpcdG9iai0kKENPTkZJR19TTUNfRElBRylcdCYjNDM7PSBzbWNfZGlhZy5vXG4gICA1Olx0c21jLXkgOj0gYWZfc21jLm8gc21jX3BuZXQubyBzbWNfaWIubyBzbWNfY2xjLm8gc21jX2NvcmUubyBzbWNfd3IubyBzbWNfbGxjLm9cbiAgIDY6XHRzbWMteSAmIzQzOz0gc21jX2NkYy5vIHNtY190eC5vIHNtY19yeC5vIHNtY19jbG9zZS5vIHNtY19pc20ubyBzbWNfbmV0bGluay5vIHNtY19zdGF0cy5vXG4gICA3Olx0c21jLXkgJiM0Mzs9IHNtY190cmFjZXBvaW50Lm8gc21jX2luZXQub1xuICAgODpcdHNtYy0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzbWNfc3lzY3RsLm9cbiAgIDk6XHRzbWMtJChDT05GSUdfU01DX0hTX0NUUkxfQlBGKSAmIzQzOz0gc21jX2hzX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MzUKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBESUJTIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoaXMgYERJQlNgIHRoaW5nLiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBgbmV0L3NtYy9LY29uZmlnYCBmaWxlIOKAkyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZC4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIGNvbnRleHQsIHRoYXQgYERJQlNgIGlzIHByb2JhYmx5IGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQmIzM5O3MgY29uZmlybS4KCk9rYXksIGxldCYjMzk7cyBydW4gYSBxdWljayBgZ3JlcGAgYWNyb3NzIHRoZSBlbnRpcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3BhY2UuIEl0JiMzOTtzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgYW4gb3ZlcnZpZXcgb2Ygd2hlcmUgYERJQlNgIGlzIHVzZWQgYW5kIGhvdyBpdCYjMzk7cyBkZWZpbmVkLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBjb250ZXh0IG5lZWRlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcyBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIGl0JiMzOTtzIG9mIGludGVyZXN0IHJpZ2h0IG5vdy4gS25vd2luZyB3aGVyZSBpdCBzaG93cyB1cCB3aWxsIHBvaW50IHVzIHRvIHRoZSBmdW5jdGlvbmFsaXR5IGl0IGVuYWJsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RJQlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7TUFJTlRBSU5FUlM9NzYxNj1GOlx0ZHJpdmVycy9ncGlvL2dwaW8tZ3Bpby1tbS5jXG5NQUlOVEFJTkVSUy03NjE3LVxuTUFJTlRBSU5FUlM6NzYxODpESUJTIChESVJFQ1QgSU5URVJOQUwgQlVGRkVSIFNIQVJJTkcpXG5NQUlOVEFJTkVSUy03NjE5LU06XHRBbGV4YW5kcmEgV2ludGVyIFx1MDAzY3dpbnRlcmFAbGludXguaWJtLmNvbVx1MDAzZVxuLS1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz0xMzM9Q09ORklHX1NNQ19ESUFHPW1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxMzQ6Q09ORklHX0RJQlM9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjEzNTpDT05GSUdfRElCU19MTz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctMTM2LUNPTkZJR19YRFBfU09DS0VUUz15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTEyND1DT05GSUdfU01DX0RJQUc9bVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjEyNTpDT05GSUdfRElCUz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MTI2OkNPTkZJR19ESUJTX0xPPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy0xMjctQ09ORklHX1hEUF9TT0NLRVRTPXlcbi0tXG5kcml2ZXJzL01ha2VmaWxlPTE5Nz1vYmoteVx0XHRcdFx0JiM0Mzs9IHJlc2N0cmwvXG5kcml2ZXJzL01ha2VmaWxlLTE5OC1cbmRyaXZlcnMvTWFrZWZpbGU6MTk5Om9iai0kKENPTkZJR19ESUJTKVx0XHQmIzQzOz0gZGlicy9cbmRyaXZlcnMvTWFrZWZpbGUtMjAwLW9iai0kKENPTkZJR19TMzkwKVx0XHQmIzQzOz0gczM5MC9cbi0tXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvZGlicy9LY29uZmlnLTUtXHRoZWxwXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzo2Olx0ICBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgKERJQlMpIGlzIGEgY29tbXVuaWNhdGlvbiBtZXRob2QgdGhhdFxuZHJpdmVycy9kaWJzL0tjb25maWctNy1cdCAgdXNlcyBjb21tb24gcGh5c2ljYWwgKGludGVybmFsKSBtZW1vcnkgZm9yIHN5bmNocm9ub3VzIGRpcmVjdCBhY2Nlc3Ncbi0tXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xMy1cbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cdGJvb2wgXCYjMzQ7SW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXCYjMzQ7XG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNjpcdGRlcGVuZHMgb24gRElCU1xuZHJpdmVycy9kaWJzL0tjb25maWctMTctXHRkZWZhdWx0IG5cbmRyaXZlcnMvZGlicy9LY29uZmlnLTE4LVx0aGVscFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTk6XHQgIERJQlNfTE8gZW5hYmxlcyB0aGUgY3JlYXRpb24gb2YgYW4gc29mdHdhcmUtZW11bGF0ZWQgZGlicyBkZXZpY2VcbmRyaXZlcnMvZGlicy9LY29uZmlnLTIwLVx0ICBuYW1lZCBsbyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgdHJhbnNmZXJyaW5nIGRhdGEgd2hlbiBjb21tdW5pY2F0aW9uXG4tLVxuZHJpdmVycy9kaWJzL01ha2VmaWxlLTItI1xuZHJpdmVycy9kaWJzL01ha2VmaWxlOjM6IyBESUJTIGNsYXNzIG1vZHVsZVxuZHJpdmVycy9kaWJzL01ha2VmaWxlLTQtI1xuLS1cbmRyaXZlcnMvZGlicy9NYWtlZmlsZT02PWRpYnMteSAmIzQzOz0gZGlic19tYWluLm9cbmRyaXZlcnMvZGlicy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ESUJTKSAmIzQzOz0gZGlicy5vXG5kcml2ZXJzL2RpYnMvTWFrZWZpbGU6ODpkaWJzLSQoQ09ORklHX0RJQlNfTE8pICYjNDM7PSBkaWJzX2xvb3BiYWNrLm9cbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIxLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyMjojZGVmaW5lIERJQlNfTE9fU1VQUE9SVF9OT0NPUFlcdDB4MVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyMzojZGVmaW5lIERJQlNfRE1BX0FERFJfSU5WQUxJRFx0KH4oZG1hX2FkZHJfdCkwKVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNC1cbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTI5PXN0YXRpYyB1MTYgZGlic19sb19nZXRfZmFicmljX2lkKHN0cnVjdCBkaWJzX2RldiAqZGlicylcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzAte1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMTpcdHJldHVybiBESUJTX0xPT1BCQUNLX0ZBQlJJQztcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzItfVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9NDM9c3RhdGljIGludCBkaWJzX2xvX21heF9kbWJzKHZvaWQpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTQ0LXtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6NDU6XHRyZXR1cm4gRElCU19MT19NQVhfRE1CUztcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNDYtfVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9NDg9c3RhdGljIGludCBkaWJzX2xvX3JlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iLFxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNTktXHQvKiBjaGVjayBzcGFjZSBmb3IgbmV3IGRtYiAqL1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo2MDpcdGZvcl9lYWNoX2NsZWFyX2JpdChzYmFfaWR4LCBsZGV2LVx1MDAzZXNiYV9pZHhfbWFzaywgRElCU19MT19NQVhfRE1CUykge1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy02MS1cdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHNiYV9pZHgsIGxkZXYtXHUwMDNlc2JhX2lkeF9tYXNrKSlcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTYzLVx0fVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo2NDpcdGlmIChzYmFfaWR4ID09IERJQlNfTE9fTUFYX0RNQlMpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTY1LVx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTg0LVx0ZG1iX25vZGUtXHUwMDNlY3B1X2FkZHIgPSBmb2xpb19hZGRyZXNzKGZvbGlvKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6ODU6XHRkbWJfbm9kZS1cdTAwM2VkbWFfYWRkciA9IERJQlNfRE1BX0FERFJfSU5WQUxJRDtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtODYtXHRyZWZjb3VudF9zZXQoXHUwMDI2ZG1iX25vZGUtXHUwMDNlcmVmY250LCAxKTtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTEzMj1zdGF0aWMgaW50IGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCBzdHJ1Y3QgZGlic19kbWIgKmRtYilcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTE1OS1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjE2MDpcdFx0ZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyW2RtYl9ub2RlLVx1MDAzZXNiYV9pZHhdID0gTk9fRElCU19DTElFTlQ7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTE2MS1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkaWJzLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTE2OD1zdGF0aWMgaW50IGRpYnNfbG9fc3VwcG9ydF9kbWJfbm9jb3B5KHN0cnVjdCBkaWJzX2RldiAqZGlicylcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTY5LXtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTcwOlx0cmV0dXJuIERJQlNfTE9fU1VQUE9SVF9OT0NPUFk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTE3MS19XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0yMzU9c3RhdGljIGludCBkaWJzX2xvX21vdmVfZGF0YShzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHU2NCBkbWJfdG9rLFxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjcyLVx0c19tYXNrID0gcm9yMTYoMHgxMDAwLCBpZHgpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyNzM6XHRpZiAobGlrZWx5KGNsaWVudF9pZCAhPSBOT19ESUJTX0NMSUVOVCBcdTAwMjZcdTAwMjYgZGlicy1cdTAwM2VzdWJzW2NsaWVudF9pZF0pKVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNzQtXHRcdGRpYnMtXHUwMDNlc3Vic1tjbGllbnRfaWRdLVx1MDAzZW9wcy1cdTAwM2VoYW5kbGVfaXJxKGRpYnMsIHNiYV9pZHgsIHNfbWFzayk7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC0xMS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6MTI6I2lmbmRlZiBfRElCU19MT09QQkFDS19IXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oOjEzOiNkZWZpbmUgX0RJQlNfTE9PUEJBQ0tfSFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC0xNC1cbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTIwLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDoyMTojaWYgSVNfRU5BQkxFRChDT05GSUdfRElCU19MTylcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6MjI6I2RlZmluZSBESUJTX0xPX0RNQlNfSEFTSF9CSVRTXHQxMlxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDoyMzojZGVmaW5lIERJQlNfTE9fTUFYX0RNQlNcdDUwMDBcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtMjQtXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaD0zNT1zdHJ1Y3QgZGlic19sb19kZXYge1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtMzgtXHRyd2xvY2tfdCBkbWJfaHRfbG9jaztcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6Mzk6XHRERUNMQVJFX0JJVE1BUChzYmFfaWR4X21hc2ssIERJQlNfTE9fTUFYX0RNQlMpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDo0MDpcdERFQ0xBUkVfSEFTSFRBQkxFKGRtYl9odCwgRElCU19MT19ETUJTX0hBU0hfQklUUyk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQxLVx0d2FpdF9xdWV1ZV9oZWFkX3QgbGRldl9yZWxlYXNlO1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg9NTI9c3RhdGljIGlubGluZSB2b2lkIGRpYnNfbG9vcGJhY2tfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNTYtXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oOjU3OiNlbmRpZiAvKiBfRElCU19MT09QQkFDS19IICovXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTItLypcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzozOiAqICBESUJTIC0gRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtNC0gKlxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjU6ICogIEltcGxlbWVudGF0aW9uIG9mIHRoZSBESUJTIGNsYXNzIG1vZHVsZVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTYtICpcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBkaWJzX2NsYXNzID0ge1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yNi0vKiB1c2UgYW4gYXJyYXkgcmF0aGVyIGEgbGlzdCBmb3IgZmFzdCBtYXBwaW5nOiAqL1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjI3OnN0YXRpYyBzdHJ1Y3QgZGlic19jbGllbnQgKmNsaWVudHNbTUFYX0RJQlNfQ0xJRU5UU107XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjgtc3RhdGljIHU4IG1heF9jbGllbnQ7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jPTUwPWludCBkaWJzX3JlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgZGlic19jbGllbnQgKmNsaWVudClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtNTYtXHRtdXRleF9sb2NrKFx1MDAyNmNsaWVudHNfbG9jayk7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6NTc6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfRElCU19DTElFTlRTOyAmIzQzOyYjNDM7aSkge1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTU4LVx0XHRpZiAoIWNsaWVudHNbaV0pIHtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtNjgtXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6Njk6XHRpZiAoaSBcdTAwM2MgTUFYX0RJQlNfQ0xJRU5UUykge1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTcwLVx0XHQvKiBpbml0aWFsaXplIHdpdGggYWxsIGRldmljZXMgdGhhdCB3ZSBnb3Qgc28gZmFyICovXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jPTE4NT1pbnQgZGlic19kZXZfYWRkKHN0cnVjdCBkaWJzX2RldiAqZGlicylcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTkzLVx0XHRyZXR1cm4gLUVOT01FTTtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxOTQ6XHRtZW1zZXQoZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyLCBOT19ESUJTX0NMSUVOVCwgbWF4X2RtYnMpO1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE5NS1cbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjIyPXZvaWQgZGlic19kZXZfZGVsKHN0cnVjdCBkaWJzX2RldiAqZGlicylcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjI5LVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MjMwOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0RJQlNfQ0xJRU5UUzsgJiM0MzsmIzQzO2kpXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjMxLVx0XHRkaWJzLVx1MDAzZXN1YnNbaV0gPSBOVUxMO1xuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI3MDAwcC5jPTI1MzI9c3RhdGljIHZvaWQgZGliNzA5MF9zZXREaWJUeE11eChzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgKnN0YXRlLCBpbnQgbW9kZSlcbi0tXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYy0yNTM3LVx0Y2FzZSBNUEVHX09OX0RJQlRYOlxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmM6MjUzODpcdFx0XHRkcHJpbnRrKFwmIzM0O1NFVCBNUEVHIE9OIERJQlNUUkVBTSBUWFxcblwmIzM0Oyk7XG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYy0yNTM5LVx0XHRcdGRpYjcwOTBfY2ZnX0RpYlR4KHN0YXRlLCA4LCA1LCAwLCAwLCAwLCAwKTtcbi0tXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYy0yNTQyLVx0Y2FzZSBESVZfT05fRElCVFg6XG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYzoyNTQzOlx0XHRcdGRwcmludGsoXCYjMzQ7U0VUIERJVl9PVVQgT04gRElCU1RSRUFNIFRYXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI3MDAwcC5jLTI1NDQtXHRcdFx0ZGliNzA5MF9jZmdfRGliVHgoc3RhdGUsIDUsIDUsIDAsIDAsIDAsIDApO1xuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI3MDAwcC5jLTI1NDctXHRjYXNlIEFEQ19PTl9ESUJUWDpcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI3MDAwcC5jOjI1NDg6XHRcdFx0ZHByaW50ayhcJiMzNDtTRVQgQURDX09VVCBPTiBESUJTVFJFQU0gVFhcXG5cJiMzNDspO1xuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmMtMjU0OS1cdFx0XHRkaWI3MDkwX2NmZ19EaWJUeChzdGF0ZSwgMjAsIDUsIDEwLCAwLCAwLCAwKTtcbi0tXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYz0yNTU4PXN0YXRpYyB2b2lkIGRpYjcwOTBfc2V0SG9zdEJ1c011eChzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgKnN0YXRlLCBpbnQgbW9kZSlcbi0tXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYy0yNTY4LVx0Y2FzZSBESUJUWF9PTl9IT1NUQlVTOlxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmM6MjU2OTpcdFx0XHRkcHJpbnRrKFwmIzM0O1NFVCBESUJTVFJFQU0gVFggT04gSE9TVCBCVVNcXG5cJiMzNDspO1xuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmMtMjU3MC1cdFx0XHRkaWI3MDkwX2VuTXBlZ011eChzdGF0ZSwgMCk7XG4tLVxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYz0xNDc4PXN0YXRpYyB2b2lkIGRpYjgwOTZwX3NldERpYlR4TXV4KHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSwgaW50IG1vZGUpXG4tLVxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYy0xNDgzLVx0Y2FzZSBNUEVHX09OX0RJQlRYOlxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYzoxNDg0Olx0XHRcdGRwcmludGsoXCYjMzQ7U0VUIE1QRUcgT04gRElCU1RSRUFNIFRYXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ4NS1cdFx0XHRkaWI4MDk2cF9jZmdfRGliVHgoc3RhdGUsIDgsIDUsIDAsIDAsIDAsIDApO1xuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ4Ny1cdGNhc2UgRElWX09OX0RJQlRYOlxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYzoxNDg4Olx0XHRcdGRwcmludGsoXCYjMzQ7U0VUIERJVl9PVVQgT04gRElCU1RSRUFNIFRYXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ4OS1cdFx0XHRkaWI4MDk2cF9jZmdfRGliVHgoc3RhdGUsIDUsIDUsIDAsIDAsIDAsIDApO1xuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ5MS1cdGNhc2UgQURDX09OX0RJQlRYOlxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYzoxNDkyOlx0XHRcdGRwcmludGsoXCYjMzQ7U0VUIEFEQ19PVVQgT04gRElCU1RSRUFNIFRYXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ5My1cdFx0XHRkaWI4MDk2cF9jZmdfRGliVHgoc3RhdGUsIDIwLCA1LCAxMCwgMCwgMCwgMCk7XG4tLVxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYz0xNTAxPXN0YXRpYyB2b2lkIGRpYjgwOTZwX3NldEhvc3RCdXNNdXgoc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlLCBpbnQgbW9kZSlcbi0tXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliODAwMC5jLTE1MTEtXHRjYXNlIERJQlRYX09OX0hPU1RCVVM6XG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliODAwMC5jOjE1MTI6XHRcdFx0ZHByaW50ayhcJiMzNDtTRVQgRElCU1RSRUFNIFRYIE9OIEhPU1QgQlVTXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTUxMy1cdFx0XHRkaWI4MDk2cF9lbk1wZWdNdXgoc3RhdGUsIDApO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZz04Mj1jb25maWcgSVNNXG5kcml2ZXJzL3MzOTAvbmV0L0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBJU00gdlBDSSBBZGFwdGVyXCYjMzQ7XG5kcml2ZXJzL3MzOTAvbmV0L0tjb25maWc6ODQ6XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgRElCU1xuZHJpdmVycy9zMzkwL25ldC9LY29uZmlnLTg1LVx0ZGVmYXVsdCBuXG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM9MzIxPXN0YXRpYyBpbnQgaXNtX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzM0LVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzozMzU6XHRkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnJbZG1iLVx1MDAzZWlkeCAtIElTTV9ETUJfQklUX09GRlNFVF0gPSBOT19ESUJTX0NMSUVOVDtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTMzNi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM9NDM1PXN0YXRpYyBpbnQgaXNtX21hdGNoX2V2ZW50X3R5cGUodTMyIHMzOTBfZXZlbnRfdHlwZSlcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00MzgtXHRjYXNlIElTTV9FVkVOVF9CVUY6XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo0Mzk6XHRcdHJldHVybiBESUJTX0JVRl9FVkVOVDtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ0MC1cdGNhc2UgSVNNX0VWRU5UX0RFVjpcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ0MTpcdFx0cmV0dXJuIERJQlNfREVWX0VWRU5UO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDQyLVx0Y2FzZSBJU01fRVZFTlRfU1dSOlxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NDQzOlx0XHRyZXR1cm4gRElCU19TV19FVkVOVDtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ0NC1cdGRlZmF1bHQ6XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo0NDU6XHRcdHJldHVybiBESUJTX09USEVSX1RZUEU7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00NDYtXHR9XG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM9NDQ5PXN0YXRpYyBpbnQgaXNtX21hdGNoX2V2ZW50X3N1YnR5cGUodTMyIHMzOTBfZXZlbnRfc3VidHlwZSlcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00NTItXHRjYXNlIElTTV9CVUZfRE1CX1VOUkVHSVNURVJFRDpcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ1MzpcdFx0cmV0dXJuIERJQlNfQlVGX1VOUkVHSVNURVJFRDtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ1NC1cdGNhc2UgSVNNX0RFVl9HSURfRElTQUJMRUQ6XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo0NTU6XHRcdHJldHVybiBESUJTX0RFVl9ESVNBQkxFRDtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ1Ni1cdGNhc2UgSVNNX0RFVl9HSURfRVJSX1NUQVRFOlxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NDU3Olx0XHRyZXR1cm4gRElCU19ERVZfRVJSX1NUQVRFO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDU4LVx0ZGVmYXVsdDpcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ1OTpcdFx0cmV0dXJuIERJQlNfT1RIRVJfU1VCVFlQRTtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ2MC1cdH1cbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz00NjM9c3RhdGljIHZvaWQgaXNtX2hhbmRsZV9ldmVudChzdHJ1Y3QgaXNtX2RldiAqaXNtKVxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ3OC1cdFx0ZXZlbnQudHlwZSA9IGlzbV9tYXRjaF9ldmVudF90eXBlKGVudHJ5LVx1MDAzZXR5cGUpO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NDc5Olx0XHRpZiAoZXZlbnQudHlwZSA9PSBESUJTX1NXX0VWRU5UKVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDgwLVx0XHRcdGV2ZW50LnN1YnR5cGUgPSBlbnRyeS1cdTAwM2Vjb2RlO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ4NS1cdFx0c3dpdGNoIChldmVudC50eXBlKSB7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo0ODY6XHRcdGNhc2UgRElCU19CVUZfRVZFTlQ6XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00ODctXHRcdFx0ZXZlbnQuYnVmZmVyX3RvayA9IGVudHJ5LVx1MDAzZXRvaztcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ4OC1cdFx0XHRicmVhaztcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ4OTpcdFx0Y2FzZSBESUJTX0RFVl9FVkVOVDpcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ5MDpcdFx0Y2FzZSBESUJTX1NXX0VWRU5UOlxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDkxLVx0XHRcdG1lbWNweShcdTAwMjZldmVudC5naWQsIFx1MDAyNmVudHJ5LVx1MDAzZXRvaywgc2l6ZW9mKHU2NCkpO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDkyLVx0XHR9XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo0OTM6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9ESUJTX0NMSUVOVFM7ICYjNDM7JiM0MztpKSB7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00OTQtXHRcdFx0Y2x0ID0gZGlicy1cdTAwM2VzdWJzW2ldO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTUwMT1zdGF0aWMgaXJxcmV0dXJuX3QgaXNtX2hhbmRsZV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy01MjctXHRcdGNsaWVudF9pZCA9IGRpYnMtXHUwMDNlZG1iX2NsaWVudGlkX2FycltiaXRdO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NTI4Olx0XHRpZiAodW5saWtlbHkoY2xpZW50X2lkID09IE5PX0RJQlNfQ0xJRU5UIHx8XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy01MjktXHRcdFx0ICAgICAhZGlicy1cdTAwM2VzdWJzW2NsaWVudF9pZF0pKVxuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oLTQtICpcbmluY2x1ZGUvbGludXgvZGlicy5oOjU6ICogIERlZmluaXRpb25zIGZvciB0aGUgRElCUyBtb2R1bGVcbmluY2x1ZGUvbGludXgvZGlicy5oLTYtICpcbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC04LSAqL1xuaW5jbHVkZS9saW51eC9kaWJzLmg6OTojaWZuZGVmIF9ESUJTX0hcbmluY2x1ZGUvbGludXgvZGlicy5oOjEwOiNkZWZpbmUgX0RJQlNfSFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTEtXG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTQtXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoxNTovKiBESUJTIC0gRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIC0gY29uY2VwdFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTYtICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD00Nj1zdHJ1Y3QgZGlic19kbWIge1xuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oLTY5LVxuaW5jbHVkZS9saW51eC9kaWJzLmg6NzA6LyogRElCUyBldmVudHNcbmluY2x1ZGUvbGludXgvZGlicy5oLTcxLSAqIC0tLS0tLS0tLS0tXG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmg9NzU9ZW51bSBkaWJzX2V2ZW50X3R5cGUge1xuaW5jbHVkZS9saW51eC9kaWJzLmgtNzYtXHQvKiBCdWZmZXIgZXZlbnQsIGUuZy4gYSByZW1vdGUgZG1iIHdhcyB1bnJlZ2lzdGVyZWQgKi9cbmluY2x1ZGUvbGludXgvZGlicy5oOjc3Olx0RElCU19CVUZfRVZFTlQsXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC03OC1cdC8qIERldmljZSBldmVudCwgZS5nLiBhIHJlbW90ZSBkaWJzIGRldmljZSB3YXMgZGlzYWJsZWQgKi9cbmluY2x1ZGUvbGludXgvZGlicy5oOjc5Olx0RElCU19ERVZfRVZFTlQsXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC04MC1cdC8qIFNvZnR3YXJlIGV2ZW50LCBhIGRpYnMgY2xpZW50IGNhbiBzZW5kIGFuIGV2ZW50IHNpZ25hbCB0byBhXG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmgtODItXHQgKi9cbmluY2x1ZGUvbGludXgvZGlicy5oOjgzOlx0RElCU19TV19FVkVOVCxcbmluY2x1ZGUvbGludXgvZGlicy5oOjg0Olx0RElCU19PVEhFUl9UWVBFIH07XG5pbmNsdWRlL2xpbnV4L2RpYnMuaC04NS1cbmluY2x1ZGUvbGludXgvZGlicy5oPTg2PWVudW0gZGlic19ldmVudF9zdWJ0eXBlIHtcbmluY2x1ZGUvbGludXgvZGlicy5oOjg3Olx0RElCU19CVUZfVU5SRUdJU1RFUkVELFxuaW5jbHVkZS9saW51eC9kaWJzLmg6ODg6XHRESUJTX0RFVl9ESVNBQkxFRCxcbmluY2x1ZGUvbGludXgvZGlicy5oOjg5Olx0RElCU19ERVZfRVJSX1NUQVRFLFxuaW5jbHVkZS9saW51eC9kaWJzLmg6OTA6XHRESUJTX09USEVSX1NVQlRZUEVcbmluY2x1ZGUvbGludXgvZGlicy5oLTkxLX07XG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmg9MTA1PXN0cnVjdCBkaWJzX2RldjtcbmluY2x1ZGUvbGludXgvZGlicy5oLTEwNi1cbmluY2x1ZGUvbGludXgvZGlicy5oOjEwNzovKiBESUJTIGNsaWVudFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTA4LSAqIC0tLS0tLS0tLS0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0xMDktICovXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoxMTA6I2RlZmluZSBNQVhfRElCU19DTElFTlRTXHQ4XG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoxMTE6I2RlZmluZSBOT19ESUJTX0NMSUVOVFx0XHQweGZmXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0xMTItLyogQWxsIGRpYnMgY2xpZW50cyBoYXZlIGFjY2VzcyB0byBhbGwgZGlicyBkZXZpY2VzLlxuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oPTE5MT1pbnQgZGlic191bnJlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgZGlic19jbGllbnQgKmNsaWVudCk7XG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTk0LVxuaW5jbHVkZS9saW51eC9kaWJzLmg6MTk1Oi8qIERJQlMgZGV2aWNlc1xuaW5jbHVkZS9saW51eC9kaWJzLmgtMTk2LSAqIC0tLS0tLS0tLS0tLVxuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oLTIwMy0gKi9cbmluY2x1ZGUvbGludXgvZGlicy5oOjIwNDojZGVmaW5lIERJQlNfTE9PUEJBQ0tfRkFCUklDXHQweEZGRkZcbmluY2x1ZGUvbGludXgvZGlicy5oLTIwNS1cbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD0yMDk9c3RydWN0IGRpYnNfZGV2X29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmgtMjIwLVx0ICpcdFx0ICAgKGUuZy4gZGlmZmVyZW50IEhXIHN5c3RlbXMpXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoyMjE6XHQgKiBFWENFUFRJT046IERJQlNfTE9PUEJBQ0tfRkFCUklDIGRlbm90ZXMgYW4gaXNtX2xvb3BiYWNrIGRldmljZVxuaW5jbHVkZS9saW51eC9kaWJzLmgtMjIyLVx0ICpcdCAgICAgIHRoYXQgY2FuIG9ubHkgY29tbXVuaWNhdGUgd2l0aCBpdHNlbGYuIFVzZSBkaWJzX2Rldi5naWRcbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD00MDE9c3RydWN0IGRpYnNfZGV2IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00MTAtXHQvKiBwcml2IHBvaW50ZXIgcGVyIGNsaWVudDsgZm9yIGNsaWVudCB1c2FnZSBvbmx5ICovXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo0MTE6XHR2b2lkICpwcml2W01BWF9ESUJTX0NMSUVOVFNdO1xuaW5jbHVkZS9saW51eC9kaWJzLmgtNDEyLVxuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oLTQxOS1cdC8qIFNwYXJzZSBhcnJheSBvZiBhbGwgSVNNIGNsaWVudHMgKi9cbmluY2x1ZGUvbGludXgvZGlicy5oOjQyMDpcdHN0cnVjdCBkaWJzX2NsaWVudCAqc3Vic1tNQVhfRElCU19DTElFTlRTXTtcbmluY2x1ZGUvbGludXgvZGlicy5oLTQyMS19O1xuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oPTQ2Mj12b2lkIGRpYnNfZGV2X2RlbChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpO1xuaW5jbHVkZS9saW51eC9kaWJzLmgtNDYzLVxuaW5jbHVkZS9saW51eC9kaWJzLmg6NDY0OiNlbmRpZlx0LyogX0RJQlNfSCAqL1xuLS1cbm5ldC9zbWMvS2NvbmZpZz0yPWNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG5uZXQvc21jL0tjb25maWctNS1cdGhlbHBcbi0tXG5uZXQvc21jL3NtY19pc20uYz00NDU9c3RhdGljIHZvaWQgc21jX2lzbV9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc21jL3NtY19pc20uYy00NTMtXHRzd2l0Y2ggKHdyay1cdTAwM2VldmVudC50eXBlKSB7XG5uZXQvc21jL3NtY19pc20uYzo0NTQ6XHRjYXNlIERJQlNfREVWX0VWRU5UOiAvKiBHSUQgZXZlbnQsIHRva2VuIGlzIHBlZXIgR0lEICovXG5uZXQvc21jL3NtY19pc20uYy00NTUtXHRcdHNtY19zbWNkX3Rlcm1pbmF0ZSh3cmstXHUwMDNlc21jZCwgXHUwMDI2c21jZF9naWQsIFZMQU5fVklEX01BU0spO1xubmV0L3NtYy9zbWNfaXNtLmMtNDU2LVx0XHRicmVhaztcbm5ldC9zbWMvc21jX2lzbS5jOjQ1NzpcdGNhc2UgRElCU19CVUZfRVZFTlQ6XG5uZXQvc21jL3NtY19pc20uYy00NTgtXHRcdGJyZWFrO1xubmV0L3NtYy9zbWNfaXNtLmM6NDU5Olx0Y2FzZSBESUJTX1NXX0VWRU5UOiAvKiBTb2Z0d2FyZSBkZWZpbmVkIGV2ZW50ICovXG5uZXQvc21jL3NtY19pc20uYy00NjAtXHRcdHNtY2RfaGFuZGxlX3N3X2V2ZW50KHdyayk7XG4tLVxubmV0L3NtYy9zbWNfaXNtLmg9OTY9c3RhdGljIGlubGluZSBib29sIHNtY19pc21faXNfbG9vcGJhY2soc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxubmV0L3NtYy9zbWNfaXNtLmgtOTcte1xubmV0L3NtYy9zbWNfaXNtLmg6OTg6XHRyZXR1cm4gKGRpYnMtXHUwMDNlb3BzLVx1MDAzZWdldF9mYWJyaWNfaWQoZGlicykgPT0gRElCU19MT09QQkFDS19GQUJSSUMpO1xubmV0L3NtYy9zbWNfaXNtLmgtOTktfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc9MTM1PUNPTkZJR19TTUNfSFNfQ1RSTF9CUEY9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzoxMzY6Q09ORklHX0RJQlM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzoxMzc6Q09ORklHX0RJQlNfTE89eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy0xMzgtQ09ORklHX1BNX1dBS0VMT0NLUz15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjUyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU01DIENvbm5lY3Rpb24gQWJvcnQgV29yayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIHBhdGNoIGNoYW5nZXMgZm9yIGBuZXQvc21jL3NtY19jb3JlLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgc291bmQsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbXBsZXhpdGllcyBvZiBsb2NraW5nIGFuZCB3b3JrIHF1ZXVlcy4KClNvLCBmaXJzdCwgdGhlcmUmIzM5O3MgdGhpcyBuZXcgZnVuY3Rpb24sIGBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBkZXNpZ25lZCB0byBwcm9wZXJseSBoYW5kbGUgdGhlIGNhbmNlbGxhdGlvbiBvZiB0aGUgYGFib3J0X3dvcmtgIHdvcmsgaXRlbSBhc3NvY2lhdGVkIHdpdGggYW4gU01DIGNvbm5lY3Rpb24uIEluc2lkZSB0aGlzIGZ1bmN0aW9uIEkgc2VlIHRoZSBjb2RlIGlzIGNoZWNraW5nIGlmIHRoZSBjdXJyZW50IHdvcmsgaXMgZXF1YWwgdG8gYGNvbm4tJmd0O2Fib3J0X3dvcmtgLCBhbmQgaWYgc28gcmV0dXJucy4gVGhlIGByZWxlYXNlX3NvY2soc2spYCBhbmQgYGxvY2tfc29jayhzaylgIGNhbGxzLCBhcmUgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGV5IGFyZSBhIHdheSB0byBkcm9wIHRoZSBsb2NrIGFuZCByZWFjcXVpcmUgaXQuIElmIGBjYW5jZWxfd29ya19zeW5jKCZhbXA7Y29ubi0mZ3Q7YWJvcnRfd29yaylgIHJldHVybnMgdHJ1ZSwgYHNvY2tfcHV0KHNrKWAgaXMgY2FsbGVkLgoKVGhlIHNlY29uZCBjaGFuZ2UgaXMgYSBkaXJlY3QgcmVwbGFjZW1lbnQgaW4gYHNtY19jb25uX2ZyZWVgLiBJbnN0ZWFkIG9mIHRoYXQgY29uZGl0aW9uYWwgYGNhbmNlbF93b3JrX3N5bmNgLCBpdCYjMzk7cyBub3cgY2FsbGluZyB0aGlzIG5ldyBgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmtgIGZ1bmN0aW9uLiBUaGlzICppbW1lZGlhdGVseSogcmFpc2VzIGEgZmxhZyDigJMgaXQmIzM5O3MgbGlrZWx5IHRoZSBrZXkgdG8gcmVzb2x2aW5nIHNvbWUgY3JpdGljYWwgc3luY2hyb25pemF0aW9uIGlzc3VlLCBzaW5jZSBgc21jX2Nvbm5fZnJlZWAgaXMgdGhlIG9idmlvdXMgc3BvdCB0byBjbGVhbiB1cCBhbmQgZnJlZSBhIGNvbm5lY3Rpb24sIHdoaWNoIGlzIGEgcGxhY2Ugd2hlcmUgeW91JiMzOTtkIGJlIHdvcnJpZWQgYWJvdXQgY29uY3VycmVudCBhY2Nlc3MuCgpGaW5hbGx5LCB3aXRoaW4gYHNtY19jb25uX2Fib3J0X3dvcmtgLCBpdCBsb2NrcyB0aGUgc29ja2V0LCBjaGVja3MgdGhlIGBjb25uLSZndDtmcmVlZGAgZmxhZywgYW5kIHRoZW4gZWl0aGVyIGtpbGxzIHRoZSBjb25uZWN0aW9uIG9yIGp1c3QgcmVsZWFzZXMgdGhlIGxvY2sgYW5kIGRlY3JlbWVudHMgdGhlIHNvY2tldCByZWZlcmVuY2UgY291bnQuIFRoZSBjb21tZW50IGFib3V0IGBzbWNfY29ubl9mcmVlYCBzZXR0aW5nIGBmcmVlZGAgd2l0aCB0aGUgbG9jayBoZWxkIGlzIGNydWNpYWwuIFRoaXMgaXMgcHJvdGVjdGluZyBhZ2FpbnN0IGEgcmFjZS4gSWYgYGFib3J0X3dvcmtgIHJ1bnMgKmFmdGVyKiBgc21jX2Nvbm5fZnJlZWAgaGFzIGJlZW4gY2FsbGVkLCB0aGUgYGZyZWVkYCBmbGFnIGVuc3VyZXMgaXQgZG9lcyBub3RoaW5nLgoKVGhlIHJlYXNvbmluZyBjbGlja3MgaW50byBwbGFjZS4gVGhlcmUgd2FzIGxpa2VseSBhIHBvdGVudGlhbCBkZWFkbG9jazogaWYgYHNtY19jb25uX2Fib3J0X3dvcmtgIHdhcyBydW5uaW5nLCBpdCB3b3VsZCBiZSBob2xkaW5nIGEgc29ja2V0IGxvY2suIFRoZW4sIGBzbWNfY29ubl9mcmVlYCBtaWdodCBiZSBjYWxsZWQgKmFsc28qIHdpdGggdGhlIHNvY2tldCBsb2NrIGhlbGQsIGFuZCB3b3VsZCBjYWxsIGBjYW5jZWxfd29ya19zeW5jKCZhbXA7Y29ubi0mZ3Q7YWJvcnRfd29yaylgLiBUaGF0IGZ1bmN0aW9uIHdvdWxkIHRyeSB0byBjYW5jZWwgdGhlIHdvcmsgcXVldWUsIHdoaWxlIGBzbWNfY29ubl9hYm9ydF93b3JrYCB3YXMgc3RpbGwgcnVubmluZywgd2FpdGluZyBmb3IgdGhhdCBzYW1lIGxvY2suIERlYWRsb2NrISBUaGUgZml4IGhlcmUgaXMgdG8gcmVsZWFzZSB0aGUgc29ja2V0IGxvY2sgYmVmb3JlIGNhbGxpbmcgYGNhbmNlbF93b3JrX3N5bmNgLCBhbmQgdGhlbiByZS1hY3F1aXJlIGl0LgoKVGhlIG90aGVyIHBvaW50IGFib3V0IHRoZSBgc29ja19wdXRgIGlzIGFsc28gY2xlYXIg4oCTIGlmIHdlIGNhbmNlbCBhIHNjaGVkdWxlZCB3b3JrIGl0ZW0gKmJlZm9yZSogaXQgZ2V0cyBhIGNoYW5jZSB0byBydW4gaXRzIGBzb2NrX3B1dGAsIHdlIGhhdmUgdG8gZG8gaXQgb3Vyc2VsdmVzLiBUaGUgYGNhbmNlbF93b3JrX3N5bmNgIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSAoMSkgaWYgaXQgY2FuY2VsbGVkIHNvbWV0aGluZy4gT3RoZXJ3aXNlLCB0aGUgc29ja2V0IHJlZmNvdW50IHdpbGwgYmUgbWlzbWF0Y2hlZC4KClNvLCB0aGlzIHBhdGNoIGlzIGFib3V0IGRlYWRsb2NrIHByZXZlbnRpb24gYW5kIGNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nIGZvciB0aGUgc29ja2V0LiBOb3csIEkgbmVlZCB0byB0aG9yb3VnaGx5IHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGBzbWNfY29ubl9mcmVlYCB0byBjb25maXJtIHRoaXMgdW5kZXJzdGFuZGluZyBhbmQgdG8gc2VlIHdoZXJlIHRoZSBgYWJvcnRfd29ya2AgaXMgcXVldWVkIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcy4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IFNNQyBzb2NrZXRzIG9wZXJhdGUsIGFuZCB3aGljaCB0aHJlYWQgY29udGV4dHMgbWlnaHQgdHJpZ2dlciB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19jb25uX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTI4OD1zdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMjEtXHRcdGlmICghc21jLVx1MDAzZXVzZV9mYWxsYmFjaylcbm5ldC9zbWMvYWZfc21jLmM6MzIyOlx0XHRcdHNtY19jb25uX2ZyZWUoXHUwMDI2c21jLVx1MDAzZWNvbm4pO1xubmV0L3NtYy9hZl9zbWMuYy0zMjMtXHR9XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0xMDA4PXN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgbG9jYWxfZmlyc3QpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xMDE2LVxubmV0L3NtYy9hZl9zbWMuYzoxMDE3Olx0c21jX2Nvbm5fZnJlZShjb25uKTtcbm5ldC9zbWMvYWZfc21jLmMtMTAxOC1cdGlmIChsb2NhbF9maXJzdCBcdTAwMjZcdTAwMjYgbGdyX3ZhbGlkKVxuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmM9MTI4PXZvaWQgc21jX2Nsb3NlX2FjdGl2ZV9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jLTE1Ni1cdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBTTUNfQ0xPU0VEO1xubmV0L3NtYy9zbWNfY2xvc2UuYzoxNTc6XHRcdHNtY19jb25uX2ZyZWUoXHUwMDI2c21jLVx1MDAzZWNvbm4pO1xubmV0L3NtYy9zbWNfY2xvc2UuYy0xNTgtXHRcdHJlbGVhc2VfY2xjc29jayA9IHRydWU7XG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNjctXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gU01DX0NMT1NFRDtcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTY4Olx0XHRzbWNfY29ubl9mcmVlKFx1MDAyNnNtYy1cdTAwM2Vjb25uKTtcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTY5LVx0XHRyZWxlYXNlX2NsY3NvY2sgPSB0cnVlO1xuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmM9MzU2PXN0YXRpYyB2b2lkIHNtY19jbG9zZV9wYXNzaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmMtNDM1LVx0XHQgICAgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fCAhc2stXHUwMDNlc2tfc29ja2V0KSkge1xubmV0L3NtYy9zbWNfY2xvc2UuYzo0MzY6XHRcdFx0c21jX2Nvbm5fZnJlZShjb25uKTtcbm5ldC9zbWMvc21jX2Nsb3NlLmMtNDM3LVx0XHRcdGlmIChzbWMtXHUwMDNlY2xjc29jaylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTA4Mz12b2lkIHNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkwLVx0YXRvbWljX2luYyhcdTAwMjZjb25uLVx1MDAzZWxuay1cdTAwM2Vjb25uX2NudCk7XG5uZXQvc21jL3NtY19jb3JlLmM6MTA5MTpcdC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xubmV0L3NtYy9zbWNfY29yZS5jLTEwOTItXHRzbWNyX2xpbmtfaG9sZChjb25uLVx1MDAzZWxuayk7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTEyNTk9c3RhdGljIHZvaWQgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjczLS8qIHJlbW92ZSBhIGZpbmlzaGVkIGNvbm5lY3Rpb24gZnJvbSBpdHMgbGluayBncm91cCAqL1xubmV0L3NtYy9zbWNfY29yZS5jOjEyNzQ6dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjc1LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTc2Mz1zdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTc3MC1cdGxvY2tfc29jayhcdTAwMjZzbWMtXHUwMDNlc2spO1xubmV0L3NtYy9zbWNfY29yZS5jOjE3NzE6XHQvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXRcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzcyLVx0ICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhc1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0yMDAwPWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTIwNzQtXHR9XG5uZXQvc21jL3NtY19jb3JlLmM6MjA3NTpcdHNtY19sZ3JfaG9sZChjb25uLVx1MDAzZWxncik7IC8qIGxncl9wdXQgaW4gc21jX2Nvbm5fZnJlZSgpICovXG5uZXQvc21jL3NtY19jb3JlLmMtMjA3Ni1cdGlmICghY29ubi1cdTAwM2VsZ3ItXHUwMDNlaXNfc21jZClcbm5ldC9zbWMvc21jX2NvcmUuYzoyMDc3Olx0XHRzbWNyX2xpbmtfaG9sZChjb25uLVx1MDAzZWxuayk7IC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xubmV0L3NtYy9zbWNfY29yZS5jLTIwNzgtXHRjb25uLVx1MDAzZWZyZWVkID0gMDtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmg9NTk2PWludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbm5ldC9zbWMvc21jX2NvcmUuaC01OTctXG5uZXQvc21jL3NtY19jb3JlLmg6NTk4OnZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xubmV0L3NtYy9zbWNfY29yZS5oLTU5OS1pbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFNNQyBTb2NrZXQgTmV0d29ya2luZyBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21lIGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgbG9naWMgaGVyZSwgc3BlY2lmaWNhbGx5IGZvciBTTUMgc29ja2V0cyAoQUZfU01DKS4gVGhpcyBzZWVtcyB0byBiZSB0aGUgcGFydCB0aGF0IGhhbmRsZXMgc29ja2V0IGxvY2tpbmcsIGNvbm5lY3Rpb24gYWJvcnRzLCB3b3JrcXVldWVzLCByZWZjb3VudGluZyB1c2luZyBgc29ja19ob2xkYCBhbmQgYHNvY2tfcHV0YCwgYW5kIGEgbG90IG9mIHJhY2UgY29uZGl0aW9uIG1pdGlnYXRpb24gZHVyaW5nIHRlYXJkb3duLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIFFFTVUvc3l6a2FsbGVyIGVudmlyb25tZW50LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzOiBTTUMgc29ja2V0cyBhcmUgY3JlYXRlZCB1c2luZyBgc29ja2V0KEFGX1NNQywgLi4uKWAsIHdoaWNoIGlzIHNvY2tldCBmYW1pbHkgNDMuCgpOb3csIHdhaXQgYSBtaW51dGUsIFNNQy1SIHJlbGllcyBvbiBSRE1BICh0aGluZ3MgbGlrZSBgcmRtYV9yeGVgIG9yIGBzaXdgLCB0aGUgc29mdHdhcmUgUkRNQSBkcml2ZXJzIG9mdGVuIGluY2x1ZGVkIGluIHRoZSBzdGFuZGFyZCBrZXJuZWxzKSwgb3IgU01DLUQgbWlnaHQgdXNlIGEgbG9vcGJhY2sgZGV2aWNlIGxpa2UgRElCU19MTy4gR29vZCwgdGhhdCBtZWFucyBpdCYjMzk7cyBwcm9iYWJseSByZWFjaGFibGUgYW5kIGxpa2VseSBoZWF2aWx5IGZ1enplZCBieSBzeXprYWxsZXIuCgpOZXh0LCBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSBhcmUgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3MgcmVxdWlyZWQgZm9yIGNvbXBpbGluZyBhbmQgYWN0dWFsbHkgdGVzdGluZyB0aGlzIGNvZGUuIEkgbmVlZCB0byBkaXZlIGludG8gYG5ldC9zbWMvS2NvbmZpZ2AuIFJpZ2h0LCBpdCBkZXBlbmRzIG9uIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgLiBOb3csIGRvIGBJTkZJTklCQU5EYCwgYERJQlNgLCBvciBgU01DYCB0aGVtc2VsdmVzIGhhdmUgYW55IGFkZGl0aW9uYWwgY29uZmlnIGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdGNvbmZpZyBESUJTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVmYXVsdCBuXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyAoRElCUykgaXMgYSBjb21tdW5pY2F0aW9uIG1ldGhvZCB0aGF0XG4gICA3Olx0XHQgIHVzZXMgY29tbW9uIHBoeXNpY2FsIChpbnRlcm5hbCkgbWVtb3J5IGZvciBzeW5jaHJvbm91cyBkaXJlY3QgYWNjZXNzXG4gICA4Olx0XHQgIGludG8gYSByZW1vdGUgYnVmZmVyLlxuICAgOTpcdFxuICAxMDpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gcHJvdmlkZSB0aGUgYWJzdHJhY3Rpb24gbGF5ZXIgYmV0d2VlblxuICAxMTpcdFx0ICBkaWJzIGRldmljZXMgYW5kIGRpYnMgY2xpZW50cyBsaWtlIHRoZSBTTUMgcHJvdG9jb2wuXG4gIDEyOlx0XHQgIFRoZSBtb2R1bGUgbmFtZSBpcyBkaWJzLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBESUJTX0xPXG4gIDE1Olx0XHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBESUJTXG4gIDE3Olx0XHRkZWZhdWx0IG5cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgRElCU19MTyBlbmFibGVzIHRoZSBjcmVhdGlvbiBvZiBhbiBzb2Z0d2FyZS1lbXVsYXRlZCBkaWJzIGRldmljZVxuICAyMDpcdFx0ICBuYW1lZCBsbyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgdHJhbnNmZXJyaW5nIGRhdGEgd2hlbiBjb21tdW5pY2F0aW9uXG4gIDIxOlx0XHQgIG9jY3VycyB3aXRoaW4gdGhlIHNhbWUgT1MuIFRoaXMgaGVscHMgaW4gY29udmVuaWVudCB0ZXN0aW5nIG9mXG4gIDIyOlx0XHQgIGRpYnMgY2xpZW50cywgc2luY2UgZGlicyBsb29wYmFjayBpcyBpbmRlcGVuZGVudCBvZiBhcmNoaXRlY3R1cmUgb3JcbiAgMjM6XHRcdCAgaGFyZHdhcmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEluZmluaWJhbmQgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBJbmZpbmlCYW5kIGRyaXZlcnMgaW4gdGhpcyBrZXJuZWwuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBwcmFjdGljZSAtIGNoZWNraW5nIHRoZSBgZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgdGhlIGNlbnRyYWwgcmVwb3NpdG9yeSBmb3IgZGVmaW5pbmcgYWxsIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEluZmluaUJhbmQuIEl0JiMzOTtsbCBnaXZlIG1lIGEgY2xlYXIgb3ZlcnZpZXcgb2Ygd2hhdCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHVzdWFsIHN1c3BlY3RzOiBzdXBwb3J0IGZvciB2YXJpb3VzIGhhcmR3YXJlIGRldmljZXMsIHRyYW5zcG9ydCBwcm90b2NvbHMgbGlrZSB2ZXJicyBhbmQgUmVsaWFibGUgRGF0YWdyYW0gc29ja2V0cywgcGVyaGFwcyBzb21lIHBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucywgYW5kIGRlZmluaXRlbHkgc29tZSBkZWJ1Z2dpbmcgZmxhZ3MuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzIOKAkyB1bmRlcnN0YW5kaW5nIHRob3NlIGNyb3NzLXJlZmVyZW5jZXMgd2lsbCBiZSBrZXkgdG8gbWFraW5nIGluZm9ybWVkIGRlY2lzaW9ucyBhYm91dCBlbmFibGluZyBvciBkaXNhYmxpbmcgc3BlY2lmaWMgZmVhdHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldCBzeXN0ZW0mIzM5O3MgaGFyZHdhcmUgYW5kIGludGVuZGVkIHVzZSBjYXNlLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcGllY2luZyB0b2dldGhlciB0aGUgY29uZmlndXJhdGlvbiBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIElORklOSUJBTkRcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IEhBU19ETUFcbiAgIDU6XHRcdGRlcGVuZHMgb24gTkVUXG4gICA2Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDc6XHRcdGRlcGVuZHMgb24gIUFMUEhBXG4gICA4Olx0XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbiAgIDk6XHRcdHNlbGVjdCBJUlFfUE9MTFxuICAxMDpcdFx0c2VsZWN0IERJTUxJQlxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBDb3JlIHN1cHBvcnQgZm9yIEluZmluaUJhbmQgKElCKS4gIE1ha2Ugc3VyZSB0byBhbHNvIHNlbGVjdFxuICAxMzpcdFx0ICBhbnkgcHJvdG9jb2xzIHlvdSB3aXNoIHRvIHVzZSBhcyB3ZWxsIGFzIGRyaXZlcnMgZm9yIHlvdXJcbiAgMTQ6XHRcdCAgSW5maW5pQmFuZCBoYXJkd2FyZS5cbiAgMTU6XHRcbiAgMTY6XHRpZiBJTkZJTklCQU5EXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgdXNlcnNwYWNlIE1BRCBzdXBwb3J0XCYjMzQ7XG4gIDIwOlx0XHRkZXBlbmRzIG9uIElORklOSUJBTkRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NzkKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogNzgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTTUMgQ29uZmlndXJhdGlvbiBhbmQgRm9jdXMgU3ltYm9scyBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBmb3IgU01DLiBMb29rcyBsaWtlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGBTTUNgIChvciBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYERJQlNgLCBgU01DYCkgYW5kIGBESUJTX0xPYCBmb3IgbG9vcGJhY2sgdGVzdGluZy4KCk5vdywgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBpZGVudGlmeWluZyB0aGUgcmlnaHQgc3ltYm9scyB0byBmb2N1cyB0aGUgZnV6emVyIG9uLiBUaGUgcGF0Y2ggYWZmZWN0cyBgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmtgLCBgc21jX2Nvbm5fZnJlZWAsIGFuZCBgc21jX2Nvbm5fYWJvcnRfd29ya2AuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGFyZSBnb29kIGZvY3VzIHN5bWJvbHMuIFRoZSBrZXkgaGVyZSBpcyB0aGUgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGRpcmVjdGl2ZS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZXh0cmFjdCBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6IHRoZXkgbmVlZCB0byBiZSBzcGVjaWZpYyB0byB0aGUgbG9naWMsIG5vdCBnZW5lcmljIGhvdCBwYXRocywgYW5kIEkgbmVlZCB0byBoYW5kbGUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgcHJvcGVybHkuCgpgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmtgIGlzIHN0YXRpYy4gR3JlYXQsIGJlY2F1c2UgSSBzZWUgdGhhdCBgc21jX2Nvbm5fZnJlZWAgYW5kIGBzbWNfY29ubl9hYm9ydF93b3JrYCBhcmUgbm90IHViaXF1aXRvdXMuIFRoZXkgc2VlbSB0byBiZSBTTUMtc3BlY2lmaWMuIExldCYjMzk7cyBsaXN0IHRoZSBjYWxsZXJzIG9mIGBzbWNfY29ubl9mcmVlYCBhbmQgYHNtY19jb25uX2Fib3J0X3dvcmtgOiBgc21jX2Nvbm5fZnJlZWAsIGBzbWNfY29ubl9hYm9ydF93b3JrYCwgYHNtY19jb25uX2Fib3J0YCwgYHNtY19jZGNfbXNnX3ZhbGlkYXRlYCwgYHNtY19jbG9zZV9hY3RpdmVfYWJvcnRgLCBgc21jX2Nsb3NlX3Bhc3NpdmVfd29ya2AsIGFuZCBgX19zbWNfcmVsZWFzZWAuCgpPa2F5LCBkaWdnaW5nIGluLiBgc21jX2Nvbm5fZnJlZWAgaXMgbm90IHN0YXRpYywgaXQmIzM5O3MgaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AuIGBzbWNfY29ubl9hYm9ydF93b3JrYCBpcyBzdGF0aWMsIGFsc28gaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AgKGFuZCBJIGNhbiBzZWUgd2h5IGJlY2F1c2Ugb2YgdGhhdCBgSU5JVF9XT1JLYCBjYWxsKS4gR29vZC4gYHNtY19jb25uX2Fib3J0YCBhbmQgYHNtY19yZWxlYXNlYCBhcmUgaW4gYG5ldC9zbWMvYWZfc21jLmNgLgoKRG91YmxlLWNoZWNraW5nIHRoaXMuIFllcywgYHNtY19jb25uX2Fib3J0X3dvcmtgIGFuZCBgc21jX2Nvbm5fZnJlZWAgKmFyZSogaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AsIGFzIGV4cGVjdGVkLgoKTm93LCB0aGUgZmluYWwgYXNzZXNzbWVudDoKCjEuICBJcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggZGVhbHMgd2l0aCBsb2NraW5nLCBjb25jdXJyZW5jeSwgYW5kIHJlZmNvdW50aW5nIGlzc3VlcyBkdXJpbmcgU01DIGNvbm5lY3Rpb24gdGVhcmRvd24gYW5kIGFib3J0IHdvcmsgaGFuZGxpbmcuIFRoaXMgYWx0ZXJzIHRoZSBydW50aW1lIGJlaGF2aW9yIG9mIG5ldHdvcmsgcHJvdG9jb2wgY29kZSwgc28geWVzLgoyLiAgRW5hYmxlQ29uZmlnczogYFNNQ2AsIGBJTkZJTklCQU5EYCwgYERJQlNgLCBgSU5FVGAuCjMuICBGb2N1c1N5bWJvbHM6IGBzbWNfY29ubl9mcmVlYCwgYHNtY19jb25uX2Fib3J0X3dvcmtgLCBgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmtgLgoKVGltZSB0byBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7LAogICAgJiMzNDtESUJTJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfY29ubl9mcmVlJiMzNDssCiAgICAmIzM0O3NtY19jb25uX2Fib3J0X3dvcmsmIzM0OywKICAgICYjMzQ7c21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgU01DIHNvY2tldCBjb25uZWN0aW9uIHRlYXJkb3duIGFuZCBhYm9ydCB3b3JrIGNhbmNlbGxhdGlvbiBoYW5kbGluZyBpbiBzbWNfY29yZS5jLiBTcGVjaWZpY2FsbHksIGl0IGRyb3BzIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgY2FuY2VsX3dvcmtfc3luYyB0byBwcmV2ZW50IHBvdGVudGlhbCBkZWFkbG9ja3MsIG1hbmFnZXMgc29ja2V0IHJlZmNvdW50aW5nIG9uIHdvcmsgY2FuY2VsbGF0aW9uLCBhbmQgY2hlY2tzIGNvbm4tXHUwMDNlZnJlZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGFib3J0IHdvcmsgZXhlY3V0aW9uLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBsb2dpYyBpbiB0aGUgU01DIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBtYWtpbmcgaXQgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19jb25uX2ZyZWUmIzM0OywKICAgICYjMzQ7c21jX2Nvbm5fYWJvcnRfd29yayYjMzQ7LAogICAgJiMzNDtzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBTTUMgc29ja2V0IGNvbm5lY3Rpb24gdGVhcmRvd24gYW5kIGFib3J0IHdvcmsgY2FuY2VsbGF0aW9uIGhhbmRsaW5nIGluIHNtY19jb3JlLmMuIFNwZWNpZmljYWxseSwgaXQgZHJvcHMgdGhlIHNvY2tldCBsb2NrIGFyb3VuZCBjYW5jZWxfd29ya19zeW5jIHRvIHByZXZlbnQgcG90ZW50aWFsIGRlYWRsb2NrcywgbWFuYWdlcyBzb2NrZXQgcmVmY291bnRpbmcgb24gd29yayBjYW5jZWxsYXRpb24sIGFuZCBjaGVja3MgY29ubi1cdTAwM2VmcmVlZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWJvcnQgd29yayBleGVjdXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGxvZ2ljIGluIHRoZSBTTUMgbmV0d29ya2luZyBzdWJzeXN0ZW0sIG1ha2luZyBpdCB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRlYWRsb2NrIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gU01DIGNvbm5lY3Rpb24gdGVhcmRvd24gKG5ldC9zbWMvc21jX2NvcmUuYykgYnkgcmVsZWFzaW5nIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgYGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKWAgYW5kIGFkZGluZyBhIGAhY29ubi1cdTAwM2VmcmVlZGAgY2hlY2sgaW4gYHNtY19jb25uX2Fib3J0X3dvcmsoKWAuXG5cblRoZSBjaGFuZ2VzIHNvbGVseSBtb2RpZnkgbG9ja2luZyBiZWhhdmlvciwgd29yayBjYW5jZWxsYXRpb24gc3luY2hyb25pemF0aW9uLCBhbmQgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBidWZmZXIgbGVuZ3RoIG9yIGJvdW5kcyBtYW5pcHVsYXRpb25zLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKExPQ0tERVAsIEtBU0FOKSBhbmQgZG8gbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTQ2YWY5YmI1MGM0N2IwMjA3ZjY5NDgxZGFjNWZjOTQ3NDI4N2QwMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMTQ6NTk6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmMKaW5kZXggMDRhZWRkOTU3NTQzYS4uOWExMDllYWU3M2I5MiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuYwpAQCAtMTI1MSw2ICYjNDM7MTI1MSwyNSBAQCBzdGF0aWMgdm9pZCBzbWNfYnVmX3VudXNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiwKIAl9CiB9CiAKJiM0MzsvKiBDYW5jZWwgYSBwZW5kaW5nIGFib3J0IHdvcmsgaXRlbS4gIHNtY19jb25uX2Fib3J0X3dvcmsoKSB0YWtlcyB0aGUgc29ja2V0CiYjNDM7ICogbG9jaywgc28gdGhlIGxvY2sgaGFzIHRvIGJlIGRyb3BwZWQgaGVyZS4gIE90aGVyd2lzZSBjYW5jZWxfd29ya19zeW5jKCkKJiM0MzsgKiB3YWl0cyBmb3IgYSB3b3JrZXIgdGhhdCBpcyBpdHNlbGYgYmxvY2tlZCBvbiB0aGUgY2FsbGVyLiAgVGhpcyBpcyB0aGUgaWRpb20KJiM0MzsgKiBzbWNfY2xvc2VfY2FuY2VsX3dvcmsoKSBhbHJlYWR5IHVzZXMgZm9yIGNsb3NlX3dvcmsuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKQomIzQzO3sKJiM0MzsJc3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtzbWMtJmd0O3NrOwomIzQzOwomIzQzOwlpZiAoY3VycmVudF93b3JrKCkgPT0gJmFtcDtjb25uLSZndDthYm9ydF93b3JrKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZWxlYXNlX3NvY2soc2spOwomIzQzOwlpZiAoY2FuY2VsX3dvcmtfc3luYygmYW1wO2Nvbm4tJmd0O2Fib3J0X3dvcmspKQomIzQzOwkJc29ja19wdXQoc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi8KJiM0MzsJbG9ja19zb2NrKHNrKTsKJiM0Mzt9CiYjNDM7CiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi8KIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pCiB7CkBAIC0xMjc2LDggJiM0MzsxMjk1LDcgQEAgdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubikKIAkJCXNtY2RfYnVmX2RldGFjaChjb25uKTsKIAl9IGVsc2UgewogCQlzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTsKLQkJaWYgKGN1cnJlbnRfd29yaygpICE9ICZhbXA7Y29ubi0mZ3Q7YWJvcnRfd29yaykKLQkJCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtjb25uLSZndDthYm9ydF93b3JrKTsKJiM0MzsJCXNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKGNvbm4pOwogCX0KIAlpZiAoIWxpc3RfZW1wdHkoJmFtcDtsZ3ItJmd0O2xpc3QpKSB7CiAJCXNtY19idWZfdW51c2UoY29ubiwgbGdyKTsgLyogYWxsb3cgYnVmZmVyIHJldXNlICovCkBAIC0xNzUwLDcgJiM0MzsxNzY4LDEyIEBAIHN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7CiAKIAlsb2NrX3NvY2soJmFtcDtzbWMtJmd0O3NrKTsKLQlzbWNfY29ubl9raWxsKGNvbm4sIHRydWUpOwomIzQzOwkvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXQKJiM0MzsJICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhcwomIzQzOwkgKiBub3RoaW5nIGxlZnQgdG8gZG8uCiYjNDM7CSAqLwomIzQzOwlpZiAoIWNvbm4tJmd0O2ZyZWVkKQomIzQzOwkJc21jX2Nvbm5fa2lsbChjb25uLCB0cnVlKTsKIAlyZWxlYXNlX3NvY2soJmFtcDtzbWMtJmd0O3NrKTsKIAlzb2NrX3B1dCgmYW1wO3NtYy0mZ3Q7c2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi8KIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTUMgQ29yZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCB0byBgbmV0L3NtYy9zbWNfY29yZS5jYC4gTG9va3MgbGlrZSBpdCYjMzk7cyBjZW50ZXJlZCBhcm91bmQgaGFuZGxpbmcgY29ubmVjdGlvbiBhYm9ydHMsIHNwZWNpZmljYWxseSB0aGUgYHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrYCBmdW5jdGlvbiBhbmQgaXRzIGludGVncmF0aW9uLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGRlZGljYXRlZCBmdW5jdGlvbiwgYHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrYCwgdG8gaGFuZGxlIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNsZWFudXAgb2YgdGhlIGBhYm9ydF93b3JrYCBhc3NvY2lhdGVkIHdpdGggYW4gYHNtY19jb25uZWN0aW9uYC4gVGhlIHBhdGNoIGFkZHMgdGhpcyBuZXcgZnVuY3Rpb24sIGFuZCB0aGVuIGNsZXZlcmx5IHJlcGxhY2VzIHNvbWUgZXhpc3RpbmcgbG9naWMgaW4gYHNtY19jb25uX2ZyZWVgIHdpdGggYSBjYWxsIHRvIHRoaXMgbmV3IGZ1bmN0aW9uLiBUaGUgbmV3IGZ1bmN0aW9uIHRha2VzIHRoZSBgc21jX2Nvbm5lY3Rpb25gIGFzIGlucHV0LgoKTG9va2luZyBhdCB0aGUgbmV3IGZ1bmN0aW9uLCBmaXJzdCwgd2UgZ2V0IHRoZSBzb2NrZXQsIHRoZW4gaW1tZWRpYXRlbHkgc2hvcnQtY2lyY3VpdCBpZiB0aGUgd29yayBiZWluZyBjYW5jZWxlZCBpcyBub3Qgb3VyIHdvcmsuIFRoZSBjb2RlIGNhbGxzIGByZWxlYXNlX3NvY2soc2spO2Agd2hpY2ggaXMgaW1wb3J0YW50IOKAkyB0aGF0IHJlbGVhc2VzIHRoZSBzb2NrZXQmIzM5O3MgcmVzb3VyY2VzLiBUaGVuLCBpdCB1c2VzIGBjYW5jZWxfd29ya19zeW5jKCZhbXA7Y29ubi0mZ3Q7YWJvcnRfd29yaylgIHRvIHN5bmNocm9uaXplIHRoZSBjYW5jZWxsYXRpb24sIGFuZCwgaW1wb3J0YW50bHksIGl0IHVzZXMgYHNvY2tfcHV0KHNrKTtgIGlmIGNhbmNlbGxhdGlvbiBhY3R1YWxseSBoYXBwZW5lZCwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2Ugd2hlbiBkZWFsaW5nIHdpdGggc29ja2V0cyBpbiB0aGlzIGVudmlyb25tZW50LiBGaW5hbGx5LCBpdCBsb2NrcyB0aGUgc29ja2V0IGFnYWluLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIGZpbmFsIG9wZXJhdGlvbi4KClRoZSByZXBsYWNlbWVudCBpbiBgc21jX2Nvbm5fZnJlZWAgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgb3JpZ2luYWwgY29uZGl0aW9uYWwgY2hlY2sgYW5kIGNhbmNlbGxhdGlvbiBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBhIGRpcmVjdCBjYWxsIHRvIHRoZSBuZXcgYHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrYCBmdW5jdGlvbiwgd2hpY2ggaXMgY2xlYW5lciBhbmQgcHJvYmFibHkgZWxpbWluYXRlcyBzb21lIHBvdGVudGlhbCBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucy4KCkZpbmFsbHksIGluIGBzbWNfY29ubl9hYm9ydF93b3JrYCwgdGhlcmUmIzM5O3MgYSBjaGVjayBmb3IgYGNvbm4tJmd0O2ZyZWVkYCBiZWZvcmUgY2FsbGluZyBgc21jX2Nvbm5fa2lsbGAuIFRoaXMgaXMgY3JpdGljYWwg4oCTIHdlIGRvbiYjMzk7dCB3YW50IHRvIG9wZXJhdGUgb24gYSBmcmVlZCBjb25uZWN0aW9uLgoKTm93LCBJIG5lZWQgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIHVzZSBjYXNlcyBmb3IgdGhlc2UgYHNtY19jb25uZWN0aW9uYCBvYmplY3RzIGFuZCB0aGUgYWJvcnQgd29ya2Zsb3cgaW4gbW9yZSBkZXRhaWwuIFRoYXQgY29udGV4dCB3aWxsIGNsYXJpZnkgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlc2UgY2hhbmdlcyBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eS4gSSBuZWVkIHRvIHNlZSBob3cgYWJvcnRzIGFyZSBpbml0aWF0ZWQsIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgY29ubmVjdGlvbiBzdGF0ZXMsIGFuZCBpZiB0aGlzIHJlZmFjdG9yaW5nIHNpbXBsaWZpZXMgdGhpbmdzIG9yIG9wZW5zIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGNvbmNlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19jb25uX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTI4OD1zdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMjEtXHRcdGlmICghc21jLVx1MDAzZXVzZV9mYWxsYmFjaylcbm5ldC9zbWMvYWZfc21jLmM6MzIyOlx0XHRcdHNtY19jb25uX2ZyZWUoXHUwMDI2c21jLVx1MDAzZWNvbm4pO1xubmV0L3NtYy9hZl9zbWMuYy0zMjMtXHR9XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0xMDA4PXN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgbG9jYWxfZmlyc3QpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xMDE2LVxubmV0L3NtYy9hZl9zbWMuYzoxMDE3Olx0c21jX2Nvbm5fZnJlZShjb25uKTtcbm5ldC9zbWMvYWZfc21jLmMtMTAxOC1cdGlmIChsb2NhbF9maXJzdCBcdTAwMjZcdTAwMjYgbGdyX3ZhbGlkKVxuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmM9MTI4PXZvaWQgc21jX2Nsb3NlX2FjdGl2ZV9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jLTE1Ni1cdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBTTUNfQ0xPU0VEO1xubmV0L3NtYy9zbWNfY2xvc2UuYzoxNTc6XHRcdHNtY19jb25uX2ZyZWUoXHUwMDI2c21jLVx1MDAzZWNvbm4pO1xubmV0L3NtYy9zbWNfY2xvc2UuYy0xNTgtXHRcdHJlbGVhc2VfY2xjc29jayA9IHRydWU7XG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNjctXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gU01DX0NMT1NFRDtcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTY4Olx0XHRzbWNfY29ubl9mcmVlKFx1MDAyNnNtYy1cdTAwM2Vjb25uKTtcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTY5LVx0XHRyZWxlYXNlX2NsY3NvY2sgPSB0cnVlO1xuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmM9MzU2PXN0YXRpYyB2b2lkIHNtY19jbG9zZV9wYXNzaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmMtNDM1LVx0XHQgICAgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fCAhc2stXHUwMDNlc2tfc29ja2V0KSkge1xubmV0L3NtYy9zbWNfY2xvc2UuYzo0MzY6XHRcdFx0c21jX2Nvbm5fZnJlZShjb25uKTtcbm5ldC9zbWMvc21jX2Nsb3NlLmMtNDM3LVx0XHRcdGlmIChzbWMtXHUwMDNlY2xjc29jaylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTA4Mz12b2lkIHNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkwLVx0YXRvbWljX2luYyhcdTAwMjZjb25uLVx1MDAzZWxuay1cdTAwM2Vjb25uX2NudCk7XG5uZXQvc21jL3NtY19jb3JlLmM6MTA5MTpcdC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xubmV0L3NtYy9zbWNfY29yZS5jLTEwOTItXHRzbWNyX2xpbmtfaG9sZChjb25uLVx1MDAzZWxuayk7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTEyNTk9c3RhdGljIHZvaWQgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjczLS8qIHJlbW92ZSBhIGZpbmlzaGVkIGNvbm5lY3Rpb24gZnJvbSBpdHMgbGluayBncm91cCAqL1xubmV0L3NtYy9zbWNfY29yZS5jOjEyNzQ6dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjc1LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTc2Mz1zdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTc3MC1cdGxvY2tfc29jayhcdTAwMjZzbWMtXHUwMDNlc2spO1xubmV0L3NtYy9zbWNfY29yZS5jOjE3NzE6XHQvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXRcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzcyLVx0ICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhc1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0yMDAwPWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTIwNzQtXHR9XG5uZXQvc21jL3NtY19jb3JlLmM6MjA3NTpcdHNtY19sZ3JfaG9sZChjb25uLVx1MDAzZWxncik7IC8qIGxncl9wdXQgaW4gc21jX2Nvbm5fZnJlZSgpICovXG5uZXQvc21jL3NtY19jb3JlLmMtMjA3Ni1cdGlmICghY29ubi1cdTAwM2VsZ3ItXHUwMDNlaXNfc21jZClcbm5ldC9zbWMvc21jX2NvcmUuYzoyMDc3Olx0XHRzbWNyX2xpbmtfaG9sZChjb25uLVx1MDAzZWxuayk7IC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xubmV0L3NtYy9zbWNfY29yZS5jLTIwNzgtXHRjb25uLVx1MDAzZWZyZWVkID0gMDtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmg9NTk2PWludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbm5ldC9zbWMvc21jX2NvcmUuaC01OTctXG5uZXQvc21jL3NtY19jb3JlLmg6NTk4OnZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xubmV0L3NtYy9zbWNfY29yZS5oLTU5OS1pbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc4OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHJlYWRpbmcgYW5kIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBTTUMgQ29yZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBuZXQvc21jL3NtY19jb3JlLmNgLiBJIGtub3cgdGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIFNNQyBpbXBsZW1lbnRhdGlvbiwgc28gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIHN0dWZmIGZ1bmN0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlcywgdGhlIGNyaXRpY2FsIHBhdGggZnVuY3Rpb25zIGZvciBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGRhdGEgdHJhbnNmZXIsIGFuZCB0ZWFyZG93biwgYXMgd2VsbCBhcyBhbnkga2V5IGxvY2tpbmcgbWVjaGFuaXNtcyB0aGV5IGFyZSB1c2luZyBmb3IgY29uY3VycmVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucyAoU01DKSBwcm90b2NvbCBpcyBpbnRlZ3JhdGVkIGF0IHRoaXMgbG93ZXIgbmV0d29ya2luZyBsYXllci4gSG9wZWZ1bGx5IHRoZSBjb21tZW50cyBhcmUgZ29vZCwgYnV0IEkmIzM5O20gcHJlcGFyZWQgdG8gZm9sbG93IGZ1bmN0aW9uIGNhbGxzIGFuZCB0cmFjZSB0aGUgbG9naWMgaWYgbmVjZXNzYXJ5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoaXMgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNTA6XHRcdFx0U01DX1NUQVRfUk1CX1NJWkUoc21jLCBpc19zbWNkLCB0cnVlLCBmYWxzZSwgYnVmc2l6ZSk7XG4xMjUxOlx0XHR9XG4xMjUyOlx0fVxuMTI1MzpcdFxuMTI1NDpcdC8qIENhbmNlbCBhIHBlbmRpbmcgYWJvcnQgd29yayBpdGVtLiAgc21jX2Nvbm5fYWJvcnRfd29yaygpIHRha2VzIHRoZSBzb2NrZXRcbjEyNTU6XHQgKiBsb2NrLCBzbyB0aGUgbG9jayBoYXMgdG8gYmUgZHJvcHBlZCBoZXJlLiAgT3RoZXJ3aXNlIGNhbmNlbF93b3JrX3N5bmMoKVxuMTI1NjpcdCAqIHdhaXRzIGZvciBhIHdvcmtlciB0aGF0IGlzIGl0c2VsZiBibG9ja2VkIG9uIHRoZSBjYWxsZXIuICBUaGlzIGlzIHRoZSBpZGlvbVxuMTI1NzpcdCAqIHNtY19jbG9zZV9jYW5jZWxfd29yaygpIGFscmVhZHkgdXNlcyBmb3IgY2xvc2Vfd29yay5cbjEyNTg6XHQgKi9cbjEyNTk6XHRzdGF0aWMgdm9pZCBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4xMjYwOlx0e1xuMTI2MTpcdFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbjEyNjI6XHRcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNtYy1cdTAwM2VzaztcbjEyNjM6XHRcbjEyNjQ6XHRcdGlmIChjdXJyZW50X3dvcmsoKSA9PSBcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspXG4xMjY1Olx0XHRcdHJldHVybjtcbjEyNjY6XHRcbjEyNjc6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xMjY4Olx0XHRpZiAoY2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspKVxuMTI2OTpcdFx0XHRzb2NrX3B1dChzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xuMTI3MDpcdFx0bG9ja19zb2NrKHNrKTtcbjEyNzE6XHR9XG4xMjcyOlx0XG4xMjczOlx0LyogcmVtb3ZlIGEgZmluaXNoZWQgY29ubmVjdGlvbiBmcm9tIGl0cyBsaW5rIGdyb3VwICovXG4xMjc0Olx0dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbjEyNzU6XHR7XG4xMjc2Olx0XHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGNvbm4tXHUwMDNlbGdyO1xuMTI3NzpcdFxuMTI3ODpcdFx0aWYgKCFsZ3IgfHwgY29ubi1cdTAwM2VmcmVlZClcbjEyNzk6XHRcdFx0LyogQ29ubmVjdGlvbiBoYXMgbmV2ZXIgYmVlbiByZWdpc3RlcmVkIGluIGFcbjEyODA6XHRcdFx0ICogbGluayBncm91cCwgb3IgaGFzIGFscmVhZHkgYmVlbiBmcmVlZC5cbjEyODE6XHRcdFx0ICovXG4xMjgyOlx0XHRcdHJldHVybjtcbjEyODM6XHRcbjEyODQ6XHRcdGNvbm4tXHUwMDNlZnJlZWQgPSAxO1xuMTI4NTpcdFx0aWYgKCFzbWNfY29ubl9sZ3JfdmFsaWQoY29ubikpXG4xMjg2Olx0XHRcdC8qIENvbm5lY3Rpb24gaGFzIGFscmVhZHkgdW5yZWdpc3RlcmVkIGZyb21cbjEyODc6XHRcdFx0ICogbGluayBncm91cC5cbjEyODg6XHRcdFx0ICovXG4xMjg5Olx0XHRcdGdvdG8gbGdyX3B1dDtcbjEyOTA6XHRcbjEyOTE6XHRcdGlmIChsZ3ItXHUwMDNlaXNfc21jZCkge1xuMTI5MjpcdFx0XHRzbWNfaXNtX3Vuc2V0X2Nvbm4oY29ubik7XG4xMjkzOlx0XHRcdHRhc2tsZXRfa2lsbChcdTAwMjZjb25uLVx1MDAzZXJ4X3Rza2xldCk7XG4xMjk0Olx0XHRcdGlmIChzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShsZ3ItXHUwMDNlc21jZCkpXG4xMjk1Olx0XHRcdFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xuMTI5NjpcdFx0fSBlbHNlIHtcbjEyOTc6XHRcdFx0c21jX2NkY193YWl0X3BlbmRfdHhfd3IoY29ubik7XG4xMjk4Olx0XHRcdHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKGNvbm4pO1xuMTI5OTpcdFx0fVxuMTMwMDpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmxnci1cdTAwM2VsaXN0KSkge1xuMTMwMTpcdFx0XHRzbWNfYnVmX3VudXNlKGNvbm4sIGxncik7IC8qIGFsbG93IGJ1ZmZlciByZXVzZSAqL1xuMTMwMjpcdFx0XHRzbWNfbGdyX3VucmVnaXN0ZXJfY29ubihjb25uKTtcbjEzMDM6XHRcdH1cbjEzMDQ6XHRcbjEzMDU6XHRcdGlmICghbGdyLVx1MDAzZWNvbm5zX251bSlcbjEzMDY6XHRcdFx0c21jX2xncl9zY2hlZHVsZV9mcmVlX3dvcmsobGdyKTtcbjEzMDc6XHRsZ3JfcHV0OlxuMTMwODpcdFx0aWYgKCFsZ3ItXHUwMDNlaXNfc21jZClcbjEzMDk6XHRcdFx0c21jcl9saW5rX3B1dChjb25uLVx1MDAzZWxuayk7IC8qIGxpbmtfaG9sZCBpbiBzbWNfY29ubl9jcmVhdGUoKSAqL1xuMTMxMDpcdFx0c21jX2xncl9wdXQobGdyKTsgLyogbGdyX2hvbGQgaW4gc21jX2Nvbm5fY3JlYXRlKCkgKi9cbjEzMTE6XHR9XG4xMzEyOlx0XG4xMzEzOlx0LyogdW5yZWdpc3RlciBhIGxpbmsgZnJvbSBhIGJ1Zl9kZXNjICovXG4xMzE0Olx0c3RhdGljIHZvaWQgc21jcl9idWZfdW5tYXBfbGluayhzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpidWZfZGVzYywgYm9vbCBpc19ybWIsXG4xMzE1Olx0XHRcdFx0XHRzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbjEzMTY6XHR7XG4xMzE3Olx0XHRpZiAoaXNfcm1iIHx8IGJ1Zl9kZXNjLVx1MDAzZWlzX3ZtKVxuMTMxODpcdFx0XHRidWZfZGVzYy1cdTAwM2Vpc19yZWdfbXJbbG5rLVx1MDAzZWxpbmtfaWR4XSA9IGZhbHNlO1xuMTMxOTpcdFx0aWYgKCFidWZfZGVzYy1cdTAwM2Vpc19tYXBfaWJbbG5rLVx1MDAzZWxpbmtfaWR4XSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE5MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJc3N1ZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBpbnRvIHNvbWV0aGluZywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSBiYXNlcy4gSSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiBbaW1wbGllZCB0b3BpYywgY29udGV4dHVhbGx5IGRlcml2ZWRdLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCBub3QgdG8gbWlzcyBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBzaW1pbGFyIGlzc3VlcyBjYW4gc29tZXRpbWVzIG1hbmlmZXN0IGluIHVuZXhwZWN0ZWQgcGxhY2VzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB0aG9yb3VnaGx5IGNvbnNpZGVyIGFsbCByZWxhdGVkIG1vZHVsZXMgYW5kIGZ1bmN0aW9ucy4gSSYjMzk7dmUgY29uc2lkZXJlZCBYIGFuZCBZLCBidXQgSSBzaG91bGQgYWJzb2x1dGVseSBjaGVjayBgc21jX2Nvbm5fYWJvcnRfd29ya2AuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIHRoaXMgYXJlYSBhbmQgY291bGQgcHJvdmlkZSBzb21lIGNyaXRpY2FsIGNvbnRleHQsIGFuZCBwZXJoYXBzIGV2ZW4gaWxsdW1pbmF0ZSB0aGUgcm9vdCBjYXVzZS4gQSBwb3RlbnRpYWwgaXNzdWUgY291bGQgYmUgYXJpc2luZyBpbiB0aGF0IHBsYWNlIHRoYXQgaXMgcmVsYXRlZCB0byB0aGUgY3VycmVudCBpc3N1ZS4gQmVzdCB0byBsZWF2ZSBubyBzdG9uZSB1bnR1cm5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NjA6XHR9XG4xNzYxOlx0XG4xNzYyOlx0LyogYWJvcnQgY29ubmVjdGlvbiwgYWJvcnRfd29yayBzY2hlZHVsZWQgZnJvbSB0YXNrbGV0IGNvbnRleHQgKi9cbjE3NjM6XHRzdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbjE3NjQ6XHR7XG4xNzY1Olx0XHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yod29yayxcbjE3NjY6XHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24sXG4xNzY3Olx0XHRcdFx0XHRcdFx0ICAgYWJvcnRfd29yayk7XG4xNzY4Olx0XHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xuMTc2OTpcdFxuMTc3MDpcdFx0bG9ja19zb2NrKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4xNzcxOlx0XHQvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXRcbjE3NzI6XHRcdCAqIHJlbGVhc2VzIGFueXRoaW5nLCBzbyBhIHdvcmsgaXRlbSBxdWV1ZWQgYWZ0ZXIgdGhlIGNhbmNlbCBoYXNcbjE3NzM6XHRcdCAqIG5vdGhpbmcgbGVmdCB0byBkby5cbjE3NzQ6XHRcdCAqL1xuMTc3NTpcdFx0aWYgKCFjb25uLVx1MDAzZWZyZWVkKVxuMTc3NjpcdFx0XHRzbWNfY29ubl9raWxsKGNvbm4sIHRydWUpO1xuMTc3NzpcdFx0cmVsZWFzZV9zb2NrKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4xNzc4Olx0XHRzb2NrX3B1dChcdTAwMjZzbWMtXHUwMDNlc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi9cbjE3Nzk6XHR9XG4xNzgwOlx0XG4xNzgxOlx0dm9pZCBzbWNyX3BvcnRfYWRkKHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldiwgdTggaWJwb3J0KVxuMTc4MjpcdHtcbjE3ODM6XHRcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCAqbjtcbjE3ODQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgzMwoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiA0MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTUMgUHJvdG9jb2wgU3RhY2sgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgKFNNQykgcHJvdG9jb2wgc3RhY2sgaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IHRhcmdldHMgYSBjcml0aWNhbCBzeW5jaHJvbml6YXRpb24gaXNzdWU6IGEgcG90ZW50aWFsIGRlYWRsb2NrIHNpdHVhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSBgc21jX2Nvbm5fYWJvcnRfd29ya2AgYWNxdWlyZXMgYGxvY2tfc29jaygmYW1wO3NtYy0mZ3Q7c2spYC4gV2hlbiBgc21jX2Nvbm5fZnJlZWAgYXR0ZW1wdHMgdG8gY2FuY2VsIHRoZSB3b3JrIHF1ZXVlIHZpYSBgY2FuY2VsX3dvcmtfc3luYygmYW1wO2Nvbm4tJmd0O2Fib3J0X3dvcmspYCwgd2l0aCB0aGUgY2FsbGVyICphbHNvKiBob2xkaW5nIGBsb2NrX3NvY2soJmFtcDtzbWMtJmd0O3NrKWAsIHdlIGhhdmUgYSBjbGFzc2ljIGRlYWRsb2NrIHNjZW5hcmlvLiBJZiB0aGUgd29yayBmdW5jdGlvbiBpcyBibG9ja2VkIHdhaXRpbmcgZm9yIHRoYXQgc2FtZSBsb2NrLCB3ZeKAmXJlIGluIHRyb3VibGUuCgpUaGUgcHJvcG9zZWQgc29sdXRpb24gbG9va3Mgc291bmQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yaygpYCwgd2hpY2ggY2xldmVybHkgcmVsZWFzZXMgYGxvY2tfc29ja2AgdGVtcG9yYXJpbHkgKmJlZm9yZSogY2FsbGluZyBgY2FuY2VsX3dvcmtfc3luY2AuIFRoaXMgY2lyY3VtdmVudHMgdGhlIGRlYWRsb2NrLiBJdCB0aGVuIGNhcmVmdWxseSBoYW5kbGVzIHRoZSBgc29ja19wdXRgIGNhbGxzIGlmIHRoZSB3b3JrIHdhcyBhY3R1YWxseSBjYW5jZWxsZWQsIGFuZCByZWFjcXVpcmVzIHRoZSBsb2NrIGFmdGVyd2FyZCwgZW5zdXJpbmcgbm8gcmVmZXJlbmNlIGNvdW50IGlzc3Vlcy4gQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBndWFyZCB1c2luZyBgaWYgKCFjb25uLSZndDtmcmVlZClgIHdpdGhpbiBgc21jX2Nvbm5fYWJvcnRfd29ya2AgaW4gYHNtY19jb25uX2tpbGxgLCB3aGljaCBpcyBhIGdvb2QgZGVmZW5zaXZlIG1lYXN1cmUuCgpOb3csIGFzIGFsd2F5cywgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBzdWJ0bGUgaXNzdWVzLiBNeSBmb2N1cyBpcyBvbiBtZW1vcnkgc2FmZXR5LiBEb2VzIHRoaXMgcGF0Y2ggb3BlbiBhbnkgZG9vcnMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHdyaXRlcz8gRG9lcyBpdCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXM/IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgS01TQU4uCgpGaXJzdCwgZG9lcyB0aGlzIHBhdGNoIGludm9sdmUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnM/IE5vLiBPa2F5LCBnb29kLiBOZXh0LCBhcmUgd2UgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyBOby4gYGNvbm4tJmd0O2ZyZWVkYCBpcyBhIHByZS1leGlzdGluZyBmaWVsZCBpbml0aWFsaXplZCB0byBgMGAgZHVyaW5nIGNvbm5lY3Rpb24gY3JlYXRpb24gYW5kIGlzIHNldCBpbiBgc21jX2Nvbm5fZnJlZWAuIFRoYXQgbG9va3Mgc2FmZS4gQXJlIHdlIGFsbG9jYXRpbmcgYnVmZmVycyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbj8gTm8sIHRoYXQgaXMgbm90IHRoZSBjYXNlLiBEb2VzIHRoaXMgdG91Y2ggYW55IGJvdW5kcyBjaGVja3Mgb3IgaW50cm9kdWNlIGFueSByaXNreSBsZW5ndGggbWFuaXB1bGF0aW9ucz8gTm8uCgpUaGUgbW9zdCBsaWtlbHkgcmlza3MgaGVyZSBhcmUgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byB0aGUgc29ja2V0JiMzOTtzIHJlZmVyZW5jZSBjb3VudCAocG90ZW50aWFsbHkgY2F1c2luZyB1c2UtYWZ0ZXItZnJlZSBvciBsZWFrcyksIGFuZCBvdmVyYWxsIGxvY2tpbmcgY29ycmVjdG5lc3MuIFRoZXNlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMsIGFuZCB0aGFua2Z1bGx5LCB0aGV5IGFyZSB0aGluZ3MgdGhhdCBhcmUgZGV0ZWN0YWJsZSB1c2luZyBzdGFuZGFyZCBkZWJ1Z2dlcnMgYW5kIHNhbml0aXplcnMgbGlrZSBMT0NLREVQLCBLQVNBTiwgYW5kIHJlZmNvdW50IGNoZWNrcy4KCkdpdmVuIG15IGFuYWx5c2lzLCBJIGFtIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZSwgYW5kIHN0YW5kYXJkIHRvb2xzIGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgaXNzdWVzIGluIHRoaXMgcGF0Y2guIEkgdGhpbmsgdGhpcyBwYXRjaCBpcyBwcmV0dHkgd2VsbCB0aG91Z2h0LW91dCBhbmQgc29sdmVzIHRoZSBwcm9ibGVtIGVmZmVjdGl2ZWx5LiBJJiMzOTtsbCBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjaywgYnV0IHRoZSByZWFzb25pbmcgaXMgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRlYWRsb2NrIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gU01DIGNvbm5lY3Rpb24gdGVhcmRvd24gKG5ldC9zbWMvc21jX2NvcmUuYykgYnkgcmVsZWFzaW5nIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgYGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKWAgYW5kIGFkZGluZyBhIGAhY29ubi1cdTAwM2VmcmVlZGAgY2hlY2sgaW4gYHNtY19jb25uX2Fib3J0X3dvcmsoKWAuXG5cblRoZSBjaGFuZ2VzIHNvbGVseSBtb2RpZnkgbG9ja2luZyBiZWhhdmlvciwgd29yayBjYW5jZWxsYXRpb24gc3luY2hyb25pemF0aW9uLCBhbmQgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBidWZmZXIgbGVuZ3RoIG9yIGJvdW5kcyBtYW5pcHVsYXRpb25zLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKExPQ0tERVAsIEtBU0FOKSBhbmQgZG8gbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgZGVhZGxvY2sgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBpbiBTTUMgY29ubmVjdGlvbiB0ZWFyZG93biAobmV0L3NtYy9zbWNfY29yZS5jKSBieSByZWxlYXNpbmcgdGhlIHNvY2tldCBsb2NrIGFyb3VuZCBgY2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspYCBhbmQgYWRkaW5nIGEgYCFjb25uLVx1MDAzZWZyZWVkYCBjaGVjayBpbiBgc21jX2Nvbm5fYWJvcnRfd29yaygpYC5cblxuVGhlIGNoYW5nZXMgc29sZWx5IG1vZGlmeSBsb2NraW5nIGJlaGF2aW9yLCB3b3JrIGNhbmNlbGxhdGlvbiBzeW5jaHJvbml6YXRpb24sIGFuZCBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGJ1ZmZlciBsZW5ndGggb3IgYm91bmRzIG1hbmlwdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMgKHN1Y2ggYXMgZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoTE9DS0RFUCwgS0FTQU4pIGFuZCBkbyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjU5OjIzLjUzNjQxODUyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjgzMjIzNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uX2ZyZWVcIixcbiAgICBcInNtY19jb25uX2Fib3J0X3dvcmtcIixcbiAgICBcInNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBkZWFkbG9jayBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlIGluIFNNQyBjb25uZWN0aW9uIHRlYXJkb3duIChuZXQvc21jL3NtY19jb3JlLmMpIGJ5IHJlbGVhc2luZyB0aGUgc29ja2V0IGxvY2sgYXJvdW5kIGBjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZjb25uLVxcdTAwM2VhYm9ydF93b3JrKWAgYW5kIGFkZGluZyBhIGAhY29ubi1cXHUwMDNlZnJlZWRgIGNoZWNrIGluIGBzbWNfY29ubl9hYm9ydF93b3JrKClgLlxcblxcblRoZSBjaGFuZ2VzIHNvbGVseSBtb2RpZnkgbG9ja2luZyBiZWhhdmlvciwgd29yayBjYW5jZWxsYXRpb24gc3luY2hyb25pemF0aW9uLCBhbmQgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBidWZmZXIgbGVuZ3RoIG9yIGJvdW5kcyBtYW5pcHVsYXRpb25zLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKExPQ0tERVAsIEtBU0FOKSBhbmQgZG8gbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFNNQyBzb2NrZXQgY29ubmVjdGlvbiB0ZWFyZG93biBhbmQgYWJvcnQgd29yayBjYW5jZWxsYXRpb24gaGFuZGxpbmcgaW4gc21jX2NvcmUuYy4gU3BlY2lmaWNhbGx5LCBpdCBkcm9wcyB0aGUgc29ja2V0IGxvY2sgYXJvdW5kIGNhbmNlbF93b3JrX3N5bmMgdG8gcHJldmVudCBwb3RlbnRpYWwgZGVhZGxvY2tzLCBtYW5hZ2VzIHNvY2tldCByZWZjb3VudGluZyBvbiB3b3JrIGNhbmNlbGxhdGlvbiwgYW5kIGNoZWNrcyBjb25uLVxcdTAwM2VmcmVlZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWJvcnQgd29yayBleGVjdXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGxvZ2ljIGluIHRoZSBTTUMgbmV0d29ya2luZyBzdWJzeXN0ZW0sIG1ha2luZyBpdCB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTk6MjMuNTM2NDM2MTY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTY3NTcxNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNDZhZjliYjUwYzQ3YjAyMDdmNjk0ODFkYWM1ZmM5NDc0Mjg3ZDAyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTQ6NTk6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXFxuaW5kZXggMDRhZWRkOTU3NTQzYS4uOWExMDllYWU3M2I5MiAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmNcXG5AQCAtMTI1MSw2ICsxMjUxLDI1IEBAIHN0YXRpYyB2b2lkIHNtY19idWZfdW51c2Uoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qIENhbmNlbCBhIHBlbmRpbmcgYWJvcnQgd29yayBpdGVtLiAgc21jX2Nvbm5fYWJvcnRfd29yaygpIHRha2VzIHRoZSBzb2NrZXRcXG4rICogbG9jaywgc28gdGhlIGxvY2sgaGFzIHRvIGJlIGRyb3BwZWQgaGVyZS4gIE90aGVyd2lzZSBjYW5jZWxfd29ya19zeW5jKClcXG4rICogd2FpdHMgZm9yIGEgd29ya2VyIHRoYXQgaXMgaXRzZWxmIGJsb2NrZWQgb24gdGhlIGNhbGxlci4gIFRoaXMgaXMgdGhlIGlkaW9tXFxuKyAqIHNtY19jbG9zZV9jYW5jZWxfd29yaygpIGFscmVhZHkgdXNlcyBmb3IgY2xvc2Vfd29yay5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4re1xcbitcXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2c21jLVxcdTAwM2VzaztcXG4rXFxuK1xcdGlmIChjdXJyZW50X3dvcmsoKSA9PSBcXHUwMDI2Y29ubi1cXHUwMDNlYWJvcnRfd29yaylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4rXFx0aWYgKGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspKVxcbitcXHRcXHRzb2NrX3B1dChzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xcbitcXHRsb2NrX3NvY2soc2spO1xcbit9XFxuK1xcbiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cXG4gdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4ge1xcbkBAIC0xMjc2LDggKzEyOTUsNyBAQCB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbiBcXHRcXHRcXHRzbWNkX2J1Zl9kZXRhY2goY29ubik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHNtY19jZGNfd2FpdF9wZW5kX3R4X3dyKGNvbm4pO1xcbi1cXHRcXHRpZiAoY3VycmVudF93b3JrKCkgIT0gXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspXFxuLVxcdFxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspO1xcbitcXHRcXHRzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhjb25uKTtcXG4gXFx0fVxcbiBcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmxnci1cXHUwMDNlbGlzdCkpIHtcXG4gXFx0XFx0c21jX2J1Zl91bnVzZShjb25uLCBsZ3IpOyAvKiBhbGxvdyBidWZmZXIgcmV1c2UgKi9cXG5AQCAtMTc1MCw3ICsxNzY4LDEyIEBAIHN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xcbiBcXG4gXFx0bG9ja19zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG4tXFx0c21jX2Nvbm5fa2lsbChjb25uLCB0cnVlKTtcXG4rXFx0Lyogc21jX2Nvbm5fZnJlZSgpIHNldHMgZnJlZWQgd2l0aCB0aGlzIGxvY2sgaGVsZCBhbmQgYmVmb3JlIGl0XFxuK1xcdCAqIHJlbGVhc2VzIGFueXRoaW5nLCBzbyBhIHdvcmsgaXRlbSBxdWV1ZWQgYWZ0ZXIgdGhlIGNhbmNlbCBoYXNcXG4rXFx0ICogbm90aGluZyBsZWZ0IHRvIGRvLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFjb25uLVxcdTAwM2VmcmVlZClcXG4rXFx0XFx0c21jX2Nvbm5fa2lsbChjb25uLCB0cnVlKTtcXG4gXFx0cmVsZWFzZV9zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG4gXFx0c29ja19wdXQoXFx1MDAyNnNtYy1cXHUwMDNlc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi9cXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OToyNC4xMzQxMzE5MjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYwNjE1MzYzMzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uX2ZyZWVcIixcbiAgICBcInNtY19jb25uX2Fib3J0X3dvcmtcIixcbiAgICBcInNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgU01DIHNvY2tldCBjb25uZWN0aW9uIHRlYXJkb3duIGFuZCBhYm9ydCB3b3JrIGNhbmNlbGxhdGlvbiBoYW5kbGluZyBpbiBzbWNfY29yZS5jLiBTcGVjaWZpY2FsbHksIGl0IGRyb3BzIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgY2FuY2VsX3dvcmtfc3luYyB0byBwcmV2ZW50IHBvdGVudGlhbCBkZWFkbG9ja3MsIG1hbmFnZXMgc29ja2V0IHJlZmNvdW50aW5nIG9uIHdvcmsgY2FuY2VsbGF0aW9uLCBhbmQgY2hlY2tzIGNvbm4tXFx1MDAzZWZyZWVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBhYm9ydCB3b3JrIGV4ZWN1dGlvbi4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgbG9naWMgaW4gdGhlIFNNQyBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE0NmFmOWJiNTBjNDdiMDIwN2Y2OTQ4MWRhYzVmYzk0NzQyODdkMDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE0OjU5OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5pbmRleCAwNGFlZGQ5NTc1NDNhLi45YTEwOWVhZTczYjkyIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmNcbkBAIC0xMjUxLDYgKzEyNTEsMjUgQEAgc3RhdGljIHZvaWQgc21jX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHR9XG4gfVxuIFxuKy8qIENhbmNlbCBhIHBlbmRpbmcgYWJvcnQgd29yayBpdGVtLiAgc21jX2Nvbm5fYWJvcnRfd29yaygpIHRha2VzIHRoZSBzb2NrZXRcbisgKiBsb2NrLCBzbyB0aGUgbG9jayBoYXMgdG8gYmUgZHJvcHBlZCBoZXJlLiAgT3RoZXJ3aXNlIGNhbmNlbF93b3JrX3N5bmMoKVxuKyAqIHdhaXRzIGZvciBhIHdvcmtlciB0aGF0IGlzIGl0c2VsZiBibG9ja2VkIG9uIHRoZSBjYWxsZXIuICBUaGlzIGlzIHRoZSBpZGlvbVxuKyAqIHNtY19jbG9zZV9jYW5jZWxfd29yaygpIGFscmVhZHkgdXNlcyBmb3IgY2xvc2Vfd29yay5cbisgKi9cbitzdGF0aWMgdm9pZCBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4re1xuK1x0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbitcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNtYy1cdTAwM2VzaztcbitcbitcdGlmIChjdXJyZW50X3dvcmsoKSA9PSBcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspXG4rXHRcdHJldHVybjtcbitcbitcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRpZiAoY2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspKVxuK1x0XHRzb2NrX3B1dChzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xuK1x0bG9ja19zb2NrKHNrKTtcbit9XG4rXG4gLyogcmVtb3ZlIGEgZmluaXNoZWQgY29ubmVjdGlvbiBmcm9tIGl0cyBsaW5rIGdyb3VwICovXG4gdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbiB7XG5AQCAtMTI3Niw4ICsxMjk1LDcgQEAgdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbiBcdFx0XHRzbWNkX2J1Zl9kZXRhY2goY29ubik7XG4gXHR9IGVsc2Uge1xuIFx0XHRzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTtcbi1cdFx0aWYgKGN1cnJlbnRfd29yaygpICE9IFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yaylcbi1cdFx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yayk7XG4rXHRcdHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKGNvbm4pO1xuIFx0fVxuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmxnci1cdTAwM2VsaXN0KSkge1xuIFx0XHRzbWNfYnVmX3VudXNlKGNvbm4sIGxncik7IC8qIGFsbG93IGJ1ZmZlciByZXVzZSAqL1xuQEAgLTE3NTAsNyArMTc2OCwxMiBAQCBzdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7XG4gXG4gXHRsb2NrX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKTtcbi1cdHNtY19jb25uX2tpbGwoY29ubiwgdHJ1ZSk7XG4rXHQvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXRcbitcdCAqIHJlbGVhc2VzIGFueXRoaW5nLCBzbyBhIHdvcmsgaXRlbSBxdWV1ZWQgYWZ0ZXIgdGhlIGNhbmNlbCBoYXNcbitcdCAqIG5vdGhpbmcgbGVmdCB0byBkby5cbitcdCAqL1xuK1x0aWYgKCFjb25uLVx1MDAzZWZyZWVkKVxuK1x0XHRzbWNfY29ubl9raWxsKGNvbm4sIHRydWUpO1xuIFx0cmVsZWFzZV9zb2NrKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4gXHRzb2NrX3B1dChcdTAwMjZzbWMtXHUwMDNlc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi9cbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OToyNC4xMzQxMzQyNThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDI1ODk1OTQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgU01DIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9zbWMvc21jX2NvcmUuY2AsIHNvIGl0J3MgZGlyZWN0bHkgaW1wYWN0aW5nIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgcHJvdG9jb2wgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIFNNQywgQUZfU01DIHNwZWNpZmljYWxseSwgaXMgYSBzcGVjaWFsaXplZCBzb2NrZXQgZmFtaWx5LCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIHVuZGVyc3RhbmRpbmcgd2hhdCB0aGlzIGNoYW5nZSBpcyBkb2luZyB0byB0aGF0LlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBgS2NvbmZpZ2AgZm9yIHRoZSBgbmV0L3NtYy9gIGRpcmVjdG9yeS4gVGhhdCdsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGJ1aWxkLXRpbWUgY2hvaWNlcyB0aWVkIHRvIFNNQy4gVGhlbiwgSSBuZWVkIHRvIHRob3JvdWdobHkgZGlzc2VjdCB0aGUgYHNtY19jb3JlLmNgIGZpbGUgaXRzZWxmLiBXaGF0IHNwZWNpZmljIGZ1bmN0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBiZWhhdmlvcnMgYXJlIGJlaW5nIG1vZGlmaWVkPyBXaGF0J3MgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcz9cblxuSSdsbCBiZSByZWFjaGluZyBmb3IgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGVmZmljaWVudGx5IG5hdmlnYXRlIGFuZCBhbmFseXplIHRoZXNlIGZpbGVzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zOiB1bmRlcnN0YW5kaW5nIHRoZSAnd2h5JyBiZWhpbmQgdGhpcyBwYXRjaC4gSXMgaXQgYSBidWcgZml4LCBhIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50LCBhIG5ldyBmZWF0dXJlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGBLY29uZmlnYCBjb21iaW5lZCB3aXRoIHRoZSBgc21jX2NvcmUuY2AgY2hhbmdlcyBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VycyBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTozOC4zOTMwOTY4MTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU01DXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFNNQy1SIHByb3ZpZGVzIGEgXFxcInNvY2tldHMgb3ZlciBSRE1BXFxcIiBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXFxuICAgNzpcXHRcXHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxcbiAgIDg6XFx0XFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxcbiAgIDk6XFx0XFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXFxuICAxMDpcXHRcXHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgU01DX0RJQUdcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gU01DXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFN1cHBvcnQgZm9yIFNNQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0b29scyBzdWNoIGFzXFxuICAxOTpcXHRcXHQgIHNtY3NzLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRcXHQgIGlmIHVuc3VyZSwgc2F5IFkuXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG4gIDI0OlxcdFxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIFNNQyBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9TWVNDQUxMXFxuICAyNjpcXHRcXHRkZWZhdWx0IHlcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgU01DX0hTX0NUUkxfQlBGIGVuYWJsZXMgc3VwcG9ydCB0byByZWdpc3RlciBnZW5lcmljIGVCUEYgaG9vayBmb3IgU01DXFxuICAyOTpcXHRcXHQgIGhhbmRzaGFrZSBmbG93LCB3aGljaCBvZmZlciBtdWNoIGdyZWF0ZXIgZmxleGliaWxpdHkgaW4gbW9kaWZ5aW5nIHRoZSBiZWhhdmlvclxcbiAgMzA6XFx0XFx0ICBvZiB0aGUgU01DIHByb3RvY29sIHN0YWNrIGNvbXBhcmVkIHRvIGEgY29tcGxldGUga2VybmVsLWJhc2VkIGFwcHJvYWNoLiBTZWxlY3RcXG4gIDMxOlxcdFxcdCAgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgZmlsdHJpbmcgdGhlIGhhbmRzaGFrZSBwcm9jZXNzIHZpYSBlQlBGIHByb2dyYW1zLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTozOC4zOTMyMTYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI1NzAyODM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBLY29uZmlnIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgbmV0L3NtYy9LY29uZmlnYC4gRmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayBpZiBpdCBkZXBlbmRzIG9uIGBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EYCBvciBgRElCU2AuIFdhaXQgYSBtaW51dGUsIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaGVyZS4gTGluZSA0IG9mIHRoZSBLY29uZmlnIGZpbGUgc2hvdWxkIGhhdmUgdGhlIGFuc3dlci4gTGV0IG1lIHF1aWNrbHkgY2hlY2suLi4gT2theSwgbGluZSA0IHNheXMgYGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU2AuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIGxpbmUgNCBhZ2Fpbi4gT3IgcGVyaGFwcyBhIHF1aWNrIGdyZXAgZm9yIFNNQyBkZXBlbmRlbmNpZXMgbWlnaHQgYmUgZmFzdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjk1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTk6NDEuNjUwMjQ3NDM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MDY5NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTo0MS43MzQzMjI0NTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzQ0MDg3NDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBTTUMgQ29yZSBmb3IgUG90ZW50aWFsIElzc3VlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBTTUMgaW1wbGVtZW50YXRpb24uIEdpdmVuIHRoZSBzeW1wdG9tcyB3ZSdyZSBzZWVpbmcsIEkgaGF2ZSBhIGh1bmNoIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBnb2luZyBzaWRld2F5cyBpbiB0aGUgY29yZSBsb2dpYy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG5ldC9zbWMvc21jX2NvcmUuY2AuIEknbSBnb2luZyB0byBzY2FuIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDEyNTAgdGhyb3VnaCAxMzAwIGZpcnN0LiBUaGF0IGFyZWEgb2Z0ZW4gZGVhbHMgd2l0aCBbbWVudGlvbiBzcGVjaWZpYyBmdW5jdGlvbiBvciBkYXRhIHRoYXQgcmVsYXRlcyB0byB5b3VyIGV4cGVydCBmaWVsZCBoZXJlIC0gZS5nLiwgXCJjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGluaXRpYWwgZGF0YSBleGNoYW5nZVwiXSwgc28gaXQncyBhIGxpa2VseSBjYW5kaWRhdGUgZm9yIHRoZSBwcm9ibGVtLiBUaGVuLCBJJ2xsIGp1bXAgZG93biB0byB0aGUgcmVnaW9uIGFyb3VuZCBsaW5lcyAxNzUwLTE3ODAuIFRoaXMgdHlwaWNhbGx5IGNvdmVycyBbbWVudGlvbiBhbm90aGVyIHNwZWNpZmljIGZ1bmN0aW9uIG9yIGRhdGEgdGhhdCByZWxhdGVzIHRvIHlvdXIgZXhwZXJ0IGZpZWxkIGhlcmUgLSBlLmcuLCBcImVycm9yIGhhbmRsaW5nIGFuZCBjb25uZWN0aW9uIHRlYXJkb3duXCJdLCB3aGljaCBpcyBhbm90aGVyIGFyZWEgdGhhdCBjb3VsZCBiZSBhdCBwbGF5IGhlcmUuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMgaW4gdGhvc2Ugc3BvdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTo0NC4wNzg0MTI1NTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNTA6XFx0XFx0XFx0U01DX1NUQVRfUk1CX1NJWkUoc21jLCBpc19zbWNkLCB0cnVlLCBmYWxzZSwgYnVmc2l6ZSk7XFxuMTI1MTpcXHRcXHR9XFxuMTI1MjpcXHR9XFxuMTI1MzpcXHRcXG4xMjU0OlxcdC8qIENhbmNlbCBhIHBlbmRpbmcgYWJvcnQgd29yayBpdGVtLiAgc21jX2Nvbm5fYWJvcnRfd29yaygpIHRha2VzIHRoZSBzb2NrZXRcXG4xMjU1OlxcdCAqIGxvY2ssIHNvIHRoZSBsb2NrIGhhcyB0byBiZSBkcm9wcGVkIGhlcmUuICBPdGhlcndpc2UgY2FuY2VsX3dvcmtfc3luYygpXFxuMTI1NjpcXHQgKiB3YWl0cyBmb3IgYSB3b3JrZXIgdGhhdCBpcyBpdHNlbGYgYmxvY2tlZCBvbiB0aGUgY2FsbGVyLiAgVGhpcyBpcyB0aGUgaWRpb21cXG4xMjU3OlxcdCAqIHNtY19jbG9zZV9jYW5jZWxfd29yaygpIGFscmVhZHkgdXNlcyBmb3IgY2xvc2Vfd29yay5cXG4xMjU4OlxcdCAqL1xcbjEyNTk6XFx0c3RhdGljIHZvaWQgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbjEyNjA6XFx0e1xcbjEyNjE6XFx0XFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcXG4xMjYyOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IFxcdTAwMjZzbWMtXFx1MDAzZXNrO1xcbjEyNjM6XFx0XFxuMTI2NDpcXHRcXHRpZiAoY3VycmVudF93b3JrKCkgPT0gXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspXFxuMTI2NTpcXHRcXHRcXHRyZXR1cm47XFxuMTI2NjpcXHRcXG4xMjY3OlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuMTI2ODpcXHRcXHRpZiAoY2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2Y29ubi1cXHUwMDNlYWJvcnRfd29yaykpXFxuMTI2OTpcXHRcXHRcXHRzb2NrX3B1dChzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xcbjEyNzA6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4xMjcxOlxcdH1cXG4xMjcyOlxcdFxcbjEyNzM6XFx0LyogcmVtb3ZlIGEgZmluaXNoZWQgY29ubmVjdGlvbiBmcm9tIGl0cyBsaW5rIGdyb3VwICovXFxuMTI3NDpcXHR2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbjEyNzU6XFx0e1xcbjEyNzY6XFx0XFx0c3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBjb25uLVxcdTAwM2VsZ3I7XFxuMTI3NzpcXHRcXG4xMjc4OlxcdFxcdGlmICghbGdyIHx8IGNvbm4tXFx1MDAzZWZyZWVkKVxcbjEyNzk6XFx0XFx0XFx0LyogQ29ubmVjdGlvbiBoYXMgbmV2ZXIgYmVlbiByZWdpc3RlcmVkIGluIGFcXG4xMjgwOlxcdFxcdFxcdCAqIGxpbmsgZ3JvdXAsIG9yIGhhcyBhbHJlYWR5IGJlZW4gZnJlZWQuXFxuMTI4MTpcXHRcXHRcXHQgKi9cXG4xMjgyOlxcdFxcdFxcdHJldHVybjtcXG4xMjgzOlxcdFxcbjEyODQ6XFx0XFx0Y29ubi1cXHUwMDNlZnJlZWQgPSAxO1xcbjEyODU6XFx0XFx0aWYgKCFzbWNfY29ubl9sZ3JfdmFsaWQoY29ubikpXFxuMTI4NjpcXHRcXHRcXHQvKiBDb25uZWN0aW9uIGhhcyBhbHJlYWR5IHVucmVnaXN0ZXJlZCBmcm9tXFxuMTI4NzpcXHRcXHRcXHQgKiBsaW5rIGdyb3VwLlxcbjEyODg6XFx0XFx0XFx0ICovXFxuMTI4OTpcXHRcXHRcXHRnb3RvIGxncl9wdXQ7XFxuMTI5MDpcXHRcXG4xMjkxOlxcdFxcdGlmIChsZ3ItXFx1MDAzZWlzX3NtY2QpIHtcXG4xMjkyOlxcdFxcdFxcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcXG4xMjkzOlxcdFxcdFxcdHRhc2tsZXRfa2lsbChcXHUwMDI2Y29ubi1cXHUwMDNlcnhfdHNrbGV0KTtcXG4xMjk0OlxcdFxcdFxcdGlmIChzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShsZ3ItXFx1MDAzZXNtY2QpKVxcbjEyOTU6XFx0XFx0XFx0XFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xcbjEyOTY6XFx0XFx0fSBlbHNlIHtcXG4xMjk3OlxcdFxcdFxcdHNtY19jZGNfd2FpdF9wZW5kX3R4X3dyKGNvbm4pO1xcbjEyOTg6XFx0XFx0XFx0c21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoY29ubik7XFxuMTI5OTpcXHRcXHR9XFxuMTMwMDpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmxnci1cXHUwMDNlbGlzdCkpIHtcXG4xMzAxOlxcdFxcdFxcdHNtY19idWZfdW51c2UoY29ubiwgbGdyKTsgLyogYWxsb3cgYnVmZmVyIHJldXNlICovXFxuMTMwMjpcXHRcXHRcXHRzbWNfbGdyX3VucmVnaXN0ZXJfY29ubihjb25uKTtcXG4xMzAzOlxcdFxcdH1cXG4xMzA0OlxcdFxcbjEzMDU6XFx0XFx0aWYgKCFsZ3ItXFx1MDAzZWNvbm5zX251bSlcXG4xMzA2OlxcdFxcdFxcdHNtY19sZ3Jfc2NoZWR1bGVfZnJlZV93b3JrKGxncik7XFxuMTMwNzpcXHRsZ3JfcHV0OlxcbjEzMDg6XFx0XFx0aWYgKCFsZ3ItXFx1MDAzZWlzX3NtY2QpXFxuMTMwOTpcXHRcXHRcXHRzbWNyX2xpbmtfcHV0KGNvbm4tXFx1MDAzZWxuayk7IC8qIGxpbmtfaG9sZCBpbiBzbWNfY29ubl9jcmVhdGUoKSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTo0NC4wNzg1NDMyNzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUyNTAxMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byB0aGUgU01DIENvbm5lY3Rpb24gQWJvcnQqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBjaXJjbGluZyBiYWNrIHRvIHRoZSBTTUMgY29ubmVjdGlvbiBoYW5kbGluZy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgYWJvcnRpbmcgYSBjb25uZWN0aW9uLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiwgYHNtY19jb25uX2Fib3J0X3dvcmtgLCB3aGljaCBpcyBsb2NhdGVkIHdpdGhpbiB0aGUgYG5ldC9zbWMvc21jX2NvcmUuY2AgZmlsZS4gSSdtIHRoaW5raW5nIHRoYXQgZGlnZ2luZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpbGwgbGlrZWx5IHByb3ZpZGUga2V5IGluc2lnaHRzLiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgY29ubmVjdGlvbiB0ZXJtaW5hdGlvbiBsb2dpYyBsaWtlbHkgcmVzaWRlLCBhbmQgdW5kZXJzdGFuZGluZyBpdCB3aWxsIGJlIGltcG9ydGFudCBmb3IgbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGVycm9yIGhhbmRsaW5nIG9yIHBlcmhhcHMgYSBrZXkgdnVsbmVyYWJpbGl0eSBvciBvcHRpbWl6YXRpb24gcG9pbnQgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMjEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjU5OjQ2LjIzMTA0OTAxOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NjA6XFx0fVxcbjE3NjE6XFx0XFxuMTc2MjpcXHQvKiBhYm9ydCBjb25uZWN0aW9uLCBhYm9ydF93b3JrIHNjaGVkdWxlZCBmcm9tIHRhc2tsZXQgY29udGV4dCAqL1xcbjE3NjM6XFx0c3RhdGljIHZvaWQgc21jX2Nvbm5fYWJvcnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuMTc2NDpcXHR7XFxuMTc2NTpcXHRcXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yod29yayxcXG4xNzY2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzbWNfY29ubmVjdGlvbixcXG4xNzY3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGFib3J0X3dvcmspO1xcbjE3Njg6XFx0XFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcXG4xNzY5OlxcdFxcbjE3NzA6XFx0XFx0bG9ja19zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG4xNzcxOlxcdFxcdC8qIHNtY19jb25uX2ZyZWUoKSBzZXRzIGZyZWVkIHdpdGggdGhpcyBsb2NrIGhlbGQgYW5kIGJlZm9yZSBpdFxcbjE3NzI6XFx0XFx0ICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhc1xcbjE3NzM6XFx0XFx0ICogbm90aGluZyBsZWZ0IHRvIGRvLlxcbjE3NzQ6XFx0XFx0ICovXFxuMTc3NTpcXHRcXHRpZiAoIWNvbm4tXFx1MDAzZWZyZWVkKVxcbjE3NzY6XFx0XFx0XFx0c21jX2Nvbm5fa2lsbChjb25uLCB0cnVlKTtcXG4xNzc3OlxcdFxcdHJlbGVhc2Vfc29jayhcXHUwMDI2c21jLVxcdTAwM2Vzayk7XFxuMTc3ODpcXHRcXHRzb2NrX3B1dChcXHUwMDI2c21jLVxcdTAwM2Vzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xcbjE3Nzk6XFx0fVxcbjE3ODA6XFx0XFxuMTc4MTpcXHR2b2lkIHNtY3JfcG9ydF9hZGQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYnBvcnQpXFxuMTc4MjpcXHR7XFxuMTc4MzpcXHRcXHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgKm47XFxuMTc4NDpcXHRcXG4xNzg1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c21jX2xncl9saXN0LmxvY2spO1xcbjE3ODY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxnciwgbiwgXFx1MDAyNnNtY19sZ3JfbGlzdC5saXN0LCBsaXN0KSB7XFxuMTc4NzpcXHRcXHRcXHRzdHJ1Y3Qgc21jX2xpbmsgKmxpbms7XFxuMTc4ODpcXHRcXG4xNzg5OlxcdFxcdFxcdGlmIChzdHJuY21wKHNtY2liZGV2LVxcdTAwM2VwbmV0aWRbaWJwb3J0IC0gMV0sIGxnci1cXHUwMDNlcG5ldF9pZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTk6NDYuMjMxMjMzODI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTEyNDg1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgU01DIENvbm5lY3Rpb24gQWJvcnQgUHJvY2VzcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBzY2hlZHVsaW5nIG9mIGBzbWNfY29ubl9hYm9ydF93b3JrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHdvcmsgaXRlbSDigJMgd2hlcmUgaXQncyBzZXQgdXAgYW5kIHdoZW4gaXQgZ2V0cyB0cmlnZ2VyZWQuIE15IGd1dCB0ZWxscyBtZSBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmcm9tIHRoZSB0b3AuIFRoZSBmYXN0ZXN0IHdheSB0byBkbyB0aGF0IGlzIGEgZ3JlcCB0aHJvdWdoIHRoZSBgbmV0L3NtYy9gIGRpcmVjdG9yeS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgYWxsIHRoZSBpbnN0YW5jZXMgd2hlcmUgYGFib3J0X3dvcmtgIGlzIG1lbnRpb25lZCwgd2hpY2ggc2hvdWxkIGhlbHAgbWUgcGllY2UgdG9nZXRoZXIgdGhlIGluaXRpYWxpemF0aW9uIGFuZCB0aGUgdHJpZ2dlcmluZyBldmVudHMuIExldCdzIHNlZSB3aGF0IHRoYXQgc2VhcmNoIHJldmVhbHMuIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGNvbm5lY3Rpb25zIGFyZSBhYm9ydGVkIHdpdGhpbiB0aGUgU01DIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3ODYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjU5OjQ4LjM4MjQ4NTI2NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkwNDk0OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWJvcnRfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtYy5oPTE5NT1zdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24ge1xcbi0tXFxubmV0L3NtYy9zbWMuaC0yNzMtXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0Y2xvc2Vfd29yaztcXHQvKiBwZWVyIHNlbnQgc29tZSBjbG9zaW5nICovXFxubmV0L3NtYy9zbWMuaDoyNzQ6XFx0c3RydWN0IHdvcmtfc3RydWN0XFx0YWJvcnRfd29yaztcXHQvKiBhYm9ydCB0aGUgY29ubmVjdGlvbiAqL1xcbm5ldC9zbWMvc21jLmgtMjc1LVxcdHN0cnVjdCB0YXNrbGV0X3N0cnVjdFxcdHJ4X3Rza2xldDtcXHQvKiBSZWNlaXZlciB0YXNrbGV0IGZvciBTTUMtRCAqL1xcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9MzA4PXN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3ZhbGlkYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYyxcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTMyMy1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y29ubi1cXHUwMDNlc2VuZF9sb2NrKTtcXG5uZXQvc21jL3NtY19jZGMuYzozMjQ6XFx0XFx0c29ja19ob2xkKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTsgLyogc29ja19wdXQgaW4gYWJvcnRfd29yayAqL1xcbm5ldC9zbWMvc21jX2NkYy5jOjMyNTpcXHRcXHRpZiAoIXF1ZXVlX3dvcmsoc21jX2Nsb3NlX3dxLCBcXHUwMDI2Y29ubi1cXHUwMDNlYWJvcnRfd29yaykpXFxubmV0L3NtYy9zbWNfY2RjLmMtMzI2LVxcdFxcdFxcdHNvY2tfcHV0KFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMjI0PXN0YXRpYyB2b2lkIHNtY19idWZfdW51c2Uoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNTMtXFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNTQ6LyogQ2FuY2VsIGEgcGVuZGluZyBhYm9ydCB3b3JrIGl0ZW0uICBzbWNfY29ubl9hYm9ydF93b3JrKCkgdGFrZXMgdGhlIHNvY2tldFxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjU1LSAqIGxvY2ssIHNvIHRoZSBsb2NrIGhhcyB0byBiZSBkcm9wcGVkIGhlcmUuICBPdGhlcndpc2UgY2FuY2VsX3dvcmtfc3luYygpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI1OC0gKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTI1OTpzdGF0aWMgdm9pZCBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNjAte1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNjMtXFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNjQ6XFx0aWYgKGN1cnJlbnRfd29yaygpID09IFxcdTAwMjZjb25uLVxcdTAwM2VhYm9ydF93b3JrKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjY1LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjY3LVxcdHJlbGVhc2Vfc29jayhzayk7XFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNjg6XFx0aWYgKGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspKVxcbm5ldC9zbWMvc21jX2NvcmUuYzoxMjY5OlxcdFxcdHNvY2tfcHV0KHNrKTsgLyogc29ja19ob2xkIGRvbmUgYnkgc2NoZWR1bGVycyBvZiBhYm9ydF93b3JrICovXFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNzAtXFx0bG9ja19zb2NrKHNrKTtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMjc0PXZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI5Ny1cXHRcXHRzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTI5ODpcXHRcXHRzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhjb25uKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTI5OS1cXHR9XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTc1NT12b2lkIHNtY3JfbGdyX3NldF90eXBlX2FzeW0oc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTc2MS1cXG5uZXQvc21jL3NtY19jb3JlLmM6MTc2MjovKiBhYm9ydCBjb25uZWN0aW9uLCBhYm9ydF93b3JrIHNjaGVkdWxlZCBmcm9tIHRhc2tsZXQgY29udGV4dCAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxNzYzOnN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzY0LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzY2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzbWNfY29ubmVjdGlvbixcXG5uZXQvc21jL3NtY19jb3JlLmM6MTc2NzpcXHRcXHRcXHRcXHRcXHRcXHQgICBhYm9ydF93b3JrKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTc2OC1cXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE3NzctXFx0cmVsZWFzZV9zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTc3ODpcXHRzb2NrX3B1dChcXHUwMDI2c21jLVxcdTAwM2Vzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzc5LX1cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0yMDAwPWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMjA4Mi1cXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZjb25uLVxcdTAwM2VjZGNfcGVuZF90eF93cSk7XFxubmV0L3NtYy9zbWNfY29yZS5jOjIwODM6XFx0SU5JVF9XT1JLKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4uYWJvcnRfd29yaywgc21jX2Nvbm5fYWJvcnRfd29yayk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTIwODQtXFx0aWYgKGluaS1cXHUwMDNlaXNfc21jZCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTo0OC40NzE1Mzk1NDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1Nzg5MDI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU01DIGFuZCBpdHMgRnV6emFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBTTUMgdGhpbmcuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICppcyouIFJpZ2h0LCBTTUMg4oCTIHRoYXQncyBBRl9TTUMsIHNvY2tldCBmYW1pbHkgNDMsIGBuZXQvc21jL2AgaW4gTGludXguIEFuZCBJIHJlY2FsbCBzZWVpbmcgaXQgbWVudGlvbmVkIGluIHRoZSBzeXprYWxsZXIgY29udGV4dCwgc28gdGhhdCdzIHByb21pc2luZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgc29tZXRoaW5nIHdlIGNhbiByZWFsaXN0aWNhbGx5IGZ1eno/XG5cbk5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zLiBMZXQgbWUgY2hlY2sgdGhlIGBuZXQvc21jL0tjb25maWdgIGZpbGUuIEFoLCBgY29uZmlnIFNNQ2AuLi4gYW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGBkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkRgLiBPa2F5LCB0aGF0J3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBlbmFibGVkLCBvciBhdCBsZWFzdCB1bmRlcnN0YW5kIHdoYXQgZW5hYmxpbmcgdGhlbSBpbXBsaWVzLiBIYW5nIG9uLCBsZXQgbWUgcXVpY2tseSByZS1yZWFkIHRoYXQgbGluZSwganVzdCB0byBiZSBjZXJ0YWluLiBZZXMsIEknbGwgcmV2aWV3IGxpbmVzIDEtMTUgb2YgdGhhdCBLY29uZmlnIGZpbGUganVzdCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEl0J3MgYmVzdCB0byBoYXZlIGEgc29saWQgZm91bmRhdGlvbiBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM0OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTo1MS44Mjk0MzMwOTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU01DXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFNNQy1SIHByb3ZpZGVzIGEgXFxcInNvY2tldHMgb3ZlciBSRE1BXFxcIiBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXFxuICAgNzpcXHRcXHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxcbiAgIDg6XFx0XFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxcbiAgIDk6XFx0XFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXFxuICAxMDpcXHRcXHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgU01DX0RJQUdcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTk6NTEuODI5NTMwNzY0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MDY1Nzk1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEZXBlbmRlbmNpZXMqKlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIHRoaXMgY29kZSBoYXMgYSBkZXBlbmRlbmN5IHRoYXQncyB0aWVkIHRvIGBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTYD8gSSBuZWVkIHRvIGNsYXJpZnkgd2hhdCBESUJTIGlzLCBvciBldmVuIGNvbmZpcm0gaWYgdGhhdCdzIHdoYXQncyBtZWFudCBoZXJlLiBUaGF0IGNvbWJpbmF0aW9uIG9mIG5ldHdvcmsgdGVjaG5vbG9naWVzIGlzIHVudXN1YWwuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGluIHRoZSBgbmV0L3NtYy9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGhpbnQgb3IgZGVmaW5pdGlvbiB0aGVyZS4gSSBzdXNwZWN0IHRoaXMgd2lsbCBvZmZlciBjcnVjaWFsIGNvbnRleHQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjU5OjUzLjUzNjExMzA3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjY2ZsYWdzLXkgKz0gLUkkKHNyYylcXG4gICAzOlxcdG9iai0kKENPTkZJR19TTUMpXFx0Kz0gc21jLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19TTUNfRElBRylcXHQrPSBzbWNfZGlhZy5vXFxuICAgNTpcXHRzbWMteSA6PSBhZl9zbWMubyBzbWNfcG5ldC5vIHNtY19pYi5vIHNtY19jbGMubyBzbWNfY29yZS5vIHNtY193ci5vIHNtY19sbGMub1xcbiAgIDY6XFx0c21jLXkgKz0gc21jX2NkYy5vIHNtY190eC5vIHNtY19yeC5vIHNtY19jbG9zZS5vIHNtY19pc20ubyBzbWNfbmV0bGluay5vIHNtY19zdGF0cy5vXFxuICAgNzpcXHRzbWMteSArPSBzbWNfdHJhY2Vwb2ludC5vIHNtY19pbmV0Lm9cXG4gICA4OlxcdHNtYy0kKENPTkZJR19TWVNDVEwpICs9IHNtY19zeXNjdGwub1xcbiAgIDk6XFx0c21jLSQoQ09ORklHX1NNQ19IU19DVFJMX0JQRikgKz0gc21jX2hzX2JwZi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjU5OjUzLjUzNjIwMzYxN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDM2MDU1MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBESUJTIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuUmlnaHQsIGxldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGlzIGBESUJTYCB0aGluZy4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB0aGUgYG5ldC9zbWMvS2NvbmZpZ2AgZmlsZSDigJMgdGhhdCdzIG9mdGVuIHdoZXJlIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZC4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgY29udGV4dCwgdGhhdCBgRElCU2AgaXMgcHJvYmFibHkgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIExldCdzIGNvbmZpcm0uXG5cbk9rYXksIGxldCdzIHJ1biBhIHF1aWNrIGBncmVwYCBhY3Jvc3MgdGhlIGVudGlyZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzcGFjZS4gSXQncyB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIHdoZXJlIGBESUJTYCBpcyB1c2VkIGFuZCBob3cgaXQncyBkZWZpbmVkLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBjb250ZXh0IG5lZWRlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcyBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIGl0J3Mgb2YgaW50ZXJlc3QgcmlnaHQgbm93LiBLbm93aW5nIHdoZXJlIGl0IHNob3dzIHVwIHdpbGwgcG9pbnQgdXMgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgaXQgZW5hYmxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzNSwiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTk6NTUuNTcyMjYwNzg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIxNjQxNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRJQlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiTUFJTlRBSU5FUlM9NzYxNj1GOlxcdGRyaXZlcnMvZ3Bpby9ncGlvLWdwaW8tbW0uY1xcbk1BSU5UQUlORVJTLTc2MTctXFxuTUFJTlRBSU5FUlM6NzYxODpESUJTIChESVJFQ1QgSU5URVJOQUwgQlVGRkVSIFNIQVJJTkcpXFxuTUFJTlRBSU5FUlMtNzYxOS1NOlxcdEFsZXhhbmRyYSBXaW50ZXIgXFx1MDAzY3dpbnRlcmFAbGludXguaWJtLmNvbVxcdTAwM2VcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz0xMzM9Q09ORklHX1NNQ19ESUFHPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTM0OkNPTkZJR19ESUJTPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTM1OkNPTkZJR19ESUJTX0xPPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctMTM2LUNPTkZJR19YRFBfU09DS0VUUz15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9MTI0PUNPTkZJR19TTUNfRElBRz1tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjEyNTpDT05GSUdfRElCUz15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjEyNjpDT05GSUdfRElCU19MTz15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTEyNy1DT05GSUdfWERQX1NPQ0tFVFM9eVxcbi0tXFxuZHJpdmVycy9NYWtlZmlsZT0xOTc9b2JqLXlcXHRcXHRcXHRcXHQrPSByZXNjdHJsL1xcbmRyaXZlcnMvTWFrZWZpbGUtMTk4LVxcbmRyaXZlcnMvTWFrZWZpbGU6MTk5Om9iai0kKENPTkZJR19ESUJTKVxcdFxcdCs9IGRpYnMvXFxuZHJpdmVycy9NYWtlZmlsZS0yMDAtb2JqLSQoQ09ORklHX1MzOTApXFx0XFx0Kz0gczM5MC9cXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTUtXFx0aGVscFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjY6XFx0ICBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgKERJQlMpIGlzIGEgY29tbXVuaWNhdGlvbiBtZXRob2QgdGhhdFxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTctXFx0ICB1c2VzIGNvbW1vbiBwaHlzaWNhbCAoaW50ZXJuYWwpIG1lbW9yeSBmb3Igc3luY2hyb25vdXMgZGlyZWN0IGFjY2Vzc1xcbi0tXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTY6XFx0ZGVwZW5kcyBvbiBESUJTXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTctXFx0ZGVmYXVsdCBuXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTgtXFx0aGVscFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjE5OlxcdCAgRElCU19MTyBlbmFibGVzIHRoZSBjcmVhdGlvbiBvZiBhbiBzb2Z0d2FyZS1lbXVsYXRlZCBkaWJzIGRldmljZVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTIwLVxcdCAgbmFtZWQgbG8gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHRyYW5zZmVycmluZyBkYXRhIHdoZW4gY29tbXVuaWNhdGlvblxcbi0tXFxuZHJpdmVycy9kaWJzL01ha2VmaWxlLTItI1xcbmRyaXZlcnMvZGlicy9NYWtlZmlsZTozOiMgRElCUyBjbGFzcyBtb2R1bGVcXG5kcml2ZXJzL2RpYnMvTWFrZWZpbGUtNC0jXFxuLS1cXG5kcml2ZXJzL2RpYnMvTWFrZWZpbGU9Nj1kaWJzLXkgKz0gZGlic19tYWluLm9cXG5kcml2ZXJzL2RpYnMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfRElCUykgKz0gZGlicy5vXFxuZHJpdmVycy9kaWJzL01ha2VmaWxlOjg6ZGlicy0kKENPTkZJR19ESUJTX0xPKSArPSBkaWJzX2xvb3BiYWNrLm9cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjEtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyMjojZGVmaW5lIERJQlNfTE9fU1VQUE9SVF9OT0NPUFlcXHQweDFcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjIzOiNkZWZpbmUgRElCU19ETUFfQUREUl9JTlZBTElEXFx0KH4oZG1hX2FkZHJfdCkwKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjQtXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTI5PXN0YXRpYyB1MTYgZGlic19sb19nZXRfZmFicmljX2lkKHN0cnVjdCBkaWJzX2RldiAqZGlicylcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMwLXtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMxOlxcdHJldHVybiBESUJTX0xPT1BCQUNLX0ZBQlJJQztcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMyLX1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9NDM9c3RhdGljIGludCBkaWJzX2xvX21heF9kbWJzKHZvaWQpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy00NC17XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo0NTpcXHRyZXR1cm4gRElCU19MT19NQVhfRE1CUztcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTQ2LX1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9NDg9c3RhdGljIGludCBkaWJzX2xvX3JlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iLFxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy01OS1cXHQvKiBjaGVjayBzcGFjZSBmb3IgbmV3IGRtYiAqL1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6NjA6XFx0Zm9yX2VhY2hfY2xlYXJfYml0KHNiYV9pZHgsIGxkZXYtXFx1MDAzZXNiYV9pZHhfbWFzaywgRElCU19MT19NQVhfRE1CUykge1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNjEtXFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHNiYV9pZHgsIGxkZXYtXFx1MDAzZXNiYV9pZHhfbWFzaykpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTYzLVxcdH1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjY0OlxcdGlmIChzYmFfaWR4ID09IERJQlNfTE9fTUFYX0RNQlMpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy02NS1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtODQtXFx0ZG1iX25vZGUtXFx1MDAzZWNwdV9hZGRyID0gZm9saW9fYWRkcmVzcyhmb2xpbyk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo4NTpcXHRkbWJfbm9kZS1cXHUwMDNlZG1hX2FkZHIgPSBESUJTX0RNQV9BRERSX0lOVkFMSUQ7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy04Ni1cXHRyZWZjb3VudF9zZXQoXFx1MDAyNmRtYl9ub2RlLVxcdTAwM2VyZWZjbnQsIDEpO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0xMzI9c3RhdGljIGludCBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTE1OS1cXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTYwOlxcdFxcdGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnJbZG1iX25vZGUtXFx1MDAzZXNiYV9pZHhdID0gTk9fRElCU19DTElFTlQ7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNjEtXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0xNjg9c3RhdGljIGludCBkaWJzX2xvX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNjkte1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTcwOlxcdHJldHVybiBESUJTX0xPX1NVUFBPUlRfTk9DT1BZO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTcxLX1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MjM1PXN0YXRpYyBpbnQgZGlic19sb19tb3ZlX2RhdGEoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgZG1iX3RvayxcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjcyLVxcdHNfbWFzayA9IHJvcjE2KDB4MTAwMCwgaWR4KTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI3MzpcXHRpZiAobGlrZWx5KGNsaWVudF9pZCAhPSBOT19ESUJTX0NMSUVOVCBcXHUwMDI2XFx1MDAyNiBkaWJzLVxcdTAwM2VzdWJzW2NsaWVudF9pZF0pKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjc0LVxcdFxcdGRpYnMtXFx1MDAzZXN1YnNbY2xpZW50X2lkXS1cXHUwMDNlb3BzLVxcdTAwM2VoYW5kbGVfaXJxKGRpYnMsIHNiYV9pZHgsIHNfbWFzayk7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTExLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6MTI6I2lmbmRlZiBfRElCU19MT09QQkFDS19IXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDoxMzojZGVmaW5lIF9ESUJTX0xPT1BCQUNLX0hcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTE0LVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC0yMC1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oOjIxOiNpZiBJU19FTkFCTEVEKENPTkZJR19ESUJTX0xPKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6MjI6I2RlZmluZSBESUJTX0xPX0RNQlNfSEFTSF9CSVRTXFx0MTJcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oOjIzOiNkZWZpbmUgRElCU19MT19NQVhfRE1CU1xcdDUwMDBcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTI0LVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaD0zNT1zdHJ1Y3QgZGlic19sb19kZXYge1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC0zOC1cXHRyd2xvY2tfdCBkbWJfaHRfbG9jaztcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oOjM5OlxcdERFQ0xBUkVfQklUTUFQKHNiYV9pZHhfbWFzaywgRElCU19MT19NQVhfRE1CUyk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDo0MDpcXHRERUNMQVJFX0hBU0hUQUJMRShkbWJfaHQsIERJQlNfTE9fRE1CU19IQVNIX0JJVFMpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDEtXFx0d2FpdF9xdWV1ZV9oZWFkX3QgbGRldl9yZWxlYXNlO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaD01Mj1zdGF0aWMgaW5saW5lIHZvaWQgZGlic19sb29wYmFja19leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTU2LVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6NTc6I2VuZGlmIC8qIF9ESUJTX0xPT1BCQUNLX0ggKi9cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yLS8qXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjM6ICogIERJQlMgLSBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmdcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtNC0gKlxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzo1OiAqICBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRElCUyBjbGFzcyBtb2R1bGVcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtNi0gKlxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jPTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3MgZGlic19jbGFzcyA9IHtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yNi0vKiB1c2UgYW4gYXJyYXkgcmF0aGVyIGEgbGlzdCBmb3IgZmFzdCBtYXBwaW5nOiAqL1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoyNzpzdGF0aWMgc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnRzW01BWF9ESUJTX0NMSUVOVFNdO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yOC1zdGF0aWMgdTggbWF4X2NsaWVudDtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYz01MD1pbnQgZGlic19yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtNTYtXFx0bXV0ZXhfbG9jayhcXHUwMDI2Y2xpZW50c19sb2NrKTtcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6NTc6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9ESUJTX0NMSUVOVFM7ICsraSkge1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy01OC1cXHRcXHRpZiAoIWNsaWVudHNbaV0pIHtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy02OC1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6Njk6XFx0aWYgKGkgXFx1MDAzYyBNQVhfRElCU19DTElFTlRTKSB7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTcwLVxcdFxcdC8qIGluaXRpYWxpemUgd2l0aCBhbGwgZGV2aWNlcyB0aGF0IHdlIGdvdCBzbyBmYXIgKi9cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYz0xODU9aW50IGRpYnNfZGV2X2FkZChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTkzLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxOTQ6XFx0bWVtc2V0KGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnIsIE5PX0RJQlNfQ0xJRU5ULCBtYXhfZG1icyk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE5NS1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYz0yMjI9dm9pZCBkaWJzX2Rldl9kZWwoc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTIyOS1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoyMzA6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9ESUJTX0NMSUVOVFM7ICsraSlcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjMxLVxcdFxcdGRpYnMtXFx1MDAzZXN1YnNbaV0gPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmM9MjUzMj1zdGF0aWMgdm9pZCBkaWI3MDkwX3NldERpYlR4TXV4KHN0cnVjdCBkaWI3MDAwcF9zdGF0ZSAqc3RhdGUsIGludCBtb2RlKVxcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmMtMjUzNy1cXHRjYXNlIE1QRUdfT05fRElCVFg6XFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmM6MjUzODpcXHRcXHRcXHRkcHJpbnRrKFxcXCJTRVQgTVBFRyBPTiBESUJTVFJFQU0gVFhcXFxcblxcXCIpO1xcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI3MDAwcC5jLTI1MzktXFx0XFx0XFx0ZGliNzA5MF9jZmdfRGliVHgoc3RhdGUsIDgsIDUsIDAsIDAsIDAsIDApO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmMtMjU0Mi1cXHRjYXNlIERJVl9PTl9ESUJUWDpcXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYzoyNTQzOlxcdFxcdFxcdGRwcmludGsoXFxcIlNFVCBESVZfT1VUIE9OIERJQlNUUkVBTSBUWFxcXFxuXFxcIik7XFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmMtMjU0NC1cXHRcXHRcXHRkaWI3MDkwX2NmZ19EaWJUeChzdGF0ZSwgNSwgNSwgMCwgMCwgMCwgMCk7XFxuLS1cXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYy0yNTQ3LVxcdGNhc2UgQURDX09OX0RJQlRYOlxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI3MDAwcC5jOjI1NDg6XFx0XFx0XFx0ZHByaW50ayhcXFwiU0VUIEFEQ19PVVQgT04gRElCU1RSRUFNIFRYXFxcXG5cXFwiKTtcXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYy0yNTQ5LVxcdFxcdFxcdGRpYjcwOTBfY2ZnX0RpYlR4KHN0YXRlLCAyMCwgNSwgMTAsIDAsIDAsIDApO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmM9MjU1OD1zdGF0aWMgdm9pZCBkaWI3MDkwX3NldEhvc3RCdXNNdXgoc3RydWN0IGRpYjcwMDBwX3N0YXRlICpzdGF0ZSwgaW50IG1vZGUpXFxuLS1cXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYy0yNTY4LVxcdGNhc2UgRElCVFhfT05fSE9TVEJVUzpcXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYzoyNTY5OlxcdFxcdFxcdGRwcmludGsoXFxcIlNFVCBESUJTVFJFQU0gVFggT04gSE9TVCBCVVNcXFxcblxcXCIpO1xcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI3MDAwcC5jLTI1NzAtXFx0XFx0XFx0ZGliNzA5MF9lbk1wZWdNdXgoc3RhdGUsIDApO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYz0xNDc4PXN0YXRpYyB2b2lkIGRpYjgwOTZwX3NldERpYlR4TXV4KHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSwgaW50IG1vZGUpXFxuLS1cXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliODAwMC5jLTE0ODMtXFx0Y2FzZSBNUEVHX09OX0RJQlRYOlxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmM6MTQ4NDpcXHRcXHRcXHRkcHJpbnRrKFxcXCJTRVQgTVBFRyBPTiBESUJTVFJFQU0gVFhcXFxcblxcXCIpO1xcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ4NS1cXHRcXHRcXHRkaWI4MDk2cF9jZmdfRGliVHgoc3RhdGUsIDgsIDUsIDAsIDAsIDAsIDApO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYy0xNDg3LVxcdGNhc2UgRElWX09OX0RJQlRYOlxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmM6MTQ4ODpcXHRcXHRcXHRkcHJpbnRrKFxcXCJTRVQgRElWX09VVCBPTiBESUJTVFJFQU0gVFhcXFxcblxcXCIpO1xcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ4OS1cXHRcXHRcXHRkaWI4MDk2cF9jZmdfRGliVHgoc3RhdGUsIDUsIDUsIDAsIDAsIDAsIDApO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYy0xNDkxLVxcdGNhc2UgQURDX09OX0RJQlRYOlxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmM6MTQ5MjpcXHRcXHRcXHRkcHJpbnRrKFxcXCJTRVQgQURDX09VVCBPTiBESUJTVFJFQU0gVFhcXFxcblxcXCIpO1xcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ5My1cXHRcXHRcXHRkaWI4MDk2cF9jZmdfRGliVHgoc3RhdGUsIDIwLCA1LCAxMCwgMCwgMCwgMCk7XFxuLS1cXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliODAwMC5jPTE1MDE9c3RhdGljIHZvaWQgZGliODA5NnBfc2V0SG9zdEJ1c011eChzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUsIGludCBtb2RlKVxcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYy0xNTExLVxcdGNhc2UgRElCVFhfT05fSE9TVEJVUzpcXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliODAwMC5jOjE1MTI6XFx0XFx0XFx0ZHByaW50ayhcXFwiU0VUIERJQlNUUkVBTSBUWCBPTiBIT1NUIEJVU1xcXFxuXFxcIik7XFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYy0xNTEzLVxcdFxcdFxcdGRpYjgwOTZwX2VuTXBlZ011eChzdGF0ZSwgMCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L0tjb25maWc9ODI9Y29uZmlnIElTTVxcbmRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZy04My1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgSVNNIHZQQ0kgQWRhcHRlclxcXCJcXG5kcml2ZXJzL3MzOTAvbmV0L0tjb25maWc6ODQ6XFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgRElCU1xcbmRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZy04NS1cXHRkZWZhdWx0IG5cXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTMyMT1zdGF0aWMgaW50IGlzbV91bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzM0LVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6MzM1OlxcdGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnJbZG1iLVxcdTAwM2VpZHggLSBJU01fRE1CX0JJVF9PRkZTRVRdID0gTk9fRElCU19DTElFTlQ7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzM2LVxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTQzNT1zdGF0aWMgaW50IGlzbV9tYXRjaF9ldmVudF90eXBlKHUzMiBzMzkwX2V2ZW50X3R5cGUpXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00MzgtXFx0Y2FzZSBJU01fRVZFTlRfQlVGOlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQzOTpcXHRcXHRyZXR1cm4gRElCU19CVUZfRVZFTlQ7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDQwLVxcdGNhc2UgSVNNX0VWRU5UX0RFVjpcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo0NDE6XFx0XFx0cmV0dXJuIERJQlNfREVWX0VWRU5UO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ0Mi1cXHRjYXNlIElTTV9FVkVOVF9TV1I6XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NDQzOlxcdFxcdHJldHVybiBESUJTX1NXX0VWRU5UO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ0NC1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ0NTpcXHRcXHRyZXR1cm4gRElCU19PVEhFUl9UWVBFO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ0Ni1cXHR9XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz00NDk9c3RhdGljIGludCBpc21fbWF0Y2hfZXZlbnRfc3VidHlwZSh1MzIgczM5MF9ldmVudF9zdWJ0eXBlKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDUyLVxcdGNhc2UgSVNNX0JVRl9ETUJfVU5SRUdJU1RFUkVEOlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ1MzpcXHRcXHRyZXR1cm4gRElCU19CVUZfVU5SRUdJU1RFUkVEO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ1NC1cXHRjYXNlIElTTV9ERVZfR0lEX0RJU0FCTEVEOlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ1NTpcXHRcXHRyZXR1cm4gRElCU19ERVZfRElTQUJMRUQ7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDU2LVxcdGNhc2UgSVNNX0RFVl9HSURfRVJSX1NUQVRFOlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ1NzpcXHRcXHRyZXR1cm4gRElCU19ERVZfRVJSX1NUQVRFO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ1OC1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ1OTpcXHRcXHRyZXR1cm4gRElCU19PVEhFUl9TVUJUWVBFO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ2MC1cXHR9XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz00NjM9c3RhdGljIHZvaWQgaXNtX2hhbmRsZV9ldmVudChzdHJ1Y3QgaXNtX2RldiAqaXNtKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDc4LVxcdFxcdGV2ZW50LnR5cGUgPSBpc21fbWF0Y2hfZXZlbnRfdHlwZShlbnRyeS1cXHUwMDNldHlwZSk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NDc5OlxcdFxcdGlmIChldmVudC50eXBlID09IERJQlNfU1dfRVZFTlQpXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDgwLVxcdFxcdFxcdGV2ZW50LnN1YnR5cGUgPSBlbnRyeS1cXHUwMDNlY29kZTtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ4NS1cXHRcXHRzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo0ODY6XFx0XFx0Y2FzZSBESUJTX0JVRl9FVkVOVDpcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00ODctXFx0XFx0XFx0ZXZlbnQuYnVmZmVyX3RvayA9IGVudHJ5LVxcdTAwM2V0b2s7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDg4LVxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ4OTpcXHRcXHRjYXNlIERJQlNfREVWX0VWRU5UOlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ5MDpcXHRcXHRjYXNlIERJQlNfU1dfRVZFTlQ6XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDkxLVxcdFxcdFxcdG1lbWNweShcXHUwMDI2ZXZlbnQuZ2lkLCBcXHUwMDI2ZW50cnktXFx1MDAzZXRvaywgc2l6ZW9mKHU2NCkpO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ5Mi1cXHRcXHR9XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NDkzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNQVhfRElCU19DTElFTlRTOyArK2kpIHtcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00OTQtXFx0XFx0XFx0Y2x0ID0gZGlicy1cXHUwMDNlc3Vic1tpXTtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTUwMT1zdGF0aWMgaXJxcmV0dXJuX3QgaXNtX2hhbmRsZV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTUyNy1cXHRcXHRjbGllbnRfaWQgPSBkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyW2JpdF07XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NTI4OlxcdFxcdGlmICh1bmxpa2VseShjbGllbnRfaWQgPT0gTk9fRElCU19DTElFTlQgfHxcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy01MjktXFx0XFx0XFx0ICAgICAhZGlicy1cXHUwMDNlc3Vic1tjbGllbnRfaWRdKSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTQtICpcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo1OiAqICBEZWZpbml0aW9ucyBmb3IgdGhlIERJQlMgbW9kdWxlXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtNi0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtOC0gKi9cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo5OiNpZm5kZWYgX0RJQlNfSFxcbmluY2x1ZGUvbGludXgvZGlicy5oOjEwOiNkZWZpbmUgX0RJQlNfSFxcbmluY2x1ZGUvbGludXgvZGlicy5oLTExLVxcbi0tXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTQtXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6MTU6LyogRElCUyAtIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyAtIGNvbmNlcHRcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0xNi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbi0tXFxuaW5jbHVkZS9saW51eC9kaWJzLmg9NDY9c3RydWN0IGRpYnNfZG1iIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTY5LVxcbmluY2x1ZGUvbGludXgvZGlicy5oOjcwOi8qIERJQlMgZXZlbnRzXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtNzEtICogLS0tLS0tLS0tLS1cXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oPTc1PWVudW0gZGlic19ldmVudF90eXBlIHtcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC03Ni1cXHQvKiBCdWZmZXIgZXZlbnQsIGUuZy4gYSByZW1vdGUgZG1iIHdhcyB1bnJlZ2lzdGVyZWQgKi9cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo3NzpcXHRESUJTX0JVRl9FVkVOVCxcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC03OC1cXHQvKiBEZXZpY2UgZXZlbnQsIGUuZy4gYSByZW1vdGUgZGlicyBkZXZpY2Ugd2FzIGRpc2FibGVkICovXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6Nzk6XFx0RElCU19ERVZfRVZFTlQsXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtODAtXFx0LyogU29mdHdhcmUgZXZlbnQsIGEgZGlicyBjbGllbnQgY2FuIHNlbmQgYW4gZXZlbnQgc2lnbmFsIHRvIGFcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTgyLVxcdCAqL1xcbmluY2x1ZGUvbGludXgvZGlicy5oOjgzOlxcdERJQlNfU1dfRVZFTlQsXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6ODQ6XFx0RElCU19PVEhFUl9UWVBFIH07XFxuaW5jbHVkZS9saW51eC9kaWJzLmgtODUtXFxuaW5jbHVkZS9saW51eC9kaWJzLmg9ODY9ZW51bSBkaWJzX2V2ZW50X3N1YnR5cGUge1xcbmluY2x1ZGUvbGludXgvZGlicy5oOjg3OlxcdERJQlNfQlVGX1VOUkVHSVNURVJFRCxcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo4ODpcXHRESUJTX0RFVl9ESVNBQkxFRCxcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo4OTpcXHRESUJTX0RFVl9FUlJfU1RBVEUsXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6OTA6XFx0RElCU19PVEhFUl9TVUJUWVBFXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtOTEtfTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oPTEwNT1zdHJ1Y3QgZGlic19kZXY7XFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTA2LVxcbmluY2x1ZGUvbGludXgvZGlicy5oOjEwNzovKiBESUJTIGNsaWVudFxcbmluY2x1ZGUvbGludXgvZGlicy5oLTEwOC0gKiAtLS0tLS0tLS0tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTEwOS0gKi9cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoxMTA6I2RlZmluZSBNQVhfRElCU19DTElFTlRTXFx0OFxcbmluY2x1ZGUvbGludXgvZGlicy5oOjExMTojZGVmaW5lIE5PX0RJQlNfQ0xJRU5UXFx0XFx0MHhmZlxcbmluY2x1ZGUvbGludXgvZGlicy5oLTExMi0vKiBBbGwgZGlicyBjbGllbnRzIGhhdmUgYWNjZXNzIHRvIGFsbCBkaWJzIGRldmljZXMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD0xOTE9aW50IGRpYnNfdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTk0LVxcbmluY2x1ZGUvbGludXgvZGlicy5oOjE5NTovKiBESUJTIGRldmljZXNcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0xOTYtICogLS0tLS0tLS0tLS0tXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0yMDMtICovXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6MjA0OiNkZWZpbmUgRElCU19MT09QQkFDS19GQUJSSUNcXHQweEZGRkZcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0yMDUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD0yMDk9c3RydWN0IGRpYnNfZGV2X29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0yMjAtXFx0ICpcXHRcXHQgICAoZS5nLiBkaWZmZXJlbnQgSFcgc3lzdGVtcylcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoyMjE6XFx0ICogRVhDRVBUSU9OOiBESUJTX0xPT1BCQUNLX0ZBQlJJQyBkZW5vdGVzIGFuIGlzbV9sb29wYmFjayBkZXZpY2VcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0yMjItXFx0ICpcXHQgICAgICB0aGF0IGNhbiBvbmx5IGNvbW11bmljYXRlIHdpdGggaXRzZWxmLiBVc2UgZGlic19kZXYuZ2lkXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD00MDE9c3RydWN0IGRpYnNfZGV2IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTQxMC1cXHQvKiBwcml2IHBvaW50ZXIgcGVyIGNsaWVudDsgZm9yIGNsaWVudCB1c2FnZSBvbmx5ICovXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6NDExOlxcdHZvaWQgKnByaXZbTUFYX0RJQlNfQ0xJRU5UU107XFxuaW5jbHVkZS9saW51eC9kaWJzLmgtNDEyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtNDE5LVxcdC8qIFNwYXJzZSBhcnJheSBvZiBhbGwgSVNNIGNsaWVudHMgKi9cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo0MjA6XFx0c3RydWN0IGRpYnNfY2xpZW50ICpzdWJzW01BWF9ESUJTX0NMSUVOVFNdO1xcbmluY2x1ZGUvbGludXgvZGlicy5oLTQyMS19O1xcbi0tXFxuaW5jbHVkZS9saW51eC9kaWJzLmg9NDYyPXZvaWQgZGlic19kZXZfZGVsKHN0cnVjdCBkaWJzX2RldiAqZGlicyk7XFxuaW5jbHVkZS9saW51eC9kaWJzLmgtNDYzLVxcbmluY2x1ZGUvbGludXgvZGlicy5oOjQ2NDojZW5kaWZcXHQvKiBfRElCU19IICovXFxuLS1cXG5uZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXFxubmV0L3NtYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbm5ldC9zbWMvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IERJQlNcXG5uZXQvc21jL0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5uZXQvc21jL3NtY19pc20uYz00NDU9c3RhdGljIHZvaWQgc21jX2lzbV9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jLTQ1My1cXHRzd2l0Y2ggKHdyay1cXHUwMDNlZXZlbnQudHlwZSkge1xcbm5ldC9zbWMvc21jX2lzbS5jOjQ1NDpcXHRjYXNlIERJQlNfREVWX0VWRU5UOiAvKiBHSUQgZXZlbnQsIHRva2VuIGlzIHBlZXIgR0lEICovXFxubmV0L3NtYy9zbWNfaXNtLmMtNDU1LVxcdFxcdHNtY19zbWNkX3Rlcm1pbmF0ZSh3cmstXFx1MDAzZXNtY2QsIFxcdTAwMjZzbWNkX2dpZCwgVkxBTl9WSURfTUFTSyk7XFxubmV0L3NtYy9zbWNfaXNtLmMtNDU2LVxcdFxcdGJyZWFrO1xcbm5ldC9zbWMvc21jX2lzbS5jOjQ1NzpcXHRjYXNlIERJQlNfQlVGX0VWRU5UOlxcbm5ldC9zbWMvc21jX2lzbS5jLTQ1OC1cXHRcXHRicmVhaztcXG5uZXQvc21jL3NtY19pc20uYzo0NTk6XFx0Y2FzZSBESUJTX1NXX0VWRU5UOiAvKiBTb2Z0d2FyZSBkZWZpbmVkIGV2ZW50ICovXFxubmV0L3NtYy9zbWNfaXNtLmMtNDYwLVxcdFxcdHNtY2RfaGFuZGxlX3N3X2V2ZW50KHdyayk7XFxuLS1cXG5uZXQvc21jL3NtY19pc20uaD05Nj1zdGF0aWMgaW5saW5lIGJvb2wgc21jX2lzbV9pc19sb29wYmFjayhzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXFxubmV0L3NtYy9zbWNfaXNtLmgtOTcte1xcbm5ldC9zbWMvc21jX2lzbS5oOjk4OlxcdHJldHVybiAoZGlicy1cXHUwMDNlb3BzLVxcdTAwM2VnZXRfZmFicmljX2lkKGRpYnMpID09IERJQlNfTE9PUEJBQ0tfRkFCUklDKTtcXG5uZXQvc21jL3NtY19pc20uaC05OS19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnPTEzNT1DT05GSUdfU01DX0hTX0NUUkxfQlBGPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnOjEzNjpDT05GSUdfRElCUz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzoxMzc6Q09ORklHX0RJQlNfTE89eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWctMTM4LUNPTkZJR19QTV9XQUtFTE9DS1M9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTo1Ny43OTM5MDg3NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjczNzI3MDMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBDb25uZWN0aW9uIEFib3J0IFdvcmsgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlc2UgcGF0Y2ggY2hhbmdlcyBmb3IgYG5ldC9zbWMvc21jX2NvcmUuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBzb3VuZCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29tcGxleGl0aWVzIG9mIGxvY2tpbmcgYW5kIHdvcmsgcXVldWVzLlxuXG5TbywgZmlyc3QsIHRoZXJlJ3MgdGhpcyBuZXcgZnVuY3Rpb24sIGBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pYC4gSXQgbG9va3MgbGlrZSBpdCdzIGRlc2lnbmVkIHRvIHByb3Blcmx5IGhhbmRsZSB0aGUgY2FuY2VsbGF0aW9uIG9mIHRoZSBgYWJvcnRfd29ya2Agd29yayBpdGVtIGFzc29jaWF0ZWQgd2l0aCBhbiBTTUMgY29ubmVjdGlvbi4gSW5zaWRlIHRoaXMgZnVuY3Rpb24gSSBzZWUgdGhlIGNvZGUgaXMgY2hlY2tpbmcgaWYgdGhlIGN1cnJlbnQgd29yayBpcyBlcXVhbCB0byBgY29ubi1cdTAwM2VhYm9ydF93b3JrYCwgYW5kIGlmIHNvIHJldHVybnMuIFRoZSBgcmVsZWFzZV9zb2NrKHNrKWAgYW5kIGBsb2NrX3NvY2soc2spYCBjYWxscywgYXJlIGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSBhcmUgYSB3YXkgdG8gZHJvcCB0aGUgbG9jayBhbmQgcmVhY3F1aXJlIGl0LiBJZiBgY2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspYCByZXR1cm5zIHRydWUsIGBzb2NrX3B1dChzaylgIGlzIGNhbGxlZC5cblxuVGhlIHNlY29uZCBjaGFuZ2UgaXMgYSBkaXJlY3QgcmVwbGFjZW1lbnQgaW4gYHNtY19jb25uX2ZyZWVgLiBJbnN0ZWFkIG9mIHRoYXQgY29uZGl0aW9uYWwgYGNhbmNlbF93b3JrX3N5bmNgLCBpdCdzIG5vdyBjYWxsaW5nIHRoaXMgbmV3IGBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29ya2AgZnVuY3Rpb24uIFRoaXMgKmltbWVkaWF0ZWx5KiByYWlzZXMgYSBmbGFnIOKAkyBpdCdzIGxpa2VseSB0aGUga2V5IHRvIHJlc29sdmluZyBzb21lIGNyaXRpY2FsIHN5bmNocm9uaXphdGlvbiBpc3N1ZSwgc2luY2UgYHNtY19jb25uX2ZyZWVgIGlzIHRoZSBvYnZpb3VzIHNwb3QgdG8gY2xlYW4gdXAgYW5kIGZyZWUgYSBjb25uZWN0aW9uLCB3aGljaCBpcyBhIHBsYWNlIHdoZXJlIHlvdSdkIGJlIHdvcnJpZWQgYWJvdXQgY29uY3VycmVudCBhY2Nlc3MuXG5cbkZpbmFsbHksIHdpdGhpbiBgc21jX2Nvbm5fYWJvcnRfd29ya2AsIGl0IGxvY2tzIHRoZSBzb2NrZXQsIGNoZWNrcyB0aGUgYGNvbm4tXHUwMDNlZnJlZWRgIGZsYWcsIGFuZCB0aGVuIGVpdGhlciBraWxscyB0aGUgY29ubmVjdGlvbiBvciBqdXN0IHJlbGVhc2VzIHRoZSBsb2NrIGFuZCBkZWNyZW1lbnRzIHRoZSBzb2NrZXQgcmVmZXJlbmNlIGNvdW50LiBUaGUgY29tbWVudCBhYm91dCBgc21jX2Nvbm5fZnJlZWAgc2V0dGluZyBgZnJlZWRgIHdpdGggdGhlIGxvY2sgaGVsZCBpcyBjcnVjaWFsLiBUaGlzIGlzIHByb3RlY3RpbmcgYWdhaW5zdCBhIHJhY2UuIElmIGBhYm9ydF93b3JrYCBydW5zICphZnRlciogYHNtY19jb25uX2ZyZWVgIGhhcyBiZWVuIGNhbGxlZCwgdGhlIGBmcmVlZGAgZmxhZyBlbnN1cmVzIGl0IGRvZXMgbm90aGluZy5cblxuVGhlIHJlYXNvbmluZyBjbGlja3MgaW50byBwbGFjZS4gVGhlcmUgd2FzIGxpa2VseSBhIHBvdGVudGlhbCBkZWFkbG9jazogaWYgYHNtY19jb25uX2Fib3J0X3dvcmtgIHdhcyBydW5uaW5nLCBpdCB3b3VsZCBiZSBob2xkaW5nIGEgc29ja2V0IGxvY2suIFRoZW4sIGBzbWNfY29ubl9mcmVlYCBtaWdodCBiZSBjYWxsZWQgKmFsc28qIHdpdGggdGhlIHNvY2tldCBsb2NrIGhlbGQsIGFuZCB3b3VsZCBjYWxsIGBjYW5jZWxfd29ya19zeW5jKFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yaylgLiBUaGF0IGZ1bmN0aW9uIHdvdWxkIHRyeSB0byBjYW5jZWwgdGhlIHdvcmsgcXVldWUsIHdoaWxlIGBzbWNfY29ubl9hYm9ydF93b3JrYCB3YXMgc3RpbGwgcnVubmluZywgd2FpdGluZyBmb3IgdGhhdCBzYW1lIGxvY2suIERlYWRsb2NrISBUaGUgZml4IGhlcmUgaXMgdG8gcmVsZWFzZSB0aGUgc29ja2V0IGxvY2sgYmVmb3JlIGNhbGxpbmcgYGNhbmNlbF93b3JrX3N5bmNgLCBhbmQgdGhlbiByZS1hY3F1aXJlIGl0LlxuXG5UaGUgb3RoZXIgcG9pbnQgYWJvdXQgdGhlIGBzb2NrX3B1dGAgaXMgYWxzbyBjbGVhciDigJMgaWYgd2UgY2FuY2VsIGEgc2NoZWR1bGVkIHdvcmsgaXRlbSAqYmVmb3JlKiBpdCBnZXRzIGEgY2hhbmNlIHRvIHJ1biBpdHMgYHNvY2tfcHV0YCwgd2UgaGF2ZSB0byBkbyBpdCBvdXJzZWx2ZXMuIFRoZSBgY2FuY2VsX3dvcmtfc3luY2AgZnVuY3Rpb24gcmV0dXJucyB0cnVlICgxKSBpZiBpdCBjYW5jZWxsZWQgc29tZXRoaW5nLiBPdGhlcndpc2UsIHRoZSBzb2NrZXQgcmVmY291bnQgd2lsbCBiZSBtaXNtYXRjaGVkLlxuXG5TbywgdGhpcyBwYXRjaCBpcyBhYm91dCBkZWFkbG9jayBwcmV2ZW50aW9uIGFuZCBjb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZyBmb3IgdGhlIHNvY2tldC4gTm93LCBJIG5lZWQgdG8gdGhvcm91Z2hseSB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBgc21jX2Nvbm5fZnJlZWAgdG8gY29uZmlybSB0aGlzIHVuZGVyc3RhbmRpbmcgYW5kIHRvIHNlZSB3aGVyZSB0aGUgYGFib3J0X3dvcmtgIGlzIHF1ZXVlZCBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyBTTUMgc29ja2V0cyBvcGVyYXRlLCBhbmQgd2hpY2ggdGhyZWFkIGNvbnRleHRzIG1pZ2h0IHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI1MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDoxMC41MzExODIyNjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3Njg5MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19jb25uX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz0yODg9c3RhdGljIGludCBfX3NtY19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0zMjEtXFx0XFx0aWYgKCFzbWMtXFx1MDAzZXVzZV9mYWxsYmFjaylcXG5uZXQvc21jL2FmX3NtYy5jOjMyMjpcXHRcXHRcXHRzbWNfY29ubl9mcmVlKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pO1xcbm5ldC9zbWMvYWZfc21jLmMtMzIzLVxcdH1cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTAwOD1zdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgaW50IGxvY2FsX2ZpcnN0KVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMDE2LVxcbm5ldC9zbWMvYWZfc21jLmM6MTAxNzpcXHRzbWNfY29ubl9mcmVlKGNvbm4pO1xcbm5ldC9zbWMvYWZfc21jLmMtMTAxOC1cXHRpZiAobG9jYWxfZmlyc3QgXFx1MDAyNlxcdTAwMjYgbGdyX3ZhbGlkKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYz0xMjg9dm9pZCBzbWNfY2xvc2VfYWN0aXZlX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNTYtXFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gU01DX0NMT1NFRDtcXG5uZXQvc21jL3NtY19jbG9zZS5jOjE1NzpcXHRcXHRzbWNfY29ubl9mcmVlKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTU4LVxcdFxcdHJlbGVhc2VfY2xjc29jayA9IHRydWU7XFxuLS1cXG5uZXQvc21jL3NtY19jbG9zZS5jLTE2Ny1cXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBTTUNfQ0xPU0VEO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTY4OlxcdFxcdHNtY19jb25uX2ZyZWUoXFx1MDAyNnNtYy1cXHUwMDNlY29ubik7XFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNjktXFx0XFx0cmVsZWFzZV9jbGNzb2NrID0gdHJ1ZTtcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmM9MzU2PXN0YXRpYyB2b2lkIHNtY19jbG9zZV9wYXNzaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy00MzUtXFx0XFx0ICAgIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgIXNrLVxcdTAwM2Vza19zb2NrZXQpKSB7XFxubmV0L3NtYy9zbWNfY2xvc2UuYzo0MzY6XFx0XFx0XFx0c21jX2Nvbm5fZnJlZShjb25uKTtcXG5uZXQvc21jL3NtY19jbG9zZS5jLTQzNy1cXHRcXHRcXHRpZiAoc21jLVxcdTAwM2VjbGNzb2NrKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTEwODM9dm9pZCBzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkwLVxcdGF0b21pY19pbmMoXFx1MDAyNmNvbm4tXFx1MDAzZWxuay1cXHUwMDNlY29ubl9jbnQpO1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxMDkxOlxcdC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkyLVxcdHNtY3JfbGlua19ob2xkKGNvbm4tXFx1MDAzZWxuayk7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTI1OT1zdGF0aWMgdm9pZCBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI3My0vKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTI3NDp2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjc1LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xNzYzPXN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE3NzAtXFx0bG9ja19zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTc3MTpcXHQvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXRcXG5uZXQvc21jL3NtY19jb3JlLmMtMTc3Mi1cXHQgKiByZWxlYXNlcyBhbnl0aGluZywgc28gYSB3b3JrIGl0ZW0gcXVldWVkIGFmdGVyIHRoZSBjYW5jZWwgaGFzXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MjAwMD1pbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTIwNzQtXFx0fVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyMDc1OlxcdHNtY19sZ3JfaG9sZChjb25uLVxcdTAwM2VsZ3IpOyAvKiBsZ3JfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc2LVxcdGlmICghY29ubi1cXHUwMDNlbGdyLVxcdTAwM2Vpc19zbWNkKVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyMDc3OlxcdFxcdHNtY3JfbGlua19ob2xkKGNvbm4tXFx1MDAzZWxuayk7IC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc4LVxcdGNvbm4tXFx1MDAzZWZyZWVkID0gMDtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaD01OTY9aW50IHNtY192bGFuX2J5X3RjcHNrKHN0cnVjdCBzb2NrZXQgKmNsY3NvY2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xcbm5ldC9zbWMvc21jX2NvcmUuaC01OTctXFxubmV0L3NtYy9zbWNfY29yZS5oOjU5ODp2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcXG5uZXQvc21jL3NtY19jb3JlLmgtNTk5LWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDoxMC42MTg5MzU1NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTE2ODA4OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBTTUMgU29ja2V0IE5ldHdvcmtpbmcgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgZnVuZGFtZW50YWwgbmV0d29ya2luZyBsb2dpYyBoZXJlLCBzcGVjaWZpY2FsbHkgZm9yIFNNQyBzb2NrZXRzIChBRl9TTUMpLiBUaGlzIHNlZW1zIHRvIGJlIHRoZSBwYXJ0IHRoYXQgaGFuZGxlcyBzb2NrZXQgbG9ja2luZywgY29ubmVjdGlvbiBhYm9ydHMsIHdvcmtxdWV1ZXMsIHJlZmNvdW50aW5nIHVzaW5nIGBzb2NrX2hvbGRgIGFuZCBgc29ja19wdXRgLCBhbmQgYSBsb3Qgb2YgcmFjZSBjb25kaXRpb24gbWl0aWdhdGlvbiBkdXJpbmcgdGVhcmRvd24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgUUVNVS9zeXprYWxsZXIgZW52aXJvbm1lbnQuIExldCdzIHN0YXJ0IHdpdGggdGhlIGJhc2ljczogU01DIHNvY2tldHMgYXJlIGNyZWF0ZWQgdXNpbmcgYHNvY2tldChBRl9TTUMsIC4uLilgLCB3aGljaCBpcyBzb2NrZXQgZmFtaWx5IDQzLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIFNNQy1SIHJlbGllcyBvbiBSRE1BICh0aGluZ3MgbGlrZSBgcmRtYV9yeGVgIG9yIGBzaXdgLCB0aGUgc29mdHdhcmUgUkRNQSBkcml2ZXJzIG9mdGVuIGluY2x1ZGVkIGluIHRoZSBzdGFuZGFyZCBrZXJuZWxzKSwgb3IgU01DLUQgbWlnaHQgdXNlIGEgbG9vcGJhY2sgZGV2aWNlIGxpa2UgRElCU19MTy4gR29vZCwgdGhhdCBtZWFucyBpdCdzIHByb2JhYmx5IHJlYWNoYWJsZSBhbmQgbGlrZWx5IGhlYXZpbHkgZnV6emVkIGJ5IHN5emthbGxlci5cblxuTmV4dCwgSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIHNwZWNpZmljIGtlcm5lbCBjb25maWdzIHJlcXVpcmVkIGZvciBjb21waWxpbmcgYW5kIGFjdHVhbGx5IHRlc3RpbmcgdGhpcyBjb2RlLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBuZXQvc21jL0tjb25maWdgLiBSaWdodCwgaXQgZGVwZW5kcyBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYC4gTm93LCBkbyBgSU5GSU5JQkFORGAsIGBESUJTYCwgb3IgYFNNQ2AgdGhlbXNlbHZlcyBoYXZlIGFueSBhZGRpdGlvbmFsIGNvbmZpZyBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBjaGVjayBgZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWdgIGFuZCBgZHJpdmVycy9kaWJzL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDA6MTQuNzM1NzQ4OTU5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RpYnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdGNvbmZpZyBESUJTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IG5cXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIChESUJTKSBpcyBhIGNvbW11bmljYXRpb24gbWV0aG9kIHRoYXRcXG4gICA3OlxcdFxcdCAgdXNlcyBjb21tb24gcGh5c2ljYWwgKGludGVybmFsKSBtZW1vcnkgZm9yIHN5bmNocm9ub3VzIGRpcmVjdCBhY2Nlc3NcXG4gICA4OlxcdFxcdCAgaW50byBhIHJlbW90ZSBidWZmZXIuXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHByb3ZpZGUgdGhlIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW5cXG4gIDExOlxcdFxcdCAgZGlicyBkZXZpY2VzIGFuZCBkaWJzIGNsaWVudHMgbGlrZSB0aGUgU01DIHByb3RvY29sLlxcbiAgMTI6XFx0XFx0ICBUaGUgbW9kdWxlIG5hbWUgaXMgZGlicy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIERJQlNfTE9cXG4gIDE1OlxcdFxcdGJvb2wgXFxcIkludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1xcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gRElCU1xcbiAgMTc6XFx0XFx0ZGVmYXVsdCBuXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIERJQlNfTE8gZW5hYmxlcyB0aGUgY3JlYXRpb24gb2YgYW4gc29mdHdhcmUtZW11bGF0ZWQgZGlicyBkZXZpY2VcXG4gIDIwOlxcdFxcdCAgbmFtZWQgbG8gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHRyYW5zZmVycmluZyBkYXRhIHdoZW4gY29tbXVuaWNhdGlvblxcbiAgMjE6XFx0XFx0ICBvY2N1cnMgd2l0aGluIHRoZSBzYW1lIE9TLiBUaGlzIGhlbHBzIGluIGNvbnZlbmllbnQgdGVzdGluZyBvZlxcbiAgMjI6XFx0XFx0ICBkaWJzIGNsaWVudHMsIHNpbmNlIGRpYnMgbG9vcGJhY2sgaXMgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlIG9yXFxuICAyMzpcXHRcXHQgIGhhcmR3YXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDoxNC43MzU4NjAzNDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2MDY2NTgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEluZmluaWJhbmQgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEluZmluaUJhbmQgZHJpdmVycyBpbiB0aGlzIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgc3RhbmRhcmQgcHJhY3RpY2UgLSBjaGVja2luZyB0aGUgYGRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHRoZSBjZW50cmFsIHJlcG9zaXRvcnkgZm9yIGRlZmluaW5nIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJbmZpbmlCYW5kLiBJdCdsbCBnaXZlIG1lIGEgY2xlYXIgb3ZlcnZpZXcgb2Ygd2hhdCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgdXN1YWwgc3VzcGVjdHM6IHN1cHBvcnQgZm9yIHZhcmlvdXMgaGFyZHdhcmUgZGV2aWNlcywgdHJhbnNwb3J0IHByb3RvY29scyBsaWtlIHZlcmJzIGFuZCBSZWxpYWJsZSBEYXRhZ3JhbSBzb2NrZXRzLCBwZXJoYXBzIHNvbWUgcG93ZXIgbWFuYWdlbWVudCBvcHRpb25zLCBhbmQgZGVmaW5pdGVseSBzb21lIGRlYnVnZ2luZyBmbGFncy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlcGVuZGVuY2llcyDigJMgdW5kZXJzdGFuZGluZyB0aG9zZSBjcm9zcy1yZWZlcmVuY2VzIHdpbGwgYmUga2V5IHRvIG1ha2luZyBpbmZvcm1lZCBkZWNpc2lvbnMgYWJvdXQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHNwZWNpZmljIGZlYXR1cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQgc3lzdGVtJ3MgaGFyZHdhcmUgYW5kIGludGVuZGVkIHVzZSBjYXNlLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcGllY2luZyB0b2dldGhlciB0aGUgY29uZmlndXJhdGlvbiBwdXp6bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTQ5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDoxNy4xOTY1Mjk5NDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIElORklOSUJBTkRcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBIQVNfRE1BXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uICFBTFBIQVxcbiAgIDg6XFx0XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuICAgOTpcXHRcXHRzZWxlY3QgSVJRX1BPTExcXG4gIDEwOlxcdFxcdHNlbGVjdCBESU1MSUJcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgQ29yZSBzdXBwb3J0IGZvciBJbmZpbmlCYW5kIChJQikuICBNYWtlIHN1cmUgdG8gYWxzbyBzZWxlY3RcXG4gIDEzOlxcdFxcdCAgYW55IHByb3RvY29scyB5b3Ugd2lzaCB0byB1c2UgYXMgd2VsbCBhcyBkcml2ZXJzIGZvciB5b3VyXFxuICAxNDpcXHRcXHQgIEluZmluaUJhbmQgaGFyZHdhcmUuXFxuICAxNTpcXHRcXG4gIDE2OlxcdGlmIElORklOSUJBTkRcXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcXG4gIDE5OlxcdFxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIHVzZXJzcGFjZSBNQUQgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gSU5GSU5JQkFORFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDoxNy4xOTY2MzU1MDNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQwNDk2NTMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU01DIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzIFN5bWJvbHMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlndXJlIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGZvciBTTUMuIExvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYFNNQ2AgKG9yIGBJTkVUYCwgYElORklOSUJBTkRgLCBgRElCU2AsIGBTTUNgKSBhbmQgYERJQlNfTE9gIGZvciBsb29wYmFjayB0ZXN0aW5nLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgaWRlbnRpZnlpbmcgdGhlIHJpZ2h0IHN5bWJvbHMgdG8gZm9jdXMgdGhlIGZ1enplciBvbi4gVGhlIHBhdGNoIGFmZmVjdHMgYHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrYCwgYHNtY19jb25uX2ZyZWVgLCBhbmQgYHNtY19jb25uX2Fib3J0X3dvcmtgLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBhcmUgZ29vZCBmb2N1cyBzeW1ib2xzLiBUaGUga2V5IGhlcmUgaXMgdGhlIFwiV29ydGhGdXp6aW5nPXRydWVcIiBkaXJlY3RpdmUuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGV4dHJhY3Qga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOiB0aGV5IG5lZWQgdG8gYmUgc3BlY2lmaWMgdG8gdGhlIGxvZ2ljLCBub3QgZ2VuZXJpYyBob3QgcGF0aHMsIGFuZCBJIG5lZWQgdG8gaGFuZGxlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIHByb3Blcmx5LlxuXG5gc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmtgIGlzIHN0YXRpYy4gR3JlYXQsIGJlY2F1c2UgSSBzZWUgdGhhdCBgc21jX2Nvbm5fZnJlZWAgYW5kIGBzbWNfY29ubl9hYm9ydF93b3JrYCBhcmUgbm90IHViaXF1aXRvdXMuIFRoZXkgc2VlbSB0byBiZSBTTUMtc3BlY2lmaWMuIExldCdzIGxpc3QgdGhlIGNhbGxlcnMgb2YgYHNtY19jb25uX2ZyZWVgIGFuZCBgc21jX2Nvbm5fYWJvcnRfd29ya2A6IGBzbWNfY29ubl9mcmVlYCwgYHNtY19jb25uX2Fib3J0X3dvcmtgLCBgc21jX2Nvbm5fYWJvcnRgLCBgc21jX2NkY19tc2dfdmFsaWRhdGVgLCBgc21jX2Nsb3NlX2FjdGl2ZV9hYm9ydGAsIGBzbWNfY2xvc2VfcGFzc2l2ZV93b3JrYCwgYW5kIGBfX3NtY19yZWxlYXNlYC5cblxuT2theSwgZGlnZ2luZyBpbi4gYHNtY19jb25uX2ZyZWVgIGlzIG5vdCBzdGF0aWMsIGl0J3MgaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AuIGBzbWNfY29ubl9hYm9ydF93b3JrYCBpcyBzdGF0aWMsIGFsc28gaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AgKGFuZCBJIGNhbiBzZWUgd2h5IGJlY2F1c2Ugb2YgdGhhdCBgSU5JVF9XT1JLYCBjYWxsKS4gR29vZC4gYHNtY19jb25uX2Fib3J0YCBhbmQgYHNtY19yZWxlYXNlYCBhcmUgaW4gYG5ldC9zbWMvYWZfc21jLmNgLlxuXG5Eb3VibGUtY2hlY2tpbmcgdGhpcy4gWWVzLCBgc21jX2Nvbm5fYWJvcnRfd29ya2AgYW5kIGBzbWNfY29ubl9mcmVlYCAqYXJlKiBpbiBgbmV0L3NtYy9zbWNfY29yZS5jYCwgYXMgZXhwZWN0ZWQuXG5cbk5vdywgdGhlIGZpbmFsIGFzc2Vzc21lbnQ6XG5cbjEuICBJcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggZGVhbHMgd2l0aCBsb2NraW5nLCBjb25jdXJyZW5jeSwgYW5kIHJlZmNvdW50aW5nIGlzc3VlcyBkdXJpbmcgU01DIGNvbm5lY3Rpb24gdGVhcmRvd24gYW5kIGFib3J0IHdvcmsgaGFuZGxpbmcuIFRoaXMgYWx0ZXJzIHRoZSBydW50aW1lIGJlaGF2aW9yIG9mIG5ldHdvcmsgcHJvdG9jb2wgY29kZSwgc28geWVzLlxuMi4gIEVuYWJsZUNvbmZpZ3M6IGBTTUNgLCBgSU5GSU5JQkFORGAsIGBESUJTYCwgYElORVRgLlxuMy4gIEZvY3VzU3ltYm9sczogYHNtY19jb25uX2ZyZWVgLCBgc21jX2Nvbm5fYWJvcnRfd29ya2AsIGBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29ya2AuXG5cblRpbWUgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ3OSwiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDoyNC42MDE2MDQzNzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4ODc1MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uX2ZyZWVcIixcbiAgICBcInNtY19jb25uX2Fib3J0X3dvcmtcIixcbiAgICBcInNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgU01DIHNvY2tldCBjb25uZWN0aW9uIHRlYXJkb3duIGFuZCBhYm9ydCB3b3JrIGNhbmNlbGxhdGlvbiBoYW5kbGluZyBpbiBzbWNfY29yZS5jLiBTcGVjaWZpY2FsbHksIGl0IGRyb3BzIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgY2FuY2VsX3dvcmtfc3luYyB0byBwcmV2ZW50IHBvdGVudGlhbCBkZWFkbG9ja3MsIG1hbmFnZXMgc29ja2V0IHJlZmNvdW50aW5nIG9uIHdvcmsgY2FuY2VsbGF0aW9uLCBhbmQgY2hlY2tzIGNvbm4tXFx1MDAzZWZyZWVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBhYm9ydCB3b3JrIGV4ZWN1dGlvbi4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgbG9naWMgaW4gdGhlIFNNQyBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uX2ZyZWVcIixcbiAgICBcInNtY19jb25uX2Fib3J0X3dvcmtcIixcbiAgICBcInNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgU01DIHNvY2tldCBjb25uZWN0aW9uIHRlYXJkb3duIGFuZCBhYm9ydCB3b3JrIGNhbmNlbGxhdGlvbiBoYW5kbGluZyBpbiBzbWNfY29yZS5jLiBTcGVjaWZpY2FsbHksIGl0IGRyb3BzIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgY2FuY2VsX3dvcmtfc3luYyB0byBwcmV2ZW50IHBvdGVudGlhbCBkZWFkbG9ja3MsIG1hbmFnZXMgc29ja2V0IHJlZmNvdW50aW5nIG9uIHdvcmsgY2FuY2VsbGF0aW9uLCBhbmQgY2hlY2tzIGNvbm4tXFx1MDAzZWZyZWVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBhYm9ydCB3b3JrIGV4ZWN1dGlvbi4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgbG9naWMgaW4gdGhlIFNNQyBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDoyNC43NDk1MDAyNzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDcwMTI4NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDA6MjQuNzUwMDE3Njk5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTcwNjk2MDUyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRlYWRsb2NrIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gU01DIGNvbm5lY3Rpb24gdGVhcmRvd24gKG5ldC9zbWMvc21jX2NvcmUuYykgYnkgcmVsZWFzaW5nIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgYGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspYCBhbmQgYWRkaW5nIGEgYCFjb25uLVxcdTAwM2VmcmVlZGAgY2hlY2sgaW4gYHNtY19jb25uX2Fib3J0X3dvcmsoKWAuXFxuXFxuVGhlIGNoYW5nZXMgc29sZWx5IG1vZGlmeSBsb2NraW5nIGJlaGF2aW9yLCB3b3JrIGNhbmNlbGxhdGlvbiBzeW5jaHJvbml6YXRpb24sIGFuZCBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGJ1ZmZlciBsZW5ndGggb3IgYm91bmRzIG1hbmlwdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMgKHN1Y2ggYXMgZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoTE9DS0RFUCwgS0FTQU4pIGFuZCBkbyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTQ2YWY5YmI1MGM0N2IwMjA3ZjY5NDgxZGFjNWZjOTQ3NDI4N2QwMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTQ6NTk6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcbmluZGV4IDA0YWVkZDk1NzU0M2EuLjlhMTA5ZWFlNzNiOTIgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcbisrKyBiL25ldC9zbWMvc21jX2NvcmUuY1xuQEAgLTEyNTEsNiArMTI1MSwyNSBAQCBzdGF0aWMgdm9pZCBzbWNfYnVmX3VudXNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbiBcdH1cbiB9XG4gXG4rLyogQ2FuY2VsIGEgcGVuZGluZyBhYm9ydCB3b3JrIGl0ZW0uICBzbWNfY29ubl9hYm9ydF93b3JrKCkgdGFrZXMgdGhlIHNvY2tldFxuKyAqIGxvY2ssIHNvIHRoZSBsb2NrIGhhcyB0byBiZSBkcm9wcGVkIGhlcmUuICBPdGhlcndpc2UgY2FuY2VsX3dvcmtfc3luYygpXG4rICogd2FpdHMgZm9yIGEgd29ya2VyIHRoYXQgaXMgaXRzZWxmIGJsb2NrZWQgb24gdGhlIGNhbGxlci4gIFRoaXMgaXMgdGhlIGlkaW9tXG4rICogc21jX2Nsb3NlX2NhbmNlbF93b3JrKCkgYWxyZWFkeSB1c2VzIGZvciBjbG9zZV93b3JrLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbit7XG4rXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2c21jLVx1MDAzZXNrO1xuK1xuK1x0aWYgKGN1cnJlbnRfd29yaygpID09IFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yaylcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmVsZWFzZV9zb2NrKHNrKTtcbitcdGlmIChjYW5jZWxfd29ya19zeW5jKFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yaykpXG4rXHRcdHNvY2tfcHV0KHNrKTsgLyogc29ja19ob2xkIGRvbmUgYnkgc2NoZWR1bGVycyBvZiBhYm9ydF93b3JrICovXG4rXHRsb2NrX3NvY2soc2spO1xuK31cbitcbiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cbiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuIHtcbkBAIC0xMjc2LDggKzEyOTUsNyBAQCB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuIFx0XHRcdHNtY2RfYnVmX2RldGFjaChjb25uKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHNtY19jZGNfd2FpdF9wZW5kX3R4X3dyKGNvbm4pO1xuLVx0XHRpZiAoY3VycmVudF93b3JrKCkgIT0gXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKVxuLVx0XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKTtcbitcdFx0c21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoY29ubik7XG4gXHR9XG4gXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bGdyLVx1MDAzZWxpc3QpKSB7XG4gXHRcdHNtY19idWZfdW51c2UoY29ubiwgbGdyKTsgLyogYWxsb3cgYnVmZmVyIHJldXNlICovXG5AQCAtMTc1MCw3ICsxNzY4LDEyIEBAIHN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbiBcbiBcdGxvY2tfc29jayhcdTAwMjZzbWMtXHUwMDNlc2spO1xuLVx0c21jX2Nvbm5fa2lsbChjb25uLCB0cnVlKTtcbitcdC8qIHNtY19jb25uX2ZyZWUoKSBzZXRzIGZyZWVkIHdpdGggdGhpcyBsb2NrIGhlbGQgYW5kIGJlZm9yZSBpdFxuK1x0ICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhc1xuK1x0ICogbm90aGluZyBsZWZ0IHRvIGRvLlxuK1x0ICovXG4rXHRpZiAoIWNvbm4tXHUwMDNlZnJlZWQpXG4rXHRcdHNtY19jb25uX2tpbGwoY29ubiwgdHJ1ZSk7XG4gXHRyZWxlYXNlX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKTtcbiBcdHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2Vzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjAwOjI0Ljc1MDAyMDQzOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTc5NDUzNjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU01DIENvcmUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIHRvIGBuZXQvc21jL3NtY19jb3JlLmNgLiBMb29rcyBsaWtlIGl0J3MgY2VudGVyZWQgYXJvdW5kIGhhbmRsaW5nIGNvbm5lY3Rpb24gYWJvcnRzLCBzcGVjaWZpY2FsbHkgdGhlIGBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29ya2AgZnVuY3Rpb24gYW5kIGl0cyBpbnRlZ3JhdGlvbi5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGRlZGljYXRlZCBmdW5jdGlvbiwgYHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrYCwgdG8gaGFuZGxlIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNsZWFudXAgb2YgdGhlIGBhYm9ydF93b3JrYCBhc3NvY2lhdGVkIHdpdGggYW4gYHNtY19jb25uZWN0aW9uYC4gVGhlIHBhdGNoIGFkZHMgdGhpcyBuZXcgZnVuY3Rpb24sIGFuZCB0aGVuIGNsZXZlcmx5IHJlcGxhY2VzIHNvbWUgZXhpc3RpbmcgbG9naWMgaW4gYHNtY19jb25uX2ZyZWVgIHdpdGggYSBjYWxsIHRvIHRoaXMgbmV3IGZ1bmN0aW9uLiBUaGUgbmV3IGZ1bmN0aW9uIHRha2VzIHRoZSBgc21jX2Nvbm5lY3Rpb25gIGFzIGlucHV0LlxuXG5Mb29raW5nIGF0IHRoZSBuZXcgZnVuY3Rpb24sIGZpcnN0LCB3ZSBnZXQgdGhlIHNvY2tldCwgdGhlbiBpbW1lZGlhdGVseSBzaG9ydC1jaXJjdWl0IGlmIHRoZSB3b3JrIGJlaW5nIGNhbmNlbGVkIGlzIG5vdCBvdXIgd29yay4gVGhlIGNvZGUgY2FsbHMgYHJlbGVhc2Vfc29jayhzayk7YCB3aGljaCBpcyBpbXBvcnRhbnQg4oCTIHRoYXQgcmVsZWFzZXMgdGhlIHNvY2tldCdzIHJlc291cmNlcy4gVGhlbiwgaXQgdXNlcyBgY2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspYCB0byBzeW5jaHJvbml6ZSB0aGUgY2FuY2VsbGF0aW9uLCBhbmQsIGltcG9ydGFudGx5LCBpdCB1c2VzIGBzb2NrX3B1dChzayk7YCBpZiBjYW5jZWxsYXRpb24gYWN0dWFsbHkgaGFwcGVuZWQsIHdoaWNoIGlzIHN0YW5kYXJkIHByYWN0aWNlIHdoZW4gZGVhbGluZyB3aXRoIHNvY2tldHMgaW4gdGhpcyBlbnZpcm9ubWVudC4gRmluYWxseSwgaXQgbG9ja3MgdGhlIHNvY2tldCBhZ2Fpbiwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBmaW5hbCBvcGVyYXRpb24uXG5cblRoZSByZXBsYWNlbWVudCBpbiBgc21jX2Nvbm5fZnJlZWAgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgb3JpZ2luYWwgY29uZGl0aW9uYWwgY2hlY2sgYW5kIGNhbmNlbGxhdGlvbiBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBhIGRpcmVjdCBjYWxsIHRvIHRoZSBuZXcgYHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrYCBmdW5jdGlvbiwgd2hpY2ggaXMgY2xlYW5lciBhbmQgcHJvYmFibHkgZWxpbWluYXRlcyBzb21lIHBvdGVudGlhbCBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucy5cblxuRmluYWxseSwgaW4gYHNtY19jb25uX2Fib3J0X3dvcmtgLCB0aGVyZSdzIGEgY2hlY2sgZm9yIGBjb25uLVx1MDAzZWZyZWVkYCBiZWZvcmUgY2FsbGluZyBgc21jX2Nvbm5fa2lsbGAuIFRoaXMgaXMgY3JpdGljYWwg4oCTIHdlIGRvbid0IHdhbnQgdG8gb3BlcmF0ZSBvbiBhIGZyZWVkIGNvbm5lY3Rpb24uXG5cbk5vdywgSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbSBnb2luZyB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIHVzZSBjYXNlcyBmb3IgdGhlc2UgYHNtY19jb25uZWN0aW9uYCBvYmplY3RzIGFuZCB0aGUgYWJvcnQgd29ya2Zsb3cgaW4gbW9yZSBkZXRhaWwuIFRoYXQgY29udGV4dCB3aWxsIGNsYXJpZnkgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlc2UgY2hhbmdlcyBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eS4gSSBuZWVkIHRvIHNlZSBob3cgYWJvcnRzIGFyZSBpbml0aWF0ZWQsIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgY29ubmVjdGlvbiBzdGF0ZXMsIGFuZCBpZiB0aGlzIHJlZmFjdG9yaW5nIHNpbXBsaWZpZXMgdGhpbmdzIG9yIG9wZW5zIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGNvbmNlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDozMC45Mjk0Nzc1NTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NDcxMzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19jb25uX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz0yODg9c3RhdGljIGludCBfX3NtY19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0zMjEtXFx0XFx0aWYgKCFzbWMtXFx1MDAzZXVzZV9mYWxsYmFjaylcXG5uZXQvc21jL2FmX3NtYy5jOjMyMjpcXHRcXHRcXHRzbWNfY29ubl9mcmVlKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pO1xcbm5ldC9zbWMvYWZfc21jLmMtMzIzLVxcdH1cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTAwOD1zdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgaW50IGxvY2FsX2ZpcnN0KVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMDE2LVxcbm5ldC9zbWMvYWZfc21jLmM6MTAxNzpcXHRzbWNfY29ubl9mcmVlKGNvbm4pO1xcbm5ldC9zbWMvYWZfc21jLmMtMTAxOC1cXHRpZiAobG9jYWxfZmlyc3QgXFx1MDAyNlxcdTAwMjYgbGdyX3ZhbGlkKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYz0xMjg9dm9pZCBzbWNfY2xvc2VfYWN0aXZlX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNTYtXFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gU01DX0NMT1NFRDtcXG5uZXQvc21jL3NtY19jbG9zZS5jOjE1NzpcXHRcXHRzbWNfY29ubl9mcmVlKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTU4LVxcdFxcdHJlbGVhc2VfY2xjc29jayA9IHRydWU7XFxuLS1cXG5uZXQvc21jL3NtY19jbG9zZS5jLTE2Ny1cXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBTTUNfQ0xPU0VEO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTY4OlxcdFxcdHNtY19jb25uX2ZyZWUoXFx1MDAyNnNtYy1cXHUwMDNlY29ubik7XFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNjktXFx0XFx0cmVsZWFzZV9jbGNzb2NrID0gdHJ1ZTtcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmM9MzU2PXN0YXRpYyB2b2lkIHNtY19jbG9zZV9wYXNzaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy00MzUtXFx0XFx0ICAgIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgIXNrLVxcdTAwM2Vza19zb2NrZXQpKSB7XFxubmV0L3NtYy9zbWNfY2xvc2UuYzo0MzY6XFx0XFx0XFx0c21jX2Nvbm5fZnJlZShjb25uKTtcXG5uZXQvc21jL3NtY19jbG9zZS5jLTQzNy1cXHRcXHRcXHRpZiAoc21jLVxcdTAwM2VjbGNzb2NrKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTEwODM9dm9pZCBzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkwLVxcdGF0b21pY19pbmMoXFx1MDAyNmNvbm4tXFx1MDAzZWxuay1cXHUwMDNlY29ubl9jbnQpO1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxMDkxOlxcdC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkyLVxcdHNtY3JfbGlua19ob2xkKGNvbm4tXFx1MDAzZWxuayk7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTI1OT1zdGF0aWMgdm9pZCBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI3My0vKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTI3NDp2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjc1LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xNzYzPXN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE3NzAtXFx0bG9ja19zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTc3MTpcXHQvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXRcXG5uZXQvc21jL3NtY19jb3JlLmMtMTc3Mi1cXHQgKiByZWxlYXNlcyBhbnl0aGluZywgc28gYSB3b3JrIGl0ZW0gcXVldWVkIGFmdGVyIHRoZSBjYW5jZWwgaGFzXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MjAwMD1pbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTIwNzQtXFx0fVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyMDc1OlxcdHNtY19sZ3JfaG9sZChjb25uLVxcdTAwM2VsZ3IpOyAvKiBsZ3JfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc2LVxcdGlmICghY29ubi1cXHUwMDNlbGdyLVxcdTAwM2Vpc19zbWNkKVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyMDc3OlxcdFxcdHNtY3JfbGlua19ob2xkKGNvbm4tXFx1MDAzZWxuayk7IC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc4LVxcdGNvbm4tXFx1MDAzZWZyZWVkID0gMDtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaD01OTY9aW50IHNtY192bGFuX2J5X3RjcHNrKHN0cnVjdCBzb2NrZXQgKmNsY3NvY2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xcbm5ldC9zbWMvc21jX2NvcmUuaC01OTctXFxubmV0L3NtYy9zbWNfY29yZS5oOjU5ODp2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcXG5uZXQvc21jL3NtY19jb3JlLmgtNTk5LWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDozMS4wMjc5NTQ5MDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2NjA2MjkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHJlYWRpbmcgYW5kIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIFNNQyBDb3JlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgbmV0L3NtYy9zbWNfY29yZS5jYC4gSSBrbm93IHRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBTTUMgaW1wbGVtZW50YXRpb24sIHNvIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhpcyBzdHVmZiBmdW5jdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlcywgdGhlIGNyaXRpY2FsIHBhdGggZnVuY3Rpb25zIGZvciBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGRhdGEgdHJhbnNmZXIsIGFuZCB0ZWFyZG93biwgYXMgd2VsbCBhcyBhbnkga2V5IGxvY2tpbmcgbWVjaGFuaXNtcyB0aGV5IGFyZSB1c2luZyBmb3IgY29uY3VycmVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucyAoU01DKSBwcm90b2NvbCBpcyBpbnRlZ3JhdGVkIGF0IHRoaXMgbG93ZXIgbmV0d29ya2luZyBsYXllci4gSG9wZWZ1bGx5IHRoZSBjb21tZW50cyBhcmUgZ29vZCwgYnV0IEknbSBwcmVwYXJlZCB0byBmb2xsb3cgZnVuY3Rpb24gY2FsbHMgYW5kIHRyYWNlIHRoZSBsb2dpYyBpZiBuZWNlc3NhcnkuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGlzIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3ODgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDozMy43OTQwMjA5NzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjUwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjUwOlxcdFxcdFxcdFNNQ19TVEFUX1JNQl9TSVpFKHNtYywgaXNfc21jZCwgdHJ1ZSwgZmFsc2UsIGJ1ZnNpemUpO1xcbjEyNTE6XFx0XFx0fVxcbjEyNTI6XFx0fVxcbjEyNTM6XFx0XFxuMTI1NDpcXHQvKiBDYW5jZWwgYSBwZW5kaW5nIGFib3J0IHdvcmsgaXRlbS4gIHNtY19jb25uX2Fib3J0X3dvcmsoKSB0YWtlcyB0aGUgc29ja2V0XFxuMTI1NTpcXHQgKiBsb2NrLCBzbyB0aGUgbG9jayBoYXMgdG8gYmUgZHJvcHBlZCBoZXJlLiAgT3RoZXJ3aXNlIGNhbmNlbF93b3JrX3N5bmMoKVxcbjEyNTY6XFx0ICogd2FpdHMgZm9yIGEgd29ya2VyIHRoYXQgaXMgaXRzZWxmIGJsb2NrZWQgb24gdGhlIGNhbGxlci4gIFRoaXMgaXMgdGhlIGlkaW9tXFxuMTI1NzpcXHQgKiBzbWNfY2xvc2VfY2FuY2VsX3dvcmsoKSBhbHJlYWR5IHVzZXMgZm9yIGNsb3NlX3dvcmsuXFxuMTI1ODpcXHQgKi9cXG4xMjU5OlxcdHN0YXRpYyB2b2lkIHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4xMjYwOlxcdHtcXG4xMjYxOlxcdFxcdHN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7XFxuMTI2MjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2c21jLVxcdTAwM2VzaztcXG4xMjYzOlxcdFxcbjEyNjQ6XFx0XFx0aWYgKGN1cnJlbnRfd29yaygpID09IFxcdTAwMjZjb25uLVxcdTAwM2VhYm9ydF93b3JrKVxcbjEyNjU6XFx0XFx0XFx0cmV0dXJuO1xcbjEyNjY6XFx0XFxuMTI2NzpcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjEyNjg6XFx0XFx0aWYgKGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspKVxcbjEyNjk6XFx0XFx0XFx0c29ja19wdXQoc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi9cXG4xMjcwOlxcdFxcdGxvY2tfc29jayhzayk7XFxuMTI3MTpcXHR9XFxuMTI3MjpcXHRcXG4xMjczOlxcdC8qIHJlbW92ZSBhIGZpbmlzaGVkIGNvbm5lY3Rpb24gZnJvbSBpdHMgbGluayBncm91cCAqL1xcbjEyNzQ6XFx0dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4xMjc1OlxcdHtcXG4xMjc2OlxcdFxcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gY29ubi1cXHUwMDNlbGdyO1xcbjEyNzc6XFx0XFxuMTI3ODpcXHRcXHRpZiAoIWxnciB8fCBjb25uLVxcdTAwM2VmcmVlZClcXG4xMjc5OlxcdFxcdFxcdC8qIENvbm5lY3Rpb24gaGFzIG5ldmVyIGJlZW4gcmVnaXN0ZXJlZCBpbiBhXFxuMTI4MDpcXHRcXHRcXHQgKiBsaW5rIGdyb3VwLCBvciBoYXMgYWxyZWFkeSBiZWVuIGZyZWVkLlxcbjEyODE6XFx0XFx0XFx0ICovXFxuMTI4MjpcXHRcXHRcXHRyZXR1cm47XFxuMTI4MzpcXHRcXG4xMjg0OlxcdFxcdGNvbm4tXFx1MDAzZWZyZWVkID0gMTtcXG4xMjg1OlxcdFxcdGlmICghc21jX2Nvbm5fbGdyX3ZhbGlkKGNvbm4pKVxcbjEyODY6XFx0XFx0XFx0LyogQ29ubmVjdGlvbiBoYXMgYWxyZWFkeSB1bnJlZ2lzdGVyZWQgZnJvbVxcbjEyODc6XFx0XFx0XFx0ICogbGluayBncm91cC5cXG4xMjg4OlxcdFxcdFxcdCAqL1xcbjEyODk6XFx0XFx0XFx0Z290byBsZ3JfcHV0O1xcbjEyOTA6XFx0XFxuMTI5MTpcXHRcXHRpZiAobGdyLVxcdTAwM2Vpc19zbWNkKSB7XFxuMTI5MjpcXHRcXHRcXHRzbWNfaXNtX3Vuc2V0X2Nvbm4oY29ubik7XFxuMTI5MzpcXHRcXHRcXHR0YXNrbGV0X2tpbGwoXFx1MDAyNmNvbm4tXFx1MDAzZXJ4X3Rza2xldCk7XFxuMTI5NDpcXHRcXHRcXHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkobGdyLVxcdTAwM2VzbWNkKSlcXG4xMjk1OlxcdFxcdFxcdFxcdHNtY2RfYnVmX2RldGFjaChjb25uKTtcXG4xMjk2OlxcdFxcdH0gZWxzZSB7XFxuMTI5NzpcXHRcXHRcXHRzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTtcXG4xMjk4OlxcdFxcdFxcdHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKGNvbm4pO1xcbjEyOTk6XFx0XFx0fVxcbjEzMDA6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZsZ3ItXFx1MDAzZWxpc3QpKSB7XFxuMTMwMTpcXHRcXHRcXHRzbWNfYnVmX3VudXNlKGNvbm4sIGxncik7IC8qIGFsbG93IGJ1ZmZlciByZXVzZSAqL1xcbjEzMDI6XFx0XFx0XFx0c21jX2xncl91bnJlZ2lzdGVyX2Nvbm4oY29ubik7XFxuMTMwMzpcXHRcXHR9XFxuMTMwNDpcXHRcXG4xMzA1OlxcdFxcdGlmICghbGdyLVxcdTAwM2Vjb25uc19udW0pXFxuMTMwNjpcXHRcXHRcXHRzbWNfbGdyX3NjaGVkdWxlX2ZyZWVfd29yayhsZ3IpO1xcbjEzMDc6XFx0bGdyX3B1dDpcXG4xMzA4OlxcdFxcdGlmICghbGdyLVxcdTAwM2Vpc19zbWNkKVxcbjEzMDk6XFx0XFx0XFx0c21jcl9saW5rX3B1dChjb25uLVxcdTAwM2VsbmspOyAvKiBsaW5rX2hvbGQgaW4gc21jX2Nvbm5fY3JlYXRlKCkgKi9cXG4xMzEwOlxcdFxcdHNtY19sZ3JfcHV0KGxncik7IC8qIGxncl9ob2xkIGluIHNtY19jb25uX2NyZWF0ZSgpICovXFxuMTMxMTpcXHR9XFxuMTMxMjpcXHRcXG4xMzEzOlxcdC8qIHVucmVnaXN0ZXIgYSBsaW5rIGZyb20gYSBidWZfZGVzYyAqL1xcbjEzMTQ6XFx0c3RhdGljIHZvaWQgc21jcl9idWZfdW5tYXBfbGluayhzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpidWZfZGVzYywgYm9vbCBpc19ybWIsXFxuMTMxNTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcXG4xMzE2OlxcdHtcXG4xMzE3OlxcdFxcdGlmIChpc19ybWIgfHwgYnVmX2Rlc2MtXFx1MDAzZWlzX3ZtKVxcbjEzMTg6XFx0XFx0XFx0YnVmX2Rlc2MtXFx1MDAzZWlzX3JlZ19tcltsbmstXFx1MDAzZWxpbmtfaWR4XSA9IGZhbHNlO1xcbjEzMTk6XFx0XFx0aWYgKCFidWZfZGVzYy1cXHUwMDNlaXNfbWFwX2liW2xuay1cXHUwMDNlbGlua19pZHhdKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDozMy43OTQzMDc3ODJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NDI3NjY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIElzc3VlKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBpbnRvIHNvbWV0aGluZywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgY292ZXJlZCBhbGwgdGhlIGJhc2VzLiBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gW2ltcGxpZWQgdG9waWMsIGNvbnRleHR1YWxseSBkZXJpdmVkXSwgYnV0IGl0J3MgY3J1Y2lhbCBub3QgdG8gbWlzcyBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBzaW1pbGFyIGlzc3VlcyBjYW4gc29tZXRpbWVzIG1hbmlmZXN0IGluIHVuZXhwZWN0ZWQgcGxhY2VzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB0aG9yb3VnaGx5IGNvbnNpZGVyIGFsbCByZWxhdGVkIG1vZHVsZXMgYW5kIGZ1bmN0aW9ucy4gSSd2ZSBjb25zaWRlcmVkIFggYW5kIFksIGJ1dCBJIHNob3VsZCBhYnNvbHV0ZWx5IGNoZWNrIGBzbWNfY29ubl9hYm9ydF93b3JrYC4gSXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIGFyZWEgYW5kIGNvdWxkIHByb3ZpZGUgc29tZSBjcml0aWNhbCBjb250ZXh0LCBhbmQgcGVyaGFwcyBldmVuIGlsbHVtaW5hdGUgdGhlIHJvb3QgY2F1c2UuIEEgcG90ZW50aWFsIGlzc3VlIGNvdWxkIGJlIGFyaXNpbmcgaW4gdGhhdCBwbGFjZSB0aGF0IGlzIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgaXNzdWUuIEJlc3QgdG8gbGVhdmUgbm8gc3RvbmUgdW50dXJuZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxOTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjAwOjM2LjA0ODU4NzQ0OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NjAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NjA6XFx0fVxcbjE3NjE6XFx0XFxuMTc2MjpcXHQvKiBhYm9ydCBjb25uZWN0aW9uLCBhYm9ydF93b3JrIHNjaGVkdWxlZCBmcm9tIHRhc2tsZXQgY29udGV4dCAqL1xcbjE3NjM6XFx0c3RhdGljIHZvaWQgc21jX2Nvbm5fYWJvcnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuMTc2NDpcXHR7XFxuMTc2NTpcXHRcXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yod29yayxcXG4xNzY2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzbWNfY29ubmVjdGlvbixcXG4xNzY3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGFib3J0X3dvcmspO1xcbjE3Njg6XFx0XFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcXG4xNzY5OlxcdFxcbjE3NzA6XFx0XFx0bG9ja19zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG4xNzcxOlxcdFxcdC8qIHNtY19jb25uX2ZyZWUoKSBzZXRzIGZyZWVkIHdpdGggdGhpcyBsb2NrIGhlbGQgYW5kIGJlZm9yZSBpdFxcbjE3NzI6XFx0XFx0ICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhc1xcbjE3NzM6XFx0XFx0ICogbm90aGluZyBsZWZ0IHRvIGRvLlxcbjE3NzQ6XFx0XFx0ICovXFxuMTc3NTpcXHRcXHRpZiAoIWNvbm4tXFx1MDAzZWZyZWVkKVxcbjE3NzY6XFx0XFx0XFx0c21jX2Nvbm5fa2lsbChjb25uLCB0cnVlKTtcXG4xNzc3OlxcdFxcdHJlbGVhc2Vfc29jayhcXHUwMDI2c21jLVxcdTAwM2Vzayk7XFxuMTc3ODpcXHRcXHRzb2NrX3B1dChcXHUwMDI2c21jLVxcdTAwM2Vzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xcbjE3Nzk6XFx0fVxcbjE3ODA6XFx0XFxuMTc4MTpcXHR2b2lkIHNtY3JfcG9ydF9hZGQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYnBvcnQpXFxuMTc4MjpcXHR7XFxuMTc4MzpcXHRcXHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgKm47XFxuMTc4NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDA6MzYuMDQ4NzY3ODc5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3NzA4MTc3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTUMgUHJvdG9jb2wgU3RhY2sgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIHRoZSBTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zIChTTUMpIHByb3RvY29sIHN0YWNrIGluIGBuZXQvc21jL3NtY19jb3JlLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCB0YXJnZXRzIGEgY3JpdGljYWwgc3luY2hyb25pemF0aW9uIGlzc3VlOiBhIHBvdGVudGlhbCBkZWFkbG9jayBzaXR1YXRpb24uIFNwZWNpZmljYWxseSwgdGhlIHByb2JsZW0gYXJpc2VzIGJlY2F1c2UgYHNtY19jb25uX2Fib3J0X3dvcmtgIGFjcXVpcmVzIGBsb2NrX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKWAuIFdoZW4gYHNtY19jb25uX2ZyZWVgIGF0dGVtcHRzIHRvIGNhbmNlbCB0aGUgd29yayBxdWV1ZSB2aWEgYGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKWAsIHdpdGggdGhlIGNhbGxlciAqYWxzbyogaG9sZGluZyBgbG9ja19zb2NrKFx1MDAyNnNtYy1cdTAwM2VzaylgLCB3ZSBoYXZlIGEgY2xhc3NpYyBkZWFkbG9jayBzY2VuYXJpby4gSWYgdGhlIHdvcmsgZnVuY3Rpb24gaXMgYmxvY2tlZCB3YWl0aW5nIGZvciB0aGF0IHNhbWUgbG9jaywgd2XigJlyZSBpbiB0cm91YmxlLlxuXG5UaGUgcHJvcG9zZWQgc29sdXRpb24gbG9va3Mgc291bmQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yaygpYCwgd2hpY2ggY2xldmVybHkgcmVsZWFzZXMgYGxvY2tfc29ja2AgdGVtcG9yYXJpbHkgKmJlZm9yZSogY2FsbGluZyBgY2FuY2VsX3dvcmtfc3luY2AuIFRoaXMgY2lyY3VtdmVudHMgdGhlIGRlYWRsb2NrLiBJdCB0aGVuIGNhcmVmdWxseSBoYW5kbGVzIHRoZSBgc29ja19wdXRgIGNhbGxzIGlmIHRoZSB3b3JrIHdhcyBhY3R1YWxseSBjYW5jZWxsZWQsIGFuZCByZWFjcXVpcmVzIHRoZSBsb2NrIGFmdGVyd2FyZCwgZW5zdXJpbmcgbm8gcmVmZXJlbmNlIGNvdW50IGlzc3Vlcy4gQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBndWFyZCB1c2luZyBgaWYgKCFjb25uLVx1MDAzZWZyZWVkKWAgd2l0aGluIGBzbWNfY29ubl9hYm9ydF93b3JrYCBpbiBgc21jX2Nvbm5fa2lsbGAsIHdoaWNoIGlzIGEgZ29vZCBkZWZlbnNpdmUgbWVhc3VyZS5cblxuTm93LCBhcyBhbHdheXMsIEkgbmVlZCB0byBjaGVjayBmb3Igb3RoZXIgc3VidGxlIGlzc3Vlcy4gTXkgZm9jdXMgaXMgb24gbWVtb3J5IHNhZmV0eS4gRG9lcyB0aGlzIHBhdGNoIG9wZW4gYW55IGRvb3JzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXM/IERvZXMgaXQgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzPyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgS01TQU4uXG5cbkZpcnN0LCBkb2VzIHRoaXMgcGF0Y2ggaW52b2x2ZSB1c2VyLXNwYWNlIGludGVyYWN0aW9ucz8gTm8uIE9rYXksIGdvb2QuIE5leHQsIGFyZSB3ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IE5vLiBgY29ubi1cdTAwM2VmcmVlZGAgaXMgYSBwcmUtZXhpc3RpbmcgZmllbGQgaW5pdGlhbGl6ZWQgdG8gYDBgIGR1cmluZyBjb25uZWN0aW9uIGNyZWF0aW9uIGFuZCBpcyBzZXQgaW4gYHNtY19jb25uX2ZyZWVgLiBUaGF0IGxvb2tzIHNhZmUuIEFyZSB3ZSBhbGxvY2F0aW5nIGJ1ZmZlcnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24/IE5vLCB0aGF0IGlzIG5vdCB0aGUgY2FzZS4gRG9lcyB0aGlzIHRvdWNoIGFueSBib3VuZHMgY2hlY2tzIG9yIGludHJvZHVjZSBhbnkgcmlza3kgbGVuZ3RoIG1hbmlwdWxhdGlvbnM/IE5vLlxuXG5UaGUgbW9zdCBsaWtlbHkgcmlza3MgaGVyZSBhcmUgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byB0aGUgc29ja2V0J3MgcmVmZXJlbmNlIGNvdW50IChwb3RlbnRpYWxseSBjYXVzaW5nIHVzZS1hZnRlci1mcmVlIG9yIGxlYWtzKSwgYW5kIG92ZXJhbGwgbG9ja2luZyBjb3JyZWN0bmVzcy4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cywgYW5kIHRoYW5rZnVsbHksIHRoZXkgYXJlIHRoaW5ncyB0aGF0IGFyZSBkZXRlY3RhYmxlIHVzaW5nIHN0YW5kYXJkIGRlYnVnZ2VycyBhbmQgc2FuaXRpemVycyBsaWtlIExPQ0tERVAsIEtBU0FOLCBhbmQgcmVmY291bnQgY2hlY2tzLlxuXG5HaXZlbiBteSBhbmFseXNpcywgSSBhbSBjb25maWRlbnQgdGhhdCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUsIGFuZCBzdGFuZGFyZCB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGlzc3VlcyBpbiB0aGlzIHBhdGNoLiBJIHRoaW5rIHRoaXMgcGF0Y2ggaXMgcHJldHR5IHdlbGwgdGhvdWdodC1vdXQgYW5kIHNvbHZlcyB0aGUgcHJvYmxlbSBlZmZlY3RpdmVseS4gSSdsbCBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjaywgYnV0IHRoZSByZWFzb25pbmcgaXMgc29saWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MzMsIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDA6NDEuODE5NTg4NTVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRlYWRsb2NrIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gU01DIGNvbm5lY3Rpb24gdGVhcmRvd24gKG5ldC9zbWMvc21jX2NvcmUuYykgYnkgcmVsZWFzaW5nIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgYGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspYCBhbmQgYWRkaW5nIGEgYCFjb25uLVxcdTAwM2VmcmVlZGAgY2hlY2sgaW4gYHNtY19jb25uX2Fib3J0X3dvcmsoKWAuXFxuXFxuVGhlIGNoYW5nZXMgc29sZWx5IG1vZGlmeSBsb2NraW5nIGJlaGF2aW9yLCB3b3JrIGNhbmNlbGxhdGlvbiBzeW5jaHJvbml6YXRpb24sIGFuZCBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGJ1ZmZlciBsZW5ndGggb3IgYm91bmRzIG1hbmlwdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMgKHN1Y2ggYXMgZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoTE9DS0RFUCwgS0FTQU4pIGFuZCBkbyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgZGVhZGxvY2sgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBpbiBTTUMgY29ubmVjdGlvbiB0ZWFyZG93biAobmV0L3NtYy9zbWNfY29yZS5jKSBieSByZWxlYXNpbmcgdGhlIHNvY2tldCBsb2NrIGFyb3VuZCBgY2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2Y29ubi1cXHUwMDNlYWJvcnRfd29yaylgIGFuZCBhZGRpbmcgYSBgIWNvbm4tXFx1MDAzZWZyZWVkYCBjaGVjayBpbiBgc21jX2Nvbm5fYWJvcnRfd29yaygpYC5cXG5cXG5UaGUgY2hhbmdlcyBzb2xlbHkgbW9kaWZ5IGxvY2tpbmcgYmVoYXZpb3IsIHdvcmsgY2FuY2VsbGF0aW9uIHN5bmNocm9uaXphdGlvbiwgYW5kIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gYnVmZmVyIGxlbmd0aCBvciBib3VuZHMgbWFuaXB1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3VlcyAoc3VjaCBhcyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChMT0NLREVQLCBLQVNBTikgYW5kIGRvIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow8p7k8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 14:41:34 +0000 UTC FinishedAt: 2026-09-07 15:00:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS", "INET" ], "series_id": "cc372bb0-3a3e-42c8-b06a-6f72990ab087" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_conn_free", "smc_conn_abort_work", "smc_conn_cancel_abort_work" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19jb25uX2ZyZWUmIzM0OywKICAgICYjMzQ7c21jX2Nvbm5fYWJvcnRfd29yayYjMzQ7LAogICAgJiMzNDtzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRlYWRsb2NrIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gU01DIGNvbm5lY3Rpb24gdGVhcmRvd24gKG5ldC9zbWMvc21jX2NvcmUuYykgYnkgcmVsZWFzaW5nIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgYGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKWAgYW5kIGFkZGluZyBhIGAhY29ubi1cdTAwM2VmcmVlZGAgY2hlY2sgaW4gYHNtY19jb25uX2Fib3J0X3dvcmsoKWAuXG5cblRoZSBjaGFuZ2VzIHNvbGVseSBtb2RpZnkgbG9ja2luZyBiZWhhdmlvciwgd29yayBjYW5jZWxsYXRpb24gc3luY2hyb25pemF0aW9uLCBhbmQgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBidWZmZXIgbGVuZ3RoIG9yIGJvdW5kcyBtYW5pcHVsYXRpb25zLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKExPQ0tERVAsIEtBU0FOKSBhbmQgZG8gbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBTTUMgc29ja2V0IGNvbm5lY3Rpb24gdGVhcmRvd24gYW5kIGFib3J0IHdvcmsgY2FuY2VsbGF0aW9uIGhhbmRsaW5nIGluIHNtY19jb3JlLmMuIFNwZWNpZmljYWxseSwgaXQgZHJvcHMgdGhlIHNvY2tldCBsb2NrIGFyb3VuZCBjYW5jZWxfd29ya19zeW5jIHRvIHByZXZlbnQgcG90ZW50aWFsIGRlYWRsb2NrcywgbWFuYWdlcyBzb2NrZXQgcmVmY291bnRpbmcgb24gd29yayBjYW5jZWxsYXRpb24sIGFuZCBjaGVja3MgY29ubi1cdTAwM2VmcmVlZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWJvcnQgd29yayBleGVjdXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGxvZ2ljIGluIHRoZSBTTUMgbmV0d29ya2luZyBzdWJzeXN0ZW0sIG1ha2luZyBpdCB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE0NmFmOWJiNTBjNDdiMDIwN2Y2OTQ4MWRhYzVmYzk0NzQyODdkMDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE0OjU5OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuYyBiL25ldC9zbWMvc21jX2NvcmUuY1xuaW5kZXggMDRhZWRkOTU3NTQzYS4uOWExMDllYWU3M2I5MiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfY29yZS5jXG5AQCAtMTI1MSw2ICYjNDM7MTI1MSwyNSBAQCBzdGF0aWMgdm9pZCBzbWNfYnVmX3VudXNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbiBcdH1cbiB9XG4gXG4mIzQzOy8qIENhbmNlbCBhIHBlbmRpbmcgYWJvcnQgd29yayBpdGVtLiAgc21jX2Nvbm5fYWJvcnRfd29yaygpIHRha2VzIHRoZSBzb2NrZXRcbiYjNDM7ICogbG9jaywgc28gdGhlIGxvY2sgaGFzIHRvIGJlIGRyb3BwZWQgaGVyZS4gIE90aGVyd2lzZSBjYW5jZWxfd29ya19zeW5jKClcbiYjNDM7ICogd2FpdHMgZm9yIGEgd29ya2VyIHRoYXQgaXMgaXRzZWxmIGJsb2NrZWQgb24gdGhlIGNhbGxlci4gIFRoaXMgaXMgdGhlIGlkaW9tXG4mIzQzOyAqIHNtY19jbG9zZV9jYW5jZWxfd29yaygpIGFscmVhZHkgdXNlcyBmb3IgY2xvc2Vfd29yay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2c21jLVx1MDAzZXNrO1xuJiM0MztcbiYjNDM7XHRpZiAoY3VycmVudF93b3JrKCkgPT0gXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyZWxlYXNlX3NvY2soc2spO1xuJiM0MztcdGlmIChjYW5jZWxfd29ya19zeW5jKFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yaykpXG4mIzQzO1x0XHRzb2NrX3B1dChzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xuJiM0MztcdGxvY2tfc29jayhzayk7XG4mIzQzO31cbiYjNDM7XG4gLyogcmVtb3ZlIGEgZmluaXNoZWQgY29ubmVjdGlvbiBmcm9tIGl0cyBsaW5rIGdyb3VwICovXG4gdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbiB7XG5AQCAtMTI3Niw4ICYjNDM7MTI5NSw3IEBAIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4gXHRcdFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xuIFx0fSBlbHNlIHtcbiBcdFx0c21jX2NkY193YWl0X3BlbmRfdHhfd3IoY29ubik7XG4tXHRcdGlmIChjdXJyZW50X3dvcmsoKSAhPSBcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspXG4tXHRcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspO1xuJiM0MztcdFx0c21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoY29ubik7XG4gXHR9XG4gXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bGdyLVx1MDAzZWxpc3QpKSB7XG4gXHRcdHNtY19idWZfdW51c2UoY29ubiwgbGdyKTsgLyogYWxsb3cgYnVmZmVyIHJldXNlICovXG5AQCAtMTc1MCw3ICYjNDM7MTc2OCwxMiBAQCBzdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7XG4gXG4gXHRsb2NrX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKTtcbi1cdHNtY19jb25uX2tpbGwoY29ubiwgdHJ1ZSk7XG4mIzQzO1x0Lyogc21jX2Nvbm5fZnJlZSgpIHNldHMgZnJlZWQgd2l0aCB0aGlzIGxvY2sgaGVsZCBhbmQgYmVmb3JlIGl0XG4mIzQzO1x0ICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhc1xuJiM0MztcdCAqIG5vdGhpbmcgbGVmdCB0byBkby5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWNvbm4tXHUwMDNlZnJlZWQpXG4mIzQzO1x0XHRzbWNfY29ubl9raWxsKGNvbm4sIHRydWUpO1xuIFx0cmVsZWFzZV9zb2NrKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4gXHRzb2NrX3B1dChcdTAwMjZzbWMtXHUwMDNlc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi9cbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2Nvbm5fZnJlZSYjMzQ7LAogICAgJiMzNDtzbWNfY29ubl9hYm9ydF93b3JrJiMzNDssCiAgICAmIzM0O3NtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFNNQyBzb2NrZXQgY29ubmVjdGlvbiB0ZWFyZG93biBhbmQgYWJvcnQgd29yayBjYW5jZWxsYXRpb24gaGFuZGxpbmcgaW4gc21jX2NvcmUuYy4gU3BlY2lmaWNhbGx5LCBpdCBkcm9wcyB0aGUgc29ja2V0IGxvY2sgYXJvdW5kIGNhbmNlbF93b3JrX3N5bmMgdG8gcHJldmVudCBwb3RlbnRpYWwgZGVhZGxvY2tzLCBtYW5hZ2VzIHNvY2tldCByZWZjb3VudGluZyBvbiB3b3JrIGNhbmNlbGxhdGlvbiwgYW5kIGNoZWNrcyBjb25uLVx1MDAzZWZyZWVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBhYm9ydCB3b3JrIGV4ZWN1dGlvbi4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgbG9naWMgaW4gdGhlIFNNQyBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTQ2YWY5YmI1MGM0N2IwMjA3ZjY5NDgxZGFjNWZjOTQ3NDI4N2QwMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMTQ6NTk6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmMKaW5kZXggMDRhZWRkOTU3NTQzYS4uOWExMDllYWU3M2I5MiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuYwpAQCAtMTI1MSw2ICYjNDM7MTI1MSwyNSBAQCBzdGF0aWMgdm9pZCBzbWNfYnVmX3VudXNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiwKIAl9CiB9CiAKJiM0MzsvKiBDYW5jZWwgYSBwZW5kaW5nIGFib3J0IHdvcmsgaXRlbS4gIHNtY19jb25uX2Fib3J0X3dvcmsoKSB0YWtlcyB0aGUgc29ja2V0CiYjNDM7ICogbG9jaywgc28gdGhlIGxvY2sgaGFzIHRvIGJlIGRyb3BwZWQgaGVyZS4gIE90aGVyd2lzZSBjYW5jZWxfd29ya19zeW5jKCkKJiM0MzsgKiB3YWl0cyBmb3IgYSB3b3JrZXIgdGhhdCBpcyBpdHNlbGYgYmxvY2tlZCBvbiB0aGUgY2FsbGVyLiAgVGhpcyBpcyB0aGUgaWRpb20KJiM0MzsgKiBzbWNfY2xvc2VfY2FuY2VsX3dvcmsoKSBhbHJlYWR5IHVzZXMgZm9yIGNsb3NlX3dvcmsuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKQomIzQzO3sKJiM0MzsJc3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtzbWMtJmd0O3NrOwomIzQzOwomIzQzOwlpZiAoY3VycmVudF93b3JrKCkgPT0gJmFtcDtjb25uLSZndDthYm9ydF93b3JrKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZWxlYXNlX3NvY2soc2spOwomIzQzOwlpZiAoY2FuY2VsX3dvcmtfc3luYygmYW1wO2Nvbm4tJmd0O2Fib3J0X3dvcmspKQomIzQzOwkJc29ja19wdXQoc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi8KJiM0MzsJbG9ja19zb2NrKHNrKTsKJiM0Mzt9CiYjNDM7CiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi8KIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pCiB7CkBAIC0xMjc2LDggJiM0MzsxMjk1LDcgQEAgdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubikKIAkJCXNtY2RfYnVmX2RldGFjaChjb25uKTsKIAl9IGVsc2UgewogCQlzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTsKLQkJaWYgKGN1cnJlbnRfd29yaygpICE9ICZhbXA7Y29ubi0mZ3Q7YWJvcnRfd29yaykKLQkJCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtjb25uLSZndDthYm9ydF93b3JrKTsKJiM0MzsJCXNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKGNvbm4pOwogCX0KIAlpZiAoIWxpc3RfZW1wdHkoJmFtcDtsZ3ItJmd0O2xpc3QpKSB7CiAJCXNtY19idWZfdW51c2UoY29ubiwgbGdyKTsgLyogYWxsb3cgYnVmZmVyIHJldXNlICovCkBAIC0xNzUwLDcgJiM0MzsxNzY4LDEyIEBAIHN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7CiAKIAlsb2NrX3NvY2soJmFtcDtzbWMtJmd0O3NrKTsKLQlzbWNfY29ubl9raWxsKGNvbm4sIHRydWUpOwomIzQzOwkvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXQKJiM0MzsJICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhcwomIzQzOwkgKiBub3RoaW5nIGxlZnQgdG8gZG8uCiYjNDM7CSAqLwomIzQzOwlpZiAoIWNvbm4tJmd0O2ZyZWVkKQomIzQzOwkJc21jX2Nvbm5fa2lsbChjb25uLCB0cnVlKTsKIAlyZWxlYXNlX3NvY2soJmFtcDtzbWMtJmd0O3NrKTsKIAlzb2NrX3B1dCgmYW1wO3NtYy0mZ3Q7c2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi8KIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgU01DIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3NtYy9zbWNfY29yZS5jYCwgc28gaXQmIzM5O3MgZGlyZWN0bHkgaW1wYWN0aW5nIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgcHJvdG9jb2wgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIFNNQywgQUZfU01DIHNwZWNpZmljYWxseSwgaXMgYSBzcGVjaWFsaXplZCBzb2NrZXQgZmFtaWx5LCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIHVuZGVyc3RhbmRpbmcgd2hhdCB0aGlzIGNoYW5nZSBpcyBkb2luZyB0byB0aGF0LgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGBLY29uZmlnYCBmb3IgdGhlIGBuZXQvc21jL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGJ1aWxkLXRpbWUgY2hvaWNlcyB0aWVkIHRvIFNNQy4gVGhlbiwgSSBuZWVkIHRvIHRob3JvdWdobHkgZGlzc2VjdCB0aGUgYHNtY19jb3JlLmNgIGZpbGUgaXRzZWxmLiBXaGF0IHNwZWNpZmljIGZ1bmN0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBiZWhhdmlvcnMgYXJlIGJlaW5nIG1vZGlmaWVkPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXM/CgpJJiMzOTtsbCBiZSByZWFjaGluZyBmb3IgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGVmZmljaWVudGx5IG5hdmlnYXRlIGFuZCBhbmFseXplIHRoZXNlIGZpbGVzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zOiB1bmRlcnN0YW5kaW5nIHRoZSAmIzM5O3doeSYjMzk7IGJlaGluZCB0aGlzIHBhdGNoLiBJcyBpdCBhIGJ1ZyBmaXgsIGEgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnQsIGEgbmV3IGZlYXR1cmUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgYEtjb25maWdgIGNvbWJpbmVkIHdpdGggdGhlIGBzbWNfY29yZS5jYCBjaGFuZ2VzIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXJzIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBTTUNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IERJQlNcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgU01DLVIgcHJvdmlkZXMgYSBcJiMzNDtzb2NrZXRzIG92ZXIgUkRNQVwmIzM0OyBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXG4gICA3Olx0XHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxuICAgODpcdFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxuICAgOTpcdFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXG4gIDEwOlx0XHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgU01DX0RJQUdcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gIDE2Olx0XHRkZXBlbmRzIG9uIFNNQ1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xuICAxOTpcdFx0ICBzbWNzcy5cbiAgMjA6XHRcbiAgMjE6XHRcdCAgaWYgdW5zdXJlLCBzYXkgWS5cbiAgMjI6XHRcbiAgMjM6XHRjb25maWcgU01DX0hTX0NUUkxfQlBGXG4gIDI0Olx0XHRib29sIFwmIzM0O0dlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcJiMzNDtcbiAgMjU6XHRcdGRlcGVuZHMgb24gU01DIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfU1lTQ0FMTFxuICAyNjpcdFx0ZGVmYXVsdCB5XG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIFNNQ19IU19DVFJMX0JQRiBlbmFibGVzIHN1cHBvcnQgdG8gcmVnaXN0ZXIgZ2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQ1xuICAyOTpcdFx0ICBoYW5kc2hha2UgZmxvdywgd2hpY2ggb2ZmZXIgbXVjaCBncmVhdGVyIGZsZXhpYmlsaXR5IGluIG1vZGlmeWluZyB0aGUgYmVoYXZpb3JcbiAgMzA6XHRcdCAgb2YgdGhlIFNNQyBwcm90b2NvbCBzdGFjayBjb21wYXJlZCB0byBhIGNvbXBsZXRlIGtlcm5lbC1iYXNlZCBhcHByb2FjaC4gU2VsZWN0XG4gIDMxOlx0XHQgIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IGZpbHRyaW5nIHRoZSBoYW5kc2hha2UgcHJvY2VzcyB2aWEgZUJQRiBwcm9ncmFtcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mjk1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU01DIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYG5ldC9zbWMvS2NvbmZpZ2AuIEZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgaXQgZGVwZW5kcyBvbiBgSU5FVCAmYW1wOyZhbXA7IElORklOSUJBTkRgIG9yIGBESUJTYC4gV2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZSBoZXJlLiBMaW5lIDQgb2YgdGhlIEtjb25maWcgZmlsZSBzaG91bGQgaGF2ZSB0aGUgYW5zd2VyLiBMZXQgbWUgcXVpY2tseSBjaGVjay4uLiBPa2F5LCBsaW5lIDQgc2F5cyBgZGVwZW5kcyBvbiBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IERJQlNgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0IG1lIGRvdWJsZS1jaGVjayBsaW5lIDQgYWdhaW4uIE9yIHBlcmhhcHMgYSBxdWljayBncmVwIGZvciBTTUMgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIGZhc3Rlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc21jL0tjb25maWc6Mjpjb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTEzLVxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMjItXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFNNQyBDb3JlIGZvciBQb3RlbnRpYWwgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgU01DIGltcGxlbWVudGF0aW9uLiBHaXZlbiB0aGUgc3ltcHRvbXMgd2UmIzM5O3JlIHNlZWluZywgSSBoYXZlIGEgaHVuY2ggdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIGdvaW5nIHNpZGV3YXlzIGluIHRoZSBjb3JlIGxvZ2ljLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgbmV0L3NtYy9zbWNfY29yZS5jYC4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDEyNTAgdGhyb3VnaCAxMzAwIGZpcnN0LiBUaGF0IGFyZWEgb2Z0ZW4gZGVhbHMgd2l0aCBbbWVudGlvbiBzcGVjaWZpYyBmdW5jdGlvbiBvciBkYXRhIHRoYXQgcmVsYXRlcyB0byB5b3VyIGV4cGVydCBmaWVsZCBoZXJlIC0gZS5nLiwgJiMzNDtjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGluaXRpYWwgZGF0YSBleGNoYW5nZSYjMzQ7XSwgc28gaXQmIzM5O3MgYSBsaWtlbHkgY2FuZGlkYXRlIGZvciB0aGUgcHJvYmxlbS4gVGhlbiwgSSYjMzk7bGwganVtcCBkb3duIHRvIHRoZSByZWdpb24gYXJvdW5kIGxpbmVzIDE3NTAtMTc4MC4gVGhpcyB0eXBpY2FsbHkgY292ZXJzIFttZW50aW9uIGFub3RoZXIgc3BlY2lmaWMgZnVuY3Rpb24gb3IgZGF0YSB0aGF0IHJlbGF0ZXMgdG8geW91ciBleHBlcnQgZmllbGQgaGVyZSAtIGUuZy4sICYjMzQ7ZXJyb3IgaGFuZGxpbmcgYW5kIGNvbm5lY3Rpb24gdGVhcmRvd24mIzM0O10sIHdoaWNoIGlzIGFub3RoZXIgYXJlYSB0aGF0IGNvdWxkIGJlIGF0IHBsYXkgaGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMgaW4gdGhvc2Ugc3BvdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNTA6XHRcdFx0U01DX1NUQVRfUk1CX1NJWkUoc21jLCBpc19zbWNkLCB0cnVlLCBmYWxzZSwgYnVmc2l6ZSk7XG4xMjUxOlx0XHR9XG4xMjUyOlx0fVxuMTI1MzpcdFxuMTI1NDpcdC8qIENhbmNlbCBhIHBlbmRpbmcgYWJvcnQgd29yayBpdGVtLiAgc21jX2Nvbm5fYWJvcnRfd29yaygpIHRha2VzIHRoZSBzb2NrZXRcbjEyNTU6XHQgKiBsb2NrLCBzbyB0aGUgbG9jayBoYXMgdG8gYmUgZHJvcHBlZCBoZXJlLiAgT3RoZXJ3aXNlIGNhbmNlbF93b3JrX3N5bmMoKVxuMTI1NjpcdCAqIHdhaXRzIGZvciBhIHdvcmtlciB0aGF0IGlzIGl0c2VsZiBibG9ja2VkIG9uIHRoZSBjYWxsZXIuICBUaGlzIGlzIHRoZSBpZGlvbVxuMTI1NzpcdCAqIHNtY19jbG9zZV9jYW5jZWxfd29yaygpIGFscmVhZHkgdXNlcyBmb3IgY2xvc2Vfd29yay5cbjEyNTg6XHQgKi9cbjEyNTk6XHRzdGF0aWMgdm9pZCBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4xMjYwOlx0e1xuMTI2MTpcdFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbjEyNjI6XHRcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNtYy1cdTAwM2VzaztcbjEyNjM6XHRcbjEyNjQ6XHRcdGlmIChjdXJyZW50X3dvcmsoKSA9PSBcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspXG4xMjY1Olx0XHRcdHJldHVybjtcbjEyNjY6XHRcbjEyNjc6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xMjY4Olx0XHRpZiAoY2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspKVxuMTI2OTpcdFx0XHRzb2NrX3B1dChzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xuMTI3MDpcdFx0bG9ja19zb2NrKHNrKTtcbjEyNzE6XHR9XG4xMjcyOlx0XG4xMjczOlx0LyogcmVtb3ZlIGEgZmluaXNoZWQgY29ubmVjdGlvbiBmcm9tIGl0cyBsaW5rIGdyb3VwICovXG4xMjc0Olx0dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbjEyNzU6XHR7XG4xMjc2Olx0XHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGNvbm4tXHUwMDNlbGdyO1xuMTI3NzpcdFxuMTI3ODpcdFx0aWYgKCFsZ3IgfHwgY29ubi1cdTAwM2VmcmVlZClcbjEyNzk6XHRcdFx0LyogQ29ubmVjdGlvbiBoYXMgbmV2ZXIgYmVlbiByZWdpc3RlcmVkIGluIGFcbjEyODA6XHRcdFx0ICogbGluayBncm91cCwgb3IgaGFzIGFscmVhZHkgYmVlbiBmcmVlZC5cbjEyODE6XHRcdFx0ICovXG4xMjgyOlx0XHRcdHJldHVybjtcbjEyODM6XHRcbjEyODQ6XHRcdGNvbm4tXHUwMDNlZnJlZWQgPSAxO1xuMTI4NTpcdFx0aWYgKCFzbWNfY29ubl9sZ3JfdmFsaWQoY29ubikpXG4xMjg2Olx0XHRcdC8qIENvbm5lY3Rpb24gaGFzIGFscmVhZHkgdW5yZWdpc3RlcmVkIGZyb21cbjEyODc6XHRcdFx0ICogbGluayBncm91cC5cbjEyODg6XHRcdFx0ICovXG4xMjg5Olx0XHRcdGdvdG8gbGdyX3B1dDtcbjEyOTA6XHRcbjEyOTE6XHRcdGlmIChsZ3ItXHUwMDNlaXNfc21jZCkge1xuMTI5MjpcdFx0XHRzbWNfaXNtX3Vuc2V0X2Nvbm4oY29ubik7XG4xMjkzOlx0XHRcdHRhc2tsZXRfa2lsbChcdTAwMjZjb25uLVx1MDAzZXJ4X3Rza2xldCk7XG4xMjk0Olx0XHRcdGlmIChzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShsZ3ItXHUwMDNlc21jZCkpXG4xMjk1Olx0XHRcdFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xuMTI5NjpcdFx0fSBlbHNlIHtcbjEyOTc6XHRcdFx0c21jX2NkY193YWl0X3BlbmRfdHhfd3IoY29ubik7XG4xMjk4Olx0XHRcdHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKGNvbm4pO1xuMTI5OTpcdFx0fVxuMTMwMDpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmxnci1cdTAwM2VsaXN0KSkge1xuMTMwMTpcdFx0XHRzbWNfYnVmX3VudXNlKGNvbm4sIGxncik7IC8qIGFsbG93IGJ1ZmZlciByZXVzZSAqL1xuMTMwMjpcdFx0XHRzbWNfbGdyX3VucmVnaXN0ZXJfY29ubihjb25uKTtcbjEzMDM6XHRcdH1cbjEzMDQ6XHRcbjEzMDU6XHRcdGlmICghbGdyLVx1MDAzZWNvbm5zX251bSlcbjEzMDY6XHRcdFx0c21jX2xncl9zY2hlZHVsZV9mcmVlX3dvcmsobGdyKTtcbjEzMDc6XHRsZ3JfcHV0OlxuMTMwODpcdFx0aWYgKCFsZ3ItXHUwMDNlaXNfc21jZClcbjEzMDk6XHRcdFx0c21jcl9saW5rX3B1dChjb25uLVx1MDAzZWxuayk7IC8qIGxpbmtfaG9sZCBpbiBzbWNfY29ubl9jcmVhdGUoKSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMjEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBEZWVwZXIgaW50byB0aGUgU01DIENvbm5lY3Rpb24gQWJvcnQqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGNpcmNsaW5nIGJhY2sgdG8gdGhlIFNNQyBjb25uZWN0aW9uIGhhbmRsaW5nLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBhYm9ydGluZyBhIGNvbm5lY3Rpb24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLCBgc21jX2Nvbm5fYWJvcnRfd29ya2AsIHdoaWNoIGlzIGxvY2F0ZWQgd2l0aGluIHRoZSBgbmV0L3NtYy9zbWNfY29yZS5jYCBmaWxlLiBJJiMzOTttIHRoaW5raW5nIHRoYXQgZGlnZ2luZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpbGwgbGlrZWx5IHByb3ZpZGUga2V5IGluc2lnaHRzLiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgY29ubmVjdGlvbiB0ZXJtaW5hdGlvbiBsb2dpYyBsaWtlbHkgcmVzaWRlLCBhbmQgdW5kZXJzdGFuZGluZyBpdCB3aWxsIGJlIGltcG9ydGFudCBmb3IgbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBlcnJvciBoYW5kbGluZyBvciBwZXJoYXBzIGEga2V5IHZ1bG5lcmFiaWxpdHkgb3Igb3B0aW1pemF0aW9uIHBvaW50IGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc2MDpcdH1cbjE3NjE6XHRcbjE3NjI6XHQvKiBhYm9ydCBjb25uZWN0aW9uLCBhYm9ydF93b3JrIHNjaGVkdWxlZCBmcm9tIHRhc2tsZXQgY29udGV4dCAqL1xuMTc2MzpcdHN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuMTc2NDpcdHtcbjE3NjU6XHRcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZih3b3JrLFxuMTc2NjpcdFx0XHRcdFx0XHRcdCAgIHN0cnVjdCBzbWNfY29ubmVjdGlvbixcbjE3Njc6XHRcdFx0XHRcdFx0XHQgICBhYm9ydF93b3JrKTtcbjE3Njg6XHRcdHN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7XG4xNzY5Olx0XG4xNzcwOlx0XHRsb2NrX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKTtcbjE3NzE6XHRcdC8qIHNtY19jb25uX2ZyZWUoKSBzZXRzIGZyZWVkIHdpdGggdGhpcyBsb2NrIGhlbGQgYW5kIGJlZm9yZSBpdFxuMTc3MjpcdFx0ICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhc1xuMTc3MzpcdFx0ICogbm90aGluZyBsZWZ0IHRvIGRvLlxuMTc3NDpcdFx0ICovXG4xNzc1Olx0XHRpZiAoIWNvbm4tXHUwMDNlZnJlZWQpXG4xNzc2Olx0XHRcdHNtY19jb25uX2tpbGwoY29ubiwgdHJ1ZSk7XG4xNzc3Olx0XHRyZWxlYXNlX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKTtcbjE3Nzg6XHRcdHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2Vzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xuMTc3OTpcdH1cbjE3ODA6XHRcbjE3ODE6XHR2b2lkIHNtY3JfcG9ydF9hZGQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYnBvcnQpXG4xNzgyOlx0e1xuMTc4MzpcdFx0c3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsICpuO1xuMTc4NDpcdFxuMTc4NTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNtY19sZ3JfbGlzdC5sb2NrKTtcbjE3ODY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsZ3IsIG4sIFx1MDAyNnNtY19sZ3JfbGlzdC5saXN0LCBsaXN0KSB7XG4xNzg3Olx0XHRcdHN0cnVjdCBzbWNfbGluayAqbGluaztcbjE3ODg6XHRcbjE3ODk6XHRcdFx0aWYgKHN0cm5jbXAoc21jaWJkZXYtXHUwMDNlcG5ldGlkW2licG9ydCAtIDFdLCBsZ3ItXHUwMDNlcG5ldF9pZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc4NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFNNQyBDb25uZWN0aW9uIEFib3J0IFByb2Nlc3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBzY2hlZHVsaW5nIG9mIGBzbWNfY29ubl9hYm9ydF93b3JrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHdvcmsgaXRlbSDigJMgd2hlcmUgaXQmIzM5O3Mgc2V0IHVwIGFuZCB3aGVuIGl0IGdldHMgdHJpZ2dlcmVkLiBNeSBndXQgdGVsbHMgbWUgSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnJvbSB0aGUgdG9wLiBUaGUgZmFzdGVzdCB3YXkgdG8gZG8gdGhhdCBpcyBhIGdyZXAgdGhyb3VnaCB0aGUgYG5ldC9zbWMvYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGFsbCB0aGUgaW5zdGFuY2VzIHdoZXJlIGBhYm9ydF93b3JrYCBpcyBtZW50aW9uZWQsIHdoaWNoIHNob3VsZCBoZWxwIG1lIHBpZWNlIHRvZ2V0aGVyIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdGhlIHRyaWdnZXJpbmcgZXZlbnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzZWFyY2ggcmV2ZWFscy4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgY29ubmVjdGlvbnMgYXJlIGFib3J0ZWQgd2l0aGluIHRoZSBTTUMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWJvcnRfd29yayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jLmg9MTk1PXN0cnVjdCBzbWNfY29ubmVjdGlvbiB7XG4tLVxubmV0L3NtYy9zbWMuaC0yNzMtXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGNsb3NlX3dvcms7XHQvKiBwZWVyIHNlbnQgc29tZSBjbG9zaW5nICovXG5uZXQvc21jL3NtYy5oOjI3NDpcdHN0cnVjdCB3b3JrX3N0cnVjdFx0YWJvcnRfd29yaztcdC8qIGFib3J0IHRoZSBjb25uZWN0aW9uICovXG5uZXQvc21jL3NtYy5oLTI3NS1cdHN0cnVjdCB0YXNrbGV0X3N0cnVjdFx0cnhfdHNrbGV0O1x0LyogUmVjZWl2ZXIgdGFza2xldCBmb3IgU01DLUQgKi9cbi0tXG5uZXQvc21jL3NtY19jZGMuYz0zMDg9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfdmFsaWRhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfY2RjX21zZyAqY2RjLFxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTMyMy1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y29ubi1cdTAwM2VzZW5kX2xvY2spO1xubmV0L3NtYy9zbWNfY2RjLmM6MzI0Olx0XHRzb2NrX2hvbGQoXHUwMDI2c21jLVx1MDAzZXNrKTsgLyogc29ja19wdXQgaW4gYWJvcnRfd29yayAqL1xubmV0L3NtYy9zbWNfY2RjLmM6MzI1Olx0XHRpZiAoIXF1ZXVlX3dvcmsoc21jX2Nsb3NlX3dxLCBcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspKVxubmV0L3NtYy9zbWNfY2RjLmMtMzI2LVx0XHRcdHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTEyMjQ9c3RhdGljIHZvaWQgc21jX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTEyNTMtXG5uZXQvc21jL3NtY19jb3JlLmM6MTI1NDovKiBDYW5jZWwgYSBwZW5kaW5nIGFib3J0IHdvcmsgaXRlbS4gIHNtY19jb25uX2Fib3J0X3dvcmsoKSB0YWtlcyB0aGUgc29ja2V0XG5uZXQvc21jL3NtY19jb3JlLmMtMTI1NS0gKiBsb2NrLCBzbyB0aGUgbG9jayBoYXMgdG8gYmUgZHJvcHBlZCBoZXJlLiAgT3RoZXJ3aXNlIGNhbmNlbF93b3JrX3N5bmMoKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjU4LSAqL1xubmV0L3NtYy9zbWNfY29yZS5jOjEyNTk6c3RhdGljIHZvaWQgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxubmV0L3NtYy9zbWNfY29yZS5jLTEyNjAte1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjYzLVxubmV0L3NtYy9zbWNfY29yZS5jOjEyNjQ6XHRpZiAoY3VycmVudF93b3JrKCkgPT0gXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKVxubmV0L3NtYy9zbWNfY29yZS5jLTEyNjUtXHRcdHJldHVybjtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTI2Ny1cdHJlbGVhc2Vfc29jayhzayk7XG5uZXQvc21jL3NtY19jb3JlLmM6MTI2ODpcdGlmIChjYW5jZWxfd29ya19zeW5jKFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yaykpXG5uZXQvc21jL3NtY19jb3JlLmM6MTI2OTpcdFx0c29ja19wdXQoc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi9cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjcwLVx0bG9ja19zb2NrKHNrKTtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTI3ND12b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjk3LVx0XHRzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuYzoxMjk4Olx0XHRzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjk5LVx0fVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xNzU1PXZvaWQgc21jcl9sZ3Jfc2V0X3R5cGVfYXN5bShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTc2MS1cbm5ldC9zbWMvc21jX2NvcmUuYzoxNzYyOi8qIGFib3J0IGNvbm5lY3Rpb24sIGFib3J0X3dvcmsgc2NoZWR1bGVkIGZyb20gdGFza2xldCBjb250ZXh0ICovXG5uZXQvc21jL3NtY19jb3JlLmM6MTc2MzpzdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzY0LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTc2Ni1cdFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24sXG5uZXQvc21jL3NtY19jb3JlLmM6MTc2NzpcdFx0XHRcdFx0XHQgICBhYm9ydF93b3JrKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzY4LVx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTc3Ny1cdHJlbGVhc2Vfc29jayhcdTAwMjZzbWMtXHUwMDNlc2spO1xubmV0L3NtYy9zbWNfY29yZS5jOjE3Nzg6XHRzb2NrX3B1dChcdTAwMjZzbWMtXHUwMDNlc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi9cbm5ldC9zbWMvc21jX2NvcmUuYy0xNzc5LX1cbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MjAwMD1pbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0yMDgyLVx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZjb25uLVx1MDAzZWNkY19wZW5kX3R4X3dxKTtcbm5ldC9zbWMvc21jX2NvcmUuYzoyMDgzOlx0SU5JVF9XT1JLKFx1MDAyNnNtYy1cdTAwM2Vjb25uLmFib3J0X3dvcmssIHNtY19jb25uX2Fib3J0X3dvcmspO1xubmV0L3NtYy9zbWNfY29yZS5jLTIwODQtXHRpZiAoaW5pLVx1MDAzZWlzX3NtY2QpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU01DIGFuZCBpdHMgRnV6emFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIFNNQyB0aGluZy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgKmlzKi4gUmlnaHQsIFNNQyDigJMgdGhhdCYjMzk7cyBBRl9TTUMsIHNvY2tldCBmYW1pbHkgNDMsIGBuZXQvc21jL2AgaW4gTGludXguIEFuZCBJIHJlY2FsbCBzZWVpbmcgaXQgbWVudGlvbmVkIGluIHRoZSBzeXprYWxsZXIgY29udGV4dCwgc28gdGhhdCYjMzk7cyBwcm9taXNpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3ZSBjYW4gcmVhbGlzdGljYWxseSBmdXp6PwoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbnMuIExldCBtZSBjaGVjayB0aGUgYG5ldC9zbWMvS2NvbmZpZ2AgZmlsZS4gQWgsIGBjb25maWcgU01DYC4uLiBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcmUgYGRlcGVuZHMgb24gSU5FVCAmYW1wOyZhbXA7IElORklOSUJBTkRgLiBPa2F5LCB0aGF0JiMzOTtzIGltcG9ydGFudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCwgb3IgYXQgbGVhc3QgdW5kZXJzdGFuZCB3aGF0IGVuYWJsaW5nIHRoZW0gaW1wbGllcy4gSGFuZyBvbiwgbGV0IG1lIHF1aWNrbHkgcmUtcmVhZCB0aGF0IGxpbmUsIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVzLCBJJiMzOTtsbCByZXZpZXcgbGluZXMgMS0xNSBvZiB0aGF0IEtjb25maWcgZmlsZSBqdXN0IHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gSXQmIzM5O3MgYmVzdCB0byBoYXZlIGEgc29saWQgZm91bmRhdGlvbiBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgU01DXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFNNQy1SIHByb3ZpZGVzIGEgXCYjMzQ7c29ja2V0cyBvdmVyIFJETUFcJiMzNDsgc29sdXRpb24gbWFraW5nIHVzZSBvZlxuICAgNzpcdFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcbiAgIDg6XHRcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cbiAgIDk6XHRcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xuICAxMDpcdFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFNNQ19ESUFHXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTY5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIERlcGVuZGVuY2llcyoqCgpIYW5nIG9uIGEgc2Vjb25k4oCmIHRoaXMgY29kZSBoYXMgYSBkZXBlbmRlbmN5IHRoYXQmIzM5O3MgdGllZCB0byBgSU5FVCAmYW1wOyZhbXA7IElORklOSUJBTkQgJmFtcDsmYW1wOyBESUJTYD8gSSBuZWVkIHRvIGNsYXJpZnkgd2hhdCBESUJTIGlzLCBvciBldmVuIGNvbmZpcm0gaWYgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIG1lYW50IGhlcmUuIFRoYXQgY29tYmluYXRpb24gb2YgbmV0d29yayB0ZWNobm9sb2dpZXMgaXMgdW51c3VhbC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGluIHRoZSBgbmV0L3NtYy9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBoaW50IG9yIGRlZmluaXRpb24gdGhlcmUuIEkgc3VzcGVjdCB0aGlzIHdpbGwgb2ZmZXIgY3J1Y2lhbCBjb250ZXh0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXG4gICAzOlx0b2JqLSQoQ09ORklHX1NNQylcdCYjNDM7PSBzbWMub1xuICAgNDpcdG9iai0kKENPTkZJR19TTUNfRElBRylcdCYjNDM7PSBzbWNfZGlhZy5vXG4gICA1Olx0c21jLXkgOj0gYWZfc21jLm8gc21jX3BuZXQubyBzbWNfaWIubyBzbWNfY2xjLm8gc21jX2NvcmUubyBzbWNfd3IubyBzbWNfbGxjLm9cbiAgIDY6XHRzbWMteSAmIzQzOz0gc21jX2NkYy5vIHNtY190eC5vIHNtY19yeC5vIHNtY19jbG9zZS5vIHNtY19pc20ubyBzbWNfbmV0bGluay5vIHNtY19zdGF0cy5vXG4gICA3Olx0c21jLXkgJiM0Mzs9IHNtY190cmFjZXBvaW50Lm8gc21jX2luZXQub1xuICAgODpcdHNtYy0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzbWNfc3lzY3RsLm9cbiAgIDk6XHRzbWMtJChDT05GSUdfU01DX0hTX0NUUkxfQlBGKSAmIzQzOz0gc21jX2hzX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MzUKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBESUJTIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoaXMgYERJQlNgIHRoaW5nLiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBgbmV0L3NtYy9LY29uZmlnYCBmaWxlIOKAkyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZC4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIGNvbnRleHQsIHRoYXQgYERJQlNgIGlzIHByb2JhYmx5IGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQmIzM5O3MgY29uZmlybS4KCk9rYXksIGxldCYjMzk7cyBydW4gYSBxdWljayBgZ3JlcGAgYWNyb3NzIHRoZSBlbnRpcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3BhY2UuIEl0JiMzOTtzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgYW4gb3ZlcnZpZXcgb2Ygd2hlcmUgYERJQlNgIGlzIHVzZWQgYW5kIGhvdyBpdCYjMzk7cyBkZWZpbmVkLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBjb250ZXh0IG5lZWRlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcyBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIGl0JiMzOTtzIG9mIGludGVyZXN0IHJpZ2h0IG5vdy4gS25vd2luZyB3aGVyZSBpdCBzaG93cyB1cCB3aWxsIHBvaW50IHVzIHRvIHRoZSBmdW5jdGlvbmFsaXR5IGl0IGVuYWJsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RJQlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7TUFJTlRBSU5FUlM9NzYxNj1GOlx0ZHJpdmVycy9ncGlvL2dwaW8tZ3Bpby1tbS5jXG5NQUlOVEFJTkVSUy03NjE3LVxuTUFJTlRBSU5FUlM6NzYxODpESUJTIChESVJFQ1QgSU5URVJOQUwgQlVGRkVSIFNIQVJJTkcpXG5NQUlOVEFJTkVSUy03NjE5LU06XHRBbGV4YW5kcmEgV2ludGVyIFx1MDAzY3dpbnRlcmFAbGludXguaWJtLmNvbVx1MDAzZVxuLS1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz0xMzM9Q09ORklHX1NNQ19ESUFHPW1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxMzQ6Q09ORklHX0RJQlM9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjEzNTpDT05GSUdfRElCU19MTz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctMTM2LUNPTkZJR19YRFBfU09DS0VUUz15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTEyND1DT05GSUdfU01DX0RJQUc9bVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjEyNTpDT05GSUdfRElCUz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MTI2OkNPTkZJR19ESUJTX0xPPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy0xMjctQ09ORklHX1hEUF9TT0NLRVRTPXlcbi0tXG5kcml2ZXJzL01ha2VmaWxlPTE5Nz1vYmoteVx0XHRcdFx0JiM0Mzs9IHJlc2N0cmwvXG5kcml2ZXJzL01ha2VmaWxlLTE5OC1cbmRyaXZlcnMvTWFrZWZpbGU6MTk5Om9iai0kKENPTkZJR19ESUJTKVx0XHQmIzQzOz0gZGlicy9cbmRyaXZlcnMvTWFrZWZpbGUtMjAwLW9iai0kKENPTkZJR19TMzkwKVx0XHQmIzQzOz0gczM5MC9cbi0tXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvZGlicy9LY29uZmlnLTUtXHRoZWxwXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzo2Olx0ICBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgKERJQlMpIGlzIGEgY29tbXVuaWNhdGlvbiBtZXRob2QgdGhhdFxuZHJpdmVycy9kaWJzL0tjb25maWctNy1cdCAgdXNlcyBjb21tb24gcGh5c2ljYWwgKGludGVybmFsKSBtZW1vcnkgZm9yIHN5bmNocm9ub3VzIGRpcmVjdCBhY2Nlc3Ncbi0tXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xMy1cbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cdGJvb2wgXCYjMzQ7SW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXCYjMzQ7XG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNjpcdGRlcGVuZHMgb24gRElCU1xuZHJpdmVycy9kaWJzL0tjb25maWctMTctXHRkZWZhdWx0IG5cbmRyaXZlcnMvZGlicy9LY29uZmlnLTE4LVx0aGVscFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTk6XHQgIERJQlNfTE8gZW5hYmxlcyB0aGUgY3JlYXRpb24gb2YgYW4gc29mdHdhcmUtZW11bGF0ZWQgZGlicyBkZXZpY2VcbmRyaXZlcnMvZGlicy9LY29uZmlnLTIwLVx0ICBuYW1lZCBsbyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgdHJhbnNmZXJyaW5nIGRhdGEgd2hlbiBjb21tdW5pY2F0aW9uXG4tLVxuZHJpdmVycy9kaWJzL01ha2VmaWxlLTItI1xuZHJpdmVycy9kaWJzL01ha2VmaWxlOjM6IyBESUJTIGNsYXNzIG1vZHVsZVxuZHJpdmVycy9kaWJzL01ha2VmaWxlLTQtI1xuLS1cbmRyaXZlcnMvZGlicy9NYWtlZmlsZT02PWRpYnMteSAmIzQzOz0gZGlic19tYWluLm9cbmRyaXZlcnMvZGlicy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ESUJTKSAmIzQzOz0gZGlicy5vXG5kcml2ZXJzL2RpYnMvTWFrZWZpbGU6ODpkaWJzLSQoQ09ORklHX0RJQlNfTE8pICYjNDM7PSBkaWJzX2xvb3BiYWNrLm9cbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIxLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyMjojZGVmaW5lIERJQlNfTE9fU1VQUE9SVF9OT0NPUFlcdDB4MVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyMzojZGVmaW5lIERJQlNfRE1BX0FERFJfSU5WQUxJRFx0KH4oZG1hX2FkZHJfdCkwKVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNC1cbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTI5PXN0YXRpYyB1MTYgZGlic19sb19nZXRfZmFicmljX2lkKHN0cnVjdCBkaWJzX2RldiAqZGlicylcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzAte1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMTpcdHJldHVybiBESUJTX0xPT1BCQUNLX0ZBQlJJQztcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzItfVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9NDM9c3RhdGljIGludCBkaWJzX2xvX21heF9kbWJzKHZvaWQpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTQ0LXtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6NDU6XHRyZXR1cm4gRElCU19MT19NQVhfRE1CUztcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNDYtfVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9NDg9c3RhdGljIGludCBkaWJzX2xvX3JlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iLFxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNTktXHQvKiBjaGVjayBzcGFjZSBmb3IgbmV3IGRtYiAqL1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo2MDpcdGZvcl9lYWNoX2NsZWFyX2JpdChzYmFfaWR4LCBsZGV2LVx1MDAzZXNiYV9pZHhfbWFzaywgRElCU19MT19NQVhfRE1CUykge1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy02MS1cdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHNiYV9pZHgsIGxkZXYtXHUwMDNlc2JhX2lkeF9tYXNrKSlcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTYzLVx0fVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo2NDpcdGlmIChzYmFfaWR4ID09IERJQlNfTE9fTUFYX0RNQlMpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTY1LVx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTg0LVx0ZG1iX25vZGUtXHUwMDNlY3B1X2FkZHIgPSBmb2xpb19hZGRyZXNzKGZvbGlvKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6ODU6XHRkbWJfbm9kZS1cdTAwM2VkbWFfYWRkciA9IERJQlNfRE1BX0FERFJfSU5WQUxJRDtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtODYtXHRyZWZjb3VudF9zZXQoXHUwMDI2ZG1iX25vZGUtXHUwMDNlcmVmY250LCAxKTtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTEzMj1zdGF0aWMgaW50IGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCBzdHJ1Y3QgZGlic19kbWIgKmRtYilcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTE1OS1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjE2MDpcdFx0ZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyW2RtYl9ub2RlLVx1MDAzZXNiYV9pZHhdID0gTk9fRElCU19DTElFTlQ7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTE2MS1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkaWJzLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTE2OD1zdGF0aWMgaW50IGRpYnNfbG9fc3VwcG9ydF9kbWJfbm9jb3B5KHN0cnVjdCBkaWJzX2RldiAqZGlicylcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTY5LXtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTcwOlx0cmV0dXJuIERJQlNfTE9fU1VQUE9SVF9OT0NPUFk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTE3MS19XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0yMzU9c3RhdGljIGludCBkaWJzX2xvX21vdmVfZGF0YShzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHU2NCBkbWJfdG9rLFxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjcyLVx0c19tYXNrID0gcm9yMTYoMHgxMDAwLCBpZHgpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyNzM6XHRpZiAobGlrZWx5KGNsaWVudF9pZCAhPSBOT19ESUJTX0NMSUVOVCBcdTAwMjZcdTAwMjYgZGlicy1cdTAwM2VzdWJzW2NsaWVudF9pZF0pKVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNzQtXHRcdGRpYnMtXHUwMDNlc3Vic1tjbGllbnRfaWRdLVx1MDAzZW9wcy1cdTAwM2VoYW5kbGVfaXJxKGRpYnMsIHNiYV9pZHgsIHNfbWFzayk7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC0xMS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6MTI6I2lmbmRlZiBfRElCU19MT09QQkFDS19IXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oOjEzOiNkZWZpbmUgX0RJQlNfTE9PUEJBQ0tfSFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC0xNC1cbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTIwLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDoyMTojaWYgSVNfRU5BQkxFRChDT05GSUdfRElCU19MTylcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6MjI6I2RlZmluZSBESUJTX0xPX0RNQlNfSEFTSF9CSVRTXHQxMlxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDoyMzojZGVmaW5lIERJQlNfTE9fTUFYX0RNQlNcdDUwMDBcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtMjQtXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaD0zNT1zdHJ1Y3QgZGlic19sb19kZXYge1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtMzgtXHRyd2xvY2tfdCBkbWJfaHRfbG9jaztcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6Mzk6XHRERUNMQVJFX0JJVE1BUChzYmFfaWR4X21hc2ssIERJQlNfTE9fTUFYX0RNQlMpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDo0MDpcdERFQ0xBUkVfSEFTSFRBQkxFKGRtYl9odCwgRElCU19MT19ETUJTX0hBU0hfQklUUyk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQxLVx0d2FpdF9xdWV1ZV9oZWFkX3QgbGRldl9yZWxlYXNlO1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg9NTI9c3RhdGljIGlubGluZSB2b2lkIGRpYnNfbG9vcGJhY2tfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNTYtXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oOjU3OiNlbmRpZiAvKiBfRElCU19MT09QQkFDS19IICovXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTItLypcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzozOiAqICBESUJTIC0gRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtNC0gKlxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjU6ICogIEltcGxlbWVudGF0aW9uIG9mIHRoZSBESUJTIGNsYXNzIG1vZHVsZVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTYtICpcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBkaWJzX2NsYXNzID0ge1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yNi0vKiB1c2UgYW4gYXJyYXkgcmF0aGVyIGEgbGlzdCBmb3IgZmFzdCBtYXBwaW5nOiAqL1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjI3OnN0YXRpYyBzdHJ1Y3QgZGlic19jbGllbnQgKmNsaWVudHNbTUFYX0RJQlNfQ0xJRU5UU107XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjgtc3RhdGljIHU4IG1heF9jbGllbnQ7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jPTUwPWludCBkaWJzX3JlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgZGlic19jbGllbnQgKmNsaWVudClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtNTYtXHRtdXRleF9sb2NrKFx1MDAyNmNsaWVudHNfbG9jayk7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6NTc6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfRElCU19DTElFTlRTOyAmIzQzOyYjNDM7aSkge1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTU4LVx0XHRpZiAoIWNsaWVudHNbaV0pIHtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtNjgtXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6Njk6XHRpZiAoaSBcdTAwM2MgTUFYX0RJQlNfQ0xJRU5UUykge1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTcwLVx0XHQvKiBpbml0aWFsaXplIHdpdGggYWxsIGRldmljZXMgdGhhdCB3ZSBnb3Qgc28gZmFyICovXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jPTE4NT1pbnQgZGlic19kZXZfYWRkKHN0cnVjdCBkaWJzX2RldiAqZGlicylcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTkzLVx0XHRyZXR1cm4gLUVOT01FTTtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxOTQ6XHRtZW1zZXQoZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyLCBOT19ESUJTX0NMSUVOVCwgbWF4X2RtYnMpO1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE5NS1cbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjIyPXZvaWQgZGlic19kZXZfZGVsKHN0cnVjdCBkaWJzX2RldiAqZGlicylcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjI5LVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MjMwOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0RJQlNfQ0xJRU5UUzsgJiM0MzsmIzQzO2kpXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjMxLVx0XHRkaWJzLVx1MDAzZXN1YnNbaV0gPSBOVUxMO1xuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI3MDAwcC5jPTI1MzI9c3RhdGljIHZvaWQgZGliNzA5MF9zZXREaWJUeE11eChzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgKnN0YXRlLCBpbnQgbW9kZSlcbi0tXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYy0yNTM3LVx0Y2FzZSBNUEVHX09OX0RJQlRYOlxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmM6MjUzODpcdFx0XHRkcHJpbnRrKFwmIzM0O1NFVCBNUEVHIE9OIERJQlNUUkVBTSBUWFxcblwmIzM0Oyk7XG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYy0yNTM5LVx0XHRcdGRpYjcwOTBfY2ZnX0RpYlR4KHN0YXRlLCA4LCA1LCAwLCAwLCAwLCAwKTtcbi0tXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYy0yNTQyLVx0Y2FzZSBESVZfT05fRElCVFg6XG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYzoyNTQzOlx0XHRcdGRwcmludGsoXCYjMzQ7U0VUIERJVl9PVVQgT04gRElCU1RSRUFNIFRYXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI3MDAwcC5jLTI1NDQtXHRcdFx0ZGliNzA5MF9jZmdfRGliVHgoc3RhdGUsIDUsIDUsIDAsIDAsIDAsIDApO1xuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI3MDAwcC5jLTI1NDctXHRjYXNlIEFEQ19PTl9ESUJUWDpcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI3MDAwcC5jOjI1NDg6XHRcdFx0ZHByaW50ayhcJiMzNDtTRVQgQURDX09VVCBPTiBESUJTVFJFQU0gVFhcXG5cJiMzNDspO1xuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmMtMjU0OS1cdFx0XHRkaWI3MDkwX2NmZ19EaWJUeChzdGF0ZSwgMjAsIDUsIDEwLCAwLCAwLCAwKTtcbi0tXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYz0yNTU4PXN0YXRpYyB2b2lkIGRpYjcwOTBfc2V0SG9zdEJ1c011eChzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgKnN0YXRlLCBpbnQgbW9kZSlcbi0tXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYy0yNTY4LVx0Y2FzZSBESUJUWF9PTl9IT1NUQlVTOlxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmM6MjU2OTpcdFx0XHRkcHJpbnRrKFwmIzM0O1NFVCBESUJTVFJFQU0gVFggT04gSE9TVCBCVVNcXG5cJiMzNDspO1xuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmMtMjU3MC1cdFx0XHRkaWI3MDkwX2VuTXBlZ011eChzdGF0ZSwgMCk7XG4tLVxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYz0xNDc4PXN0YXRpYyB2b2lkIGRpYjgwOTZwX3NldERpYlR4TXV4KHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSwgaW50IG1vZGUpXG4tLVxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYy0xNDgzLVx0Y2FzZSBNUEVHX09OX0RJQlRYOlxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYzoxNDg0Olx0XHRcdGRwcmludGsoXCYjMzQ7U0VUIE1QRUcgT04gRElCU1RSRUFNIFRYXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ4NS1cdFx0XHRkaWI4MDk2cF9jZmdfRGliVHgoc3RhdGUsIDgsIDUsIDAsIDAsIDAsIDApO1xuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ4Ny1cdGNhc2UgRElWX09OX0RJQlRYOlxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYzoxNDg4Olx0XHRcdGRwcmludGsoXCYjMzQ7U0VUIERJVl9PVVQgT04gRElCU1RSRUFNIFRYXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ4OS1cdFx0XHRkaWI4MDk2cF9jZmdfRGliVHgoc3RhdGUsIDUsIDUsIDAsIDAsIDAsIDApO1xuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ5MS1cdGNhc2UgQURDX09OX0RJQlRYOlxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYzoxNDkyOlx0XHRcdGRwcmludGsoXCYjMzQ7U0VUIEFEQ19PVVQgT04gRElCU1RSRUFNIFRYXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ5My1cdFx0XHRkaWI4MDk2cF9jZmdfRGliVHgoc3RhdGUsIDIwLCA1LCAxMCwgMCwgMCwgMCk7XG4tLVxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYz0xNTAxPXN0YXRpYyB2b2lkIGRpYjgwOTZwX3NldEhvc3RCdXNNdXgoc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlLCBpbnQgbW9kZSlcbi0tXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliODAwMC5jLTE1MTEtXHRjYXNlIERJQlRYX09OX0hPU1RCVVM6XG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliODAwMC5jOjE1MTI6XHRcdFx0ZHByaW50ayhcJiMzNDtTRVQgRElCU1RSRUFNIFRYIE9OIEhPU1QgQlVTXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTUxMy1cdFx0XHRkaWI4MDk2cF9lbk1wZWdNdXgoc3RhdGUsIDApO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZz04Mj1jb25maWcgSVNNXG5kcml2ZXJzL3MzOTAvbmV0L0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBJU00gdlBDSSBBZGFwdGVyXCYjMzQ7XG5kcml2ZXJzL3MzOTAvbmV0L0tjb25maWc6ODQ6XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgRElCU1xuZHJpdmVycy9zMzkwL25ldC9LY29uZmlnLTg1LVx0ZGVmYXVsdCBuXG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM9MzIxPXN0YXRpYyBpbnQgaXNtX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzM0LVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzozMzU6XHRkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnJbZG1iLVx1MDAzZWlkeCAtIElTTV9ETUJfQklUX09GRlNFVF0gPSBOT19ESUJTX0NMSUVOVDtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTMzNi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM9NDM1PXN0YXRpYyBpbnQgaXNtX21hdGNoX2V2ZW50X3R5cGUodTMyIHMzOTBfZXZlbnRfdHlwZSlcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00MzgtXHRjYXNlIElTTV9FVkVOVF9CVUY6XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo0Mzk6XHRcdHJldHVybiBESUJTX0JVRl9FVkVOVDtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ0MC1cdGNhc2UgSVNNX0VWRU5UX0RFVjpcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ0MTpcdFx0cmV0dXJuIERJQlNfREVWX0VWRU5UO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDQyLVx0Y2FzZSBJU01fRVZFTlRfU1dSOlxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NDQzOlx0XHRyZXR1cm4gRElCU19TV19FVkVOVDtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ0NC1cdGRlZmF1bHQ6XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo0NDU6XHRcdHJldHVybiBESUJTX09USEVSX1RZUEU7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00NDYtXHR9XG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM9NDQ5PXN0YXRpYyBpbnQgaXNtX21hdGNoX2V2ZW50X3N1YnR5cGUodTMyIHMzOTBfZXZlbnRfc3VidHlwZSlcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00NTItXHRjYXNlIElTTV9CVUZfRE1CX1VOUkVHSVNURVJFRDpcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ1MzpcdFx0cmV0dXJuIERJQlNfQlVGX1VOUkVHSVNURVJFRDtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ1NC1cdGNhc2UgSVNNX0RFVl9HSURfRElTQUJMRUQ6XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo0NTU6XHRcdHJldHVybiBESUJTX0RFVl9ESVNBQkxFRDtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ1Ni1cdGNhc2UgSVNNX0RFVl9HSURfRVJSX1NUQVRFOlxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NDU3Olx0XHRyZXR1cm4gRElCU19ERVZfRVJSX1NUQVRFO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDU4LVx0ZGVmYXVsdDpcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ1OTpcdFx0cmV0dXJuIERJQlNfT1RIRVJfU1VCVFlQRTtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ2MC1cdH1cbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz00NjM9c3RhdGljIHZvaWQgaXNtX2hhbmRsZV9ldmVudChzdHJ1Y3QgaXNtX2RldiAqaXNtKVxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ3OC1cdFx0ZXZlbnQudHlwZSA9IGlzbV9tYXRjaF9ldmVudF90eXBlKGVudHJ5LVx1MDAzZXR5cGUpO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NDc5Olx0XHRpZiAoZXZlbnQudHlwZSA9PSBESUJTX1NXX0VWRU5UKVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDgwLVx0XHRcdGV2ZW50LnN1YnR5cGUgPSBlbnRyeS1cdTAwM2Vjb2RlO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ4NS1cdFx0c3dpdGNoIChldmVudC50eXBlKSB7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo0ODY6XHRcdGNhc2UgRElCU19CVUZfRVZFTlQ6XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00ODctXHRcdFx0ZXZlbnQuYnVmZmVyX3RvayA9IGVudHJ5LVx1MDAzZXRvaztcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ4OC1cdFx0XHRicmVhaztcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ4OTpcdFx0Y2FzZSBESUJTX0RFVl9FVkVOVDpcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ5MDpcdFx0Y2FzZSBESUJTX1NXX0VWRU5UOlxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDkxLVx0XHRcdG1lbWNweShcdTAwMjZldmVudC5naWQsIFx1MDAyNmVudHJ5LVx1MDAzZXRvaywgc2l6ZW9mKHU2NCkpO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDkyLVx0XHR9XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo0OTM6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9ESUJTX0NMSUVOVFM7ICYjNDM7JiM0MztpKSB7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00OTQtXHRcdFx0Y2x0ID0gZGlicy1cdTAwM2VzdWJzW2ldO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTUwMT1zdGF0aWMgaXJxcmV0dXJuX3QgaXNtX2hhbmRsZV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy01MjctXHRcdGNsaWVudF9pZCA9IGRpYnMtXHUwMDNlZG1iX2NsaWVudGlkX2FycltiaXRdO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NTI4Olx0XHRpZiAodW5saWtlbHkoY2xpZW50X2lkID09IE5PX0RJQlNfQ0xJRU5UIHx8XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy01MjktXHRcdFx0ICAgICAhZGlicy1cdTAwM2VzdWJzW2NsaWVudF9pZF0pKVxuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oLTQtICpcbmluY2x1ZGUvbGludXgvZGlicy5oOjU6ICogIERlZmluaXRpb25zIGZvciB0aGUgRElCUyBtb2R1bGVcbmluY2x1ZGUvbGludXgvZGlicy5oLTYtICpcbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC04LSAqL1xuaW5jbHVkZS9saW51eC9kaWJzLmg6OTojaWZuZGVmIF9ESUJTX0hcbmluY2x1ZGUvbGludXgvZGlicy5oOjEwOiNkZWZpbmUgX0RJQlNfSFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTEtXG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTQtXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoxNTovKiBESUJTIC0gRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIC0gY29uY2VwdFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTYtICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD00Nj1zdHJ1Y3QgZGlic19kbWIge1xuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oLTY5LVxuaW5jbHVkZS9saW51eC9kaWJzLmg6NzA6LyogRElCUyBldmVudHNcbmluY2x1ZGUvbGludXgvZGlicy5oLTcxLSAqIC0tLS0tLS0tLS0tXG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmg9NzU9ZW51bSBkaWJzX2V2ZW50X3R5cGUge1xuaW5jbHVkZS9saW51eC9kaWJzLmgtNzYtXHQvKiBCdWZmZXIgZXZlbnQsIGUuZy4gYSByZW1vdGUgZG1iIHdhcyB1bnJlZ2lzdGVyZWQgKi9cbmluY2x1ZGUvbGludXgvZGlicy5oOjc3Olx0RElCU19CVUZfRVZFTlQsXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC03OC1cdC8qIERldmljZSBldmVudCwgZS5nLiBhIHJlbW90ZSBkaWJzIGRldmljZSB3YXMgZGlzYWJsZWQgKi9cbmluY2x1ZGUvbGludXgvZGlicy5oOjc5Olx0RElCU19ERVZfRVZFTlQsXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC04MC1cdC8qIFNvZnR3YXJlIGV2ZW50LCBhIGRpYnMgY2xpZW50IGNhbiBzZW5kIGFuIGV2ZW50IHNpZ25hbCB0byBhXG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmgtODItXHQgKi9cbmluY2x1ZGUvbGludXgvZGlicy5oOjgzOlx0RElCU19TV19FVkVOVCxcbmluY2x1ZGUvbGludXgvZGlicy5oOjg0Olx0RElCU19PVEhFUl9UWVBFIH07XG5pbmNsdWRlL2xpbnV4L2RpYnMuaC04NS1cbmluY2x1ZGUvbGludXgvZGlicy5oPTg2PWVudW0gZGlic19ldmVudF9zdWJ0eXBlIHtcbmluY2x1ZGUvbGludXgvZGlicy5oOjg3Olx0RElCU19CVUZfVU5SRUdJU1RFUkVELFxuaW5jbHVkZS9saW51eC9kaWJzLmg6ODg6XHRESUJTX0RFVl9ESVNBQkxFRCxcbmluY2x1ZGUvbGludXgvZGlicy5oOjg5Olx0RElCU19ERVZfRVJSX1NUQVRFLFxuaW5jbHVkZS9saW51eC9kaWJzLmg6OTA6XHRESUJTX09USEVSX1NVQlRZUEVcbmluY2x1ZGUvbGludXgvZGlicy5oLTkxLX07XG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmg9MTA1PXN0cnVjdCBkaWJzX2RldjtcbmluY2x1ZGUvbGludXgvZGlicy5oLTEwNi1cbmluY2x1ZGUvbGludXgvZGlicy5oOjEwNzovKiBESUJTIGNsaWVudFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTA4LSAqIC0tLS0tLS0tLS0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0xMDktICovXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoxMTA6I2RlZmluZSBNQVhfRElCU19DTElFTlRTXHQ4XG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoxMTE6I2RlZmluZSBOT19ESUJTX0NMSUVOVFx0XHQweGZmXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0xMTItLyogQWxsIGRpYnMgY2xpZW50cyBoYXZlIGFjY2VzcyB0byBhbGwgZGlicyBkZXZpY2VzLlxuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oPTE5MT1pbnQgZGlic191bnJlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgZGlic19jbGllbnQgKmNsaWVudCk7XG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTk0LVxuaW5jbHVkZS9saW51eC9kaWJzLmg6MTk1Oi8qIERJQlMgZGV2aWNlc1xuaW5jbHVkZS9saW51eC9kaWJzLmgtMTk2LSAqIC0tLS0tLS0tLS0tLVxuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oLTIwMy0gKi9cbmluY2x1ZGUvbGludXgvZGlicy5oOjIwNDojZGVmaW5lIERJQlNfTE9PUEJBQ0tfRkFCUklDXHQweEZGRkZcbmluY2x1ZGUvbGludXgvZGlicy5oLTIwNS1cbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD0yMDk9c3RydWN0IGRpYnNfZGV2X29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmgtMjIwLVx0ICpcdFx0ICAgKGUuZy4gZGlmZmVyZW50IEhXIHN5c3RlbXMpXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoyMjE6XHQgKiBFWENFUFRJT046IERJQlNfTE9PUEJBQ0tfRkFCUklDIGRlbm90ZXMgYW4gaXNtX2xvb3BiYWNrIGRldmljZVxuaW5jbHVkZS9saW51eC9kaWJzLmgtMjIyLVx0ICpcdCAgICAgIHRoYXQgY2FuIG9ubHkgY29tbXVuaWNhdGUgd2l0aCBpdHNlbGYuIFVzZSBkaWJzX2Rldi5naWRcbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD00MDE9c3RydWN0IGRpYnNfZGV2IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00MTAtXHQvKiBwcml2IHBvaW50ZXIgcGVyIGNsaWVudDsgZm9yIGNsaWVudCB1c2FnZSBvbmx5ICovXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo0MTE6XHR2b2lkICpwcml2W01BWF9ESUJTX0NMSUVOVFNdO1xuaW5jbHVkZS9saW51eC9kaWJzLmgtNDEyLVxuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oLTQxOS1cdC8qIFNwYXJzZSBhcnJheSBvZiBhbGwgSVNNIGNsaWVudHMgKi9cbmluY2x1ZGUvbGludXgvZGlicy5oOjQyMDpcdHN0cnVjdCBkaWJzX2NsaWVudCAqc3Vic1tNQVhfRElCU19DTElFTlRTXTtcbmluY2x1ZGUvbGludXgvZGlicy5oLTQyMS19O1xuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oPTQ2Mj12b2lkIGRpYnNfZGV2X2RlbChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpO1xuaW5jbHVkZS9saW51eC9kaWJzLmgtNDYzLVxuaW5jbHVkZS9saW51eC9kaWJzLmg6NDY0OiNlbmRpZlx0LyogX0RJQlNfSCAqL1xuLS1cbm5ldC9zbWMvS2NvbmZpZz0yPWNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG5uZXQvc21jL0tjb25maWctNS1cdGhlbHBcbi0tXG5uZXQvc21jL3NtY19pc20uYz00NDU9c3RhdGljIHZvaWQgc21jX2lzbV9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc21jL3NtY19pc20uYy00NTMtXHRzd2l0Y2ggKHdyay1cdTAwM2VldmVudC50eXBlKSB7XG5uZXQvc21jL3NtY19pc20uYzo0NTQ6XHRjYXNlIERJQlNfREVWX0VWRU5UOiAvKiBHSUQgZXZlbnQsIHRva2VuIGlzIHBlZXIgR0lEICovXG5uZXQvc21jL3NtY19pc20uYy00NTUtXHRcdHNtY19zbWNkX3Rlcm1pbmF0ZSh3cmstXHUwMDNlc21jZCwgXHUwMDI2c21jZF9naWQsIFZMQU5fVklEX01BU0spO1xubmV0L3NtYy9zbWNfaXNtLmMtNDU2LVx0XHRicmVhaztcbm5ldC9zbWMvc21jX2lzbS5jOjQ1NzpcdGNhc2UgRElCU19CVUZfRVZFTlQ6XG5uZXQvc21jL3NtY19pc20uYy00NTgtXHRcdGJyZWFrO1xubmV0L3NtYy9zbWNfaXNtLmM6NDU5Olx0Y2FzZSBESUJTX1NXX0VWRU5UOiAvKiBTb2Z0d2FyZSBkZWZpbmVkIGV2ZW50ICovXG5uZXQvc21jL3NtY19pc20uYy00NjAtXHRcdHNtY2RfaGFuZGxlX3N3X2V2ZW50KHdyayk7XG4tLVxubmV0L3NtYy9zbWNfaXNtLmg9OTY9c3RhdGljIGlubGluZSBib29sIHNtY19pc21faXNfbG9vcGJhY2soc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxubmV0L3NtYy9zbWNfaXNtLmgtOTcte1xubmV0L3NtYy9zbWNfaXNtLmg6OTg6XHRyZXR1cm4gKGRpYnMtXHUwMDNlb3BzLVx1MDAzZWdldF9mYWJyaWNfaWQoZGlicykgPT0gRElCU19MT09QQkFDS19GQUJSSUMpO1xubmV0L3NtYy9zbWNfaXNtLmgtOTktfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc9MTM1PUNPTkZJR19TTUNfSFNfQ1RSTF9CUEY9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzoxMzY6Q09ORklHX0RJQlM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzoxMzc6Q09ORklHX0RJQlNfTE89eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy0xMzgtQ09ORklHX1BNX1dBS0VMT0NLUz15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjUyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU01DIENvbm5lY3Rpb24gQWJvcnQgV29yayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIHBhdGNoIGNoYW5nZXMgZm9yIGBuZXQvc21jL3NtY19jb3JlLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgc291bmQsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbXBsZXhpdGllcyBvZiBsb2NraW5nIGFuZCB3b3JrIHF1ZXVlcy4KClNvLCBmaXJzdCwgdGhlcmUmIzM5O3MgdGhpcyBuZXcgZnVuY3Rpb24sIGBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBkZXNpZ25lZCB0byBwcm9wZXJseSBoYW5kbGUgdGhlIGNhbmNlbGxhdGlvbiBvZiB0aGUgYGFib3J0X3dvcmtgIHdvcmsgaXRlbSBhc3NvY2lhdGVkIHdpdGggYW4gU01DIGNvbm5lY3Rpb24uIEluc2lkZSB0aGlzIGZ1bmN0aW9uIEkgc2VlIHRoZSBjb2RlIGlzIGNoZWNraW5nIGlmIHRoZSBjdXJyZW50IHdvcmsgaXMgZXF1YWwgdG8gYGNvbm4tJmd0O2Fib3J0X3dvcmtgLCBhbmQgaWYgc28gcmV0dXJucy4gVGhlIGByZWxlYXNlX3NvY2soc2spYCBhbmQgYGxvY2tfc29jayhzaylgIGNhbGxzLCBhcmUgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGV5IGFyZSBhIHdheSB0byBkcm9wIHRoZSBsb2NrIGFuZCByZWFjcXVpcmUgaXQuIElmIGBjYW5jZWxfd29ya19zeW5jKCZhbXA7Y29ubi0mZ3Q7YWJvcnRfd29yaylgIHJldHVybnMgdHJ1ZSwgYHNvY2tfcHV0KHNrKWAgaXMgY2FsbGVkLgoKVGhlIHNlY29uZCBjaGFuZ2UgaXMgYSBkaXJlY3QgcmVwbGFjZW1lbnQgaW4gYHNtY19jb25uX2ZyZWVgLiBJbnN0ZWFkIG9mIHRoYXQgY29uZGl0aW9uYWwgYGNhbmNlbF93b3JrX3N5bmNgLCBpdCYjMzk7cyBub3cgY2FsbGluZyB0aGlzIG5ldyBgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmtgIGZ1bmN0aW9uLiBUaGlzICppbW1lZGlhdGVseSogcmFpc2VzIGEgZmxhZyDigJMgaXQmIzM5O3MgbGlrZWx5IHRoZSBrZXkgdG8gcmVzb2x2aW5nIHNvbWUgY3JpdGljYWwgc3luY2hyb25pemF0aW9uIGlzc3VlLCBzaW5jZSBgc21jX2Nvbm5fZnJlZWAgaXMgdGhlIG9idmlvdXMgc3BvdCB0byBjbGVhbiB1cCBhbmQgZnJlZSBhIGNvbm5lY3Rpb24sIHdoaWNoIGlzIGEgcGxhY2Ugd2hlcmUgeW91JiMzOTtkIGJlIHdvcnJpZWQgYWJvdXQgY29uY3VycmVudCBhY2Nlc3MuCgpGaW5hbGx5LCB3aXRoaW4gYHNtY19jb25uX2Fib3J0X3dvcmtgLCBpdCBsb2NrcyB0aGUgc29ja2V0LCBjaGVja3MgdGhlIGBjb25uLSZndDtmcmVlZGAgZmxhZywgYW5kIHRoZW4gZWl0aGVyIGtpbGxzIHRoZSBjb25uZWN0aW9uIG9yIGp1c3QgcmVsZWFzZXMgdGhlIGxvY2sgYW5kIGRlY3JlbWVudHMgdGhlIHNvY2tldCByZWZlcmVuY2UgY291bnQuIFRoZSBjb21tZW50IGFib3V0IGBzbWNfY29ubl9mcmVlYCBzZXR0aW5nIGBmcmVlZGAgd2l0aCB0aGUgbG9jayBoZWxkIGlzIGNydWNpYWwuIFRoaXMgaXMgcHJvdGVjdGluZyBhZ2FpbnN0IGEgcmFjZS4gSWYgYGFib3J0X3dvcmtgIHJ1bnMgKmFmdGVyKiBgc21jX2Nvbm5fZnJlZWAgaGFzIGJlZW4gY2FsbGVkLCB0aGUgYGZyZWVkYCBmbGFnIGVuc3VyZXMgaXQgZG9lcyBub3RoaW5nLgoKVGhlIHJlYXNvbmluZyBjbGlja3MgaW50byBwbGFjZS4gVGhlcmUgd2FzIGxpa2VseSBhIHBvdGVudGlhbCBkZWFkbG9jazogaWYgYHNtY19jb25uX2Fib3J0X3dvcmtgIHdhcyBydW5uaW5nLCBpdCB3b3VsZCBiZSBob2xkaW5nIGEgc29ja2V0IGxvY2suIFRoZW4sIGBzbWNfY29ubl9mcmVlYCBtaWdodCBiZSBjYWxsZWQgKmFsc28qIHdpdGggdGhlIHNvY2tldCBsb2NrIGhlbGQsIGFuZCB3b3VsZCBjYWxsIGBjYW5jZWxfd29ya19zeW5jKCZhbXA7Y29ubi0mZ3Q7YWJvcnRfd29yaylgLiBUaGF0IGZ1bmN0aW9uIHdvdWxkIHRyeSB0byBjYW5jZWwgdGhlIHdvcmsgcXVldWUsIHdoaWxlIGBzbWNfY29ubl9hYm9ydF93b3JrYCB3YXMgc3RpbGwgcnVubmluZywgd2FpdGluZyBmb3IgdGhhdCBzYW1lIGxvY2suIERlYWRsb2NrISBUaGUgZml4IGhlcmUgaXMgdG8gcmVsZWFzZSB0aGUgc29ja2V0IGxvY2sgYmVmb3JlIGNhbGxpbmcgYGNhbmNlbF93b3JrX3N5bmNgLCBhbmQgdGhlbiByZS1hY3F1aXJlIGl0LgoKVGhlIG90aGVyIHBvaW50IGFib3V0IHRoZSBgc29ja19wdXRgIGlzIGFsc28gY2xlYXIg4oCTIGlmIHdlIGNhbmNlbCBhIHNjaGVkdWxlZCB3b3JrIGl0ZW0gKmJlZm9yZSogaXQgZ2V0cyBhIGNoYW5jZSB0byBydW4gaXRzIGBzb2NrX3B1dGAsIHdlIGhhdmUgdG8gZG8gaXQgb3Vyc2VsdmVzLiBUaGUgYGNhbmNlbF93b3JrX3N5bmNgIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSAoMSkgaWYgaXQgY2FuY2VsbGVkIHNvbWV0aGluZy4gT3RoZXJ3aXNlLCB0aGUgc29ja2V0IHJlZmNvdW50IHdpbGwgYmUgbWlzbWF0Y2hlZC4KClNvLCB0aGlzIHBhdGNoIGlzIGFib3V0IGRlYWRsb2NrIHByZXZlbnRpb24gYW5kIGNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nIGZvciB0aGUgc29ja2V0LiBOb3csIEkgbmVlZCB0byB0aG9yb3VnaGx5IHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGBzbWNfY29ubl9mcmVlYCB0byBjb25maXJtIHRoaXMgdW5kZXJzdGFuZGluZyBhbmQgdG8gc2VlIHdoZXJlIHRoZSBgYWJvcnRfd29ya2AgaXMgcXVldWVkIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcy4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IFNNQyBzb2NrZXRzIG9wZXJhdGUsIGFuZCB3aGljaCB0aHJlYWQgY29udGV4dHMgbWlnaHQgdHJpZ2dlciB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19jb25uX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTI4OD1zdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMjEtXHRcdGlmICghc21jLVx1MDAzZXVzZV9mYWxsYmFjaylcbm5ldC9zbWMvYWZfc21jLmM6MzIyOlx0XHRcdHNtY19jb25uX2ZyZWUoXHUwMDI2c21jLVx1MDAzZWNvbm4pO1xubmV0L3NtYy9hZl9zbWMuYy0zMjMtXHR9XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0xMDA4PXN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgbG9jYWxfZmlyc3QpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xMDE2LVxubmV0L3NtYy9hZl9zbWMuYzoxMDE3Olx0c21jX2Nvbm5fZnJlZShjb25uKTtcbm5ldC9zbWMvYWZfc21jLmMtMTAxOC1cdGlmIChsb2NhbF9maXJzdCBcdTAwMjZcdTAwMjYgbGdyX3ZhbGlkKVxuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmM9MTI4PXZvaWQgc21jX2Nsb3NlX2FjdGl2ZV9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jLTE1Ni1cdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBTTUNfQ0xPU0VEO1xubmV0L3NtYy9zbWNfY2xvc2UuYzoxNTc6XHRcdHNtY19jb25uX2ZyZWUoXHUwMDI2c21jLVx1MDAzZWNvbm4pO1xubmV0L3NtYy9zbWNfY2xvc2UuYy0xNTgtXHRcdHJlbGVhc2VfY2xjc29jayA9IHRydWU7XG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNjctXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gU01DX0NMT1NFRDtcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTY4Olx0XHRzbWNfY29ubl9mcmVlKFx1MDAyNnNtYy1cdTAwM2Vjb25uKTtcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTY5LVx0XHRyZWxlYXNlX2NsY3NvY2sgPSB0cnVlO1xuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmM9MzU2PXN0YXRpYyB2b2lkIHNtY19jbG9zZV9wYXNzaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmMtNDM1LVx0XHQgICAgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fCAhc2stXHUwMDNlc2tfc29ja2V0KSkge1xubmV0L3NtYy9zbWNfY2xvc2UuYzo0MzY6XHRcdFx0c21jX2Nvbm5fZnJlZShjb25uKTtcbm5ldC9zbWMvc21jX2Nsb3NlLmMtNDM3LVx0XHRcdGlmIChzbWMtXHUwMDNlY2xjc29jaylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTA4Mz12b2lkIHNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkwLVx0YXRvbWljX2luYyhcdTAwMjZjb25uLVx1MDAzZWxuay1cdTAwM2Vjb25uX2NudCk7XG5uZXQvc21jL3NtY19jb3JlLmM6MTA5MTpcdC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xubmV0L3NtYy9zbWNfY29yZS5jLTEwOTItXHRzbWNyX2xpbmtfaG9sZChjb25uLVx1MDAzZWxuayk7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTEyNTk9c3RhdGljIHZvaWQgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjczLS8qIHJlbW92ZSBhIGZpbmlzaGVkIGNvbm5lY3Rpb24gZnJvbSBpdHMgbGluayBncm91cCAqL1xubmV0L3NtYy9zbWNfY29yZS5jOjEyNzQ6dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjc1LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTc2Mz1zdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTc3MC1cdGxvY2tfc29jayhcdTAwMjZzbWMtXHUwMDNlc2spO1xubmV0L3NtYy9zbWNfY29yZS5jOjE3NzE6XHQvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXRcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzcyLVx0ICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhc1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0yMDAwPWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTIwNzQtXHR9XG5uZXQvc21jL3NtY19jb3JlLmM6MjA3NTpcdHNtY19sZ3JfaG9sZChjb25uLVx1MDAzZWxncik7IC8qIGxncl9wdXQgaW4gc21jX2Nvbm5fZnJlZSgpICovXG5uZXQvc21jL3NtY19jb3JlLmMtMjA3Ni1cdGlmICghY29ubi1cdTAwM2VsZ3ItXHUwMDNlaXNfc21jZClcbm5ldC9zbWMvc21jX2NvcmUuYzoyMDc3Olx0XHRzbWNyX2xpbmtfaG9sZChjb25uLVx1MDAzZWxuayk7IC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xubmV0L3NtYy9zbWNfY29yZS5jLTIwNzgtXHRjb25uLVx1MDAzZWZyZWVkID0gMDtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmg9NTk2PWludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbm5ldC9zbWMvc21jX2NvcmUuaC01OTctXG5uZXQvc21jL3NtY19jb3JlLmg6NTk4OnZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xubmV0L3NtYy9zbWNfY29yZS5oLTU5OS1pbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFNNQyBTb2NrZXQgTmV0d29ya2luZyBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21lIGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgbG9naWMgaGVyZSwgc3BlY2lmaWNhbGx5IGZvciBTTUMgc29ja2V0cyAoQUZfU01DKS4gVGhpcyBzZWVtcyB0byBiZSB0aGUgcGFydCB0aGF0IGhhbmRsZXMgc29ja2V0IGxvY2tpbmcsIGNvbm5lY3Rpb24gYWJvcnRzLCB3b3JrcXVldWVzLCByZWZjb3VudGluZyB1c2luZyBgc29ja19ob2xkYCBhbmQgYHNvY2tfcHV0YCwgYW5kIGEgbG90IG9mIHJhY2UgY29uZGl0aW9uIG1pdGlnYXRpb24gZHVyaW5nIHRlYXJkb3duLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIFFFTVUvc3l6a2FsbGVyIGVudmlyb25tZW50LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzOiBTTUMgc29ja2V0cyBhcmUgY3JlYXRlZCB1c2luZyBgc29ja2V0KEFGX1NNQywgLi4uKWAsIHdoaWNoIGlzIHNvY2tldCBmYW1pbHkgNDMuCgpOb3csIHdhaXQgYSBtaW51dGUsIFNNQy1SIHJlbGllcyBvbiBSRE1BICh0aGluZ3MgbGlrZSBgcmRtYV9yeGVgIG9yIGBzaXdgLCB0aGUgc29mdHdhcmUgUkRNQSBkcml2ZXJzIG9mdGVuIGluY2x1ZGVkIGluIHRoZSBzdGFuZGFyZCBrZXJuZWxzKSwgb3IgU01DLUQgbWlnaHQgdXNlIGEgbG9vcGJhY2sgZGV2aWNlIGxpa2UgRElCU19MTy4gR29vZCwgdGhhdCBtZWFucyBpdCYjMzk7cyBwcm9iYWJseSByZWFjaGFibGUgYW5kIGxpa2VseSBoZWF2aWx5IGZ1enplZCBieSBzeXprYWxsZXIuCgpOZXh0LCBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSBhcmUgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3MgcmVxdWlyZWQgZm9yIGNvbXBpbGluZyBhbmQgYWN0dWFsbHkgdGVzdGluZyB0aGlzIGNvZGUuIEkgbmVlZCB0byBkaXZlIGludG8gYG5ldC9zbWMvS2NvbmZpZ2AuIFJpZ2h0LCBpdCBkZXBlbmRzIG9uIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgLiBOb3csIGRvIGBJTkZJTklCQU5EYCwgYERJQlNgLCBvciBgU01DYCB0aGVtc2VsdmVzIGhhdmUgYW55IGFkZGl0aW9uYWwgY29uZmlnIGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdGNvbmZpZyBESUJTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVmYXVsdCBuXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyAoRElCUykgaXMgYSBjb21tdW5pY2F0aW9uIG1ldGhvZCB0aGF0XG4gICA3Olx0XHQgIHVzZXMgY29tbW9uIHBoeXNpY2FsIChpbnRlcm5hbCkgbWVtb3J5IGZvciBzeW5jaHJvbm91cyBkaXJlY3QgYWNjZXNzXG4gICA4Olx0XHQgIGludG8gYSByZW1vdGUgYnVmZmVyLlxuICAgOTpcdFxuICAxMDpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gcHJvdmlkZSB0aGUgYWJzdHJhY3Rpb24gbGF5ZXIgYmV0d2VlblxuICAxMTpcdFx0ICBkaWJzIGRldmljZXMgYW5kIGRpYnMgY2xpZW50cyBsaWtlIHRoZSBTTUMgcHJvdG9jb2wuXG4gIDEyOlx0XHQgIFRoZSBtb2R1bGUgbmFtZSBpcyBkaWJzLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBESUJTX0xPXG4gIDE1Olx0XHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBESUJTXG4gIDE3Olx0XHRkZWZhdWx0IG5cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgRElCU19MTyBlbmFibGVzIHRoZSBjcmVhdGlvbiBvZiBhbiBzb2Z0d2FyZS1lbXVsYXRlZCBkaWJzIGRldmljZVxuICAyMDpcdFx0ICBuYW1lZCBsbyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgdHJhbnNmZXJyaW5nIGRhdGEgd2hlbiBjb21tdW5pY2F0aW9uXG4gIDIxOlx0XHQgIG9jY3VycyB3aXRoaW4gdGhlIHNhbWUgT1MuIFRoaXMgaGVscHMgaW4gY29udmVuaWVudCB0ZXN0aW5nIG9mXG4gIDIyOlx0XHQgIGRpYnMgY2xpZW50cywgc2luY2UgZGlicyBsb29wYmFjayBpcyBpbmRlcGVuZGVudCBvZiBhcmNoaXRlY3R1cmUgb3JcbiAgMjM6XHRcdCAgaGFyZHdhcmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEluZmluaWJhbmQgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBJbmZpbmlCYW5kIGRyaXZlcnMgaW4gdGhpcyBrZXJuZWwuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBwcmFjdGljZSAtIGNoZWNraW5nIHRoZSBgZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgdGhlIGNlbnRyYWwgcmVwb3NpdG9yeSBmb3IgZGVmaW5pbmcgYWxsIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEluZmluaUJhbmQuIEl0JiMzOTtsbCBnaXZlIG1lIGEgY2xlYXIgb3ZlcnZpZXcgb2Ygd2hhdCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHVzdWFsIHN1c3BlY3RzOiBzdXBwb3J0IGZvciB2YXJpb3VzIGhhcmR3YXJlIGRldmljZXMsIHRyYW5zcG9ydCBwcm90b2NvbHMgbGlrZSB2ZXJicyBhbmQgUmVsaWFibGUgRGF0YWdyYW0gc29ja2V0cywgcGVyaGFwcyBzb21lIHBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucywgYW5kIGRlZmluaXRlbHkgc29tZSBkZWJ1Z2dpbmcgZmxhZ3MuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzIOKAkyB1bmRlcnN0YW5kaW5nIHRob3NlIGNyb3NzLXJlZmVyZW5jZXMgd2lsbCBiZSBrZXkgdG8gbWFraW5nIGluZm9ybWVkIGRlY2lzaW9ucyBhYm91dCBlbmFibGluZyBvciBkaXNhYmxpbmcgc3BlY2lmaWMgZmVhdHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldCBzeXN0ZW0mIzM5O3MgaGFyZHdhcmUgYW5kIGludGVuZGVkIHVzZSBjYXNlLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcGllY2luZyB0b2dldGhlciB0aGUgY29uZmlndXJhdGlvbiBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIElORklOSUJBTkRcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IEhBU19ETUFcbiAgIDU6XHRcdGRlcGVuZHMgb24gTkVUXG4gICA2Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDc6XHRcdGRlcGVuZHMgb24gIUFMUEhBXG4gICA4Olx0XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbiAgIDk6XHRcdHNlbGVjdCBJUlFfUE9MTFxuICAxMDpcdFx0c2VsZWN0IERJTUxJQlxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBDb3JlIHN1cHBvcnQgZm9yIEluZmluaUJhbmQgKElCKS4gIE1ha2Ugc3VyZSB0byBhbHNvIHNlbGVjdFxuICAxMzpcdFx0ICBhbnkgcHJvdG9jb2xzIHlvdSB3aXNoIHRvIHVzZSBhcyB3ZWxsIGFzIGRyaXZlcnMgZm9yIHlvdXJcbiAgMTQ6XHRcdCAgSW5maW5pQmFuZCBoYXJkd2FyZS5cbiAgMTU6XHRcbiAgMTY6XHRpZiBJTkZJTklCQU5EXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgdXNlcnNwYWNlIE1BRCBzdXBwb3J0XCYjMzQ7XG4gIDIwOlx0XHRkZXBlbmRzIG9uIElORklOSUJBTkRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NzkKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogNzgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTTUMgQ29uZmlndXJhdGlvbiBhbmQgRm9jdXMgU3ltYm9scyBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBmb3IgU01DLiBMb29rcyBsaWtlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGBTTUNgIChvciBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYERJQlNgLCBgU01DYCkgYW5kIGBESUJTX0xPYCBmb3IgbG9vcGJhY2sgdGVzdGluZy4KCk5vdywgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBpZGVudGlmeWluZyB0aGUgcmlnaHQgc3ltYm9scyB0byBmb2N1cyB0aGUgZnV6emVyIG9uLiBUaGUgcGF0Y2ggYWZmZWN0cyBgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmtgLCBgc21jX2Nvbm5fZnJlZWAsIGFuZCBgc21jX2Nvbm5fYWJvcnRfd29ya2AuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGFyZSBnb29kIGZvY3VzIHN5bWJvbHMuIFRoZSBrZXkgaGVyZSBpcyB0aGUgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGRpcmVjdGl2ZS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZXh0cmFjdCBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6IHRoZXkgbmVlZCB0byBiZSBzcGVjaWZpYyB0byB0aGUgbG9naWMsIG5vdCBnZW5lcmljIGhvdCBwYXRocywgYW5kIEkgbmVlZCB0byBoYW5kbGUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgcHJvcGVybHkuCgpgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmtgIGlzIHN0YXRpYy4gR3JlYXQsIGJlY2F1c2UgSSBzZWUgdGhhdCBgc21jX2Nvbm5fZnJlZWAgYW5kIGBzbWNfY29ubl9hYm9ydF93b3JrYCBhcmUgbm90IHViaXF1aXRvdXMuIFRoZXkgc2VlbSB0byBiZSBTTUMtc3BlY2lmaWMuIExldCYjMzk7cyBsaXN0IHRoZSBjYWxsZXJzIG9mIGBzbWNfY29ubl9mcmVlYCBhbmQgYHNtY19jb25uX2Fib3J0X3dvcmtgOiBgc21jX2Nvbm5fZnJlZWAsIGBzbWNfY29ubl9hYm9ydF93b3JrYCwgYHNtY19jb25uX2Fib3J0YCwgYHNtY19jZGNfbXNnX3ZhbGlkYXRlYCwgYHNtY19jbG9zZV9hY3RpdmVfYWJvcnRgLCBgc21jX2Nsb3NlX3Bhc3NpdmVfd29ya2AsIGFuZCBgX19zbWNfcmVsZWFzZWAuCgpPa2F5LCBkaWdnaW5nIGluLiBgc21jX2Nvbm5fZnJlZWAgaXMgbm90IHN0YXRpYywgaXQmIzM5O3MgaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AuIGBzbWNfY29ubl9hYm9ydF93b3JrYCBpcyBzdGF0aWMsIGFsc28gaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AgKGFuZCBJIGNhbiBzZWUgd2h5IGJlY2F1c2Ugb2YgdGhhdCBgSU5JVF9XT1JLYCBjYWxsKS4gR29vZC4gYHNtY19jb25uX2Fib3J0YCBhbmQgYHNtY19yZWxlYXNlYCBhcmUgaW4gYG5ldC9zbWMvYWZfc21jLmNgLgoKRG91YmxlLWNoZWNraW5nIHRoaXMuIFllcywgYHNtY19jb25uX2Fib3J0X3dvcmtgIGFuZCBgc21jX2Nvbm5fZnJlZWAgKmFyZSogaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AsIGFzIGV4cGVjdGVkLgoKTm93LCB0aGUgZmluYWwgYXNzZXNzbWVudDoKCjEuICBJcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggZGVhbHMgd2l0aCBsb2NraW5nLCBjb25jdXJyZW5jeSwgYW5kIHJlZmNvdW50aW5nIGlzc3VlcyBkdXJpbmcgU01DIGNvbm5lY3Rpb24gdGVhcmRvd24gYW5kIGFib3J0IHdvcmsgaGFuZGxpbmcuIFRoaXMgYWx0ZXJzIHRoZSBydW50aW1lIGJlaGF2aW9yIG9mIG5ldHdvcmsgcHJvdG9jb2wgY29kZSwgc28geWVzLgoyLiAgRW5hYmxlQ29uZmlnczogYFNNQ2AsIGBJTkZJTklCQU5EYCwgYERJQlNgLCBgSU5FVGAuCjMuICBGb2N1c1N5bWJvbHM6IGBzbWNfY29ubl9mcmVlYCwgYHNtY19jb25uX2Fib3J0X3dvcmtgLCBgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmtgLgoKVGltZSB0byBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7LAogICAgJiMzNDtESUJTJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfY29ubl9mcmVlJiMzNDssCiAgICAmIzM0O3NtY19jb25uX2Fib3J0X3dvcmsmIzM0OywKICAgICYjMzQ7c21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgU01DIHNvY2tldCBjb25uZWN0aW9uIHRlYXJkb3duIGFuZCBhYm9ydCB3b3JrIGNhbmNlbGxhdGlvbiBoYW5kbGluZyBpbiBzbWNfY29yZS5jLiBTcGVjaWZpY2FsbHksIGl0IGRyb3BzIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgY2FuY2VsX3dvcmtfc3luYyB0byBwcmV2ZW50IHBvdGVudGlhbCBkZWFkbG9ja3MsIG1hbmFnZXMgc29ja2V0IHJlZmNvdW50aW5nIG9uIHdvcmsgY2FuY2VsbGF0aW9uLCBhbmQgY2hlY2tzIGNvbm4tXHUwMDNlZnJlZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGFib3J0IHdvcmsgZXhlY3V0aW9uLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBsb2dpYyBpbiB0aGUgU01DIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBtYWtpbmcgaXQgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19jb25uX2ZyZWUmIzM0OywKICAgICYjMzQ7c21jX2Nvbm5fYWJvcnRfd29yayYjMzQ7LAogICAgJiMzNDtzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBTTUMgc29ja2V0IGNvbm5lY3Rpb24gdGVhcmRvd24gYW5kIGFib3J0IHdvcmsgY2FuY2VsbGF0aW9uIGhhbmRsaW5nIGluIHNtY19jb3JlLmMuIFNwZWNpZmljYWxseSwgaXQgZHJvcHMgdGhlIHNvY2tldCBsb2NrIGFyb3VuZCBjYW5jZWxfd29ya19zeW5jIHRvIHByZXZlbnQgcG90ZW50aWFsIGRlYWRsb2NrcywgbWFuYWdlcyBzb2NrZXQgcmVmY291bnRpbmcgb24gd29yayBjYW5jZWxsYXRpb24sIGFuZCBjaGVja3MgY29ubi1cdTAwM2VmcmVlZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWJvcnQgd29yayBleGVjdXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGxvZ2ljIGluIHRoZSBTTUMgbmV0d29ya2luZyBzdWJzeXN0ZW0sIG1ha2luZyBpdCB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRlYWRsb2NrIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gU01DIGNvbm5lY3Rpb24gdGVhcmRvd24gKG5ldC9zbWMvc21jX2NvcmUuYykgYnkgcmVsZWFzaW5nIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgYGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKWAgYW5kIGFkZGluZyBhIGAhY29ubi1cdTAwM2VmcmVlZGAgY2hlY2sgaW4gYHNtY19jb25uX2Fib3J0X3dvcmsoKWAuXG5cblRoZSBjaGFuZ2VzIHNvbGVseSBtb2RpZnkgbG9ja2luZyBiZWhhdmlvciwgd29yayBjYW5jZWxsYXRpb24gc3luY2hyb25pemF0aW9uLCBhbmQgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBidWZmZXIgbGVuZ3RoIG9yIGJvdW5kcyBtYW5pcHVsYXRpb25zLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKExPQ0tERVAsIEtBU0FOKSBhbmQgZG8gbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTQ2YWY5YmI1MGM0N2IwMjA3ZjY5NDgxZGFjNWZjOTQ3NDI4N2QwMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMTQ6NTk6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmMKaW5kZXggMDRhZWRkOTU3NTQzYS4uOWExMDllYWU3M2I5MiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuYwpAQCAtMTI1MSw2ICYjNDM7MTI1MSwyNSBAQCBzdGF0aWMgdm9pZCBzbWNfYnVmX3VudXNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiwKIAl9CiB9CiAKJiM0MzsvKiBDYW5jZWwgYSBwZW5kaW5nIGFib3J0IHdvcmsgaXRlbS4gIHNtY19jb25uX2Fib3J0X3dvcmsoKSB0YWtlcyB0aGUgc29ja2V0CiYjNDM7ICogbG9jaywgc28gdGhlIGxvY2sgaGFzIHRvIGJlIGRyb3BwZWQgaGVyZS4gIE90aGVyd2lzZSBjYW5jZWxfd29ya19zeW5jKCkKJiM0MzsgKiB3YWl0cyBmb3IgYSB3b3JrZXIgdGhhdCBpcyBpdHNlbGYgYmxvY2tlZCBvbiB0aGUgY2FsbGVyLiAgVGhpcyBpcyB0aGUgaWRpb20KJiM0MzsgKiBzbWNfY2xvc2VfY2FuY2VsX3dvcmsoKSBhbHJlYWR5IHVzZXMgZm9yIGNsb3NlX3dvcmsuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKQomIzQzO3sKJiM0MzsJc3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtzbWMtJmd0O3NrOwomIzQzOwomIzQzOwlpZiAoY3VycmVudF93b3JrKCkgPT0gJmFtcDtjb25uLSZndDthYm9ydF93b3JrKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZWxlYXNlX3NvY2soc2spOwomIzQzOwlpZiAoY2FuY2VsX3dvcmtfc3luYygmYW1wO2Nvbm4tJmd0O2Fib3J0X3dvcmspKQomIzQzOwkJc29ja19wdXQoc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi8KJiM0MzsJbG9ja19zb2NrKHNrKTsKJiM0Mzt9CiYjNDM7CiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi8KIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pCiB7CkBAIC0xMjc2LDggJiM0MzsxMjk1LDcgQEAgdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubikKIAkJCXNtY2RfYnVmX2RldGFjaChjb25uKTsKIAl9IGVsc2UgewogCQlzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTsKLQkJaWYgKGN1cnJlbnRfd29yaygpICE9ICZhbXA7Y29ubi0mZ3Q7YWJvcnRfd29yaykKLQkJCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtjb25uLSZndDthYm9ydF93b3JrKTsKJiM0MzsJCXNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKGNvbm4pOwogCX0KIAlpZiAoIWxpc3RfZW1wdHkoJmFtcDtsZ3ItJmd0O2xpc3QpKSB7CiAJCXNtY19idWZfdW51c2UoY29ubiwgbGdyKTsgLyogYWxsb3cgYnVmZmVyIHJldXNlICovCkBAIC0xNzUwLDcgJiM0MzsxNzY4LDEyIEBAIHN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7CiAKIAlsb2NrX3NvY2soJmFtcDtzbWMtJmd0O3NrKTsKLQlzbWNfY29ubl9raWxsKGNvbm4sIHRydWUpOwomIzQzOwkvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXQKJiM0MzsJICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhcwomIzQzOwkgKiBub3RoaW5nIGxlZnQgdG8gZG8uCiYjNDM7CSAqLwomIzQzOwlpZiAoIWNvbm4tJmd0O2ZyZWVkKQomIzQzOwkJc21jX2Nvbm5fa2lsbChjb25uLCB0cnVlKTsKIAlyZWxlYXNlX3NvY2soJmFtcDtzbWMtJmd0O3NrKTsKIAlzb2NrX3B1dCgmYW1wO3NtYy0mZ3Q7c2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi8KIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTUMgQ29yZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCB0byBgbmV0L3NtYy9zbWNfY29yZS5jYC4gTG9va3MgbGlrZSBpdCYjMzk7cyBjZW50ZXJlZCBhcm91bmQgaGFuZGxpbmcgY29ubmVjdGlvbiBhYm9ydHMsIHNwZWNpZmljYWxseSB0aGUgYHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrYCBmdW5jdGlvbiBhbmQgaXRzIGludGVncmF0aW9uLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGRlZGljYXRlZCBmdW5jdGlvbiwgYHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrYCwgdG8gaGFuZGxlIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNsZWFudXAgb2YgdGhlIGBhYm9ydF93b3JrYCBhc3NvY2lhdGVkIHdpdGggYW4gYHNtY19jb25uZWN0aW9uYC4gVGhlIHBhdGNoIGFkZHMgdGhpcyBuZXcgZnVuY3Rpb24sIGFuZCB0aGVuIGNsZXZlcmx5IHJlcGxhY2VzIHNvbWUgZXhpc3RpbmcgbG9naWMgaW4gYHNtY19jb25uX2ZyZWVgIHdpdGggYSBjYWxsIHRvIHRoaXMgbmV3IGZ1bmN0aW9uLiBUaGUgbmV3IGZ1bmN0aW9uIHRha2VzIHRoZSBgc21jX2Nvbm5lY3Rpb25gIGFzIGlucHV0LgoKTG9va2luZyBhdCB0aGUgbmV3IGZ1bmN0aW9uLCBmaXJzdCwgd2UgZ2V0IHRoZSBzb2NrZXQsIHRoZW4gaW1tZWRpYXRlbHkgc2hvcnQtY2lyY3VpdCBpZiB0aGUgd29yayBiZWluZyBjYW5jZWxlZCBpcyBub3Qgb3VyIHdvcmsuIFRoZSBjb2RlIGNhbGxzIGByZWxlYXNlX3NvY2soc2spO2Agd2hpY2ggaXMgaW1wb3J0YW50IOKAkyB0aGF0IHJlbGVhc2VzIHRoZSBzb2NrZXQmIzM5O3MgcmVzb3VyY2VzLiBUaGVuLCBpdCB1c2VzIGBjYW5jZWxfd29ya19zeW5jKCZhbXA7Y29ubi0mZ3Q7YWJvcnRfd29yaylgIHRvIHN5bmNocm9uaXplIHRoZSBjYW5jZWxsYXRpb24sIGFuZCwgaW1wb3J0YW50bHksIGl0IHVzZXMgYHNvY2tfcHV0KHNrKTtgIGlmIGNhbmNlbGxhdGlvbiBhY3R1YWxseSBoYXBwZW5lZCwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2Ugd2hlbiBkZWFsaW5nIHdpdGggc29ja2V0cyBpbiB0aGlzIGVudmlyb25tZW50LiBGaW5hbGx5LCBpdCBsb2NrcyB0aGUgc29ja2V0IGFnYWluLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIGZpbmFsIG9wZXJhdGlvbi4KClRoZSByZXBsYWNlbWVudCBpbiBgc21jX2Nvbm5fZnJlZWAgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgb3JpZ2luYWwgY29uZGl0aW9uYWwgY2hlY2sgYW5kIGNhbmNlbGxhdGlvbiBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBhIGRpcmVjdCBjYWxsIHRvIHRoZSBuZXcgYHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrYCBmdW5jdGlvbiwgd2hpY2ggaXMgY2xlYW5lciBhbmQgcHJvYmFibHkgZWxpbWluYXRlcyBzb21lIHBvdGVudGlhbCBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucy4KCkZpbmFsbHksIGluIGBzbWNfY29ubl9hYm9ydF93b3JrYCwgdGhlcmUmIzM5O3MgYSBjaGVjayBmb3IgYGNvbm4tJmd0O2ZyZWVkYCBiZWZvcmUgY2FsbGluZyBgc21jX2Nvbm5fa2lsbGAuIFRoaXMgaXMgY3JpdGljYWwg4oCTIHdlIGRvbiYjMzk7dCB3YW50IHRvIG9wZXJhdGUgb24gYSBmcmVlZCBjb25uZWN0aW9uLgoKTm93LCBJIG5lZWQgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIHVzZSBjYXNlcyBmb3IgdGhlc2UgYHNtY19jb25uZWN0aW9uYCBvYmplY3RzIGFuZCB0aGUgYWJvcnQgd29ya2Zsb3cgaW4gbW9yZSBkZXRhaWwuIFRoYXQgY29udGV4dCB3aWxsIGNsYXJpZnkgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlc2UgY2hhbmdlcyBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eS4gSSBuZWVkIHRvIHNlZSBob3cgYWJvcnRzIGFyZSBpbml0aWF0ZWQsIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgY29ubmVjdGlvbiBzdGF0ZXMsIGFuZCBpZiB0aGlzIHJlZmFjdG9yaW5nIHNpbXBsaWZpZXMgdGhpbmdzIG9yIG9wZW5zIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGNvbmNlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19jb25uX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTI4OD1zdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMjEtXHRcdGlmICghc21jLVx1MDAzZXVzZV9mYWxsYmFjaylcbm5ldC9zbWMvYWZfc21jLmM6MzIyOlx0XHRcdHNtY19jb25uX2ZyZWUoXHUwMDI2c21jLVx1MDAzZWNvbm4pO1xubmV0L3NtYy9hZl9zbWMuYy0zMjMtXHR9XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0xMDA4PXN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgbG9jYWxfZmlyc3QpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xMDE2LVxubmV0L3NtYy9hZl9zbWMuYzoxMDE3Olx0c21jX2Nvbm5fZnJlZShjb25uKTtcbm5ldC9zbWMvYWZfc21jLmMtMTAxOC1cdGlmIChsb2NhbF9maXJzdCBcdTAwMjZcdTAwMjYgbGdyX3ZhbGlkKVxuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmM9MTI4PXZvaWQgc21jX2Nsb3NlX2FjdGl2ZV9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jLTE1Ni1cdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBTTUNfQ0xPU0VEO1xubmV0L3NtYy9zbWNfY2xvc2UuYzoxNTc6XHRcdHNtY19jb25uX2ZyZWUoXHUwMDI2c21jLVx1MDAzZWNvbm4pO1xubmV0L3NtYy9zbWNfY2xvc2UuYy0xNTgtXHRcdHJlbGVhc2VfY2xjc29jayA9IHRydWU7XG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNjctXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gU01DX0NMT1NFRDtcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTY4Olx0XHRzbWNfY29ubl9mcmVlKFx1MDAyNnNtYy1cdTAwM2Vjb25uKTtcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTY5LVx0XHRyZWxlYXNlX2NsY3NvY2sgPSB0cnVlO1xuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmM9MzU2PXN0YXRpYyB2b2lkIHNtY19jbG9zZV9wYXNzaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmMtNDM1LVx0XHQgICAgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fCAhc2stXHUwMDNlc2tfc29ja2V0KSkge1xubmV0L3NtYy9zbWNfY2xvc2UuYzo0MzY6XHRcdFx0c21jX2Nvbm5fZnJlZShjb25uKTtcbm5ldC9zbWMvc21jX2Nsb3NlLmMtNDM3LVx0XHRcdGlmIChzbWMtXHUwMDNlY2xjc29jaylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTA4Mz12b2lkIHNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkwLVx0YXRvbWljX2luYyhcdTAwMjZjb25uLVx1MDAzZWxuay1cdTAwM2Vjb25uX2NudCk7XG5uZXQvc21jL3NtY19jb3JlLmM6MTA5MTpcdC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xubmV0L3NtYy9zbWNfY29yZS5jLTEwOTItXHRzbWNyX2xpbmtfaG9sZChjb25uLVx1MDAzZWxuayk7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTEyNTk9c3RhdGljIHZvaWQgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjczLS8qIHJlbW92ZSBhIGZpbmlzaGVkIGNvbm5lY3Rpb24gZnJvbSBpdHMgbGluayBncm91cCAqL1xubmV0L3NtYy9zbWNfY29yZS5jOjEyNzQ6dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjc1LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTc2Mz1zdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTc3MC1cdGxvY2tfc29jayhcdTAwMjZzbWMtXHUwMDNlc2spO1xubmV0L3NtYy9zbWNfY29yZS5jOjE3NzE6XHQvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXRcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzcyLVx0ICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhc1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0yMDAwPWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTIwNzQtXHR9XG5uZXQvc21jL3NtY19jb3JlLmM6MjA3NTpcdHNtY19sZ3JfaG9sZChjb25uLVx1MDAzZWxncik7IC8qIGxncl9wdXQgaW4gc21jX2Nvbm5fZnJlZSgpICovXG5uZXQvc21jL3NtY19jb3JlLmMtMjA3Ni1cdGlmICghY29ubi1cdTAwM2VsZ3ItXHUwMDNlaXNfc21jZClcbm5ldC9zbWMvc21jX2NvcmUuYzoyMDc3Olx0XHRzbWNyX2xpbmtfaG9sZChjb25uLVx1MDAzZWxuayk7IC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xubmV0L3NtYy9zbWNfY29yZS5jLTIwNzgtXHRjb25uLVx1MDAzZWZyZWVkID0gMDtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmg9NTk2PWludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbm5ldC9zbWMvc21jX2NvcmUuaC01OTctXG5uZXQvc21jL3NtY19jb3JlLmg6NTk4OnZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xubmV0L3NtYy9zbWNfY29yZS5oLTU5OS1pbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc4OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHJlYWRpbmcgYW5kIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBTTUMgQ29yZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBuZXQvc21jL3NtY19jb3JlLmNgLiBJIGtub3cgdGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIFNNQyBpbXBsZW1lbnRhdGlvbiwgc28gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIHN0dWZmIGZ1bmN0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlcywgdGhlIGNyaXRpY2FsIHBhdGggZnVuY3Rpb25zIGZvciBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGRhdGEgdHJhbnNmZXIsIGFuZCB0ZWFyZG93biwgYXMgd2VsbCBhcyBhbnkga2V5IGxvY2tpbmcgbWVjaGFuaXNtcyB0aGV5IGFyZSB1c2luZyBmb3IgY29uY3VycmVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucyAoU01DKSBwcm90b2NvbCBpcyBpbnRlZ3JhdGVkIGF0IHRoaXMgbG93ZXIgbmV0d29ya2luZyBsYXllci4gSG9wZWZ1bGx5IHRoZSBjb21tZW50cyBhcmUgZ29vZCwgYnV0IEkmIzM5O20gcHJlcGFyZWQgdG8gZm9sbG93IGZ1bmN0aW9uIGNhbGxzIGFuZCB0cmFjZSB0aGUgbG9naWMgaWYgbmVjZXNzYXJ5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoaXMgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNTA6XHRcdFx0U01DX1NUQVRfUk1CX1NJWkUoc21jLCBpc19zbWNkLCB0cnVlLCBmYWxzZSwgYnVmc2l6ZSk7XG4xMjUxOlx0XHR9XG4xMjUyOlx0fVxuMTI1MzpcdFxuMTI1NDpcdC8qIENhbmNlbCBhIHBlbmRpbmcgYWJvcnQgd29yayBpdGVtLiAgc21jX2Nvbm5fYWJvcnRfd29yaygpIHRha2VzIHRoZSBzb2NrZXRcbjEyNTU6XHQgKiBsb2NrLCBzbyB0aGUgbG9jayBoYXMgdG8gYmUgZHJvcHBlZCBoZXJlLiAgT3RoZXJ3aXNlIGNhbmNlbF93b3JrX3N5bmMoKVxuMTI1NjpcdCAqIHdhaXRzIGZvciBhIHdvcmtlciB0aGF0IGlzIGl0c2VsZiBibG9ja2VkIG9uIHRoZSBjYWxsZXIuICBUaGlzIGlzIHRoZSBpZGlvbVxuMTI1NzpcdCAqIHNtY19jbG9zZV9jYW5jZWxfd29yaygpIGFscmVhZHkgdXNlcyBmb3IgY2xvc2Vfd29yay5cbjEyNTg6XHQgKi9cbjEyNTk6XHRzdGF0aWMgdm9pZCBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4xMjYwOlx0e1xuMTI2MTpcdFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbjEyNjI6XHRcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNtYy1cdTAwM2VzaztcbjEyNjM6XHRcbjEyNjQ6XHRcdGlmIChjdXJyZW50X3dvcmsoKSA9PSBcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspXG4xMjY1Olx0XHRcdHJldHVybjtcbjEyNjY6XHRcbjEyNjc6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xMjY4Olx0XHRpZiAoY2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspKVxuMTI2OTpcdFx0XHRzb2NrX3B1dChzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xuMTI3MDpcdFx0bG9ja19zb2NrKHNrKTtcbjEyNzE6XHR9XG4xMjcyOlx0XG4xMjczOlx0LyogcmVtb3ZlIGEgZmluaXNoZWQgY29ubmVjdGlvbiBmcm9tIGl0cyBsaW5rIGdyb3VwICovXG4xMjc0Olx0dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbjEyNzU6XHR7XG4xMjc2Olx0XHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGNvbm4tXHUwMDNlbGdyO1xuMTI3NzpcdFxuMTI3ODpcdFx0aWYgKCFsZ3IgfHwgY29ubi1cdTAwM2VmcmVlZClcbjEyNzk6XHRcdFx0LyogQ29ubmVjdGlvbiBoYXMgbmV2ZXIgYmVlbiByZWdpc3RlcmVkIGluIGFcbjEyODA6XHRcdFx0ICogbGluayBncm91cCwgb3IgaGFzIGFscmVhZHkgYmVlbiBmcmVlZC5cbjEyODE6XHRcdFx0ICovXG4xMjgyOlx0XHRcdHJldHVybjtcbjEyODM6XHRcbjEyODQ6XHRcdGNvbm4tXHUwMDNlZnJlZWQgPSAxO1xuMTI4NTpcdFx0aWYgKCFzbWNfY29ubl9sZ3JfdmFsaWQoY29ubikpXG4xMjg2Olx0XHRcdC8qIENvbm5lY3Rpb24gaGFzIGFscmVhZHkgdW5yZWdpc3RlcmVkIGZyb21cbjEyODc6XHRcdFx0ICogbGluayBncm91cC5cbjEyODg6XHRcdFx0ICovXG4xMjg5Olx0XHRcdGdvdG8gbGdyX3B1dDtcbjEyOTA6XHRcbjEyOTE6XHRcdGlmIChsZ3ItXHUwMDNlaXNfc21jZCkge1xuMTI5MjpcdFx0XHRzbWNfaXNtX3Vuc2V0X2Nvbm4oY29ubik7XG4xMjkzOlx0XHRcdHRhc2tsZXRfa2lsbChcdTAwMjZjb25uLVx1MDAzZXJ4X3Rza2xldCk7XG4xMjk0Olx0XHRcdGlmIChzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShsZ3ItXHUwMDNlc21jZCkpXG4xMjk1Olx0XHRcdFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xuMTI5NjpcdFx0fSBlbHNlIHtcbjEyOTc6XHRcdFx0c21jX2NkY193YWl0X3BlbmRfdHhfd3IoY29ubik7XG4xMjk4Olx0XHRcdHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKGNvbm4pO1xuMTI5OTpcdFx0fVxuMTMwMDpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmxnci1cdTAwM2VsaXN0KSkge1xuMTMwMTpcdFx0XHRzbWNfYnVmX3VudXNlKGNvbm4sIGxncik7IC8qIGFsbG93IGJ1ZmZlciByZXVzZSAqL1xuMTMwMjpcdFx0XHRzbWNfbGdyX3VucmVnaXN0ZXJfY29ubihjb25uKTtcbjEzMDM6XHRcdH1cbjEzMDQ6XHRcbjEzMDU6XHRcdGlmICghbGdyLVx1MDAzZWNvbm5zX251bSlcbjEzMDY6XHRcdFx0c21jX2xncl9zY2hlZHVsZV9mcmVlX3dvcmsobGdyKTtcbjEzMDc6XHRsZ3JfcHV0OlxuMTMwODpcdFx0aWYgKCFsZ3ItXHUwMDNlaXNfc21jZClcbjEzMDk6XHRcdFx0c21jcl9saW5rX3B1dChjb25uLVx1MDAzZWxuayk7IC8qIGxpbmtfaG9sZCBpbiBzbWNfY29ubl9jcmVhdGUoKSAqL1xuMTMxMDpcdFx0c21jX2xncl9wdXQobGdyKTsgLyogbGdyX2hvbGQgaW4gc21jX2Nvbm5fY3JlYXRlKCkgKi9cbjEzMTE6XHR9XG4xMzEyOlx0XG4xMzEzOlx0LyogdW5yZWdpc3RlciBhIGxpbmsgZnJvbSBhIGJ1Zl9kZXNjICovXG4xMzE0Olx0c3RhdGljIHZvaWQgc21jcl9idWZfdW5tYXBfbGluayhzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpidWZfZGVzYywgYm9vbCBpc19ybWIsXG4xMzE1Olx0XHRcdFx0XHRzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbjEzMTY6XHR7XG4xMzE3Olx0XHRpZiAoaXNfcm1iIHx8IGJ1Zl9kZXNjLVx1MDAzZWlzX3ZtKVxuMTMxODpcdFx0XHRidWZfZGVzYy1cdTAwM2Vpc19yZWdfbXJbbG5rLVx1MDAzZWxpbmtfaWR4XSA9IGZhbHNlO1xuMTMxOTpcdFx0aWYgKCFidWZfZGVzYy1cdTAwM2Vpc19tYXBfaWJbbG5rLVx1MDAzZWxpbmtfaWR4XSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE5MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJc3N1ZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBpbnRvIHNvbWV0aGluZywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSBiYXNlcy4gSSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiBbaW1wbGllZCB0b3BpYywgY29udGV4dHVhbGx5IGRlcml2ZWRdLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCBub3QgdG8gbWlzcyBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBzaW1pbGFyIGlzc3VlcyBjYW4gc29tZXRpbWVzIG1hbmlmZXN0IGluIHVuZXhwZWN0ZWQgcGxhY2VzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB0aG9yb3VnaGx5IGNvbnNpZGVyIGFsbCByZWxhdGVkIG1vZHVsZXMgYW5kIGZ1bmN0aW9ucy4gSSYjMzk7dmUgY29uc2lkZXJlZCBYIGFuZCBZLCBidXQgSSBzaG91bGQgYWJzb2x1dGVseSBjaGVjayBgc21jX2Nvbm5fYWJvcnRfd29ya2AuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIHRoaXMgYXJlYSBhbmQgY291bGQgcHJvdmlkZSBzb21lIGNyaXRpY2FsIGNvbnRleHQsIGFuZCBwZXJoYXBzIGV2ZW4gaWxsdW1pbmF0ZSB0aGUgcm9vdCBjYXVzZS4gQSBwb3RlbnRpYWwgaXNzdWUgY291bGQgYmUgYXJpc2luZyBpbiB0aGF0IHBsYWNlIHRoYXQgaXMgcmVsYXRlZCB0byB0aGUgY3VycmVudCBpc3N1ZS4gQmVzdCB0byBsZWF2ZSBubyBzdG9uZSB1bnR1cm5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NjA6XHR9XG4xNzYxOlx0XG4xNzYyOlx0LyogYWJvcnQgY29ubmVjdGlvbiwgYWJvcnRfd29yayBzY2hlZHVsZWQgZnJvbSB0YXNrbGV0IGNvbnRleHQgKi9cbjE3NjM6XHRzdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbjE3NjQ6XHR7XG4xNzY1Olx0XHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yod29yayxcbjE3NjY6XHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24sXG4xNzY3Olx0XHRcdFx0XHRcdFx0ICAgYWJvcnRfd29yayk7XG4xNzY4Olx0XHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xuMTc2OTpcdFxuMTc3MDpcdFx0bG9ja19zb2NrKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4xNzcxOlx0XHQvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXRcbjE3NzI6XHRcdCAqIHJlbGVhc2VzIGFueXRoaW5nLCBzbyBhIHdvcmsgaXRlbSBxdWV1ZWQgYWZ0ZXIgdGhlIGNhbmNlbCBoYXNcbjE3NzM6XHRcdCAqIG5vdGhpbmcgbGVmdCB0byBkby5cbjE3NzQ6XHRcdCAqL1xuMTc3NTpcdFx0aWYgKCFjb25uLVx1MDAzZWZyZWVkKVxuMTc3NjpcdFx0XHRzbWNfY29ubl9raWxsKGNvbm4sIHRydWUpO1xuMTc3NzpcdFx0cmVsZWFzZV9zb2NrKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4xNzc4Olx0XHRzb2NrX3B1dChcdTAwMjZzbWMtXHUwMDNlc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi9cbjE3Nzk6XHR9XG4xNzgwOlx0XG4xNzgxOlx0dm9pZCBzbWNyX3BvcnRfYWRkKHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldiwgdTggaWJwb3J0KVxuMTc4MjpcdHtcbjE3ODM6XHRcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCAqbjtcbjE3ODQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgzMwoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiA0MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTUMgUHJvdG9jb2wgU3RhY2sgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgKFNNQykgcHJvdG9jb2wgc3RhY2sgaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IHRhcmdldHMgYSBjcml0aWNhbCBzeW5jaHJvbml6YXRpb24gaXNzdWU6IGEgcG90ZW50aWFsIGRlYWRsb2NrIHNpdHVhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSBgc21jX2Nvbm5fYWJvcnRfd29ya2AgYWNxdWlyZXMgYGxvY2tfc29jaygmYW1wO3NtYy0mZ3Q7c2spYC4gV2hlbiBgc21jX2Nvbm5fZnJlZWAgYXR0ZW1wdHMgdG8gY2FuY2VsIHRoZSB3b3JrIHF1ZXVlIHZpYSBgY2FuY2VsX3dvcmtfc3luYygmYW1wO2Nvbm4tJmd0O2Fib3J0X3dvcmspYCwgd2l0aCB0aGUgY2FsbGVyICphbHNvKiBob2xkaW5nIGBsb2NrX3NvY2soJmFtcDtzbWMtJmd0O3NrKWAsIHdlIGhhdmUgYSBjbGFzc2ljIGRlYWRsb2NrIHNjZW5hcmlvLiBJZiB0aGUgd29yayBmdW5jdGlvbiBpcyBibG9ja2VkIHdhaXRpbmcgZm9yIHRoYXQgc2FtZSBsb2NrLCB3ZeKAmXJlIGluIHRyb3VibGUuCgpUaGUgcHJvcG9zZWQgc29sdXRpb24gbG9va3Mgc291bmQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yaygpYCwgd2hpY2ggY2xldmVybHkgcmVsZWFzZXMgYGxvY2tfc29ja2AgdGVtcG9yYXJpbHkgKmJlZm9yZSogY2FsbGluZyBgY2FuY2VsX3dvcmtfc3luY2AuIFRoaXMgY2lyY3VtdmVudHMgdGhlIGRlYWRsb2NrLiBJdCB0aGVuIGNhcmVmdWxseSBoYW5kbGVzIHRoZSBgc29ja19wdXRgIGNhbGxzIGlmIHRoZSB3b3JrIHdhcyBhY3R1YWxseSBjYW5jZWxsZWQsIGFuZCByZWFjcXVpcmVzIHRoZSBsb2NrIGFmdGVyd2FyZCwgZW5zdXJpbmcgbm8gcmVmZXJlbmNlIGNvdW50IGlzc3Vlcy4gQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBndWFyZCB1c2luZyBgaWYgKCFjb25uLSZndDtmcmVlZClgIHdpdGhpbiBgc21jX2Nvbm5fYWJvcnRfd29ya2AgaW4gYHNtY19jb25uX2tpbGxgLCB3aGljaCBpcyBhIGdvb2QgZGVmZW5zaXZlIG1lYXN1cmUuCgpOb3csIGFzIGFsd2F5cywgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBzdWJ0bGUgaXNzdWVzLiBNeSBmb2N1cyBpcyBvbiBtZW1vcnkgc2FmZXR5LiBEb2VzIHRoaXMgcGF0Y2ggb3BlbiBhbnkgZG9vcnMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHdyaXRlcz8gRG9lcyBpdCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXM/IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgS01TQU4uCgpGaXJzdCwgZG9lcyB0aGlzIHBhdGNoIGludm9sdmUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnM/IE5vLiBPa2F5LCBnb29kLiBOZXh0LCBhcmUgd2UgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyBOby4gYGNvbm4tJmd0O2ZyZWVkYCBpcyBhIHByZS1leGlzdGluZyBmaWVsZCBpbml0aWFsaXplZCB0byBgMGAgZHVyaW5nIGNvbm5lY3Rpb24gY3JlYXRpb24gYW5kIGlzIHNldCBpbiBgc21jX2Nvbm5fZnJlZWAuIFRoYXQgbG9va3Mgc2FmZS4gQXJlIHdlIGFsbG9jYXRpbmcgYnVmZmVycyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbj8gTm8sIHRoYXQgaXMgbm90IHRoZSBjYXNlLiBEb2VzIHRoaXMgdG91Y2ggYW55IGJvdW5kcyBjaGVja3Mgb3IgaW50cm9kdWNlIGFueSByaXNreSBsZW5ndGggbWFuaXB1bGF0aW9ucz8gTm8uCgpUaGUgbW9zdCBsaWtlbHkgcmlza3MgaGVyZSBhcmUgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byB0aGUgc29ja2V0JiMzOTtzIHJlZmVyZW5jZSBjb3VudCAocG90ZW50aWFsbHkgY2F1c2luZyB1c2UtYWZ0ZXItZnJlZSBvciBsZWFrcyksIGFuZCBvdmVyYWxsIGxvY2tpbmcgY29ycmVjdG5lc3MuIFRoZXNlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMsIGFuZCB0aGFua2Z1bGx5LCB0aGV5IGFyZSB0aGluZ3MgdGhhdCBhcmUgZGV0ZWN0YWJsZSB1c2luZyBzdGFuZGFyZCBkZWJ1Z2dlcnMgYW5kIHNhbml0aXplcnMgbGlrZSBMT0NLREVQLCBLQVNBTiwgYW5kIHJlZmNvdW50IGNoZWNrcy4KCkdpdmVuIG15IGFuYWx5c2lzLCBJIGFtIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZSwgYW5kIHN0YW5kYXJkIHRvb2xzIGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgaXNzdWVzIGluIHRoaXMgcGF0Y2guIEkgdGhpbmsgdGhpcyBwYXRjaCBpcyBwcmV0dHkgd2VsbCB0aG91Z2h0LW91dCBhbmQgc29sdmVzIHRoZSBwcm9ibGVtIGVmZmVjdGl2ZWx5LiBJJiMzOTtsbCBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjaywgYnV0IHRoZSByZWFzb25pbmcgaXMgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRlYWRsb2NrIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gU01DIGNvbm5lY3Rpb24gdGVhcmRvd24gKG5ldC9zbWMvc21jX2NvcmUuYykgYnkgcmVsZWFzaW5nIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgYGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKWAgYW5kIGFkZGluZyBhIGAhY29ubi1cdTAwM2VmcmVlZGAgY2hlY2sgaW4gYHNtY19jb25uX2Fib3J0X3dvcmsoKWAuXG5cblRoZSBjaGFuZ2VzIHNvbGVseSBtb2RpZnkgbG9ja2luZyBiZWhhdmlvciwgd29yayBjYW5jZWxsYXRpb24gc3luY2hyb25pemF0aW9uLCBhbmQgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBidWZmZXIgbGVuZ3RoIG9yIGJvdW5kcyBtYW5pcHVsYXRpb25zLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKExPQ0tERVAsIEtBU0FOKSBhbmQgZG8gbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgZGVhZGxvY2sgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBpbiBTTUMgY29ubmVjdGlvbiB0ZWFyZG93biAobmV0L3NtYy9zbWNfY29yZS5jKSBieSByZWxlYXNpbmcgdGhlIHNvY2tldCBsb2NrIGFyb3VuZCBgY2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspYCBhbmQgYWRkaW5nIGEgYCFjb25uLVx1MDAzZWZyZWVkYCBjaGVjayBpbiBgc21jX2Nvbm5fYWJvcnRfd29yaygpYC5cblxuVGhlIGNoYW5nZXMgc29sZWx5IG1vZGlmeSBsb2NraW5nIGJlaGF2aW9yLCB3b3JrIGNhbmNlbGxhdGlvbiBzeW5jaHJvbml6YXRpb24sIGFuZCBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGJ1ZmZlciBsZW5ndGggb3IgYm91bmRzIG1hbmlwdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMgKHN1Y2ggYXMgZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoTE9DS0RFUCwgS0FTQU4pIGFuZCBkbyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjU5OjIzLjUzNjQxODUyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjgzMjIzNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uX2ZyZWVcIixcbiAgICBcInNtY19jb25uX2Fib3J0X3dvcmtcIixcbiAgICBcInNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBkZWFkbG9jayBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlIGluIFNNQyBjb25uZWN0aW9uIHRlYXJkb3duIChuZXQvc21jL3NtY19jb3JlLmMpIGJ5IHJlbGVhc2luZyB0aGUgc29ja2V0IGxvY2sgYXJvdW5kIGBjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZjb25uLVxcdTAwM2VhYm9ydF93b3JrKWAgYW5kIGFkZGluZyBhIGAhY29ubi1cXHUwMDNlZnJlZWRgIGNoZWNrIGluIGBzbWNfY29ubl9hYm9ydF93b3JrKClgLlxcblxcblRoZSBjaGFuZ2VzIHNvbGVseSBtb2RpZnkgbG9ja2luZyBiZWhhdmlvciwgd29yayBjYW5jZWxsYXRpb24gc3luY2hyb25pemF0aW9uLCBhbmQgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBidWZmZXIgbGVuZ3RoIG9yIGJvdW5kcyBtYW5pcHVsYXRpb25zLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKExPQ0tERVAsIEtBU0FOKSBhbmQgZG8gbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFNNQyBzb2NrZXQgY29ubmVjdGlvbiB0ZWFyZG93biBhbmQgYWJvcnQgd29yayBjYW5jZWxsYXRpb24gaGFuZGxpbmcgaW4gc21jX2NvcmUuYy4gU3BlY2lmaWNhbGx5LCBpdCBkcm9wcyB0aGUgc29ja2V0IGxvY2sgYXJvdW5kIGNhbmNlbF93b3JrX3N5bmMgdG8gcHJldmVudCBwb3RlbnRpYWwgZGVhZGxvY2tzLCBtYW5hZ2VzIHNvY2tldCByZWZjb3VudGluZyBvbiB3b3JrIGNhbmNlbGxhdGlvbiwgYW5kIGNoZWNrcyBjb25uLVxcdTAwM2VmcmVlZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWJvcnQgd29yayBleGVjdXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGxvZ2ljIGluIHRoZSBTTUMgbmV0d29ya2luZyBzdWJzeXN0ZW0sIG1ha2luZyBpdCB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTk6MjMuNTM2NDM2MTY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTY3NTcxNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNDZhZjliYjUwYzQ3YjAyMDdmNjk0ODFkYWM1ZmM5NDc0Mjg3ZDAyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTQ6NTk6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXFxuaW5kZXggMDRhZWRkOTU3NTQzYS4uOWExMDllYWU3M2I5MiAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmNcXG5AQCAtMTI1MSw2ICsxMjUxLDI1IEBAIHN0YXRpYyB2b2lkIHNtY19idWZfdW51c2Uoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qIENhbmNlbCBhIHBlbmRpbmcgYWJvcnQgd29yayBpdGVtLiAgc21jX2Nvbm5fYWJvcnRfd29yaygpIHRha2VzIHRoZSBzb2NrZXRcXG4rICogbG9jaywgc28gdGhlIGxvY2sgaGFzIHRvIGJlIGRyb3BwZWQgaGVyZS4gIE90aGVyd2lzZSBjYW5jZWxfd29ya19zeW5jKClcXG4rICogd2FpdHMgZm9yIGEgd29ya2VyIHRoYXQgaXMgaXRzZWxmIGJsb2NrZWQgb24gdGhlIGNhbGxlci4gIFRoaXMgaXMgdGhlIGlkaW9tXFxuKyAqIHNtY19jbG9zZV9jYW5jZWxfd29yaygpIGFscmVhZHkgdXNlcyBmb3IgY2xvc2Vfd29yay5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4re1xcbitcXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2c21jLVxcdTAwM2VzaztcXG4rXFxuK1xcdGlmIChjdXJyZW50X3dvcmsoKSA9PSBcXHUwMDI2Y29ubi1cXHUwMDNlYWJvcnRfd29yaylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4rXFx0aWYgKGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspKVxcbitcXHRcXHRzb2NrX3B1dChzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xcbitcXHRsb2NrX3NvY2soc2spO1xcbit9XFxuK1xcbiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cXG4gdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4ge1xcbkBAIC0xMjc2LDggKzEyOTUsNyBAQCB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbiBcXHRcXHRcXHRzbWNkX2J1Zl9kZXRhY2goY29ubik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHNtY19jZGNfd2FpdF9wZW5kX3R4X3dyKGNvbm4pO1xcbi1cXHRcXHRpZiAoY3VycmVudF93b3JrKCkgIT0gXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspXFxuLVxcdFxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspO1xcbitcXHRcXHRzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhjb25uKTtcXG4gXFx0fVxcbiBcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmxnci1cXHUwMDNlbGlzdCkpIHtcXG4gXFx0XFx0c21jX2J1Zl91bnVzZShjb25uLCBsZ3IpOyAvKiBhbGxvdyBidWZmZXIgcmV1c2UgKi9cXG5AQCAtMTc1MCw3ICsxNzY4LDEyIEBAIHN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xcbiBcXG4gXFx0bG9ja19zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG4tXFx0c21jX2Nvbm5fa2lsbChjb25uLCB0cnVlKTtcXG4rXFx0Lyogc21jX2Nvbm5fZnJlZSgpIHNldHMgZnJlZWQgd2l0aCB0aGlzIGxvY2sgaGVsZCBhbmQgYmVmb3JlIGl0XFxuK1xcdCAqIHJlbGVhc2VzIGFueXRoaW5nLCBzbyBhIHdvcmsgaXRlbSBxdWV1ZWQgYWZ0ZXIgdGhlIGNhbmNlbCBoYXNcXG4rXFx0ICogbm90aGluZyBsZWZ0IHRvIGRvLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFjb25uLVxcdTAwM2VmcmVlZClcXG4rXFx0XFx0c21jX2Nvbm5fa2lsbChjb25uLCB0cnVlKTtcXG4gXFx0cmVsZWFzZV9zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG4gXFx0c29ja19wdXQoXFx1MDAyNnNtYy1cXHUwMDNlc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi9cXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OToyNC4xMzQxMzE5MjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYwNjE1MzYzMzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uX2ZyZWVcIixcbiAgICBcInNtY19jb25uX2Fib3J0X3dvcmtcIixcbiAgICBcInNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgU01DIHNvY2tldCBjb25uZWN0aW9uIHRlYXJkb3duIGFuZCBhYm9ydCB3b3JrIGNhbmNlbGxhdGlvbiBoYW5kbGluZyBpbiBzbWNfY29yZS5jLiBTcGVjaWZpY2FsbHksIGl0IGRyb3BzIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgY2FuY2VsX3dvcmtfc3luYyB0byBwcmV2ZW50IHBvdGVudGlhbCBkZWFkbG9ja3MsIG1hbmFnZXMgc29ja2V0IHJlZmNvdW50aW5nIG9uIHdvcmsgY2FuY2VsbGF0aW9uLCBhbmQgY2hlY2tzIGNvbm4tXFx1MDAzZWZyZWVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBhYm9ydCB3b3JrIGV4ZWN1dGlvbi4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgbG9naWMgaW4gdGhlIFNNQyBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE0NmFmOWJiNTBjNDdiMDIwN2Y2OTQ4MWRhYzVmYzk0NzQyODdkMDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE0OjU5OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5pbmRleCAwNGFlZGQ5NTc1NDNhLi45YTEwOWVhZTczYjkyIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmNcbkBAIC0xMjUxLDYgKzEyNTEsMjUgQEAgc3RhdGljIHZvaWQgc21jX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHR9XG4gfVxuIFxuKy8qIENhbmNlbCBhIHBlbmRpbmcgYWJvcnQgd29yayBpdGVtLiAgc21jX2Nvbm5fYWJvcnRfd29yaygpIHRha2VzIHRoZSBzb2NrZXRcbisgKiBsb2NrLCBzbyB0aGUgbG9jayBoYXMgdG8gYmUgZHJvcHBlZCBoZXJlLiAgT3RoZXJ3aXNlIGNhbmNlbF93b3JrX3N5bmMoKVxuKyAqIHdhaXRzIGZvciBhIHdvcmtlciB0aGF0IGlzIGl0c2VsZiBibG9ja2VkIG9uIHRoZSBjYWxsZXIuICBUaGlzIGlzIHRoZSBpZGlvbVxuKyAqIHNtY19jbG9zZV9jYW5jZWxfd29yaygpIGFscmVhZHkgdXNlcyBmb3IgY2xvc2Vfd29yay5cbisgKi9cbitzdGF0aWMgdm9pZCBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4re1xuK1x0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbitcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNtYy1cdTAwM2VzaztcbitcbitcdGlmIChjdXJyZW50X3dvcmsoKSA9PSBcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspXG4rXHRcdHJldHVybjtcbitcbitcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRpZiAoY2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspKVxuK1x0XHRzb2NrX3B1dChzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xuK1x0bG9ja19zb2NrKHNrKTtcbit9XG4rXG4gLyogcmVtb3ZlIGEgZmluaXNoZWQgY29ubmVjdGlvbiBmcm9tIGl0cyBsaW5rIGdyb3VwICovXG4gdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbiB7XG5AQCAtMTI3Niw4ICsxMjk1LDcgQEAgdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbiBcdFx0XHRzbWNkX2J1Zl9kZXRhY2goY29ubik7XG4gXHR9IGVsc2Uge1xuIFx0XHRzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTtcbi1cdFx0aWYgKGN1cnJlbnRfd29yaygpICE9IFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yaylcbi1cdFx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yayk7XG4rXHRcdHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKGNvbm4pO1xuIFx0fVxuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmxnci1cdTAwM2VsaXN0KSkge1xuIFx0XHRzbWNfYnVmX3VudXNlKGNvbm4sIGxncik7IC8qIGFsbG93IGJ1ZmZlciByZXVzZSAqL1xuQEAgLTE3NTAsNyArMTc2OCwxMiBAQCBzdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7XG4gXG4gXHRsb2NrX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKTtcbi1cdHNtY19jb25uX2tpbGwoY29ubiwgdHJ1ZSk7XG4rXHQvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXRcbitcdCAqIHJlbGVhc2VzIGFueXRoaW5nLCBzbyBhIHdvcmsgaXRlbSBxdWV1ZWQgYWZ0ZXIgdGhlIGNhbmNlbCBoYXNcbitcdCAqIG5vdGhpbmcgbGVmdCB0byBkby5cbitcdCAqL1xuK1x0aWYgKCFjb25uLVx1MDAzZWZyZWVkKVxuK1x0XHRzbWNfY29ubl9raWxsKGNvbm4sIHRydWUpO1xuIFx0cmVsZWFzZV9zb2NrKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4gXHRzb2NrX3B1dChcdTAwMjZzbWMtXHUwMDNlc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi9cbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OToyNC4xMzQxMzQyNThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDI1ODk1OTQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgU01DIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9zbWMvc21jX2NvcmUuY2AsIHNvIGl0J3MgZGlyZWN0bHkgaW1wYWN0aW5nIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgcHJvdG9jb2wgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIFNNQywgQUZfU01DIHNwZWNpZmljYWxseSwgaXMgYSBzcGVjaWFsaXplZCBzb2NrZXQgZmFtaWx5LCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIHVuZGVyc3RhbmRpbmcgd2hhdCB0aGlzIGNoYW5nZSBpcyBkb2luZyB0byB0aGF0LlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBgS2NvbmZpZ2AgZm9yIHRoZSBgbmV0L3NtYy9gIGRpcmVjdG9yeS4gVGhhdCdsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGJ1aWxkLXRpbWUgY2hvaWNlcyB0aWVkIHRvIFNNQy4gVGhlbiwgSSBuZWVkIHRvIHRob3JvdWdobHkgZGlzc2VjdCB0aGUgYHNtY19jb3JlLmNgIGZpbGUgaXRzZWxmLiBXaGF0IHNwZWNpZmljIGZ1bmN0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBiZWhhdmlvcnMgYXJlIGJlaW5nIG1vZGlmaWVkPyBXaGF0J3MgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcz9cblxuSSdsbCBiZSByZWFjaGluZyBmb3IgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGVmZmljaWVudGx5IG5hdmlnYXRlIGFuZCBhbmFseXplIHRoZXNlIGZpbGVzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zOiB1bmRlcnN0YW5kaW5nIHRoZSAnd2h5JyBiZWhpbmQgdGhpcyBwYXRjaC4gSXMgaXQgYSBidWcgZml4LCBhIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50LCBhIG5ldyBmZWF0dXJlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGBLY29uZmlnYCBjb21iaW5lZCB3aXRoIHRoZSBgc21jX2NvcmUuY2AgY2hhbmdlcyBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VycyBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTozOC4zOTMwOTY4MTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU01DXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFNNQy1SIHByb3ZpZGVzIGEgXFxcInNvY2tldHMgb3ZlciBSRE1BXFxcIiBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXFxuICAgNzpcXHRcXHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxcbiAgIDg6XFx0XFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxcbiAgIDk6XFx0XFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXFxuICAxMDpcXHRcXHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgU01DX0RJQUdcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gU01DXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFN1cHBvcnQgZm9yIFNNQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0b29scyBzdWNoIGFzXFxuICAxOTpcXHRcXHQgIHNtY3NzLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRcXHQgIGlmIHVuc3VyZSwgc2F5IFkuXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG4gIDI0OlxcdFxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIFNNQyBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9TWVNDQUxMXFxuICAyNjpcXHRcXHRkZWZhdWx0IHlcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgU01DX0hTX0NUUkxfQlBGIGVuYWJsZXMgc3VwcG9ydCB0byByZWdpc3RlciBnZW5lcmljIGVCUEYgaG9vayBmb3IgU01DXFxuICAyOTpcXHRcXHQgIGhhbmRzaGFrZSBmbG93LCB3aGljaCBvZmZlciBtdWNoIGdyZWF0ZXIgZmxleGliaWxpdHkgaW4gbW9kaWZ5aW5nIHRoZSBiZWhhdmlvclxcbiAgMzA6XFx0XFx0ICBvZiB0aGUgU01DIHByb3RvY29sIHN0YWNrIGNvbXBhcmVkIHRvIGEgY29tcGxldGUga2VybmVsLWJhc2VkIGFwcHJvYWNoLiBTZWxlY3RcXG4gIDMxOlxcdFxcdCAgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgZmlsdHJpbmcgdGhlIGhhbmRzaGFrZSBwcm9jZXNzIHZpYSBlQlBGIHByb2dyYW1zLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTozOC4zOTMyMTYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI1NzAyODM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBLY29uZmlnIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgbmV0L3NtYy9LY29uZmlnYC4gRmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayBpZiBpdCBkZXBlbmRzIG9uIGBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EYCBvciBgRElCU2AuIFdhaXQgYSBtaW51dGUsIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaGVyZS4gTGluZSA0IG9mIHRoZSBLY29uZmlnIGZpbGUgc2hvdWxkIGhhdmUgdGhlIGFuc3dlci4gTGV0IG1lIHF1aWNrbHkgY2hlY2suLi4gT2theSwgbGluZSA0IHNheXMgYGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU2AuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIGxpbmUgNCBhZ2Fpbi4gT3IgcGVyaGFwcyBhIHF1aWNrIGdyZXAgZm9yIFNNQyBkZXBlbmRlbmNpZXMgbWlnaHQgYmUgZmFzdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjk1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTk6NDEuNjUwMjQ3NDM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MDY5NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTo0MS43MzQzMjI0NTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzQ0MDg3NDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBTTUMgQ29yZSBmb3IgUG90ZW50aWFsIElzc3VlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBTTUMgaW1wbGVtZW50YXRpb24uIEdpdmVuIHRoZSBzeW1wdG9tcyB3ZSdyZSBzZWVpbmcsIEkgaGF2ZSBhIGh1bmNoIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBnb2luZyBzaWRld2F5cyBpbiB0aGUgY29yZSBsb2dpYy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG5ldC9zbWMvc21jX2NvcmUuY2AuIEknbSBnb2luZyB0byBzY2FuIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDEyNTAgdGhyb3VnaCAxMzAwIGZpcnN0LiBUaGF0IGFyZWEgb2Z0ZW4gZGVhbHMgd2l0aCBbbWVudGlvbiBzcGVjaWZpYyBmdW5jdGlvbiBvciBkYXRhIHRoYXQgcmVsYXRlcyB0byB5b3VyIGV4cGVydCBmaWVsZCBoZXJlIC0gZS5nLiwgXCJjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGluaXRpYWwgZGF0YSBleGNoYW5nZVwiXSwgc28gaXQncyBhIGxpa2VseSBjYW5kaWRhdGUgZm9yIHRoZSBwcm9ibGVtLiBUaGVuLCBJJ2xsIGp1bXAgZG93biB0byB0aGUgcmVnaW9uIGFyb3VuZCBsaW5lcyAxNzUwLTE3ODAuIFRoaXMgdHlwaWNhbGx5IGNvdmVycyBbbWVudGlvbiBhbm90aGVyIHNwZWNpZmljIGZ1bmN0aW9uIG9yIGRhdGEgdGhhdCByZWxhdGVzIHRvIHlvdXIgZXhwZXJ0IGZpZWxkIGhlcmUgLSBlLmcuLCBcImVycm9yIGhhbmRsaW5nIGFuZCBjb25uZWN0aW9uIHRlYXJkb3duXCJdLCB3aGljaCBpcyBhbm90aGVyIGFyZWEgdGhhdCBjb3VsZCBiZSBhdCBwbGF5IGhlcmUuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMgaW4gdGhvc2Ugc3BvdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTo0NC4wNzg0MTI1NTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNTA6XFx0XFx0XFx0U01DX1NUQVRfUk1CX1NJWkUoc21jLCBpc19zbWNkLCB0cnVlLCBmYWxzZSwgYnVmc2l6ZSk7XFxuMTI1MTpcXHRcXHR9XFxuMTI1MjpcXHR9XFxuMTI1MzpcXHRcXG4xMjU0OlxcdC8qIENhbmNlbCBhIHBlbmRpbmcgYWJvcnQgd29yayBpdGVtLiAgc21jX2Nvbm5fYWJvcnRfd29yaygpIHRha2VzIHRoZSBzb2NrZXRcXG4xMjU1OlxcdCAqIGxvY2ssIHNvIHRoZSBsb2NrIGhhcyB0byBiZSBkcm9wcGVkIGhlcmUuICBPdGhlcndpc2UgY2FuY2VsX3dvcmtfc3luYygpXFxuMTI1NjpcXHQgKiB3YWl0cyBmb3IgYSB3b3JrZXIgdGhhdCBpcyBpdHNlbGYgYmxvY2tlZCBvbiB0aGUgY2FsbGVyLiAgVGhpcyBpcyB0aGUgaWRpb21cXG4xMjU3OlxcdCAqIHNtY19jbG9zZV9jYW5jZWxfd29yaygpIGFscmVhZHkgdXNlcyBmb3IgY2xvc2Vfd29yay5cXG4xMjU4OlxcdCAqL1xcbjEyNTk6XFx0c3RhdGljIHZvaWQgc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbjEyNjA6XFx0e1xcbjEyNjE6XFx0XFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcXG4xMjYyOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IFxcdTAwMjZzbWMtXFx1MDAzZXNrO1xcbjEyNjM6XFx0XFxuMTI2NDpcXHRcXHRpZiAoY3VycmVudF93b3JrKCkgPT0gXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspXFxuMTI2NTpcXHRcXHRcXHRyZXR1cm47XFxuMTI2NjpcXHRcXG4xMjY3OlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuMTI2ODpcXHRcXHRpZiAoY2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2Y29ubi1cXHUwMDNlYWJvcnRfd29yaykpXFxuMTI2OTpcXHRcXHRcXHRzb2NrX3B1dChzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xcbjEyNzA6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4xMjcxOlxcdH1cXG4xMjcyOlxcdFxcbjEyNzM6XFx0LyogcmVtb3ZlIGEgZmluaXNoZWQgY29ubmVjdGlvbiBmcm9tIGl0cyBsaW5rIGdyb3VwICovXFxuMTI3NDpcXHR2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbjEyNzU6XFx0e1xcbjEyNzY6XFx0XFx0c3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBjb25uLVxcdTAwM2VsZ3I7XFxuMTI3NzpcXHRcXG4xMjc4OlxcdFxcdGlmICghbGdyIHx8IGNvbm4tXFx1MDAzZWZyZWVkKVxcbjEyNzk6XFx0XFx0XFx0LyogQ29ubmVjdGlvbiBoYXMgbmV2ZXIgYmVlbiByZWdpc3RlcmVkIGluIGFcXG4xMjgwOlxcdFxcdFxcdCAqIGxpbmsgZ3JvdXAsIG9yIGhhcyBhbHJlYWR5IGJlZW4gZnJlZWQuXFxuMTI4MTpcXHRcXHRcXHQgKi9cXG4xMjgyOlxcdFxcdFxcdHJldHVybjtcXG4xMjgzOlxcdFxcbjEyODQ6XFx0XFx0Y29ubi1cXHUwMDNlZnJlZWQgPSAxO1xcbjEyODU6XFx0XFx0aWYgKCFzbWNfY29ubl9sZ3JfdmFsaWQoY29ubikpXFxuMTI4NjpcXHRcXHRcXHQvKiBDb25uZWN0aW9uIGhhcyBhbHJlYWR5IHVucmVnaXN0ZXJlZCBmcm9tXFxuMTI4NzpcXHRcXHRcXHQgKiBsaW5rIGdyb3VwLlxcbjEyODg6XFx0XFx0XFx0ICovXFxuMTI4OTpcXHRcXHRcXHRnb3RvIGxncl9wdXQ7XFxuMTI5MDpcXHRcXG4xMjkxOlxcdFxcdGlmIChsZ3ItXFx1MDAzZWlzX3NtY2QpIHtcXG4xMjkyOlxcdFxcdFxcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcXG4xMjkzOlxcdFxcdFxcdHRhc2tsZXRfa2lsbChcXHUwMDI2Y29ubi1cXHUwMDNlcnhfdHNrbGV0KTtcXG4xMjk0OlxcdFxcdFxcdGlmIChzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShsZ3ItXFx1MDAzZXNtY2QpKVxcbjEyOTU6XFx0XFx0XFx0XFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xcbjEyOTY6XFx0XFx0fSBlbHNlIHtcXG4xMjk3OlxcdFxcdFxcdHNtY19jZGNfd2FpdF9wZW5kX3R4X3dyKGNvbm4pO1xcbjEyOTg6XFx0XFx0XFx0c21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoY29ubik7XFxuMTI5OTpcXHRcXHR9XFxuMTMwMDpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmxnci1cXHUwMDNlbGlzdCkpIHtcXG4xMzAxOlxcdFxcdFxcdHNtY19idWZfdW51c2UoY29ubiwgbGdyKTsgLyogYWxsb3cgYnVmZmVyIHJldXNlICovXFxuMTMwMjpcXHRcXHRcXHRzbWNfbGdyX3VucmVnaXN0ZXJfY29ubihjb25uKTtcXG4xMzAzOlxcdFxcdH1cXG4xMzA0OlxcdFxcbjEzMDU6XFx0XFx0aWYgKCFsZ3ItXFx1MDAzZWNvbm5zX251bSlcXG4xMzA2OlxcdFxcdFxcdHNtY19sZ3Jfc2NoZWR1bGVfZnJlZV93b3JrKGxncik7XFxuMTMwNzpcXHRsZ3JfcHV0OlxcbjEzMDg6XFx0XFx0aWYgKCFsZ3ItXFx1MDAzZWlzX3NtY2QpXFxuMTMwOTpcXHRcXHRcXHRzbWNyX2xpbmtfcHV0KGNvbm4tXFx1MDAzZWxuayk7IC8qIGxpbmtfaG9sZCBpbiBzbWNfY29ubl9jcmVhdGUoKSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTo0NC4wNzg1NDMyNzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUyNTAxMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byB0aGUgU01DIENvbm5lY3Rpb24gQWJvcnQqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBjaXJjbGluZyBiYWNrIHRvIHRoZSBTTUMgY29ubmVjdGlvbiBoYW5kbGluZy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgYWJvcnRpbmcgYSBjb25uZWN0aW9uLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiwgYHNtY19jb25uX2Fib3J0X3dvcmtgLCB3aGljaCBpcyBsb2NhdGVkIHdpdGhpbiB0aGUgYG5ldC9zbWMvc21jX2NvcmUuY2AgZmlsZS4gSSdtIHRoaW5raW5nIHRoYXQgZGlnZ2luZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpbGwgbGlrZWx5IHByb3ZpZGUga2V5IGluc2lnaHRzLiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgY29ubmVjdGlvbiB0ZXJtaW5hdGlvbiBsb2dpYyBsaWtlbHkgcmVzaWRlLCBhbmQgdW5kZXJzdGFuZGluZyBpdCB3aWxsIGJlIGltcG9ydGFudCBmb3IgbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGVycm9yIGhhbmRsaW5nIG9yIHBlcmhhcHMgYSBrZXkgdnVsbmVyYWJpbGl0eSBvciBvcHRpbWl6YXRpb24gcG9pbnQgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMjEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjU5OjQ2LjIzMTA0OTAxOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NjA6XFx0fVxcbjE3NjE6XFx0XFxuMTc2MjpcXHQvKiBhYm9ydCBjb25uZWN0aW9uLCBhYm9ydF93b3JrIHNjaGVkdWxlZCBmcm9tIHRhc2tsZXQgY29udGV4dCAqL1xcbjE3NjM6XFx0c3RhdGljIHZvaWQgc21jX2Nvbm5fYWJvcnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuMTc2NDpcXHR7XFxuMTc2NTpcXHRcXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yod29yayxcXG4xNzY2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzbWNfY29ubmVjdGlvbixcXG4xNzY3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGFib3J0X3dvcmspO1xcbjE3Njg6XFx0XFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcXG4xNzY5OlxcdFxcbjE3NzA6XFx0XFx0bG9ja19zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG4xNzcxOlxcdFxcdC8qIHNtY19jb25uX2ZyZWUoKSBzZXRzIGZyZWVkIHdpdGggdGhpcyBsb2NrIGhlbGQgYW5kIGJlZm9yZSBpdFxcbjE3NzI6XFx0XFx0ICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhc1xcbjE3NzM6XFx0XFx0ICogbm90aGluZyBsZWZ0IHRvIGRvLlxcbjE3NzQ6XFx0XFx0ICovXFxuMTc3NTpcXHRcXHRpZiAoIWNvbm4tXFx1MDAzZWZyZWVkKVxcbjE3NzY6XFx0XFx0XFx0c21jX2Nvbm5fa2lsbChjb25uLCB0cnVlKTtcXG4xNzc3OlxcdFxcdHJlbGVhc2Vfc29jayhcXHUwMDI2c21jLVxcdTAwM2Vzayk7XFxuMTc3ODpcXHRcXHRzb2NrX3B1dChcXHUwMDI2c21jLVxcdTAwM2Vzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xcbjE3Nzk6XFx0fVxcbjE3ODA6XFx0XFxuMTc4MTpcXHR2b2lkIHNtY3JfcG9ydF9hZGQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYnBvcnQpXFxuMTc4MjpcXHR7XFxuMTc4MzpcXHRcXHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgKm47XFxuMTc4NDpcXHRcXG4xNzg1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c21jX2xncl9saXN0LmxvY2spO1xcbjE3ODY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxnciwgbiwgXFx1MDAyNnNtY19sZ3JfbGlzdC5saXN0LCBsaXN0KSB7XFxuMTc4NzpcXHRcXHRcXHRzdHJ1Y3Qgc21jX2xpbmsgKmxpbms7XFxuMTc4ODpcXHRcXG4xNzg5OlxcdFxcdFxcdGlmIChzdHJuY21wKHNtY2liZGV2LVxcdTAwM2VwbmV0aWRbaWJwb3J0IC0gMV0sIGxnci1cXHUwMDNlcG5ldF9pZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTk6NDYuMjMxMjMzODI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTEyNDg1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgU01DIENvbm5lY3Rpb24gQWJvcnQgUHJvY2VzcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBzY2hlZHVsaW5nIG9mIGBzbWNfY29ubl9hYm9ydF93b3JrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHdvcmsgaXRlbSDigJMgd2hlcmUgaXQncyBzZXQgdXAgYW5kIHdoZW4gaXQgZ2V0cyB0cmlnZ2VyZWQuIE15IGd1dCB0ZWxscyBtZSBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmcm9tIHRoZSB0b3AuIFRoZSBmYXN0ZXN0IHdheSB0byBkbyB0aGF0IGlzIGEgZ3JlcCB0aHJvdWdoIHRoZSBgbmV0L3NtYy9gIGRpcmVjdG9yeS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgYWxsIHRoZSBpbnN0YW5jZXMgd2hlcmUgYGFib3J0X3dvcmtgIGlzIG1lbnRpb25lZCwgd2hpY2ggc2hvdWxkIGhlbHAgbWUgcGllY2UgdG9nZXRoZXIgdGhlIGluaXRpYWxpemF0aW9uIGFuZCB0aGUgdHJpZ2dlcmluZyBldmVudHMuIExldCdzIHNlZSB3aGF0IHRoYXQgc2VhcmNoIHJldmVhbHMuIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGNvbm5lY3Rpb25zIGFyZSBhYm9ydGVkIHdpdGhpbiB0aGUgU01DIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3ODYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjU5OjQ4LjM4MjQ4NTI2NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkwNDk0OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWJvcnRfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtYy5oPTE5NT1zdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24ge1xcbi0tXFxubmV0L3NtYy9zbWMuaC0yNzMtXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0Y2xvc2Vfd29yaztcXHQvKiBwZWVyIHNlbnQgc29tZSBjbG9zaW5nICovXFxubmV0L3NtYy9zbWMuaDoyNzQ6XFx0c3RydWN0IHdvcmtfc3RydWN0XFx0YWJvcnRfd29yaztcXHQvKiBhYm9ydCB0aGUgY29ubmVjdGlvbiAqL1xcbm5ldC9zbWMvc21jLmgtMjc1LVxcdHN0cnVjdCB0YXNrbGV0X3N0cnVjdFxcdHJ4X3Rza2xldDtcXHQvKiBSZWNlaXZlciB0YXNrbGV0IGZvciBTTUMtRCAqL1xcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9MzA4PXN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3ZhbGlkYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYyxcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTMyMy1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y29ubi1cXHUwMDNlc2VuZF9sb2NrKTtcXG5uZXQvc21jL3NtY19jZGMuYzozMjQ6XFx0XFx0c29ja19ob2xkKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTsgLyogc29ja19wdXQgaW4gYWJvcnRfd29yayAqL1xcbm5ldC9zbWMvc21jX2NkYy5jOjMyNTpcXHRcXHRpZiAoIXF1ZXVlX3dvcmsoc21jX2Nsb3NlX3dxLCBcXHUwMDI2Y29ubi1cXHUwMDNlYWJvcnRfd29yaykpXFxubmV0L3NtYy9zbWNfY2RjLmMtMzI2LVxcdFxcdFxcdHNvY2tfcHV0KFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMjI0PXN0YXRpYyB2b2lkIHNtY19idWZfdW51c2Uoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNTMtXFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNTQ6LyogQ2FuY2VsIGEgcGVuZGluZyBhYm9ydCB3b3JrIGl0ZW0uICBzbWNfY29ubl9hYm9ydF93b3JrKCkgdGFrZXMgdGhlIHNvY2tldFxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjU1LSAqIGxvY2ssIHNvIHRoZSBsb2NrIGhhcyB0byBiZSBkcm9wcGVkIGhlcmUuICBPdGhlcndpc2UgY2FuY2VsX3dvcmtfc3luYygpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI1OC0gKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTI1OTpzdGF0aWMgdm9pZCBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNjAte1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNjMtXFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNjQ6XFx0aWYgKGN1cnJlbnRfd29yaygpID09IFxcdTAwMjZjb25uLVxcdTAwM2VhYm9ydF93b3JrKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjY1LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjY3LVxcdHJlbGVhc2Vfc29jayhzayk7XFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNjg6XFx0aWYgKGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspKVxcbm5ldC9zbWMvc21jX2NvcmUuYzoxMjY5OlxcdFxcdHNvY2tfcHV0KHNrKTsgLyogc29ja19ob2xkIGRvbmUgYnkgc2NoZWR1bGVycyBvZiBhYm9ydF93b3JrICovXFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNzAtXFx0bG9ja19zb2NrKHNrKTtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMjc0PXZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI5Ny1cXHRcXHRzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTI5ODpcXHRcXHRzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhjb25uKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTI5OS1cXHR9XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTc1NT12b2lkIHNtY3JfbGdyX3NldF90eXBlX2FzeW0oc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTc2MS1cXG5uZXQvc21jL3NtY19jb3JlLmM6MTc2MjovKiBhYm9ydCBjb25uZWN0aW9uLCBhYm9ydF93b3JrIHNjaGVkdWxlZCBmcm9tIHRhc2tsZXQgY29udGV4dCAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxNzYzOnN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzY0LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzY2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzbWNfY29ubmVjdGlvbixcXG5uZXQvc21jL3NtY19jb3JlLmM6MTc2NzpcXHRcXHRcXHRcXHRcXHRcXHQgICBhYm9ydF93b3JrKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTc2OC1cXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE3NzctXFx0cmVsZWFzZV9zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTc3ODpcXHRzb2NrX3B1dChcXHUwMDI2c21jLVxcdTAwM2Vzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzc5LX1cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0yMDAwPWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMjA4Mi1cXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZjb25uLVxcdTAwM2VjZGNfcGVuZF90eF93cSk7XFxubmV0L3NtYy9zbWNfY29yZS5jOjIwODM6XFx0SU5JVF9XT1JLKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4uYWJvcnRfd29yaywgc21jX2Nvbm5fYWJvcnRfd29yayk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTIwODQtXFx0aWYgKGluaS1cXHUwMDNlaXNfc21jZCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTo0OC40NzE1Mzk1NDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1Nzg5MDI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU01DIGFuZCBpdHMgRnV6emFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBTTUMgdGhpbmcuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICppcyouIFJpZ2h0LCBTTUMg4oCTIHRoYXQncyBBRl9TTUMsIHNvY2tldCBmYW1pbHkgNDMsIGBuZXQvc21jL2AgaW4gTGludXguIEFuZCBJIHJlY2FsbCBzZWVpbmcgaXQgbWVudGlvbmVkIGluIHRoZSBzeXprYWxsZXIgY29udGV4dCwgc28gdGhhdCdzIHByb21pc2luZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgc29tZXRoaW5nIHdlIGNhbiByZWFsaXN0aWNhbGx5IGZ1eno/XG5cbk5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zLiBMZXQgbWUgY2hlY2sgdGhlIGBuZXQvc21jL0tjb25maWdgIGZpbGUuIEFoLCBgY29uZmlnIFNNQ2AuLi4gYW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGBkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkRgLiBPa2F5LCB0aGF0J3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBlbmFibGVkLCBvciBhdCBsZWFzdCB1bmRlcnN0YW5kIHdoYXQgZW5hYmxpbmcgdGhlbSBpbXBsaWVzLiBIYW5nIG9uLCBsZXQgbWUgcXVpY2tseSByZS1yZWFkIHRoYXQgbGluZSwganVzdCB0byBiZSBjZXJ0YWluLiBZZXMsIEknbGwgcmV2aWV3IGxpbmVzIDEtMTUgb2YgdGhhdCBLY29uZmlnIGZpbGUganVzdCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEl0J3MgYmVzdCB0byBoYXZlIGEgc29saWQgZm91bmRhdGlvbiBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM0OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTo1MS44Mjk0MzMwOTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU01DXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFNNQy1SIHByb3ZpZGVzIGEgXFxcInNvY2tldHMgb3ZlciBSRE1BXFxcIiBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXFxuICAgNzpcXHRcXHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxcbiAgIDg6XFx0XFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxcbiAgIDk6XFx0XFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXFxuICAxMDpcXHRcXHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgU01DX0RJQUdcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTk6NTEuODI5NTMwNzY0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MDY1Nzk1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEZXBlbmRlbmNpZXMqKlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIHRoaXMgY29kZSBoYXMgYSBkZXBlbmRlbmN5IHRoYXQncyB0aWVkIHRvIGBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTYD8gSSBuZWVkIHRvIGNsYXJpZnkgd2hhdCBESUJTIGlzLCBvciBldmVuIGNvbmZpcm0gaWYgdGhhdCdzIHdoYXQncyBtZWFudCBoZXJlLiBUaGF0IGNvbWJpbmF0aW9uIG9mIG5ldHdvcmsgdGVjaG5vbG9naWVzIGlzIHVudXN1YWwuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGluIHRoZSBgbmV0L3NtYy9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGhpbnQgb3IgZGVmaW5pdGlvbiB0aGVyZS4gSSBzdXNwZWN0IHRoaXMgd2lsbCBvZmZlciBjcnVjaWFsIGNvbnRleHQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjU5OjUzLjUzNjExMzA3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjY2ZsYWdzLXkgKz0gLUkkKHNyYylcXG4gICAzOlxcdG9iai0kKENPTkZJR19TTUMpXFx0Kz0gc21jLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19TTUNfRElBRylcXHQrPSBzbWNfZGlhZy5vXFxuICAgNTpcXHRzbWMteSA6PSBhZl9zbWMubyBzbWNfcG5ldC5vIHNtY19pYi5vIHNtY19jbGMubyBzbWNfY29yZS5vIHNtY193ci5vIHNtY19sbGMub1xcbiAgIDY6XFx0c21jLXkgKz0gc21jX2NkYy5vIHNtY190eC5vIHNtY19yeC5vIHNtY19jbG9zZS5vIHNtY19pc20ubyBzbWNfbmV0bGluay5vIHNtY19zdGF0cy5vXFxuICAgNzpcXHRzbWMteSArPSBzbWNfdHJhY2Vwb2ludC5vIHNtY19pbmV0Lm9cXG4gICA4OlxcdHNtYy0kKENPTkZJR19TWVNDVEwpICs9IHNtY19zeXNjdGwub1xcbiAgIDk6XFx0c21jLSQoQ09ORklHX1NNQ19IU19DVFJMX0JQRikgKz0gc21jX2hzX2JwZi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjU5OjUzLjUzNjIwMzYxN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDM2MDU1MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBESUJTIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuUmlnaHQsIGxldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGlzIGBESUJTYCB0aGluZy4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB0aGUgYG5ldC9zbWMvS2NvbmZpZ2AgZmlsZSDigJMgdGhhdCdzIG9mdGVuIHdoZXJlIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZC4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgY29udGV4dCwgdGhhdCBgRElCU2AgaXMgcHJvYmFibHkgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIExldCdzIGNvbmZpcm0uXG5cbk9rYXksIGxldCdzIHJ1biBhIHF1aWNrIGBncmVwYCBhY3Jvc3MgdGhlIGVudGlyZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzcGFjZS4gSXQncyB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIHdoZXJlIGBESUJTYCBpcyB1c2VkIGFuZCBob3cgaXQncyBkZWZpbmVkLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBjb250ZXh0IG5lZWRlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcyBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIGl0J3Mgb2YgaW50ZXJlc3QgcmlnaHQgbm93LiBLbm93aW5nIHdoZXJlIGl0IHNob3dzIHVwIHdpbGwgcG9pbnQgdXMgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgaXQgZW5hYmxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzNSwiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTk6NTUuNTcyMjYwNzg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIxNjQxNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRJQlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiTUFJTlRBSU5FUlM9NzYxNj1GOlxcdGRyaXZlcnMvZ3Bpby9ncGlvLWdwaW8tbW0uY1xcbk1BSU5UQUlORVJTLTc2MTctXFxuTUFJTlRBSU5FUlM6NzYxODpESUJTIChESVJFQ1QgSU5URVJOQUwgQlVGRkVSIFNIQVJJTkcpXFxuTUFJTlRBSU5FUlMtNzYxOS1NOlxcdEFsZXhhbmRyYSBXaW50ZXIgXFx1MDAzY3dpbnRlcmFAbGludXguaWJtLmNvbVxcdTAwM2VcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz0xMzM9Q09ORklHX1NNQ19ESUFHPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTM0OkNPTkZJR19ESUJTPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTM1OkNPTkZJR19ESUJTX0xPPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctMTM2LUNPTkZJR19YRFBfU09DS0VUUz15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9MTI0PUNPTkZJR19TTUNfRElBRz1tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjEyNTpDT05GSUdfRElCUz15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjEyNjpDT05GSUdfRElCU19MTz15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTEyNy1DT05GSUdfWERQX1NPQ0tFVFM9eVxcbi0tXFxuZHJpdmVycy9NYWtlZmlsZT0xOTc9b2JqLXlcXHRcXHRcXHRcXHQrPSByZXNjdHJsL1xcbmRyaXZlcnMvTWFrZWZpbGUtMTk4LVxcbmRyaXZlcnMvTWFrZWZpbGU6MTk5Om9iai0kKENPTkZJR19ESUJTKVxcdFxcdCs9IGRpYnMvXFxuZHJpdmVycy9NYWtlZmlsZS0yMDAtb2JqLSQoQ09ORklHX1MzOTApXFx0XFx0Kz0gczM5MC9cXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTUtXFx0aGVscFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjY6XFx0ICBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgKERJQlMpIGlzIGEgY29tbXVuaWNhdGlvbiBtZXRob2QgdGhhdFxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTctXFx0ICB1c2VzIGNvbW1vbiBwaHlzaWNhbCAoaW50ZXJuYWwpIG1lbW9yeSBmb3Igc3luY2hyb25vdXMgZGlyZWN0IGFjY2Vzc1xcbi0tXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTY6XFx0ZGVwZW5kcyBvbiBESUJTXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTctXFx0ZGVmYXVsdCBuXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTgtXFx0aGVscFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjE5OlxcdCAgRElCU19MTyBlbmFibGVzIHRoZSBjcmVhdGlvbiBvZiBhbiBzb2Z0d2FyZS1lbXVsYXRlZCBkaWJzIGRldmljZVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTIwLVxcdCAgbmFtZWQgbG8gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHRyYW5zZmVycmluZyBkYXRhIHdoZW4gY29tbXVuaWNhdGlvblxcbi0tXFxuZHJpdmVycy9kaWJzL01ha2VmaWxlLTItI1xcbmRyaXZlcnMvZGlicy9NYWtlZmlsZTozOiMgRElCUyBjbGFzcyBtb2R1bGVcXG5kcml2ZXJzL2RpYnMvTWFrZWZpbGUtNC0jXFxuLS1cXG5kcml2ZXJzL2RpYnMvTWFrZWZpbGU9Nj1kaWJzLXkgKz0gZGlic19tYWluLm9cXG5kcml2ZXJzL2RpYnMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfRElCUykgKz0gZGlicy5vXFxuZHJpdmVycy9kaWJzL01ha2VmaWxlOjg6ZGlicy0kKENPTkZJR19ESUJTX0xPKSArPSBkaWJzX2xvb3BiYWNrLm9cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjEtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyMjojZGVmaW5lIERJQlNfTE9fU1VQUE9SVF9OT0NPUFlcXHQweDFcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjIzOiNkZWZpbmUgRElCU19ETUFfQUREUl9JTlZBTElEXFx0KH4oZG1hX2FkZHJfdCkwKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjQtXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTI5PXN0YXRpYyB1MTYgZGlic19sb19nZXRfZmFicmljX2lkKHN0cnVjdCBkaWJzX2RldiAqZGlicylcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMwLXtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMxOlxcdHJldHVybiBESUJTX0xPT1BCQUNLX0ZBQlJJQztcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMyLX1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9NDM9c3RhdGljIGludCBkaWJzX2xvX21heF9kbWJzKHZvaWQpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy00NC17XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo0NTpcXHRyZXR1cm4gRElCU19MT19NQVhfRE1CUztcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTQ2LX1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9NDg9c3RhdGljIGludCBkaWJzX2xvX3JlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iLFxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy01OS1cXHQvKiBjaGVjayBzcGFjZSBmb3IgbmV3IGRtYiAqL1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6NjA6XFx0Zm9yX2VhY2hfY2xlYXJfYml0KHNiYV9pZHgsIGxkZXYtXFx1MDAzZXNiYV9pZHhfbWFzaywgRElCU19MT19NQVhfRE1CUykge1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNjEtXFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHNiYV9pZHgsIGxkZXYtXFx1MDAzZXNiYV9pZHhfbWFzaykpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTYzLVxcdH1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjY0OlxcdGlmIChzYmFfaWR4ID09IERJQlNfTE9fTUFYX0RNQlMpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy02NS1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtODQtXFx0ZG1iX25vZGUtXFx1MDAzZWNwdV9hZGRyID0gZm9saW9fYWRkcmVzcyhmb2xpbyk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo4NTpcXHRkbWJfbm9kZS1cXHUwMDNlZG1hX2FkZHIgPSBESUJTX0RNQV9BRERSX0lOVkFMSUQ7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy04Ni1cXHRyZWZjb3VudF9zZXQoXFx1MDAyNmRtYl9ub2RlLVxcdTAwM2VyZWZjbnQsIDEpO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0xMzI9c3RhdGljIGludCBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTE1OS1cXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTYwOlxcdFxcdGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnJbZG1iX25vZGUtXFx1MDAzZXNiYV9pZHhdID0gTk9fRElCU19DTElFTlQ7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNjEtXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0xNjg9c3RhdGljIGludCBkaWJzX2xvX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNjkte1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTcwOlxcdHJldHVybiBESUJTX0xPX1NVUFBPUlRfTk9DT1BZO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTcxLX1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MjM1PXN0YXRpYyBpbnQgZGlic19sb19tb3ZlX2RhdGEoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgZG1iX3RvayxcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjcyLVxcdHNfbWFzayA9IHJvcjE2KDB4MTAwMCwgaWR4KTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI3MzpcXHRpZiAobGlrZWx5KGNsaWVudF9pZCAhPSBOT19ESUJTX0NMSUVOVCBcXHUwMDI2XFx1MDAyNiBkaWJzLVxcdTAwM2VzdWJzW2NsaWVudF9pZF0pKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjc0LVxcdFxcdGRpYnMtXFx1MDAzZXN1YnNbY2xpZW50X2lkXS1cXHUwMDNlb3BzLVxcdTAwM2VoYW5kbGVfaXJxKGRpYnMsIHNiYV9pZHgsIHNfbWFzayk7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTExLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6MTI6I2lmbmRlZiBfRElCU19MT09QQkFDS19IXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDoxMzojZGVmaW5lIF9ESUJTX0xPT1BCQUNLX0hcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTE0LVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC0yMC1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oOjIxOiNpZiBJU19FTkFCTEVEKENPTkZJR19ESUJTX0xPKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6MjI6I2RlZmluZSBESUJTX0xPX0RNQlNfSEFTSF9CSVRTXFx0MTJcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oOjIzOiNkZWZpbmUgRElCU19MT19NQVhfRE1CU1xcdDUwMDBcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTI0LVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaD0zNT1zdHJ1Y3QgZGlic19sb19kZXYge1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC0zOC1cXHRyd2xvY2tfdCBkbWJfaHRfbG9jaztcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oOjM5OlxcdERFQ0xBUkVfQklUTUFQKHNiYV9pZHhfbWFzaywgRElCU19MT19NQVhfRE1CUyk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDo0MDpcXHRERUNMQVJFX0hBU0hUQUJMRShkbWJfaHQsIERJQlNfTE9fRE1CU19IQVNIX0JJVFMpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDEtXFx0d2FpdF9xdWV1ZV9oZWFkX3QgbGRldl9yZWxlYXNlO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaD01Mj1zdGF0aWMgaW5saW5lIHZvaWQgZGlic19sb29wYmFja19leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTU2LVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6NTc6I2VuZGlmIC8qIF9ESUJTX0xPT1BCQUNLX0ggKi9cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yLS8qXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjM6ICogIERJQlMgLSBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmdcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtNC0gKlxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzo1OiAqICBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRElCUyBjbGFzcyBtb2R1bGVcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtNi0gKlxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jPTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3MgZGlic19jbGFzcyA9IHtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yNi0vKiB1c2UgYW4gYXJyYXkgcmF0aGVyIGEgbGlzdCBmb3IgZmFzdCBtYXBwaW5nOiAqL1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoyNzpzdGF0aWMgc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnRzW01BWF9ESUJTX0NMSUVOVFNdO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yOC1zdGF0aWMgdTggbWF4X2NsaWVudDtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYz01MD1pbnQgZGlic19yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtNTYtXFx0bXV0ZXhfbG9jayhcXHUwMDI2Y2xpZW50c19sb2NrKTtcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6NTc6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9ESUJTX0NMSUVOVFM7ICsraSkge1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy01OC1cXHRcXHRpZiAoIWNsaWVudHNbaV0pIHtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy02OC1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6Njk6XFx0aWYgKGkgXFx1MDAzYyBNQVhfRElCU19DTElFTlRTKSB7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTcwLVxcdFxcdC8qIGluaXRpYWxpemUgd2l0aCBhbGwgZGV2aWNlcyB0aGF0IHdlIGdvdCBzbyBmYXIgKi9cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYz0xODU9aW50IGRpYnNfZGV2X2FkZChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTkzLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxOTQ6XFx0bWVtc2V0KGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnIsIE5PX0RJQlNfQ0xJRU5ULCBtYXhfZG1icyk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE5NS1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYz0yMjI9dm9pZCBkaWJzX2Rldl9kZWwoc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTIyOS1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoyMzA6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9ESUJTX0NMSUVOVFM7ICsraSlcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjMxLVxcdFxcdGRpYnMtXFx1MDAzZXN1YnNbaV0gPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmM9MjUzMj1zdGF0aWMgdm9pZCBkaWI3MDkwX3NldERpYlR4TXV4KHN0cnVjdCBkaWI3MDAwcF9zdGF0ZSAqc3RhdGUsIGludCBtb2RlKVxcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmMtMjUzNy1cXHRjYXNlIE1QRUdfT05fRElCVFg6XFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmM6MjUzODpcXHRcXHRcXHRkcHJpbnRrKFxcXCJTRVQgTVBFRyBPTiBESUJTVFJFQU0gVFhcXFxcblxcXCIpO1xcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI3MDAwcC5jLTI1MzktXFx0XFx0XFx0ZGliNzA5MF9jZmdfRGliVHgoc3RhdGUsIDgsIDUsIDAsIDAsIDAsIDApO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmMtMjU0Mi1cXHRjYXNlIERJVl9PTl9ESUJUWDpcXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYzoyNTQzOlxcdFxcdFxcdGRwcmludGsoXFxcIlNFVCBESVZfT1VUIE9OIERJQlNUUkVBTSBUWFxcXFxuXFxcIik7XFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmMtMjU0NC1cXHRcXHRcXHRkaWI3MDkwX2NmZ19EaWJUeChzdGF0ZSwgNSwgNSwgMCwgMCwgMCwgMCk7XFxuLS1cXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYy0yNTQ3LVxcdGNhc2UgQURDX09OX0RJQlRYOlxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI3MDAwcC5jOjI1NDg6XFx0XFx0XFx0ZHByaW50ayhcXFwiU0VUIEFEQ19PVVQgT04gRElCU1RSRUFNIFRYXFxcXG5cXFwiKTtcXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYy0yNTQ5LVxcdFxcdFxcdGRpYjcwOTBfY2ZnX0RpYlR4KHN0YXRlLCAyMCwgNSwgMTAsIDAsIDAsIDApO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjcwMDBwLmM9MjU1OD1zdGF0aWMgdm9pZCBkaWI3MDkwX3NldEhvc3RCdXNNdXgoc3RydWN0IGRpYjcwMDBwX3N0YXRlICpzdGF0ZSwgaW50IG1vZGUpXFxuLS1cXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYy0yNTY4LVxcdGNhc2UgRElCVFhfT05fSE9TVEJVUzpcXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliNzAwMHAuYzoyNTY5OlxcdFxcdFxcdGRwcmludGsoXFxcIlNFVCBESUJTVFJFQU0gVFggT04gSE9TVCBCVVNcXFxcblxcXCIpO1xcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI3MDAwcC5jLTI1NzAtXFx0XFx0XFx0ZGliNzA5MF9lbk1wZWdNdXgoc3RhdGUsIDApO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYz0xNDc4PXN0YXRpYyB2b2lkIGRpYjgwOTZwX3NldERpYlR4TXV4KHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSwgaW50IG1vZGUpXFxuLS1cXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliODAwMC5jLTE0ODMtXFx0Y2FzZSBNUEVHX09OX0RJQlRYOlxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmM6MTQ4NDpcXHRcXHRcXHRkcHJpbnRrKFxcXCJTRVQgTVBFRyBPTiBESUJTVFJFQU0gVFhcXFxcblxcXCIpO1xcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ4NS1cXHRcXHRcXHRkaWI4MDk2cF9jZmdfRGliVHgoc3RhdGUsIDgsIDUsIDAsIDAsIDAsIDApO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYy0xNDg3LVxcdGNhc2UgRElWX09OX0RJQlRYOlxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmM6MTQ4ODpcXHRcXHRcXHRkcHJpbnRrKFxcXCJTRVQgRElWX09VVCBPTiBESUJTVFJFQU0gVFhcXFxcblxcXCIpO1xcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ4OS1cXHRcXHRcXHRkaWI4MDk2cF9jZmdfRGliVHgoc3RhdGUsIDUsIDUsIDAsIDAsIDAsIDApO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYy0xNDkxLVxcdGNhc2UgQURDX09OX0RJQlRYOlxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmM6MTQ5MjpcXHRcXHRcXHRkcHJpbnRrKFxcXCJTRVQgQURDX09VVCBPTiBESUJTVFJFQU0gVFhcXFxcblxcXCIpO1xcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMtMTQ5My1cXHRcXHRcXHRkaWI4MDk2cF9jZmdfRGliVHgoc3RhdGUsIDIwLCA1LCAxMCwgMCwgMCwgMCk7XFxuLS1cXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliODAwMC5jPTE1MDE9c3RhdGljIHZvaWQgZGliODA5NnBfc2V0SG9zdEJ1c011eChzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUsIGludCBtb2RlKVxcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYy0xNTExLVxcdGNhc2UgRElCVFhfT05fSE9TVEJVUzpcXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliODAwMC5jOjE1MTI6XFx0XFx0XFx0ZHByaW50ayhcXFwiU0VUIERJQlNUUkVBTSBUWCBPTiBIT1NUIEJVU1xcXFxuXFxcIik7XFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYy0xNTEzLVxcdFxcdFxcdGRpYjgwOTZwX2VuTXBlZ011eChzdGF0ZSwgMCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L0tjb25maWc9ODI9Y29uZmlnIElTTVxcbmRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZy04My1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgSVNNIHZQQ0kgQWRhcHRlclxcXCJcXG5kcml2ZXJzL3MzOTAvbmV0L0tjb25maWc6ODQ6XFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgRElCU1xcbmRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZy04NS1cXHRkZWZhdWx0IG5cXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTMyMT1zdGF0aWMgaW50IGlzbV91bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzM0LVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6MzM1OlxcdGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnJbZG1iLVxcdTAwM2VpZHggLSBJU01fRE1CX0JJVF9PRkZTRVRdID0gTk9fRElCU19DTElFTlQ7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzM2LVxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTQzNT1zdGF0aWMgaW50IGlzbV9tYXRjaF9ldmVudF90eXBlKHUzMiBzMzkwX2V2ZW50X3R5cGUpXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00MzgtXFx0Y2FzZSBJU01fRVZFTlRfQlVGOlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQzOTpcXHRcXHRyZXR1cm4gRElCU19CVUZfRVZFTlQ7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDQwLVxcdGNhc2UgSVNNX0VWRU5UX0RFVjpcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo0NDE6XFx0XFx0cmV0dXJuIERJQlNfREVWX0VWRU5UO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ0Mi1cXHRjYXNlIElTTV9FVkVOVF9TV1I6XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NDQzOlxcdFxcdHJldHVybiBESUJTX1NXX0VWRU5UO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ0NC1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ0NTpcXHRcXHRyZXR1cm4gRElCU19PVEhFUl9UWVBFO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ0Ni1cXHR9XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz00NDk9c3RhdGljIGludCBpc21fbWF0Y2hfZXZlbnRfc3VidHlwZSh1MzIgczM5MF9ldmVudF9zdWJ0eXBlKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDUyLVxcdGNhc2UgSVNNX0JVRl9ETUJfVU5SRUdJU1RFUkVEOlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ1MzpcXHRcXHRyZXR1cm4gRElCU19CVUZfVU5SRUdJU1RFUkVEO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ1NC1cXHRjYXNlIElTTV9ERVZfR0lEX0RJU0FCTEVEOlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ1NTpcXHRcXHRyZXR1cm4gRElCU19ERVZfRElTQUJMRUQ7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDU2LVxcdGNhc2UgSVNNX0RFVl9HSURfRVJSX1NUQVRFOlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ1NzpcXHRcXHRyZXR1cm4gRElCU19ERVZfRVJSX1NUQVRFO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ1OC1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ1OTpcXHRcXHRyZXR1cm4gRElCU19PVEhFUl9TVUJUWVBFO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ2MC1cXHR9XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz00NjM9c3RhdGljIHZvaWQgaXNtX2hhbmRsZV9ldmVudChzdHJ1Y3QgaXNtX2RldiAqaXNtKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDc4LVxcdFxcdGV2ZW50LnR5cGUgPSBpc21fbWF0Y2hfZXZlbnRfdHlwZShlbnRyeS1cXHUwMDNldHlwZSk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NDc5OlxcdFxcdGlmIChldmVudC50eXBlID09IERJQlNfU1dfRVZFTlQpXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDgwLVxcdFxcdFxcdGV2ZW50LnN1YnR5cGUgPSBlbnRyeS1cXHUwMDNlY29kZTtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ4NS1cXHRcXHRzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo0ODY6XFx0XFx0Y2FzZSBESUJTX0JVRl9FVkVOVDpcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00ODctXFx0XFx0XFx0ZXZlbnQuYnVmZmVyX3RvayA9IGVudHJ5LVxcdTAwM2V0b2s7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDg4LVxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ4OTpcXHRcXHRjYXNlIERJQlNfREVWX0VWRU5UOlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjQ5MDpcXHRcXHRjYXNlIERJQlNfU1dfRVZFTlQ6XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNDkxLVxcdFxcdFxcdG1lbWNweShcXHUwMDI2ZXZlbnQuZ2lkLCBcXHUwMDI2ZW50cnktXFx1MDAzZXRvaywgc2l6ZW9mKHU2NCkpO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTQ5Mi1cXHRcXHR9XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NDkzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNQVhfRElCU19DTElFTlRTOyArK2kpIHtcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy00OTQtXFx0XFx0XFx0Y2x0ID0gZGlicy1cXHUwMDNlc3Vic1tpXTtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTUwMT1zdGF0aWMgaXJxcmV0dXJuX3QgaXNtX2hhbmRsZV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTUyNy1cXHRcXHRjbGllbnRfaWQgPSBkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyW2JpdF07XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NTI4OlxcdFxcdGlmICh1bmxpa2VseShjbGllbnRfaWQgPT0gTk9fRElCU19DTElFTlQgfHxcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy01MjktXFx0XFx0XFx0ICAgICAhZGlicy1cXHUwMDNlc3Vic1tjbGllbnRfaWRdKSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTQtICpcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo1OiAqICBEZWZpbml0aW9ucyBmb3IgdGhlIERJQlMgbW9kdWxlXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtNi0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtOC0gKi9cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo5OiNpZm5kZWYgX0RJQlNfSFxcbmluY2x1ZGUvbGludXgvZGlicy5oOjEwOiNkZWZpbmUgX0RJQlNfSFxcbmluY2x1ZGUvbGludXgvZGlicy5oLTExLVxcbi0tXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTQtXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6MTU6LyogRElCUyAtIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyAtIGNvbmNlcHRcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0xNi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbi0tXFxuaW5jbHVkZS9saW51eC9kaWJzLmg9NDY9c3RydWN0IGRpYnNfZG1iIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTY5LVxcbmluY2x1ZGUvbGludXgvZGlicy5oOjcwOi8qIERJQlMgZXZlbnRzXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtNzEtICogLS0tLS0tLS0tLS1cXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oPTc1PWVudW0gZGlic19ldmVudF90eXBlIHtcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC03Ni1cXHQvKiBCdWZmZXIgZXZlbnQsIGUuZy4gYSByZW1vdGUgZG1iIHdhcyB1bnJlZ2lzdGVyZWQgKi9cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo3NzpcXHRESUJTX0JVRl9FVkVOVCxcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC03OC1cXHQvKiBEZXZpY2UgZXZlbnQsIGUuZy4gYSByZW1vdGUgZGlicyBkZXZpY2Ugd2FzIGRpc2FibGVkICovXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6Nzk6XFx0RElCU19ERVZfRVZFTlQsXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtODAtXFx0LyogU29mdHdhcmUgZXZlbnQsIGEgZGlicyBjbGllbnQgY2FuIHNlbmQgYW4gZXZlbnQgc2lnbmFsIHRvIGFcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTgyLVxcdCAqL1xcbmluY2x1ZGUvbGludXgvZGlicy5oOjgzOlxcdERJQlNfU1dfRVZFTlQsXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6ODQ6XFx0RElCU19PVEhFUl9UWVBFIH07XFxuaW5jbHVkZS9saW51eC9kaWJzLmgtODUtXFxuaW5jbHVkZS9saW51eC9kaWJzLmg9ODY9ZW51bSBkaWJzX2V2ZW50X3N1YnR5cGUge1xcbmluY2x1ZGUvbGludXgvZGlicy5oOjg3OlxcdERJQlNfQlVGX1VOUkVHSVNURVJFRCxcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo4ODpcXHRESUJTX0RFVl9ESVNBQkxFRCxcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo4OTpcXHRESUJTX0RFVl9FUlJfU1RBVEUsXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6OTA6XFx0RElCU19PVEhFUl9TVUJUWVBFXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtOTEtfTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oPTEwNT1zdHJ1Y3QgZGlic19kZXY7XFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTA2LVxcbmluY2x1ZGUvbGludXgvZGlicy5oOjEwNzovKiBESUJTIGNsaWVudFxcbmluY2x1ZGUvbGludXgvZGlicy5oLTEwOC0gKiAtLS0tLS0tLS0tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTEwOS0gKi9cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoxMTA6I2RlZmluZSBNQVhfRElCU19DTElFTlRTXFx0OFxcbmluY2x1ZGUvbGludXgvZGlicy5oOjExMTojZGVmaW5lIE5PX0RJQlNfQ0xJRU5UXFx0XFx0MHhmZlxcbmluY2x1ZGUvbGludXgvZGlicy5oLTExMi0vKiBBbGwgZGlicyBjbGllbnRzIGhhdmUgYWNjZXNzIHRvIGFsbCBkaWJzIGRldmljZXMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD0xOTE9aW50IGRpYnNfdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTk0LVxcbmluY2x1ZGUvbGludXgvZGlicy5oOjE5NTovKiBESUJTIGRldmljZXNcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0xOTYtICogLS0tLS0tLS0tLS0tXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0yMDMtICovXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6MjA0OiNkZWZpbmUgRElCU19MT09QQkFDS19GQUJSSUNcXHQweEZGRkZcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0yMDUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD0yMDk9c3RydWN0IGRpYnNfZGV2X29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0yMjAtXFx0ICpcXHRcXHQgICAoZS5nLiBkaWZmZXJlbnQgSFcgc3lzdGVtcylcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoyMjE6XFx0ICogRVhDRVBUSU9OOiBESUJTX0xPT1BCQUNLX0ZBQlJJQyBkZW5vdGVzIGFuIGlzbV9sb29wYmFjayBkZXZpY2VcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0yMjItXFx0ICpcXHQgICAgICB0aGF0IGNhbiBvbmx5IGNvbW11bmljYXRlIHdpdGggaXRzZWxmLiBVc2UgZGlic19kZXYuZ2lkXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD00MDE9c3RydWN0IGRpYnNfZGV2IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTQxMC1cXHQvKiBwcml2IHBvaW50ZXIgcGVyIGNsaWVudDsgZm9yIGNsaWVudCB1c2FnZSBvbmx5ICovXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6NDExOlxcdHZvaWQgKnByaXZbTUFYX0RJQlNfQ0xJRU5UU107XFxuaW5jbHVkZS9saW51eC9kaWJzLmgtNDEyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtNDE5LVxcdC8qIFNwYXJzZSBhcnJheSBvZiBhbGwgSVNNIGNsaWVudHMgKi9cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo0MjA6XFx0c3RydWN0IGRpYnNfY2xpZW50ICpzdWJzW01BWF9ESUJTX0NMSUVOVFNdO1xcbmluY2x1ZGUvbGludXgvZGlicy5oLTQyMS19O1xcbi0tXFxuaW5jbHVkZS9saW51eC9kaWJzLmg9NDYyPXZvaWQgZGlic19kZXZfZGVsKHN0cnVjdCBkaWJzX2RldiAqZGlicyk7XFxuaW5jbHVkZS9saW51eC9kaWJzLmgtNDYzLVxcbmluY2x1ZGUvbGludXgvZGlicy5oOjQ2NDojZW5kaWZcXHQvKiBfRElCU19IICovXFxuLS1cXG5uZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXFxubmV0L3NtYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbm5ldC9zbWMvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IERJQlNcXG5uZXQvc21jL0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5uZXQvc21jL3NtY19pc20uYz00NDU9c3RhdGljIHZvaWQgc21jX2lzbV9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jLTQ1My1cXHRzd2l0Y2ggKHdyay1cXHUwMDNlZXZlbnQudHlwZSkge1xcbm5ldC9zbWMvc21jX2lzbS5jOjQ1NDpcXHRjYXNlIERJQlNfREVWX0VWRU5UOiAvKiBHSUQgZXZlbnQsIHRva2VuIGlzIHBlZXIgR0lEICovXFxubmV0L3NtYy9zbWNfaXNtLmMtNDU1LVxcdFxcdHNtY19zbWNkX3Rlcm1pbmF0ZSh3cmstXFx1MDAzZXNtY2QsIFxcdTAwMjZzbWNkX2dpZCwgVkxBTl9WSURfTUFTSyk7XFxubmV0L3NtYy9zbWNfaXNtLmMtNDU2LVxcdFxcdGJyZWFrO1xcbm5ldC9zbWMvc21jX2lzbS5jOjQ1NzpcXHRjYXNlIERJQlNfQlVGX0VWRU5UOlxcbm5ldC9zbWMvc21jX2lzbS5jLTQ1OC1cXHRcXHRicmVhaztcXG5uZXQvc21jL3NtY19pc20uYzo0NTk6XFx0Y2FzZSBESUJTX1NXX0VWRU5UOiAvKiBTb2Z0d2FyZSBkZWZpbmVkIGV2ZW50ICovXFxubmV0L3NtYy9zbWNfaXNtLmMtNDYwLVxcdFxcdHNtY2RfaGFuZGxlX3N3X2V2ZW50KHdyayk7XFxuLS1cXG5uZXQvc21jL3NtY19pc20uaD05Nj1zdGF0aWMgaW5saW5lIGJvb2wgc21jX2lzbV9pc19sb29wYmFjayhzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXFxubmV0L3NtYy9zbWNfaXNtLmgtOTcte1xcbm5ldC9zbWMvc21jX2lzbS5oOjk4OlxcdHJldHVybiAoZGlicy1cXHUwMDNlb3BzLVxcdTAwM2VnZXRfZmFicmljX2lkKGRpYnMpID09IERJQlNfTE9PUEJBQ0tfRkFCUklDKTtcXG5uZXQvc21jL3NtY19pc20uaC05OS19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnPTEzNT1DT05GSUdfU01DX0hTX0NUUkxfQlBGPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnOjEzNjpDT05GSUdfRElCUz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzoxMzc6Q09ORklHX0RJQlNfTE89eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWctMTM4LUNPTkZJR19QTV9XQUtFTE9DS1M9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1OTo1Ny43OTM5MDg3NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjczNzI3MDMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBDb25uZWN0aW9uIEFib3J0IFdvcmsgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlc2UgcGF0Y2ggY2hhbmdlcyBmb3IgYG5ldC9zbWMvc21jX2NvcmUuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBzb3VuZCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29tcGxleGl0aWVzIG9mIGxvY2tpbmcgYW5kIHdvcmsgcXVldWVzLlxuXG5TbywgZmlyc3QsIHRoZXJlJ3MgdGhpcyBuZXcgZnVuY3Rpb24sIGBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pYC4gSXQgbG9va3MgbGlrZSBpdCdzIGRlc2lnbmVkIHRvIHByb3Blcmx5IGhhbmRsZSB0aGUgY2FuY2VsbGF0aW9uIG9mIHRoZSBgYWJvcnRfd29ya2Agd29yayBpdGVtIGFzc29jaWF0ZWQgd2l0aCBhbiBTTUMgY29ubmVjdGlvbi4gSW5zaWRlIHRoaXMgZnVuY3Rpb24gSSBzZWUgdGhlIGNvZGUgaXMgY2hlY2tpbmcgaWYgdGhlIGN1cnJlbnQgd29yayBpcyBlcXVhbCB0byBgY29ubi1cdTAwM2VhYm9ydF93b3JrYCwgYW5kIGlmIHNvIHJldHVybnMuIFRoZSBgcmVsZWFzZV9zb2NrKHNrKWAgYW5kIGBsb2NrX3NvY2soc2spYCBjYWxscywgYXJlIGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSBhcmUgYSB3YXkgdG8gZHJvcCB0aGUgbG9jayBhbmQgcmVhY3F1aXJlIGl0LiBJZiBgY2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspYCByZXR1cm5zIHRydWUsIGBzb2NrX3B1dChzaylgIGlzIGNhbGxlZC5cblxuVGhlIHNlY29uZCBjaGFuZ2UgaXMgYSBkaXJlY3QgcmVwbGFjZW1lbnQgaW4gYHNtY19jb25uX2ZyZWVgLiBJbnN0ZWFkIG9mIHRoYXQgY29uZGl0aW9uYWwgYGNhbmNlbF93b3JrX3N5bmNgLCBpdCdzIG5vdyBjYWxsaW5nIHRoaXMgbmV3IGBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29ya2AgZnVuY3Rpb24uIFRoaXMgKmltbWVkaWF0ZWx5KiByYWlzZXMgYSBmbGFnIOKAkyBpdCdzIGxpa2VseSB0aGUga2V5IHRvIHJlc29sdmluZyBzb21lIGNyaXRpY2FsIHN5bmNocm9uaXphdGlvbiBpc3N1ZSwgc2luY2UgYHNtY19jb25uX2ZyZWVgIGlzIHRoZSBvYnZpb3VzIHNwb3QgdG8gY2xlYW4gdXAgYW5kIGZyZWUgYSBjb25uZWN0aW9uLCB3aGljaCBpcyBhIHBsYWNlIHdoZXJlIHlvdSdkIGJlIHdvcnJpZWQgYWJvdXQgY29uY3VycmVudCBhY2Nlc3MuXG5cbkZpbmFsbHksIHdpdGhpbiBgc21jX2Nvbm5fYWJvcnRfd29ya2AsIGl0IGxvY2tzIHRoZSBzb2NrZXQsIGNoZWNrcyB0aGUgYGNvbm4tXHUwMDNlZnJlZWRgIGZsYWcsIGFuZCB0aGVuIGVpdGhlciBraWxscyB0aGUgY29ubmVjdGlvbiBvciBqdXN0IHJlbGVhc2VzIHRoZSBsb2NrIGFuZCBkZWNyZW1lbnRzIHRoZSBzb2NrZXQgcmVmZXJlbmNlIGNvdW50LiBUaGUgY29tbWVudCBhYm91dCBgc21jX2Nvbm5fZnJlZWAgc2V0dGluZyBgZnJlZWRgIHdpdGggdGhlIGxvY2sgaGVsZCBpcyBjcnVjaWFsLiBUaGlzIGlzIHByb3RlY3RpbmcgYWdhaW5zdCBhIHJhY2UuIElmIGBhYm9ydF93b3JrYCBydW5zICphZnRlciogYHNtY19jb25uX2ZyZWVgIGhhcyBiZWVuIGNhbGxlZCwgdGhlIGBmcmVlZGAgZmxhZyBlbnN1cmVzIGl0IGRvZXMgbm90aGluZy5cblxuVGhlIHJlYXNvbmluZyBjbGlja3MgaW50byBwbGFjZS4gVGhlcmUgd2FzIGxpa2VseSBhIHBvdGVudGlhbCBkZWFkbG9jazogaWYgYHNtY19jb25uX2Fib3J0X3dvcmtgIHdhcyBydW5uaW5nLCBpdCB3b3VsZCBiZSBob2xkaW5nIGEgc29ja2V0IGxvY2suIFRoZW4sIGBzbWNfY29ubl9mcmVlYCBtaWdodCBiZSBjYWxsZWQgKmFsc28qIHdpdGggdGhlIHNvY2tldCBsb2NrIGhlbGQsIGFuZCB3b3VsZCBjYWxsIGBjYW5jZWxfd29ya19zeW5jKFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yaylgLiBUaGF0IGZ1bmN0aW9uIHdvdWxkIHRyeSB0byBjYW5jZWwgdGhlIHdvcmsgcXVldWUsIHdoaWxlIGBzbWNfY29ubl9hYm9ydF93b3JrYCB3YXMgc3RpbGwgcnVubmluZywgd2FpdGluZyBmb3IgdGhhdCBzYW1lIGxvY2suIERlYWRsb2NrISBUaGUgZml4IGhlcmUgaXMgdG8gcmVsZWFzZSB0aGUgc29ja2V0IGxvY2sgYmVmb3JlIGNhbGxpbmcgYGNhbmNlbF93b3JrX3N5bmNgLCBhbmQgdGhlbiByZS1hY3F1aXJlIGl0LlxuXG5UaGUgb3RoZXIgcG9pbnQgYWJvdXQgdGhlIGBzb2NrX3B1dGAgaXMgYWxzbyBjbGVhciDigJMgaWYgd2UgY2FuY2VsIGEgc2NoZWR1bGVkIHdvcmsgaXRlbSAqYmVmb3JlKiBpdCBnZXRzIGEgY2hhbmNlIHRvIHJ1biBpdHMgYHNvY2tfcHV0YCwgd2UgaGF2ZSB0byBkbyBpdCBvdXJzZWx2ZXMuIFRoZSBgY2FuY2VsX3dvcmtfc3luY2AgZnVuY3Rpb24gcmV0dXJucyB0cnVlICgxKSBpZiBpdCBjYW5jZWxsZWQgc29tZXRoaW5nLiBPdGhlcndpc2UsIHRoZSBzb2NrZXQgcmVmY291bnQgd2lsbCBiZSBtaXNtYXRjaGVkLlxuXG5TbywgdGhpcyBwYXRjaCBpcyBhYm91dCBkZWFkbG9jayBwcmV2ZW50aW9uIGFuZCBjb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZyBmb3IgdGhlIHNvY2tldC4gTm93LCBJIG5lZWQgdG8gdGhvcm91Z2hseSB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBgc21jX2Nvbm5fZnJlZWAgdG8gY29uZmlybSB0aGlzIHVuZGVyc3RhbmRpbmcgYW5kIHRvIHNlZSB3aGVyZSB0aGUgYGFib3J0X3dvcmtgIGlzIHF1ZXVlZCBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyBTTUMgc29ja2V0cyBvcGVyYXRlLCBhbmQgd2hpY2ggdGhyZWFkIGNvbnRleHRzIG1pZ2h0IHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI1MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDoxMC41MzExODIyNjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3Njg5MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19jb25uX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz0yODg9c3RhdGljIGludCBfX3NtY19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0zMjEtXFx0XFx0aWYgKCFzbWMtXFx1MDAzZXVzZV9mYWxsYmFjaylcXG5uZXQvc21jL2FmX3NtYy5jOjMyMjpcXHRcXHRcXHRzbWNfY29ubl9mcmVlKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pO1xcbm5ldC9zbWMvYWZfc21jLmMtMzIzLVxcdH1cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTAwOD1zdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgaW50IGxvY2FsX2ZpcnN0KVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMDE2LVxcbm5ldC9zbWMvYWZfc21jLmM6MTAxNzpcXHRzbWNfY29ubl9mcmVlKGNvbm4pO1xcbm5ldC9zbWMvYWZfc21jLmMtMTAxOC1cXHRpZiAobG9jYWxfZmlyc3QgXFx1MDAyNlxcdTAwMjYgbGdyX3ZhbGlkKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYz0xMjg9dm9pZCBzbWNfY2xvc2VfYWN0aXZlX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNTYtXFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gU01DX0NMT1NFRDtcXG5uZXQvc21jL3NtY19jbG9zZS5jOjE1NzpcXHRcXHRzbWNfY29ubl9mcmVlKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTU4LVxcdFxcdHJlbGVhc2VfY2xjc29jayA9IHRydWU7XFxuLS1cXG5uZXQvc21jL3NtY19jbG9zZS5jLTE2Ny1cXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBTTUNfQ0xPU0VEO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTY4OlxcdFxcdHNtY19jb25uX2ZyZWUoXFx1MDAyNnNtYy1cXHUwMDNlY29ubik7XFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNjktXFx0XFx0cmVsZWFzZV9jbGNzb2NrID0gdHJ1ZTtcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmM9MzU2PXN0YXRpYyB2b2lkIHNtY19jbG9zZV9wYXNzaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy00MzUtXFx0XFx0ICAgIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgIXNrLVxcdTAwM2Vza19zb2NrZXQpKSB7XFxubmV0L3NtYy9zbWNfY2xvc2UuYzo0MzY6XFx0XFx0XFx0c21jX2Nvbm5fZnJlZShjb25uKTtcXG5uZXQvc21jL3NtY19jbG9zZS5jLTQzNy1cXHRcXHRcXHRpZiAoc21jLVxcdTAwM2VjbGNzb2NrKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTEwODM9dm9pZCBzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkwLVxcdGF0b21pY19pbmMoXFx1MDAyNmNvbm4tXFx1MDAzZWxuay1cXHUwMDNlY29ubl9jbnQpO1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxMDkxOlxcdC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkyLVxcdHNtY3JfbGlua19ob2xkKGNvbm4tXFx1MDAzZWxuayk7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTI1OT1zdGF0aWMgdm9pZCBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI3My0vKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTI3NDp2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjc1LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xNzYzPXN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE3NzAtXFx0bG9ja19zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTc3MTpcXHQvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXRcXG5uZXQvc21jL3NtY19jb3JlLmMtMTc3Mi1cXHQgKiByZWxlYXNlcyBhbnl0aGluZywgc28gYSB3b3JrIGl0ZW0gcXVldWVkIGFmdGVyIHRoZSBjYW5jZWwgaGFzXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MjAwMD1pbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTIwNzQtXFx0fVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyMDc1OlxcdHNtY19sZ3JfaG9sZChjb25uLVxcdTAwM2VsZ3IpOyAvKiBsZ3JfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc2LVxcdGlmICghY29ubi1cXHUwMDNlbGdyLVxcdTAwM2Vpc19zbWNkKVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyMDc3OlxcdFxcdHNtY3JfbGlua19ob2xkKGNvbm4tXFx1MDAzZWxuayk7IC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc4LVxcdGNvbm4tXFx1MDAzZWZyZWVkID0gMDtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaD01OTY9aW50IHNtY192bGFuX2J5X3RjcHNrKHN0cnVjdCBzb2NrZXQgKmNsY3NvY2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xcbm5ldC9zbWMvc21jX2NvcmUuaC01OTctXFxubmV0L3NtYy9zbWNfY29yZS5oOjU5ODp2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcXG5uZXQvc21jL3NtY19jb3JlLmgtNTk5LWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDoxMC42MTg5MzU1NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTE2ODA4OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBTTUMgU29ja2V0IE5ldHdvcmtpbmcgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgZnVuZGFtZW50YWwgbmV0d29ya2luZyBsb2dpYyBoZXJlLCBzcGVjaWZpY2FsbHkgZm9yIFNNQyBzb2NrZXRzIChBRl9TTUMpLiBUaGlzIHNlZW1zIHRvIGJlIHRoZSBwYXJ0IHRoYXQgaGFuZGxlcyBzb2NrZXQgbG9ja2luZywgY29ubmVjdGlvbiBhYm9ydHMsIHdvcmtxdWV1ZXMsIHJlZmNvdW50aW5nIHVzaW5nIGBzb2NrX2hvbGRgIGFuZCBgc29ja19wdXRgLCBhbmQgYSBsb3Qgb2YgcmFjZSBjb25kaXRpb24gbWl0aWdhdGlvbiBkdXJpbmcgdGVhcmRvd24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgUUVNVS9zeXprYWxsZXIgZW52aXJvbm1lbnQuIExldCdzIHN0YXJ0IHdpdGggdGhlIGJhc2ljczogU01DIHNvY2tldHMgYXJlIGNyZWF0ZWQgdXNpbmcgYHNvY2tldChBRl9TTUMsIC4uLilgLCB3aGljaCBpcyBzb2NrZXQgZmFtaWx5IDQzLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIFNNQy1SIHJlbGllcyBvbiBSRE1BICh0aGluZ3MgbGlrZSBgcmRtYV9yeGVgIG9yIGBzaXdgLCB0aGUgc29mdHdhcmUgUkRNQSBkcml2ZXJzIG9mdGVuIGluY2x1ZGVkIGluIHRoZSBzdGFuZGFyZCBrZXJuZWxzKSwgb3IgU01DLUQgbWlnaHQgdXNlIGEgbG9vcGJhY2sgZGV2aWNlIGxpa2UgRElCU19MTy4gR29vZCwgdGhhdCBtZWFucyBpdCdzIHByb2JhYmx5IHJlYWNoYWJsZSBhbmQgbGlrZWx5IGhlYXZpbHkgZnV6emVkIGJ5IHN5emthbGxlci5cblxuTmV4dCwgSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIHNwZWNpZmljIGtlcm5lbCBjb25maWdzIHJlcXVpcmVkIGZvciBjb21waWxpbmcgYW5kIGFjdHVhbGx5IHRlc3RpbmcgdGhpcyBjb2RlLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBuZXQvc21jL0tjb25maWdgLiBSaWdodCwgaXQgZGVwZW5kcyBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYC4gTm93LCBkbyBgSU5GSU5JQkFORGAsIGBESUJTYCwgb3IgYFNNQ2AgdGhlbXNlbHZlcyBoYXZlIGFueSBhZGRpdGlvbmFsIGNvbmZpZyBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBjaGVjayBgZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWdgIGFuZCBgZHJpdmVycy9kaWJzL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDA6MTQuNzM1NzQ4OTU5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RpYnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdGNvbmZpZyBESUJTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IG5cXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIChESUJTKSBpcyBhIGNvbW11bmljYXRpb24gbWV0aG9kIHRoYXRcXG4gICA3OlxcdFxcdCAgdXNlcyBjb21tb24gcGh5c2ljYWwgKGludGVybmFsKSBtZW1vcnkgZm9yIHN5bmNocm9ub3VzIGRpcmVjdCBhY2Nlc3NcXG4gICA4OlxcdFxcdCAgaW50byBhIHJlbW90ZSBidWZmZXIuXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHByb3ZpZGUgdGhlIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW5cXG4gIDExOlxcdFxcdCAgZGlicyBkZXZpY2VzIGFuZCBkaWJzIGNsaWVudHMgbGlrZSB0aGUgU01DIHByb3RvY29sLlxcbiAgMTI6XFx0XFx0ICBUaGUgbW9kdWxlIG5hbWUgaXMgZGlicy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIERJQlNfTE9cXG4gIDE1OlxcdFxcdGJvb2wgXFxcIkludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1xcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gRElCU1xcbiAgMTc6XFx0XFx0ZGVmYXVsdCBuXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIERJQlNfTE8gZW5hYmxlcyB0aGUgY3JlYXRpb24gb2YgYW4gc29mdHdhcmUtZW11bGF0ZWQgZGlicyBkZXZpY2VcXG4gIDIwOlxcdFxcdCAgbmFtZWQgbG8gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHRyYW5zZmVycmluZyBkYXRhIHdoZW4gY29tbXVuaWNhdGlvblxcbiAgMjE6XFx0XFx0ICBvY2N1cnMgd2l0aGluIHRoZSBzYW1lIE9TLiBUaGlzIGhlbHBzIGluIGNvbnZlbmllbnQgdGVzdGluZyBvZlxcbiAgMjI6XFx0XFx0ICBkaWJzIGNsaWVudHMsIHNpbmNlIGRpYnMgbG9vcGJhY2sgaXMgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlIG9yXFxuICAyMzpcXHRcXHQgIGhhcmR3YXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDoxNC43MzU4NjAzNDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2MDY2NTgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEluZmluaWJhbmQgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEluZmluaUJhbmQgZHJpdmVycyBpbiB0aGlzIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgc3RhbmRhcmQgcHJhY3RpY2UgLSBjaGVja2luZyB0aGUgYGRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHRoZSBjZW50cmFsIHJlcG9zaXRvcnkgZm9yIGRlZmluaW5nIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJbmZpbmlCYW5kLiBJdCdsbCBnaXZlIG1lIGEgY2xlYXIgb3ZlcnZpZXcgb2Ygd2hhdCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgdXN1YWwgc3VzcGVjdHM6IHN1cHBvcnQgZm9yIHZhcmlvdXMgaGFyZHdhcmUgZGV2aWNlcywgdHJhbnNwb3J0IHByb3RvY29scyBsaWtlIHZlcmJzIGFuZCBSZWxpYWJsZSBEYXRhZ3JhbSBzb2NrZXRzLCBwZXJoYXBzIHNvbWUgcG93ZXIgbWFuYWdlbWVudCBvcHRpb25zLCBhbmQgZGVmaW5pdGVseSBzb21lIGRlYnVnZ2luZyBmbGFncy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlcGVuZGVuY2llcyDigJMgdW5kZXJzdGFuZGluZyB0aG9zZSBjcm9zcy1yZWZlcmVuY2VzIHdpbGwgYmUga2V5IHRvIG1ha2luZyBpbmZvcm1lZCBkZWNpc2lvbnMgYWJvdXQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHNwZWNpZmljIGZlYXR1cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQgc3lzdGVtJ3MgaGFyZHdhcmUgYW5kIGludGVuZGVkIHVzZSBjYXNlLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcGllY2luZyB0b2dldGhlciB0aGUgY29uZmlndXJhdGlvbiBwdXp6bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTQ5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDoxNy4xOTY1Mjk5NDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIElORklOSUJBTkRcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBIQVNfRE1BXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uICFBTFBIQVxcbiAgIDg6XFx0XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuICAgOTpcXHRcXHRzZWxlY3QgSVJRX1BPTExcXG4gIDEwOlxcdFxcdHNlbGVjdCBESU1MSUJcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgQ29yZSBzdXBwb3J0IGZvciBJbmZpbmlCYW5kIChJQikuICBNYWtlIHN1cmUgdG8gYWxzbyBzZWxlY3RcXG4gIDEzOlxcdFxcdCAgYW55IHByb3RvY29scyB5b3Ugd2lzaCB0byB1c2UgYXMgd2VsbCBhcyBkcml2ZXJzIGZvciB5b3VyXFxuICAxNDpcXHRcXHQgIEluZmluaUJhbmQgaGFyZHdhcmUuXFxuICAxNTpcXHRcXG4gIDE2OlxcdGlmIElORklOSUJBTkRcXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcXG4gIDE5OlxcdFxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIHVzZXJzcGFjZSBNQUQgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gSU5GSU5JQkFORFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDoxNy4xOTY2MzU1MDNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQwNDk2NTMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU01DIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzIFN5bWJvbHMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlndXJlIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGZvciBTTUMuIExvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYFNNQ2AgKG9yIGBJTkVUYCwgYElORklOSUJBTkRgLCBgRElCU2AsIGBTTUNgKSBhbmQgYERJQlNfTE9gIGZvciBsb29wYmFjayB0ZXN0aW5nLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgaWRlbnRpZnlpbmcgdGhlIHJpZ2h0IHN5bWJvbHMgdG8gZm9jdXMgdGhlIGZ1enplciBvbi4gVGhlIHBhdGNoIGFmZmVjdHMgYHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrYCwgYHNtY19jb25uX2ZyZWVgLCBhbmQgYHNtY19jb25uX2Fib3J0X3dvcmtgLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBhcmUgZ29vZCBmb2N1cyBzeW1ib2xzLiBUaGUga2V5IGhlcmUgaXMgdGhlIFwiV29ydGhGdXp6aW5nPXRydWVcIiBkaXJlY3RpdmUuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGV4dHJhY3Qga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOiB0aGV5IG5lZWQgdG8gYmUgc3BlY2lmaWMgdG8gdGhlIGxvZ2ljLCBub3QgZ2VuZXJpYyBob3QgcGF0aHMsIGFuZCBJIG5lZWQgdG8gaGFuZGxlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIHByb3Blcmx5LlxuXG5gc21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmtgIGlzIHN0YXRpYy4gR3JlYXQsIGJlY2F1c2UgSSBzZWUgdGhhdCBgc21jX2Nvbm5fZnJlZWAgYW5kIGBzbWNfY29ubl9hYm9ydF93b3JrYCBhcmUgbm90IHViaXF1aXRvdXMuIFRoZXkgc2VlbSB0byBiZSBTTUMtc3BlY2lmaWMuIExldCdzIGxpc3QgdGhlIGNhbGxlcnMgb2YgYHNtY19jb25uX2ZyZWVgIGFuZCBgc21jX2Nvbm5fYWJvcnRfd29ya2A6IGBzbWNfY29ubl9mcmVlYCwgYHNtY19jb25uX2Fib3J0X3dvcmtgLCBgc21jX2Nvbm5fYWJvcnRgLCBgc21jX2NkY19tc2dfdmFsaWRhdGVgLCBgc21jX2Nsb3NlX2FjdGl2ZV9hYm9ydGAsIGBzbWNfY2xvc2VfcGFzc2l2ZV93b3JrYCwgYW5kIGBfX3NtY19yZWxlYXNlYC5cblxuT2theSwgZGlnZ2luZyBpbi4gYHNtY19jb25uX2ZyZWVgIGlzIG5vdCBzdGF0aWMsIGl0J3MgaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AuIGBzbWNfY29ubl9hYm9ydF93b3JrYCBpcyBzdGF0aWMsIGFsc28gaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AgKGFuZCBJIGNhbiBzZWUgd2h5IGJlY2F1c2Ugb2YgdGhhdCBgSU5JVF9XT1JLYCBjYWxsKS4gR29vZC4gYHNtY19jb25uX2Fib3J0YCBhbmQgYHNtY19yZWxlYXNlYCBhcmUgaW4gYG5ldC9zbWMvYWZfc21jLmNgLlxuXG5Eb3VibGUtY2hlY2tpbmcgdGhpcy4gWWVzLCBgc21jX2Nvbm5fYWJvcnRfd29ya2AgYW5kIGBzbWNfY29ubl9mcmVlYCAqYXJlKiBpbiBgbmV0L3NtYy9zbWNfY29yZS5jYCwgYXMgZXhwZWN0ZWQuXG5cbk5vdywgdGhlIGZpbmFsIGFzc2Vzc21lbnQ6XG5cbjEuICBJcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggZGVhbHMgd2l0aCBsb2NraW5nLCBjb25jdXJyZW5jeSwgYW5kIHJlZmNvdW50aW5nIGlzc3VlcyBkdXJpbmcgU01DIGNvbm5lY3Rpb24gdGVhcmRvd24gYW5kIGFib3J0IHdvcmsgaGFuZGxpbmcuIFRoaXMgYWx0ZXJzIHRoZSBydW50aW1lIGJlaGF2aW9yIG9mIG5ldHdvcmsgcHJvdG9jb2wgY29kZSwgc28geWVzLlxuMi4gIEVuYWJsZUNvbmZpZ3M6IGBTTUNgLCBgSU5GSU5JQkFORGAsIGBESUJTYCwgYElORVRgLlxuMy4gIEZvY3VzU3ltYm9sczogYHNtY19jb25uX2ZyZWVgLCBgc21jX2Nvbm5fYWJvcnRfd29ya2AsIGBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29ya2AuXG5cblRpbWUgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ3OSwiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDoyNC42MDE2MDQzNzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4ODc1MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uX2ZyZWVcIixcbiAgICBcInNtY19jb25uX2Fib3J0X3dvcmtcIixcbiAgICBcInNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgU01DIHNvY2tldCBjb25uZWN0aW9uIHRlYXJkb3duIGFuZCBhYm9ydCB3b3JrIGNhbmNlbGxhdGlvbiBoYW5kbGluZyBpbiBzbWNfY29yZS5jLiBTcGVjaWZpY2FsbHksIGl0IGRyb3BzIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgY2FuY2VsX3dvcmtfc3luYyB0byBwcmV2ZW50IHBvdGVudGlhbCBkZWFkbG9ja3MsIG1hbmFnZXMgc29ja2V0IHJlZmNvdW50aW5nIG9uIHdvcmsgY2FuY2VsbGF0aW9uLCBhbmQgY2hlY2tzIGNvbm4tXFx1MDAzZWZyZWVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBhYm9ydCB3b3JrIGV4ZWN1dGlvbi4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgbG9naWMgaW4gdGhlIFNNQyBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uX2ZyZWVcIixcbiAgICBcInNtY19jb25uX2Fib3J0X3dvcmtcIixcbiAgICBcInNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgU01DIHNvY2tldCBjb25uZWN0aW9uIHRlYXJkb3duIGFuZCBhYm9ydCB3b3JrIGNhbmNlbGxhdGlvbiBoYW5kbGluZyBpbiBzbWNfY29yZS5jLiBTcGVjaWZpY2FsbHksIGl0IGRyb3BzIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgY2FuY2VsX3dvcmtfc3luYyB0byBwcmV2ZW50IHBvdGVudGlhbCBkZWFkbG9ja3MsIG1hbmFnZXMgc29ja2V0IHJlZmNvdW50aW5nIG9uIHdvcmsgY2FuY2VsbGF0aW9uLCBhbmQgY2hlY2tzIGNvbm4tXFx1MDAzZWZyZWVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBhYm9ydCB3b3JrIGV4ZWN1dGlvbi4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgbG9naWMgaW4gdGhlIFNNQyBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDoyNC43NDk1MDAyNzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDcwMTI4NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDA6MjQuNzUwMDE3Njk5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTcwNjk2MDUyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRlYWRsb2NrIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gU01DIGNvbm5lY3Rpb24gdGVhcmRvd24gKG5ldC9zbWMvc21jX2NvcmUuYykgYnkgcmVsZWFzaW5nIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgYGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspYCBhbmQgYWRkaW5nIGEgYCFjb25uLVxcdTAwM2VmcmVlZGAgY2hlY2sgaW4gYHNtY19jb25uX2Fib3J0X3dvcmsoKWAuXFxuXFxuVGhlIGNoYW5nZXMgc29sZWx5IG1vZGlmeSBsb2NraW5nIGJlaGF2aW9yLCB3b3JrIGNhbmNlbGxhdGlvbiBzeW5jaHJvbml6YXRpb24sIGFuZCBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGJ1ZmZlciBsZW5ndGggb3IgYm91bmRzIG1hbmlwdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMgKHN1Y2ggYXMgZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoTE9DS0RFUCwgS0FTQU4pIGFuZCBkbyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTQ2YWY5YmI1MGM0N2IwMjA3ZjY5NDgxZGFjNWZjOTQ3NDI4N2QwMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTQ6NTk6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcbmluZGV4IDA0YWVkZDk1NzU0M2EuLjlhMTA5ZWFlNzNiOTIgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcbisrKyBiL25ldC9zbWMvc21jX2NvcmUuY1xuQEAgLTEyNTEsNiArMTI1MSwyNSBAQCBzdGF0aWMgdm9pZCBzbWNfYnVmX3VudXNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbiBcdH1cbiB9XG4gXG4rLyogQ2FuY2VsIGEgcGVuZGluZyBhYm9ydCB3b3JrIGl0ZW0uICBzbWNfY29ubl9hYm9ydF93b3JrKCkgdGFrZXMgdGhlIHNvY2tldFxuKyAqIGxvY2ssIHNvIHRoZSBsb2NrIGhhcyB0byBiZSBkcm9wcGVkIGhlcmUuICBPdGhlcndpc2UgY2FuY2VsX3dvcmtfc3luYygpXG4rICogd2FpdHMgZm9yIGEgd29ya2VyIHRoYXQgaXMgaXRzZWxmIGJsb2NrZWQgb24gdGhlIGNhbGxlci4gIFRoaXMgaXMgdGhlIGlkaW9tXG4rICogc21jX2Nsb3NlX2NhbmNlbF93b3JrKCkgYWxyZWFkeSB1c2VzIGZvciBjbG9zZV93b3JrLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbit7XG4rXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2c21jLVx1MDAzZXNrO1xuK1xuK1x0aWYgKGN1cnJlbnRfd29yaygpID09IFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yaylcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmVsZWFzZV9zb2NrKHNrKTtcbitcdGlmIChjYW5jZWxfd29ya19zeW5jKFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yaykpXG4rXHRcdHNvY2tfcHV0KHNrKTsgLyogc29ja19ob2xkIGRvbmUgYnkgc2NoZWR1bGVycyBvZiBhYm9ydF93b3JrICovXG4rXHRsb2NrX3NvY2soc2spO1xuK31cbitcbiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cbiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuIHtcbkBAIC0xMjc2LDggKzEyOTUsNyBAQCB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuIFx0XHRcdHNtY2RfYnVmX2RldGFjaChjb25uKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHNtY19jZGNfd2FpdF9wZW5kX3R4X3dyKGNvbm4pO1xuLVx0XHRpZiAoY3VycmVudF93b3JrKCkgIT0gXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKVxuLVx0XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKTtcbitcdFx0c21jX2Nvbm5fY2FuY2VsX2Fib3J0X3dvcmsoY29ubik7XG4gXHR9XG4gXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bGdyLVx1MDAzZWxpc3QpKSB7XG4gXHRcdHNtY19idWZfdW51c2UoY29ubiwgbGdyKTsgLyogYWxsb3cgYnVmZmVyIHJldXNlICovXG5AQCAtMTc1MCw3ICsxNzY4LDEyIEBAIHN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbiBcbiBcdGxvY2tfc29jayhcdTAwMjZzbWMtXHUwMDNlc2spO1xuLVx0c21jX2Nvbm5fa2lsbChjb25uLCB0cnVlKTtcbitcdC8qIHNtY19jb25uX2ZyZWUoKSBzZXRzIGZyZWVkIHdpdGggdGhpcyBsb2NrIGhlbGQgYW5kIGJlZm9yZSBpdFxuK1x0ICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhc1xuK1x0ICogbm90aGluZyBsZWZ0IHRvIGRvLlxuK1x0ICovXG4rXHRpZiAoIWNvbm4tXHUwMDNlZnJlZWQpXG4rXHRcdHNtY19jb25uX2tpbGwoY29ubiwgdHJ1ZSk7XG4gXHRyZWxlYXNlX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKTtcbiBcdHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2Vzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjAwOjI0Ljc1MDAyMDQzOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTc5NDUzNjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU01DIENvcmUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIHRvIGBuZXQvc21jL3NtY19jb3JlLmNgLiBMb29rcyBsaWtlIGl0J3MgY2VudGVyZWQgYXJvdW5kIGhhbmRsaW5nIGNvbm5lY3Rpb24gYWJvcnRzLCBzcGVjaWZpY2FsbHkgdGhlIGBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29ya2AgZnVuY3Rpb24gYW5kIGl0cyBpbnRlZ3JhdGlvbi5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGRlZGljYXRlZCBmdW5jdGlvbiwgYHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrYCwgdG8gaGFuZGxlIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNsZWFudXAgb2YgdGhlIGBhYm9ydF93b3JrYCBhc3NvY2lhdGVkIHdpdGggYW4gYHNtY19jb25uZWN0aW9uYC4gVGhlIHBhdGNoIGFkZHMgdGhpcyBuZXcgZnVuY3Rpb24sIGFuZCB0aGVuIGNsZXZlcmx5IHJlcGxhY2VzIHNvbWUgZXhpc3RpbmcgbG9naWMgaW4gYHNtY19jb25uX2ZyZWVgIHdpdGggYSBjYWxsIHRvIHRoaXMgbmV3IGZ1bmN0aW9uLiBUaGUgbmV3IGZ1bmN0aW9uIHRha2VzIHRoZSBgc21jX2Nvbm5lY3Rpb25gIGFzIGlucHV0LlxuXG5Mb29raW5nIGF0IHRoZSBuZXcgZnVuY3Rpb24sIGZpcnN0LCB3ZSBnZXQgdGhlIHNvY2tldCwgdGhlbiBpbW1lZGlhdGVseSBzaG9ydC1jaXJjdWl0IGlmIHRoZSB3b3JrIGJlaW5nIGNhbmNlbGVkIGlzIG5vdCBvdXIgd29yay4gVGhlIGNvZGUgY2FsbHMgYHJlbGVhc2Vfc29jayhzayk7YCB3aGljaCBpcyBpbXBvcnRhbnQg4oCTIHRoYXQgcmVsZWFzZXMgdGhlIHNvY2tldCdzIHJlc291cmNlcy4gVGhlbiwgaXQgdXNlcyBgY2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjb25uLVx1MDAzZWFib3J0X3dvcmspYCB0byBzeW5jaHJvbml6ZSB0aGUgY2FuY2VsbGF0aW9uLCBhbmQsIGltcG9ydGFudGx5LCBpdCB1c2VzIGBzb2NrX3B1dChzayk7YCBpZiBjYW5jZWxsYXRpb24gYWN0dWFsbHkgaGFwcGVuZWQsIHdoaWNoIGlzIHN0YW5kYXJkIHByYWN0aWNlIHdoZW4gZGVhbGluZyB3aXRoIHNvY2tldHMgaW4gdGhpcyBlbnZpcm9ubWVudC4gRmluYWxseSwgaXQgbG9ja3MgdGhlIHNvY2tldCBhZ2Fpbiwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBmaW5hbCBvcGVyYXRpb24uXG5cblRoZSByZXBsYWNlbWVudCBpbiBgc21jX2Nvbm5fZnJlZWAgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgb3JpZ2luYWwgY29uZGl0aW9uYWwgY2hlY2sgYW5kIGNhbmNlbGxhdGlvbiBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBhIGRpcmVjdCBjYWxsIHRvIHRoZSBuZXcgYHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrYCBmdW5jdGlvbiwgd2hpY2ggaXMgY2xlYW5lciBhbmQgcHJvYmFibHkgZWxpbWluYXRlcyBzb21lIHBvdGVudGlhbCBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucy5cblxuRmluYWxseSwgaW4gYHNtY19jb25uX2Fib3J0X3dvcmtgLCB0aGVyZSdzIGEgY2hlY2sgZm9yIGBjb25uLVx1MDAzZWZyZWVkYCBiZWZvcmUgY2FsbGluZyBgc21jX2Nvbm5fa2lsbGAuIFRoaXMgaXMgY3JpdGljYWwg4oCTIHdlIGRvbid0IHdhbnQgdG8gb3BlcmF0ZSBvbiBhIGZyZWVkIGNvbm5lY3Rpb24uXG5cbk5vdywgSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbSBnb2luZyB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIHVzZSBjYXNlcyBmb3IgdGhlc2UgYHNtY19jb25uZWN0aW9uYCBvYmplY3RzIGFuZCB0aGUgYWJvcnQgd29ya2Zsb3cgaW4gbW9yZSBkZXRhaWwuIFRoYXQgY29udGV4dCB3aWxsIGNsYXJpZnkgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlc2UgY2hhbmdlcyBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eS4gSSBuZWVkIHRvIHNlZSBob3cgYWJvcnRzIGFyZSBpbml0aWF0ZWQsIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgY29ubmVjdGlvbiBzdGF0ZXMsIGFuZCBpZiB0aGlzIHJlZmFjdG9yaW5nIHNpbXBsaWZpZXMgdGhpbmdzIG9yIG9wZW5zIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGNvbmNlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDozMC45Mjk0Nzc1NTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NDcxMzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19jb25uX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz0yODg9c3RhdGljIGludCBfX3NtY19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0zMjEtXFx0XFx0aWYgKCFzbWMtXFx1MDAzZXVzZV9mYWxsYmFjaylcXG5uZXQvc21jL2FmX3NtYy5jOjMyMjpcXHRcXHRcXHRzbWNfY29ubl9mcmVlKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pO1xcbm5ldC9zbWMvYWZfc21jLmMtMzIzLVxcdH1cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTAwOD1zdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgaW50IGxvY2FsX2ZpcnN0KVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMDE2LVxcbm5ldC9zbWMvYWZfc21jLmM6MTAxNzpcXHRzbWNfY29ubl9mcmVlKGNvbm4pO1xcbm5ldC9zbWMvYWZfc21jLmMtMTAxOC1cXHRpZiAobG9jYWxfZmlyc3QgXFx1MDAyNlxcdTAwMjYgbGdyX3ZhbGlkKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYz0xMjg9dm9pZCBzbWNfY2xvc2VfYWN0aXZlX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNTYtXFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gU01DX0NMT1NFRDtcXG5uZXQvc21jL3NtY19jbG9zZS5jOjE1NzpcXHRcXHRzbWNfY29ubl9mcmVlKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTU4LVxcdFxcdHJlbGVhc2VfY2xjc29jayA9IHRydWU7XFxuLS1cXG5uZXQvc21jL3NtY19jbG9zZS5jLTE2Ny1cXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBTTUNfQ0xPU0VEO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTY4OlxcdFxcdHNtY19jb25uX2ZyZWUoXFx1MDAyNnNtYy1cXHUwMDNlY29ubik7XFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNjktXFx0XFx0cmVsZWFzZV9jbGNzb2NrID0gdHJ1ZTtcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmM9MzU2PXN0YXRpYyB2b2lkIHNtY19jbG9zZV9wYXNzaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy00MzUtXFx0XFx0ICAgIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgIXNrLVxcdTAwM2Vza19zb2NrZXQpKSB7XFxubmV0L3NtYy9zbWNfY2xvc2UuYzo0MzY6XFx0XFx0XFx0c21jX2Nvbm5fZnJlZShjb25uKTtcXG5uZXQvc21jL3NtY19jbG9zZS5jLTQzNy1cXHRcXHRcXHRpZiAoc21jLVxcdTAwM2VjbGNzb2NrKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTEwODM9dm9pZCBzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkwLVxcdGF0b21pY19pbmMoXFx1MDAyNmNvbm4tXFx1MDAzZWxuay1cXHUwMDNlY29ubl9jbnQpO1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxMDkxOlxcdC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkyLVxcdHNtY3JfbGlua19ob2xkKGNvbm4tXFx1MDAzZWxuayk7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTI1OT1zdGF0aWMgdm9pZCBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yayhzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI3My0vKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTI3NDp2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjc1LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xNzYzPXN0YXRpYyB2b2lkIHNtY19jb25uX2Fib3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE3NzAtXFx0bG9ja19zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTc3MTpcXHQvKiBzbWNfY29ubl9mcmVlKCkgc2V0cyBmcmVlZCB3aXRoIHRoaXMgbG9jayBoZWxkIGFuZCBiZWZvcmUgaXRcXG5uZXQvc21jL3NtY19jb3JlLmMtMTc3Mi1cXHQgKiByZWxlYXNlcyBhbnl0aGluZywgc28gYSB3b3JrIGl0ZW0gcXVldWVkIGFmdGVyIHRoZSBjYW5jZWwgaGFzXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MjAwMD1pbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTIwNzQtXFx0fVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyMDc1OlxcdHNtY19sZ3JfaG9sZChjb25uLVxcdTAwM2VsZ3IpOyAvKiBsZ3JfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc2LVxcdGlmICghY29ubi1cXHUwMDNlbGdyLVxcdTAwM2Vpc19zbWNkKVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyMDc3OlxcdFxcdHNtY3JfbGlua19ob2xkKGNvbm4tXFx1MDAzZWxuayk7IC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc4LVxcdGNvbm4tXFx1MDAzZWZyZWVkID0gMDtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaD01OTY9aW50IHNtY192bGFuX2J5X3RjcHNrKHN0cnVjdCBzb2NrZXQgKmNsY3NvY2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xcbm5ldC9zbWMvc21jX2NvcmUuaC01OTctXFxubmV0L3NtYy9zbWNfY29yZS5oOjU5ODp2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcXG5uZXQvc21jL3NtY19jb3JlLmgtNTk5LWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDozMS4wMjc5NTQ5MDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2NjA2MjkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHJlYWRpbmcgYW5kIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIFNNQyBDb3JlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgbmV0L3NtYy9zbWNfY29yZS5jYC4gSSBrbm93IHRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBTTUMgaW1wbGVtZW50YXRpb24sIHNvIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhpcyBzdHVmZiBmdW5jdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlcywgdGhlIGNyaXRpY2FsIHBhdGggZnVuY3Rpb25zIGZvciBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGRhdGEgdHJhbnNmZXIsIGFuZCB0ZWFyZG93biwgYXMgd2VsbCBhcyBhbnkga2V5IGxvY2tpbmcgbWVjaGFuaXNtcyB0aGV5IGFyZSB1c2luZyBmb3IgY29uY3VycmVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucyAoU01DKSBwcm90b2NvbCBpcyBpbnRlZ3JhdGVkIGF0IHRoaXMgbG93ZXIgbmV0d29ya2luZyBsYXllci4gSG9wZWZ1bGx5IHRoZSBjb21tZW50cyBhcmUgZ29vZCwgYnV0IEknbSBwcmVwYXJlZCB0byBmb2xsb3cgZnVuY3Rpb24gY2FsbHMgYW5kIHRyYWNlIHRoZSBsb2dpYyBpZiBuZWNlc3NhcnkuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGlzIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3ODgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDozMy43OTQwMjA5NzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjUwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjUwOlxcdFxcdFxcdFNNQ19TVEFUX1JNQl9TSVpFKHNtYywgaXNfc21jZCwgdHJ1ZSwgZmFsc2UsIGJ1ZnNpemUpO1xcbjEyNTE6XFx0XFx0fVxcbjEyNTI6XFx0fVxcbjEyNTM6XFx0XFxuMTI1NDpcXHQvKiBDYW5jZWwgYSBwZW5kaW5nIGFib3J0IHdvcmsgaXRlbS4gIHNtY19jb25uX2Fib3J0X3dvcmsoKSB0YWtlcyB0aGUgc29ja2V0XFxuMTI1NTpcXHQgKiBsb2NrLCBzbyB0aGUgbG9jayBoYXMgdG8gYmUgZHJvcHBlZCBoZXJlLiAgT3RoZXJ3aXNlIGNhbmNlbF93b3JrX3N5bmMoKVxcbjEyNTY6XFx0ICogd2FpdHMgZm9yIGEgd29ya2VyIHRoYXQgaXMgaXRzZWxmIGJsb2NrZWQgb24gdGhlIGNhbGxlci4gIFRoaXMgaXMgdGhlIGlkaW9tXFxuMTI1NzpcXHQgKiBzbWNfY2xvc2VfY2FuY2VsX3dvcmsoKSBhbHJlYWR5IHVzZXMgZm9yIGNsb3NlX3dvcmsuXFxuMTI1ODpcXHQgKi9cXG4xMjU5OlxcdHN0YXRpYyB2b2lkIHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4xMjYwOlxcdHtcXG4xMjYxOlxcdFxcdHN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7XFxuMTI2MjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2c21jLVxcdTAwM2VzaztcXG4xMjYzOlxcdFxcbjEyNjQ6XFx0XFx0aWYgKGN1cnJlbnRfd29yaygpID09IFxcdTAwMjZjb25uLVxcdTAwM2VhYm9ydF93b3JrKVxcbjEyNjU6XFx0XFx0XFx0cmV0dXJuO1xcbjEyNjY6XFx0XFxuMTI2NzpcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjEyNjg6XFx0XFx0aWYgKGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspKVxcbjEyNjk6XFx0XFx0XFx0c29ja19wdXQoc2spOyAvKiBzb2NrX2hvbGQgZG9uZSBieSBzY2hlZHVsZXJzIG9mIGFib3J0X3dvcmsgKi9cXG4xMjcwOlxcdFxcdGxvY2tfc29jayhzayk7XFxuMTI3MTpcXHR9XFxuMTI3MjpcXHRcXG4xMjczOlxcdC8qIHJlbW92ZSBhIGZpbmlzaGVkIGNvbm5lY3Rpb24gZnJvbSBpdHMgbGluayBncm91cCAqL1xcbjEyNzQ6XFx0dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4xMjc1OlxcdHtcXG4xMjc2OlxcdFxcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gY29ubi1cXHUwMDNlbGdyO1xcbjEyNzc6XFx0XFxuMTI3ODpcXHRcXHRpZiAoIWxnciB8fCBjb25uLVxcdTAwM2VmcmVlZClcXG4xMjc5OlxcdFxcdFxcdC8qIENvbm5lY3Rpb24gaGFzIG5ldmVyIGJlZW4gcmVnaXN0ZXJlZCBpbiBhXFxuMTI4MDpcXHRcXHRcXHQgKiBsaW5rIGdyb3VwLCBvciBoYXMgYWxyZWFkeSBiZWVuIGZyZWVkLlxcbjEyODE6XFx0XFx0XFx0ICovXFxuMTI4MjpcXHRcXHRcXHRyZXR1cm47XFxuMTI4MzpcXHRcXG4xMjg0OlxcdFxcdGNvbm4tXFx1MDAzZWZyZWVkID0gMTtcXG4xMjg1OlxcdFxcdGlmICghc21jX2Nvbm5fbGdyX3ZhbGlkKGNvbm4pKVxcbjEyODY6XFx0XFx0XFx0LyogQ29ubmVjdGlvbiBoYXMgYWxyZWFkeSB1bnJlZ2lzdGVyZWQgZnJvbVxcbjEyODc6XFx0XFx0XFx0ICogbGluayBncm91cC5cXG4xMjg4OlxcdFxcdFxcdCAqL1xcbjEyODk6XFx0XFx0XFx0Z290byBsZ3JfcHV0O1xcbjEyOTA6XFx0XFxuMTI5MTpcXHRcXHRpZiAobGdyLVxcdTAwM2Vpc19zbWNkKSB7XFxuMTI5MjpcXHRcXHRcXHRzbWNfaXNtX3Vuc2V0X2Nvbm4oY29ubik7XFxuMTI5MzpcXHRcXHRcXHR0YXNrbGV0X2tpbGwoXFx1MDAyNmNvbm4tXFx1MDAzZXJ4X3Rza2xldCk7XFxuMTI5NDpcXHRcXHRcXHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkobGdyLVxcdTAwM2VzbWNkKSlcXG4xMjk1OlxcdFxcdFxcdFxcdHNtY2RfYnVmX2RldGFjaChjb25uKTtcXG4xMjk2OlxcdFxcdH0gZWxzZSB7XFxuMTI5NzpcXHRcXHRcXHRzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTtcXG4xMjk4OlxcdFxcdFxcdHNtY19jb25uX2NhbmNlbF9hYm9ydF93b3JrKGNvbm4pO1xcbjEyOTk6XFx0XFx0fVxcbjEzMDA6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZsZ3ItXFx1MDAzZWxpc3QpKSB7XFxuMTMwMTpcXHRcXHRcXHRzbWNfYnVmX3VudXNlKGNvbm4sIGxncik7IC8qIGFsbG93IGJ1ZmZlciByZXVzZSAqL1xcbjEzMDI6XFx0XFx0XFx0c21jX2xncl91bnJlZ2lzdGVyX2Nvbm4oY29ubik7XFxuMTMwMzpcXHRcXHR9XFxuMTMwNDpcXHRcXG4xMzA1OlxcdFxcdGlmICghbGdyLVxcdTAwM2Vjb25uc19udW0pXFxuMTMwNjpcXHRcXHRcXHRzbWNfbGdyX3NjaGVkdWxlX2ZyZWVfd29yayhsZ3IpO1xcbjEzMDc6XFx0bGdyX3B1dDpcXG4xMzA4OlxcdFxcdGlmICghbGdyLVxcdTAwM2Vpc19zbWNkKVxcbjEzMDk6XFx0XFx0XFx0c21jcl9saW5rX3B1dChjb25uLVxcdTAwM2VsbmspOyAvKiBsaW5rX2hvbGQgaW4gc21jX2Nvbm5fY3JlYXRlKCkgKi9cXG4xMzEwOlxcdFxcdHNtY19sZ3JfcHV0KGxncik7IC8qIGxncl9ob2xkIGluIHNtY19jb25uX2NyZWF0ZSgpICovXFxuMTMxMTpcXHR9XFxuMTMxMjpcXHRcXG4xMzEzOlxcdC8qIHVucmVnaXN0ZXIgYSBsaW5rIGZyb20gYSBidWZfZGVzYyAqL1xcbjEzMTQ6XFx0c3RhdGljIHZvaWQgc21jcl9idWZfdW5tYXBfbGluayhzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpidWZfZGVzYywgYm9vbCBpc19ybWIsXFxuMTMxNTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcXG4xMzE2OlxcdHtcXG4xMzE3OlxcdFxcdGlmIChpc19ybWIgfHwgYnVmX2Rlc2MtXFx1MDAzZWlzX3ZtKVxcbjEzMTg6XFx0XFx0XFx0YnVmX2Rlc2MtXFx1MDAzZWlzX3JlZ19tcltsbmstXFx1MDAzZWxpbmtfaWR4XSA9IGZhbHNlO1xcbjEzMTk6XFx0XFx0aWYgKCFidWZfZGVzYy1cXHUwMDNlaXNfbWFwX2liW2xuay1cXHUwMDNlbGlua19pZHhdKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowMDozMy43OTQzMDc3ODJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NDI3NjY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIElzc3VlKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBpbnRvIHNvbWV0aGluZywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgY292ZXJlZCBhbGwgdGhlIGJhc2VzLiBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gW2ltcGxpZWQgdG9waWMsIGNvbnRleHR1YWxseSBkZXJpdmVkXSwgYnV0IGl0J3MgY3J1Y2lhbCBub3QgdG8gbWlzcyBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBzaW1pbGFyIGlzc3VlcyBjYW4gc29tZXRpbWVzIG1hbmlmZXN0IGluIHVuZXhwZWN0ZWQgcGxhY2VzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB0aG9yb3VnaGx5IGNvbnNpZGVyIGFsbCByZWxhdGVkIG1vZHVsZXMgYW5kIGZ1bmN0aW9ucy4gSSd2ZSBjb25zaWRlcmVkIFggYW5kIFksIGJ1dCBJIHNob3VsZCBhYnNvbHV0ZWx5IGNoZWNrIGBzbWNfY29ubl9hYm9ydF93b3JrYC4gSXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIGFyZWEgYW5kIGNvdWxkIHByb3ZpZGUgc29tZSBjcml0aWNhbCBjb250ZXh0LCBhbmQgcGVyaGFwcyBldmVuIGlsbHVtaW5hdGUgdGhlIHJvb3QgY2F1c2UuIEEgcG90ZW50aWFsIGlzc3VlIGNvdWxkIGJlIGFyaXNpbmcgaW4gdGhhdCBwbGFjZSB0aGF0IGlzIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgaXNzdWUuIEJlc3QgdG8gbGVhdmUgbm8gc3RvbmUgdW50dXJuZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxOTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjAwOjM2LjA0ODU4NzQ0OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NjAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NjA6XFx0fVxcbjE3NjE6XFx0XFxuMTc2MjpcXHQvKiBhYm9ydCBjb25uZWN0aW9uLCBhYm9ydF93b3JrIHNjaGVkdWxlZCBmcm9tIHRhc2tsZXQgY29udGV4dCAqL1xcbjE3NjM6XFx0c3RhdGljIHZvaWQgc21jX2Nvbm5fYWJvcnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuMTc2NDpcXHR7XFxuMTc2NTpcXHRcXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yod29yayxcXG4xNzY2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzbWNfY29ubmVjdGlvbixcXG4xNzY3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGFib3J0X3dvcmspO1xcbjE3Njg6XFx0XFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcXG4xNzY5OlxcdFxcbjE3NzA6XFx0XFx0bG9ja19zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG4xNzcxOlxcdFxcdC8qIHNtY19jb25uX2ZyZWUoKSBzZXRzIGZyZWVkIHdpdGggdGhpcyBsb2NrIGhlbGQgYW5kIGJlZm9yZSBpdFxcbjE3NzI6XFx0XFx0ICogcmVsZWFzZXMgYW55dGhpbmcsIHNvIGEgd29yayBpdGVtIHF1ZXVlZCBhZnRlciB0aGUgY2FuY2VsIGhhc1xcbjE3NzM6XFx0XFx0ICogbm90aGluZyBsZWZ0IHRvIGRvLlxcbjE3NzQ6XFx0XFx0ICovXFxuMTc3NTpcXHRcXHRpZiAoIWNvbm4tXFx1MDAzZWZyZWVkKVxcbjE3NzY6XFx0XFx0XFx0c21jX2Nvbm5fa2lsbChjb25uLCB0cnVlKTtcXG4xNzc3OlxcdFxcdHJlbGVhc2Vfc29jayhcXHUwMDI2c21jLVxcdTAwM2Vzayk7XFxuMTc3ODpcXHRcXHRzb2NrX3B1dChcXHUwMDI2c21jLVxcdTAwM2Vzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgYWJvcnRfd29yayAqL1xcbjE3Nzk6XFx0fVxcbjE3ODA6XFx0XFxuMTc4MTpcXHR2b2lkIHNtY3JfcG9ydF9hZGQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYnBvcnQpXFxuMTc4MjpcXHR7XFxuMTc4MzpcXHRcXHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgKm47XFxuMTc4NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDA6MzYuMDQ4NzY3ODc5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3NzA4MTc3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTUMgUHJvdG9jb2wgU3RhY2sgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIHRoZSBTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zIChTTUMpIHByb3RvY29sIHN0YWNrIGluIGBuZXQvc21jL3NtY19jb3JlLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCB0YXJnZXRzIGEgY3JpdGljYWwgc3luY2hyb25pemF0aW9uIGlzc3VlOiBhIHBvdGVudGlhbCBkZWFkbG9jayBzaXR1YXRpb24uIFNwZWNpZmljYWxseSwgdGhlIHByb2JsZW0gYXJpc2VzIGJlY2F1c2UgYHNtY19jb25uX2Fib3J0X3dvcmtgIGFjcXVpcmVzIGBsb2NrX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKWAuIFdoZW4gYHNtY19jb25uX2ZyZWVgIGF0dGVtcHRzIHRvIGNhbmNlbCB0aGUgd29yayBxdWV1ZSB2aWEgYGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2Y29ubi1cdTAwM2VhYm9ydF93b3JrKWAsIHdpdGggdGhlIGNhbGxlciAqYWxzbyogaG9sZGluZyBgbG9ja19zb2NrKFx1MDAyNnNtYy1cdTAwM2VzaylgLCB3ZSBoYXZlIGEgY2xhc3NpYyBkZWFkbG9jayBzY2VuYXJpby4gSWYgdGhlIHdvcmsgZnVuY3Rpb24gaXMgYmxvY2tlZCB3YWl0aW5nIGZvciB0aGF0IHNhbWUgbG9jaywgd2XigJlyZSBpbiB0cm91YmxlLlxuXG5UaGUgcHJvcG9zZWQgc29sdXRpb24gbG9va3Mgc291bmQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBzbWNfY29ubl9jYW5jZWxfYWJvcnRfd29yaygpYCwgd2hpY2ggY2xldmVybHkgcmVsZWFzZXMgYGxvY2tfc29ja2AgdGVtcG9yYXJpbHkgKmJlZm9yZSogY2FsbGluZyBgY2FuY2VsX3dvcmtfc3luY2AuIFRoaXMgY2lyY3VtdmVudHMgdGhlIGRlYWRsb2NrLiBJdCB0aGVuIGNhcmVmdWxseSBoYW5kbGVzIHRoZSBgc29ja19wdXRgIGNhbGxzIGlmIHRoZSB3b3JrIHdhcyBhY3R1YWxseSBjYW5jZWxsZWQsIGFuZCByZWFjcXVpcmVzIHRoZSBsb2NrIGFmdGVyd2FyZCwgZW5zdXJpbmcgbm8gcmVmZXJlbmNlIGNvdW50IGlzc3Vlcy4gQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBndWFyZCB1c2luZyBgaWYgKCFjb25uLVx1MDAzZWZyZWVkKWAgd2l0aGluIGBzbWNfY29ubl9hYm9ydF93b3JrYCBpbiBgc21jX2Nvbm5fa2lsbGAsIHdoaWNoIGlzIGEgZ29vZCBkZWZlbnNpdmUgbWVhc3VyZS5cblxuTm93LCBhcyBhbHdheXMsIEkgbmVlZCB0byBjaGVjayBmb3Igb3RoZXIgc3VidGxlIGlzc3Vlcy4gTXkgZm9jdXMgaXMgb24gbWVtb3J5IHNhZmV0eS4gRG9lcyB0aGlzIHBhdGNoIG9wZW4gYW55IGRvb3JzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXM/IERvZXMgaXQgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzPyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgS01TQU4uXG5cbkZpcnN0LCBkb2VzIHRoaXMgcGF0Y2ggaW52b2x2ZSB1c2VyLXNwYWNlIGludGVyYWN0aW9ucz8gTm8uIE9rYXksIGdvb2QuIE5leHQsIGFyZSB3ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IE5vLiBgY29ubi1cdTAwM2VmcmVlZGAgaXMgYSBwcmUtZXhpc3RpbmcgZmllbGQgaW5pdGlhbGl6ZWQgdG8gYDBgIGR1cmluZyBjb25uZWN0aW9uIGNyZWF0aW9uIGFuZCBpcyBzZXQgaW4gYHNtY19jb25uX2ZyZWVgLiBUaGF0IGxvb2tzIHNhZmUuIEFyZSB3ZSBhbGxvY2F0aW5nIGJ1ZmZlcnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24/IE5vLCB0aGF0IGlzIG5vdCB0aGUgY2FzZS4gRG9lcyB0aGlzIHRvdWNoIGFueSBib3VuZHMgY2hlY2tzIG9yIGludHJvZHVjZSBhbnkgcmlza3kgbGVuZ3RoIG1hbmlwdWxhdGlvbnM/IE5vLlxuXG5UaGUgbW9zdCBsaWtlbHkgcmlza3MgaGVyZSBhcmUgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byB0aGUgc29ja2V0J3MgcmVmZXJlbmNlIGNvdW50IChwb3RlbnRpYWxseSBjYXVzaW5nIHVzZS1hZnRlci1mcmVlIG9yIGxlYWtzKSwgYW5kIG92ZXJhbGwgbG9ja2luZyBjb3JyZWN0bmVzcy4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cywgYW5kIHRoYW5rZnVsbHksIHRoZXkgYXJlIHRoaW5ncyB0aGF0IGFyZSBkZXRlY3RhYmxlIHVzaW5nIHN0YW5kYXJkIGRlYnVnZ2VycyBhbmQgc2FuaXRpemVycyBsaWtlIExPQ0tERVAsIEtBU0FOLCBhbmQgcmVmY291bnQgY2hlY2tzLlxuXG5HaXZlbiBteSBhbmFseXNpcywgSSBhbSBjb25maWRlbnQgdGhhdCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUsIGFuZCBzdGFuZGFyZCB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGlzc3VlcyBpbiB0aGlzIHBhdGNoLiBJIHRoaW5rIHRoaXMgcGF0Y2ggaXMgcHJldHR5IHdlbGwgdGhvdWdodC1vdXQgYW5kIHNvbHZlcyB0aGUgcHJvYmxlbSBlZmZlY3RpdmVseS4gSSdsbCBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjaywgYnV0IHRoZSByZWFzb25pbmcgaXMgc29saWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MzMsIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDA6NDEuODE5NTg4NTVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRlYWRsb2NrIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gU01DIGNvbm5lY3Rpb24gdGVhcmRvd24gKG5ldC9zbWMvc21jX2NvcmUuYykgYnkgcmVsZWFzaW5nIHRoZSBzb2NrZXQgbG9jayBhcm91bmQgYGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspYCBhbmQgYWRkaW5nIGEgYCFjb25uLVxcdTAwM2VmcmVlZGAgY2hlY2sgaW4gYHNtY19jb25uX2Fib3J0X3dvcmsoKWAuXFxuXFxuVGhlIGNoYW5nZXMgc29sZWx5IG1vZGlmeSBsb2NraW5nIGJlaGF2aW9yLCB3b3JrIGNhbmNlbGxhdGlvbiBzeW5jaHJvbml6YXRpb24sIGFuZCBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGJ1ZmZlciBsZW5ndGggb3IgYm91bmRzIG1hbmlwdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMgKHN1Y2ggYXMgZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoTE9DS0RFUCwgS0FTQU4pIGFuZCBkbyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgZGVhZGxvY2sgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBpbiBTTUMgY29ubmVjdGlvbiB0ZWFyZG93biAobmV0L3NtYy9zbWNfY29yZS5jKSBieSByZWxlYXNpbmcgdGhlIHNvY2tldCBsb2NrIGFyb3VuZCBgY2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2Y29ubi1cXHUwMDNlYWJvcnRfd29yaylgIGFuZCBhZGRpbmcgYSBgIWNvbm4tXFx1MDAzZWZyZWVkYCBjaGVjayBpbiBgc21jX2Nvbm5fYWJvcnRfd29yaygpYC5cXG5cXG5UaGUgY2hhbmdlcyBzb2xlbHkgbW9kaWZ5IGxvY2tpbmcgYmVoYXZpb3IsIHdvcmsgY2FuY2VsbGF0aW9uIHN5bmNocm9uaXphdGlvbiwgYW5kIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gYnVmZmVyIGxlbmd0aCBvciBib3VuZHMgbWFuaXB1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3VlcyAoc3VjaCBhcyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChMT0NLREVQLCBLQVNBTikgYW5kIGRvIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow8p7k8[1] Phase: Succeeded StartedAt: 2026-09-07 15:00:52 +0000 UTC FinishedAt: 2026-09-07 15:00:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 15:00:52 +0000 UTC FinishedAt: 2026-09-07 15:00:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2] Phase: Succeeded StartedAt: 2026-09-07 15:00:52 +0000 UTC FinishedAt: 2026-09-07 18:44:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 15:00:52 +0000 UTC FinishedAt: 2026-09-07 18:44:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 15:00:52 +0000 UTC FinishedAt: 2026-09-07 15:01:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 15:00:52 +0000 UTC FinishedAt: 2026-09-07 15:01:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8p7k8/series-workflow8p7k8-convert-artifact-3876663168/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 15:01:36 +0000 UTC FinishedAt: 2026-09-07 15:20:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 15:01:36 +0000 UTC FinishedAt: 2026-09-07 15:20:34 +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:*2cc67fc2-b357-4f12-bbb2-ea92d091eb78,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-workflow8p7k8/series-workflow8p7k8-convert-artifact-3876663168/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": "60f8d5f3-5ae6-4316-9fd8-e0caaede68d5", "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-workflow8p7k8/series-workflow8p7k8-build-action-3307108934/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 15:01:36 +0000 UTC FinishedAt: 2026-09-07 15:20:24 +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:*2cc67fc2-b357-4f12-bbb2-ea92d091eb78,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-workflow8p7k8/series-workflow8p7k8-convert-artifact-3876663168/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": "60f8d5f3-5ae6-4316-9fd8-e0caaede68d5", "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-workflow8p7k8/series-workflow8p7k8-build-action-3307108934/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 15:20:34 +0000 UTC FinishedAt: 2026-09-07 15:20:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 15:20:34 +0000 UTC FinishedAt: 2026-09-07 15:20:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 15:20:34 +0000 UTC FinishedAt: 2026-09-07 15:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 15:20:34 +0000 UTC FinishedAt: 2026-09-07 15:20:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8p7k8/series-workflow8p7k8-convert-artifact-492659239/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 15:20:44 +0000 UTC FinishedAt: 2026-09-07 15:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 15:20:44 +0000 UTC FinishedAt: 2026-09-07 15:22:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*60f8d5f3-5ae6-4316-9fd8-e0caaede68d5,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-workflow8p7k8/series-workflow8p7k8-build-action-3307108934/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-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 15:22:36 +0000 UTC FinishedAt: 2026-09-07 15:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 15:22:36 +0000 UTC FinishedAt: 2026-09-07 15:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 15:22:36 +0000 UTC FinishedAt: 2026-09-07 15:41:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 15:22:36 +0000 UTC FinishedAt: 2026-09-07 15:41:35 +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:*2cc67fc2-b357-4f12-bbb2-ea92d091eb78,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-workflow8p7k8/series-workflow8p7k8-convert-artifact-492659239/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": "fdf29d41-dcbb-4098-ab37-4e321f04c65e", "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-workflow8p7k8/series-workflow8p7k8-build-action-1840108459/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 15:22:36 +0000 UTC FinishedAt: 2026-09-07 15:41:25 +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:*2cc67fc2-b357-4f12-bbb2-ea92d091eb78,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-workflow8p7k8/series-workflow8p7k8-convert-artifact-492659239/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": "fdf29d41-dcbb-4098-ab37-4e321f04c65e", "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-workflow8p7k8/series-workflow8p7k8-build-action-1840108459/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 15:41:35 +0000 UTC FinishedAt: 2026-09-07 15:41:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 15:41:35 +0000 UTC FinishedAt: 2026-09-07 15:41:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 15:41:35 +0000 UTC FinishedAt: 2026-09-07 15:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 15:41:35 +0000 UTC FinishedAt: 2026-09-07 15:43:16 +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:*fdf29d41-dcbb-4098-ab37-4e321f04c65e,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-workflow8p7k8/series-workflow8p7k8-build-action-1840108459/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-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 15:43:26 +0000 UTC FinishedAt: 2026-09-07 18:44:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 15:43:26 +0000 UTC FinishedAt: 2026-09-07 18:44:57 +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":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"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:*60f8d5f3-5ae6-4316-9fd8-e0caaede68d5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fdf29d41-dcbb-4098-ab37-4e321f04c65e,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-workflow8p7k8/series-workflow8p7k8-build-action-3307108934/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-workflow8p7k8/series-workflow8p7k8-build-action-1840108459/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 15:43:26 +0000 UTC FinishedAt: 2026-09-07 15:43:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 15:43:26 +0000 UTC FinishedAt: 2026-09-07 15:43:31 +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":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"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-workflow8p7k8/series-workflow8p7k8-convert-artifact-509228672/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 15:43:26 +0000 UTC FinishedAt: 2026-09-07 15:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 15:43:26 +0000 UTC FinishedAt: 2026-09-07 15:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 15:43:26 +0000 UTC FinishedAt: 2026-09-07 15:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 15:43:36 +0000 UTC FinishedAt: 2026-09-07 18:44:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8p7k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_conn_free","smc_conn_abort_work","smc_conn_cancel_abort_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","INET"],"series_id":"cc372bb0-3a3e-42c8-b06a-6f72990ab087","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 15:43:36 +0000 UTC FinishedAt: 2026-09-07 18:44:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*60f8d5f3-5ae6-4316-9fd8-e0caaede68d5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fdf29d41-dcbb-4098-ab37-4e321f04c65e,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-workflow8p7k8/series-workflow8p7k8-build-action-3307108934/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-workflow8p7k8/series-workflow8p7k8-build-action-1840108459/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-workflow8p7k8/series-workflow8p7k8-convert-artifact-509228672/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,}