Name: series-workflow22h4p Phase: Succeeded StartedAt: 2026-07-30 13:15:27 +0000 UTC FinishedAt: 2026-07-30 17:29:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[0] Phase: Succeeded StartedAt: 2026-07-30 13:15:27 +0000 UTC FinishedAt: 2026-07-30 13:38:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 13:15:27 +0000 UTC FinishedAt: 2026-07-30 13:38:29 +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": "dd16f1b5720f5dae33a79b5305e188e8290a3973", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_USER", "INET_ESP", "INET6_ESP", "INET6_AH", "INET_ESPINTCP", "INET6_ESPINTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd16f1b5720f5dae33a79b5305e188e8290a3973", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_USER", "INET_ESP", "INET6_ESP", "INET6_AH", "INET_ESPINTCP", "INET6_ESPINTCP" ], "series_id": "0d290b5f-2748-448e-97fc-2b711f663e6f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "esp_output_tail", "esp6_output_tail", "xfrm6_input_addr", "xfrm_output", "espintcp_queue_out", "espintcp_push_skb", "xfrm_state_walk" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9BSCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXNwX291dHB1dF90YWlsJiMzNDssCiAgICAmIzM0O2VzcDZfb3V0cHV0X3RhaWwmIzM0OywKICAgICYjMzQ7eGZybTZfaW5wdXRfYWRkciYjMzQ7LAogICAgJiMzNDt4ZnJtX291dHB1dCYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9xdWV1ZV9vdXQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3BfcHVzaF9za2ImIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV93YWxrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgZmlsZXMgaW4gdGhlIElQc2VjIChYRlJNLCBFU1AsIEFIKSBzdWJzeXN0ZW0uIEl0IGFkZHMgY2hlY2tzIGZvciB6ZXJvY29weSBtYW5hZ2VkIGZyYWdtZW50cyBpbiBFU1AsIGZpeGVzIGFkZHJlc3MgcmVhcnJhbmdlbWVudCBpbiBBSDYsIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIFhGUk02IGlucHV0LCBhZGRzIGEgY2hlY2sgZm9yIG1pc3NpbmcgZGV2aWNlIGluIEVTUC1pbi1UQ1AsIGNoYW5nZXMgdGhlIE5BVCBrZWVwYWxpdmUgd29ya3F1ZXVlIHRvIGNvbGxlY3Qgc3RhdGVzIGJlZm9yZSBwcm9jZXNzaW5nIHRoZW0sIHJlbW92ZXMgYSBkb3VibGUgZnJlZSBpbiBYRlJNIG91dHB1dCwgYW5kIGZpeGVzIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIFhGUk0gdXNlci4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCwgcmVhY2hhYmxlLCBhbmQgYWZmZWN0IGNvcmUgbmV0d29ya2luZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYwMzlhNTk0MmI2NmZlNTczNzJmOTYxOTE0M2IwODhmZjYwYmJhZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxMzozNDowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmNcbmluZGV4IGRmYzgxZWU5NjlhZTAuLmZhMTcxMGUyN2U1MDUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9lc3A0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2VzcDQuY1xuQEAgLTEwNCw2ICYjNDM7MTA0LDEzIEBAIHN0YXRpYyB2b2lkIGVzcF9zc2dfdW5yZWYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHZvaWQgKnRtcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcTtcbiBcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XG4gXG4mIzQzO1x0LyogTWFuYWdlZCBmcmFncyBhcmUgb3duZWQgYnkgdGhlIHplcm9jb3B5IHVidWY7IHRoZSBza2IgaG9sZHMgbm9cbiYjNDM7XHQgKiBwZXItZnJhZyBwYWdlIHJlZmVyZW5jZSwgc28gd2UgbXVzdCBub3QgZHJvcCBvbmUgaGVyZS4gIE1pcnJvcnNcbiYjNDM7XHQgKiB0aGUgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgaGFuZGxpbmcgaW4gc2tiX3JlbGVhc2VfZGF0YSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChza2JfemNvcHlfbWFuYWdlZChza2IpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmICh4LVx1MDAzZXByb3BzLmZsYWdzIFx1MDAyNiBYRlJNX1NUQVRFX0VTTilcbiBcdFx0ZXh0cmFsZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZXNwX291dHB1dF9leHRyYSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWg2LmMgYi9uZXQvaXB2Ni9haDYuY1xuaW5kZXggNzZmN2EyZGU5MTA4ZS4uYzk2ZjdlMGQwYTQ4MSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FoNi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9haDYuY1xuQEAgLTIzMiwyNiAmIzQzOzIzMiwyOCBAQCBzdGF0aWMgdm9pZCBpcHY2X3JlYXJyYW5nZV9kZXN0b3B0KHN0cnVjdCBpcHY2aGRyICppcGgsIHN0cnVjdCBpcHY2X29wdF9oZHIgKmRlc1xuICAqXHRSZWFycmFuZ2UgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gQGlwaCBhbmQgdGhlIGFkZHJlc3NlcyBpbiBAcnRoZHJcbiAgKlx0c28gdGhhdCB0aGV5IGFwcGVhciBpbiB0aGUgb3JkZXIgdGhleSB3aWxsIGF0IHRoZSBmaW5hbCBkZXN0aW5hdGlvbi5cbiAgKlx0U2VlIEFwcGVuZGl4IEEyIG9mIFJGQyAyNDAyIGZvciBkZXRhaWxzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBzZWdtZW50c19sZWZ0IGV4Y2VlZHMgdGhlIG51bWJlciBvZlxuJiM0MzsgKiBhZGRyZXNzZXMgZGVzY3JpYmVkIGJ5IGhkcmxlbi5cbiAgKi9cbi1zdGF0aWMgdm9pZCBpcHY2X3JlYXJyYW5nZV9ydGhkcihzdHJ1Y3QgaXB2NmhkciAqaXBoLCBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKnJ0aGRyKVxuJiM0MztzdGF0aWMgaW50IGlwdjZfcmVhcnJhbmdlX3J0aGRyKHN0cnVjdCBpcHY2aGRyICppcGgsIHN0cnVjdCBpcHY2X3J0X2hkciAqcnRoZHIpXG4ge1xuLVx0aW50IHNlZ21lbnRzLCBzZWdtZW50c19sZWZ0O1xuJiM0MztcdHVuc2lnbmVkIGludCBzZWdtZW50cywgc2VnbWVudHNfbGVmdDtcbiBcdHN0cnVjdCBpbjZfYWRkciAqYWRkcnM7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgZmluYWxfYWRkcjtcbiBcbiBcdHNlZ21lbnRzX2xlZnQgPSBydGhkci1cdTAwM2VzZWdtZW50c19sZWZ0O1xuIFx0aWYgKHNlZ21lbnRzX2xlZnQgPT0gMClcbi1cdFx0cmV0dXJuO1xuLVx0cnRoZHItXHUwMDNlc2VnbWVudHNfbGVmdCA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIFRoZSB2YWx1ZSBvZiBydGhkci1cdTAwM2VoZHJsZW4gaGFzIGJlZW4gdmVyaWZpZWQgZWl0aGVyIGJ5IHRoZSBzeXN0ZW1cbi1cdCAqIGNhbGwgaWYgaXQgaXMgbG9jYWxseSBnZW5lcmF0ZWQsIG9yIGJ5IGlwdjZfcnRoZHJfcmN2KCkgZm9yIGluY29taW5nXG4tXHQgKiBwYWNrZXRzLiAgU28gd2UgY2FuIGFzc3VtZSB0aGF0IGl0IGlzIGV2ZW4gYW5kIHRoYXQgc2VnbWVudHMgaXNcbi1cdCAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBzZWdtZW50c19sZWZ0LlxuLVx0ICpcbi1cdCAqIEZvciB0aGUgc2FtZSByZWFzb24gd2UgY2FuIGFzc3VtZSB0aGF0IHRoaXMgb3B0aW9uIGlzIG9mIHR5cGUgMC5cbiYjNDM7XHQvKiBSYXcgbG9jYWxseSBnZW5lcmF0ZWQgcGFja2V0cyBjYW4gcmVhY2ggQUg2IHdpdGhvdXQgdGhlIGludmFyaWFudFxuJiM0MztcdCAqIHJlcXVpcmVkIGJ5IHRoZSBydDAtc3R5bGUgYWRkcmVzcyByZWFycmFuZ2VtZW50IGJlbG93LlxuIFx0ICovXG4gXHRzZWdtZW50cyA9IHJ0aGRyLVx1MDAzZWhkcmxlbiBcdTAwM2VcdTAwM2UgMTtcbiYjNDM7XHRpZiAoc2VnbWVudHNfbGVmdCBcdTAwM2Ugc2VnbWVudHMpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cnRoZHItXHUwMDNlc2VnbWVudHNfbGVmdCA9IDA7XG4gXG4gXHRhZGRycyA9ICgoc3RydWN0IHJ0MF9oZHIgKilydGhkciktXHUwMDNlYWRkcjtcbiBcdGZpbmFsX2FkZHIgPSBhZGRyc1tzZWdtZW50cyAtIDFdO1xuQEAgLTI2MSw2ICYjNDM7MjYzLDggQEAgc3RhdGljIHZvaWQgaXB2Nl9yZWFycmFuZ2VfcnRoZHIoc3RydWN0IGlwdjZoZHIgKmlwaCwgc3RydWN0IGlwdjZfcnRfaGRyICpydGhkcilcbiBcbiBcdGFkZHJzWzBdID0gaXBoLVx1MDAzZWRhZGRyO1xuIFx0aXBoLVx1MDAzZWRhZGRyID0gZmluYWxfYWRkcjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoc3RydWN0IGlwdjZoZHIgKmlwaCwgaW50IGxlbiwgaW50IGRpcilcbkBAIC0yNzMsNiAmIzQzOzI3Nyw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoc3RydWN0IGlwdjZoZHIgKmlwaCwgaW50IGxlbiwgaW50IGRpcilcbiBcdH0gZXh0aGRyID0geyAuaXBoID0gaXBoIH07XG4gXHRjaGFyICplbmQgPSBleHRoZHIucmF3ICYjNDM7IGxlbjtcbiBcdGludCBuZXh0aGRyID0gaXBoLVx1MDAzZW5leHRoZHI7XG4mIzQzO1x0aW50IGVycjtcbiBcbiBcdGV4dGhkci5pcGgmIzQzOyYjNDM7O1xuIFxuQEAgLTI5Miw3ICYjNDM7Mjk3LDkgQEAgc3RhdGljIGludCBpcHY2X2NsZWFyX211dGFibGVfb3B0aW9ucyhzdHJ1Y3QgaXB2NmhkciAqaXBoLCBpbnQgbGVuLCBpbnQgZGlyKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRjYXNlIE5FWFRIRFJfUk9VVElORzpcbi1cdFx0XHRpcHY2X3JlYXJyYW5nZV9ydGhkcihpcGgsIGV4dGhkci5ydGgpO1xuJiM0MztcdFx0XHRlcnIgPSBpcHY2X3JlYXJyYW5nZV9ydGhkcihpcGgsIGV4dGhkci5ydGgpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGRlZmF1bHQ6XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNi5jIGIvbmV0L2lwdjYvZXNwNi5jXG5pbmRleCAyOTZiNTc5MjZhYmI5Li43ZDIxNmI5YzU5ZjA0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXNwNi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9lc3A2LmNcbkBAIC0xMjEsNiAmIzQzOzEyMSwxMyBAQCBzdGF0aWMgdm9pZCBlc3Bfc3NnX3VucmVmKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB2b2lkICp0bXAsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXE7XG4gXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuIFxuJiM0MztcdC8qIE1hbmFnZWQgZnJhZ3MgYXJlIG93bmVkIGJ5IHRoZSB6ZXJvY29weSB1YnVmOyB0aGUgc2tiIGhvbGRzIG5vXG4mIzQzO1x0ICogcGVyLWZyYWcgcGFnZSByZWZlcmVuY2UsIHNvIHdlIG11c3Qgbm90IGRyb3Agb25lIGhlcmUuICBNaXJyb3JzXG4mIzQzO1x0ICogdGhlIFNLQkZMX01BTkFHRURfRlJBR19SRUZTIGhhbmRsaW5nIGluIHNrYl9yZWxlYXNlX2RhdGEoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc2tiX3pjb3B5X21hbmFnZWQoc2tiKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRpZiAoeC1cdTAwM2Vwcm9wcy5mbGFncyBcdTAwMjYgWEZSTV9TVEFURV9FU04pXG4gXHRcdGV4dHJhbGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IGVzcF9vdXRwdXRfZXh0cmEpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXG5pbmRleCA4OWQwNDQzYjUzMDczLi4wN2VkZWYyNTg5ODQ0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xuQEAgLTI0Nyw3ICYjNDM7MjQ3LDcgQEAgaW50IHhmcm02X2lucHV0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG4gXG4tXHRpZiAoMSAmIzQzOyBzcC1cdTAwM2VsZW4gPT0gWEZSTV9NQVhfREVQVEgpIHtcbiYjNDM7XHRpZiAoc3AtXHUwMDNlbGVuIFx1MDAzZT0gWEZSTV9NQVhfREVQVEgpIHtcbiBcdFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOQlVGRkVSRVJST1IpO1xuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0vZXNwaW50Y3AuYyBiL25ldC94ZnJtL2VzcGludGNwLmNcbmluZGV4IDM3NGUxYjk2NDQzODMuLjY3NGFlZGM1YWY1YTIgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS9lc3BpbnRjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS9lc3BpbnRjcC5jXG5AQCAtMzcsNiAmIzQzOzM3LDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2tiLVx1MDAzZWRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHNvY2tfbmV0KHNrKSwgc2tiLVx1MDAzZXNrYl9paWYpO1xuJiM0MztcdGlmICghc2tiLVx1MDAzZWRldikge1xuJiM0MztcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuQEAgLTQ1LDYgJiM0Mzs1MCw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuICNlbmRpZlxuIFx0XHR4ZnJtNF9yY3ZfZW5jYXAoc2tiLCBJUFBST1RPX0VTUCwgMCwgVENQX0VOQ0FQX0VTUElOVENQKTtcbiBcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztvdXQ6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG5AQCAtNTE1LDcgJiM0Mzs1MjEsOCBAQCBzdGF0aWMgdm9pZCBlc3BpbnRjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcbiBcdHN0cnBfc3RvcChcdTAwMjZjdHgtXHUwMDNlc3RycCk7XG4gXG4gXHRzay1cdTAwM2Vza19wcm90ID0gXHUwMDI2dGNwX3Byb3Q7XG4tXHRiYXJyaWVyKCk7XG4mIzQzO1xuJiM0MztcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuIFx0ZGlzYWJsZV93b3JrX3N5bmMoXHUwMDI2Y3R4LVx1MDAzZXdvcmspO1xuIFx0c3RycF9kb25lKFx1MDAyNmN0eC1cdTAwM2VzdHJwKTtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5pbmRleCBlYjFiNmY2NzczOWUxLi44Njc5YzY4YzEwYTE2IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5AQCAtMTU2LDI0ICYjNDM7MTU2LDUxIEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXG4gfVxuIFxuIHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIHN0YXRlcztcbiBcdHRpbWU2NF90IG5leHRfcnVuO1xuIFx0dGltZTY0X3Qgbm93O1xuIH07XG4gXG4tc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgY291bnQsIHZvaWQgKnB0cilcbiYjNDM7c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUge1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuIHtcbiBcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XG4mIzQzO1x0c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlO1xuJiM0MztcbiYjNDM7XHRpZiAoIVJFQURfT05DRSh4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHN0YXRlID0ga21hbGxvY19vYmooKnN0YXRlLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAoIXN0YXRlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHhmcm1fc3RhdGVfaG9sZCh4KTtcbiYjNDM7XHRzdGF0ZS1cdTAwM2V4ID0geDtcbiYjNDM7XHRsaXN0X2FkZF90YWlsKFx1MDAyNnN0YXRlLVx1MDAzZWxpc3QsIFx1MDAyNmN0eC1cdTAwM2VzdGF0ZXMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHgpXG4mIzQzO3tcbiBcdGJvb2wgc2VuZF9rZWVwYWxpdmUgPSBmYWxzZTtcbiBcdHN0cnVjdCBuYXRfa2VlcGFsaXZlIGthO1xuLVx0dGltZTY0X3QgbmV4dF9ydW47XG4mIzQzO1x0dGltZTY0X3QgbmV4dF9ydW4gPSAwO1xuIFx0dTMyIGludGVydmFsO1xuIFx0aW50IGRlbHRhO1xuIFxuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ4LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoeC1cdTAwM2VrbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0RFQUQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRpbnRlcnZhbCA9IHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbDtcbiBcdGlmICghaW50ZXJ2YWwpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0c3Bpbl9sb2NrKFx1MDAyNngtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcbiBcdGRlbHRhID0gKGludCkoY3R4LVx1MDAzZW5vdyAtIHgtXHUwMDNlbGFzdHVzZWQpO1xuIFx0aWYgKGRlbHRhIFx1MDAzYyBpbnRlcnZhbCkge1xuQEAgLTE4NywyOSAmIzQzOzIxNCw0MSBAQCBzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuIFx0XHRzZW5kX2tlZXBhbGl2ZSA9IHRydWU7XG4gXHR9XG4gXG4tXHRzcGluX3VubG9jayhcdTAwMjZ4LVx1MDAzZWxvY2spO1xuJiM0MztvdXQ6XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eC1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmIChzZW5kX2tlZXBhbGl2ZSlcbiBcdFx0bmF0X2tlZXBhbGl2ZV9zZW5kKFx1MDAyNmthKTtcbiBcbi1cdGlmICghY3R4LVx1MDAzZW5leHRfcnVuIHx8IG5leHRfcnVuIFx1MDAzYyBjdHgtXHUwMDNlbmV4dF9ydW4pXG4mIzQzO1x0aWYgKG5leHRfcnVuIFx1MDAyNlx1MDAyNiAoIWN0eC1cdTAwM2VuZXh0X3J1biB8fCBuZXh0X3J1biBcdTAwM2MgY3R4LVx1MDAzZW5leHRfcnVuKSlcbiBcdFx0Y3R4LVx1MDAzZW5leHRfcnVuID0gbmV4dF9ydW47XG4tXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4mIzQzO1x0c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlLCAqdG1wO1xuIFx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4O1xuIFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuJiM0MztcdGludCBlcnI7XG4gXG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LnN0YXRlcyk7XG4gXHRjdHgubmV4dF9ydW4gPSAwO1xuIFx0Y3R4Lm5vdyA9IGt0aW1lX2dldF9yZWFsX3NlY29uZHMoKTtcbiBcbiBcdG5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0LCB4ZnJtLm5hdF9rZWVwYWxpdmVfd29yay53b3JrKTtcbiBcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFx1MDAyNndhbGssIElQUFJPVE9fRVNQLCBOVUxMKTtcbi1cdHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUsIFx1MDAyNmN0eCk7XG4mIzQzO1x0ZXJyID0geGZybV9zdGF0ZV93YWxrKG5ldCwgXHUwMDI2d2FsaywgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3QsIFx1MDAyNmN0eCk7XG4gXHR4ZnJtX3N0YXRlX3dhbGtfZG9uZShcdTAwMjZ3YWxrLCBuZXQpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGF0ZSwgdG1wLCBcdTAwMjZjdHguc3RhdGVzLCBsaXN0KSB7XG4mIzQzO1x0XHRuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0YXRlLVx1MDAzZXgsIFx1MDAyNmN0eCk7XG4mIzQzO1x0XHR4ZnJtX3N0YXRlX3B1dChzdGF0ZS1cdTAwM2V4KTtcbiYjNDM7XHRcdGtmcmVlKHN0YXRlKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGVyciA9PSAtRU5PTUVNKSB7XG4mIzQzO1x0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4gXHRpZiAoY3R4Lm5leHRfcnVuKVxuIFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLFxuIFx0XHRcdFx0ICAgICAgKGN0eC5uZXh0X3J1biAtIGN0eC5ub3cpICogSFopO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMgYi9uZXQveGZybS94ZnJtX291dHB1dC5jXG5pbmRleCBjYzM1YzJmY2JiZTA5Li5lMzA1YmEzMmUzNTZiIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuQEAgLTYzNiwxMCAmIzQzOzYzNiw4IEBAIHN0YXRpYyBpbnQgeGZybV9kZXZfZGlyZWN0X291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiBcbiBcdGVyciA9IHNrYl9kc3Qoc2tiKS1cdTAwM2VvcHMtXHUwMDNlbG9jYWxfb3V0KG5ldCwgc2ssIHNrYik7XG4tXHRpZiAodW5saWtlbHkoZXJyICE9IDEpKSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdGlmICh1bmxpa2VseShlcnIgIT0gMSkpXG4gXHRcdHJldHVybiBlcnI7XG4tXHR9XG4gXG4gXHQvKiBJbiB0cmFuc3BvcnQgbW9kZSwgbmV0d29yayBkZXN0aW5hdGlvbiBpc1xuIFx0ICogZGlyZWN0bHkgcmVhY2hhYmxlLCB3aGlsZSBpbiB0dW5uZWwgbW9kZSxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5pbmRleCBkNmRiNjMzMDRiYTZiLi42MjY2YTkyY2YzMDIwIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtOTQwLDcgJiM0Mzs5NDAsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmICgoZXJyID0gYXR0YWNoX2F1dGhfdHJ1bmMoXHUwMDI2eC1cdTAwM2VhYWxnLCBcdTAwMjZ4LVx1MDAzZXByb3BzLmFhbGdvLFxuIFx0XHRcdFx0ICAgICBhdHRyc1tYRlJNQV9BTEdfQVVUSF9UUlVOQ10sIGV4dGFjaykpKVxuIFx0XHRnb3RvIGVycm9yO1xuLVx0aWYgKCF4LVx1MDAzZXByb3BzLmFhbGdvKSB7XG4mIzQzO1x0aWYgKCF4LVx1MDAzZWFhbGcpIHtcbiBcdFx0aWYgKChlcnIgPSBhdHRhY2hfYXV0aChcdTAwMjZ4LVx1MDAzZWFhbGcsIFx1MDAyNngtXHUwMDNlcHJvcHMuYWFsZ28sXG4gXHRcdFx0XHQgICAgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhdLCBleHRhY2spKSlcbiBcdFx0XHRnb3RvIGVycm9yO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfQUgmIzM0OywKICAgICYjMzQ7SU5FVF9FU1BJTlRDUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BJTlRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VzcF9vdXRwdXRfdGFpbCYjMzQ7LAogICAgJiMzNDtlc3A2X291dHB1dF90YWlsJiMzNDssCiAgICAmIzM0O3hmcm02X2lucHV0X2FkZHImIzM0OywKICAgICYjMzQ7eGZybV9vdXRwdXQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3BfcXVldWVfb3V0JiMzNDssCiAgICAmIzM0O2VzcGludGNwX3B1c2hfc2tiJiMzNDssCiAgICAmIzM0O3hmcm1fc3RhdGVfd2FsayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzIGluIHRoZSBJUHNlYyAoWEZSTSwgRVNQLCBBSCkgc3Vic3lzdGVtLiBJdCBhZGRzIGNoZWNrcyBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFnbWVudHMgaW4gRVNQLCBmaXhlcyBhZGRyZXNzIHJlYXJyYW5nZW1lbnQgaW4gQUg2LCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBYRlJNNiBpbnB1dCwgYWRkcyBhIGNoZWNrIGZvciBtaXNzaW5nIGRldmljZSBpbiBFU1AtaW4tVENQLCBjaGFuZ2VzIHRoZSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSB0byBjb2xsZWN0IHN0YXRlcyBiZWZvcmUgcHJvY2Vzc2luZyB0aGVtLCByZW1vdmVzIGEgZG91YmxlIGZyZWUgaW4gWEZSTSBvdXRwdXQsIGFuZCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBYRlJNIHVzZXIuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MDM5YTU5NDJiNjZmZTU3MzcyZjk2MTkxNDNiMDg4ZmY2MGJiYWRlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMTM6MzQ6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmMKaW5kZXggZGZjODFlZTk2OWFlMC4uZmExNzEwZTI3ZTUwNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZXNwNC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2VzcDQuYwpAQCAtMTA0LDYgJiM0MzsxMDQsMTMgQEAgc3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCiYjNDM7CS8qIE1hbmFnZWQgZnJhZ3MgYXJlIG93bmVkIGJ5IHRoZSB6ZXJvY29weSB1YnVmOyB0aGUgc2tiIGhvbGRzIG5vCiYjNDM7CSAqIHBlci1mcmFnIHBhZ2UgcmVmZXJlbmNlLCBzbyB3ZSBtdXN0IG5vdCBkcm9wIG9uZSBoZXJlLiAgTWlycm9ycwomIzQzOwkgKiB0aGUgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgaGFuZGxpbmcgaW4gc2tiX3JlbGVhc2VfZGF0YSgpLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNrYl96Y29weV9tYW5hZ2VkKHNrYikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJaWYgKHgtJmd0O3Byb3BzLmZsYWdzICZhbXA7IFhGUk1fU1RBVEVfRVNOKQogCQlleHRyYWxlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBlc3Bfb3V0cHV0X2V4dHJhKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWg2LmMgYi9uZXQvaXB2Ni9haDYuYwppbmRleCA3NmY3YTJkZTkxMDhlLi5jOTZmN2UwZDBhNDgxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9haDYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9haDYuYwpAQCAtMjMyLDI2ICYjNDM7MjMyLDI4IEBAIHN0YXRpYyB2b2lkIGlwdjZfcmVhcnJhbmdlX2Rlc3RvcHQoc3RydWN0IGlwdjZoZHIgKmlwaCwgc3RydWN0IGlwdjZfb3B0X2hkciAqZGVzCiAgKglSZWFycmFuZ2UgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gQGlwaCBhbmQgdGhlIGFkZHJlc3NlcyBpbiBAcnRoZHIKICAqCXNvIHRoYXQgdGhleSBhcHBlYXIgaW4gdGhlIG9yZGVyIHRoZXkgd2lsbCBhdCB0aGUgZmluYWwgZGVzdGluYXRpb24uCiAgKglTZWUgQXBwZW5kaXggQTIgb2YgUkZDIDI0MDIgZm9yIGRldGFpbHMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBzZWdtZW50c19sZWZ0IGV4Y2VlZHMgdGhlIG51bWJlciBvZgomIzQzOyAqIGFkZHJlc3NlcyBkZXNjcmliZWQgYnkgaGRybGVuLgogICovCi1zdGF0aWMgdm9pZCBpcHY2X3JlYXJyYW5nZV9ydGhkcihzdHJ1Y3QgaXB2NmhkciAqaXBoLCBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKnJ0aGRyKQomIzQzO3N0YXRpYyBpbnQgaXB2Nl9yZWFycmFuZ2VfcnRoZHIoc3RydWN0IGlwdjZoZHIgKmlwaCwgc3RydWN0IGlwdjZfcnRfaGRyICpydGhkcikKIHsKLQlpbnQgc2VnbWVudHMsIHNlZ21lbnRzX2xlZnQ7CiYjNDM7CXVuc2lnbmVkIGludCBzZWdtZW50cywgc2VnbWVudHNfbGVmdDsKIAlzdHJ1Y3QgaW42X2FkZHIgKmFkZHJzOwogCXN0cnVjdCBpbjZfYWRkciBmaW5hbF9hZGRyOwogCiAJc2VnbWVudHNfbGVmdCA9IHJ0aGRyLSZndDtzZWdtZW50c19sZWZ0OwogCWlmIChzZWdtZW50c19sZWZ0ID09IDApCi0JCXJldHVybjsKLQlydGhkci0mZ3Q7c2VnbWVudHNfbGVmdCA9IDA7CiYjNDM7CQlyZXR1cm4gMDsKIAotCS8qIFRoZSB2YWx1ZSBvZiBydGhkci0mZ3Q7aGRybGVuIGhhcyBiZWVuIHZlcmlmaWVkIGVpdGhlciBieSB0aGUgc3lzdGVtCi0JICogY2FsbCBpZiBpdCBpcyBsb2NhbGx5IGdlbmVyYXRlZCwgb3IgYnkgaXB2Nl9ydGhkcl9yY3YoKSBmb3IgaW5jb21pbmcKLQkgKiBwYWNrZXRzLiAgU28gd2UgY2FuIGFzc3VtZSB0aGF0IGl0IGlzIGV2ZW4gYW5kIHRoYXQgc2VnbWVudHMgaXMKLQkgKiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gc2VnbWVudHNfbGVmdC4KLQkgKgotCSAqIEZvciB0aGUgc2FtZSByZWFzb24gd2UgY2FuIGFzc3VtZSB0aGF0IHRoaXMgb3B0aW9uIGlzIG9mIHR5cGUgMC4KJiM0MzsJLyogUmF3IGxvY2FsbHkgZ2VuZXJhdGVkIHBhY2tldHMgY2FuIHJlYWNoIEFINiB3aXRob3V0IHRoZSBpbnZhcmlhbnQKJiM0MzsJICogcmVxdWlyZWQgYnkgdGhlIHJ0MC1zdHlsZSBhZGRyZXNzIHJlYXJyYW5nZW1lbnQgYmVsb3cuCiAJICovCiAJc2VnbWVudHMgPSBydGhkci0mZ3Q7aGRybGVuICZndDsmZ3Q7IDE7CiYjNDM7CWlmIChzZWdtZW50c19sZWZ0ICZndDsgc2VnbWVudHMpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcnRoZHItJmd0O3NlZ21lbnRzX2xlZnQgPSAwOwogCiAJYWRkcnMgPSAoKHN0cnVjdCBydDBfaGRyICopcnRoZHIpLSZndDthZGRyOwogCWZpbmFsX2FkZHIgPSBhZGRyc1tzZWdtZW50cyAtIDFdOwpAQCAtMjYxLDYgJiM0MzsyNjMsOCBAQCBzdGF0aWMgdm9pZCBpcHY2X3JlYXJyYW5nZV9ydGhkcihzdHJ1Y3QgaXB2NmhkciAqaXBoLCBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKnJ0aGRyKQogCiAJYWRkcnNbMF0gPSBpcGgtJmd0O2RhZGRyOwogCWlwaC0mZ3Q7ZGFkZHIgPSBmaW5hbF9hZGRyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpcHY2X2NsZWFyX211dGFibGVfb3B0aW9ucyhzdHJ1Y3QgaXB2NmhkciAqaXBoLCBpbnQgbGVuLCBpbnQgZGlyKQpAQCAtMjczLDYgJiM0MzsyNzcsNyBAQCBzdGF0aWMgaW50IGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHN0cnVjdCBpcHY2aGRyICppcGgsIGludCBsZW4sIGludCBkaXIpCiAJfSBleHRoZHIgPSB7IC5pcGggPSBpcGggfTsKIAljaGFyICplbmQgPSBleHRoZHIucmF3ICYjNDM7IGxlbjsKIAlpbnQgbmV4dGhkciA9IGlwaC0mZ3Q7bmV4dGhkcjsKJiM0MzsJaW50IGVycjsKIAogCWV4dGhkci5pcGgmIzQzOyYjNDM7OwogCkBAIC0yOTIsNyAmIzQzOzI5Nyw5IEBAIHN0YXRpYyBpbnQgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoc3RydWN0IGlwdjZoZHIgKmlwaCwgaW50IGxlbiwgaW50IGRpcikKIAkJCWJyZWFrOwogCiAJCWNhc2UgTkVYVEhEUl9ST1VUSU5HOgotCQkJaXB2Nl9yZWFycmFuZ2VfcnRoZHIoaXBoLCBleHRoZHIucnRoKTsKJiM0MzsJCQllcnIgPSBpcHY2X3JlYXJyYW5nZV9ydGhkcihpcGgsIGV4dGhkci5ydGgpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNi5jIGIvbmV0L2lwdjYvZXNwNi5jCmluZGV4IDI5NmI1NzkyNmFiYjkuLjdkMjE2YjljNTlmMDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2VzcDYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9lc3A2LmMKQEAgLTEyMSw2ICYjNDM7MTIxLDEzIEBAIHN0YXRpYyB2b2lkIGVzcF9zc2dfdW5yZWYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHZvaWQgKnRtcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXE7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAomIzQzOwkvKiBNYW5hZ2VkIGZyYWdzIGFyZSBvd25lZCBieSB0aGUgemVyb2NvcHkgdWJ1ZjsgdGhlIHNrYiBob2xkcyBubwomIzQzOwkgKiBwZXItZnJhZyBwYWdlIHJlZmVyZW5jZSwgc28gd2UgbXVzdCBub3QgZHJvcCBvbmUgaGVyZS4gIE1pcnJvcnMKJiM0MzsJICogdGhlIFNLQkZMX01BTkFHRURfRlJBR19SRUZTIGhhbmRsaW5nIGluIHNrYl9yZWxlYXNlX2RhdGEoKS4KJiM0MzsJICovCiYjNDM7CWlmIChza2JfemNvcHlfbWFuYWdlZChza2IpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmICh4LSZndDtwcm9wcy5mbGFncyAmYW1wOyBYRlJNX1NUQVRFX0VTTikKIAkJZXh0cmFsZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZXNwX291dHB1dF9leHRyYSk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCmluZGV4IDg5ZDA0NDNiNTMwNzMuLjA3ZWRlZjI1ODk4NDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYveGZybTZfaW5wdXQuYwpAQCAtMjQ3LDcgJiM0MzsyNDcsNyBAQCBpbnQgeGZybTZfaW5wdXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsCiAJCWdvdG8gZHJvcDsKIAl9CiAKLQlpZiAoMSAmIzQzOyBzcC0mZ3Q7bGVuID09IFhGUk1fTUFYX0RFUFRIKSB7CiYjNDM7CWlmIChzcC0mZ3Q7bGVuICZndDs9IFhGUk1fTUFYX0RFUFRIKSB7CiAJCVhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1JTkJVRkZFUkVSUk9SKTsKIAkJZ290byBkcm9wOwogCX0KZGlmZiAtLWdpdCBhL25ldC94ZnJtL2VzcGludGNwLmMgYi9uZXQveGZybS9lc3BpbnRjcC5jCmluZGV4IDM3NGUxYjk2NDQzODMuLjY3NGFlZGM1YWY1YTIgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL2VzcGludGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0vZXNwaW50Y3AuYwpAQCAtMzcsNiAmIzQzOzM3LDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKQogCiAJcmN1X3JlYWRfbG9jaygpOwogCXNrYi0mZ3Q7ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc29ja19uZXQoc2spLCBza2ItJmd0O3NrYl9paWYpOwomIzQzOwlpZiAoIXNrYi0mZ3Q7ZGV2KSB7CiYjNDM7CQlYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9YRlJNSU5FUlJPUik7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiAJaWYgKHNrLSZndDtza19mYW1pbHkgPT0gQUZfSU5FVDYpCkBAIC00NSw2ICYjNDM7NTAsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKICNlbmRpZgogCQl4ZnJtNF9yY3ZfZW5jYXAoc2tiLCBJUFBST1RPX0VTUCwgMCwgVENQX0VOQ0FQX0VTUElOVENQKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MztvdXQ6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTUxNSw3ICYjNDM7NTIxLDggQEAgc3RhdGljIHZvaWQgZXNwaW50Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCiAJc3RycF9zdG9wKCZhbXA7Y3R4LSZndDtzdHJwKTsKIAogCXNrLSZndDtza19wcm90ID0gJmFtcDt0Y3BfcHJvdDsKLQliYXJyaWVyKCk7CiYjNDM7CiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwogCiAJZGlzYWJsZV93b3JrX3N5bmMoJmFtcDtjdHgtJmd0O3dvcmspOwogCXN0cnBfZG9uZSgmYW1wO2N0eC0mZ3Q7c3RycCk7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jCmluZGV4IGViMWI2ZjY3NzM5ZTEuLjg2NzljNjhjMTBhMTYgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jCkBAIC0xNTYsMjQgJiM0MzsxNTYsNTEgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSkKIH0KIAogc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIHN0YXRlczsKIAl0aW1lNjRfdCBuZXh0X3J1bjsKIAl0aW1lNjRfdCBub3c7CiB9OwogCi1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKQomIzQzO3N0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7CiYjNDM7CXN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZTsKJiM0MzsKJiM0MzsJaWYgKCFSRUFEX09OQ0UoeC0mZ3Q7bmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJc3RhdGUgPSBrbWFsbG9jX29iaigqc3RhdGUsIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAoIXN0YXRlKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXhmcm1fc3RhdGVfaG9sZCh4KTsKJiM0MzsJc3RhdGUtJmd0O3ggPSB4OwomIzQzOwlsaXN0X2FkZF90YWlsKCZhbXA7c3RhdGUtJmd0O2xpc3QsICZhbXA7Y3R4LSZndDtzdGF0ZXMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggKmN0eCkKJiM0Mzt7CiAJYm9vbCBzZW5kX2tlZXBhbGl2ZSA9IGZhbHNlOwogCXN0cnVjdCBuYXRfa2VlcGFsaXZlIGthOwotCXRpbWU2NF90IG5leHRfcnVuOwomIzQzOwl0aW1lNjRfdCBuZXh0X3J1biA9IDA7CiAJdTMyIGludGVydmFsOwogCWludCBkZWx0YTsKIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDt4LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHgtJmd0O2ttLnN0YXRlID09IFhGUk1fU1RBVEVfREVBRCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCWludGVydmFsID0geC0mZ3Q7bmF0X2tlZXBhbGl2ZV9pbnRlcnZhbDsKIAlpZiAoIWludGVydmFsKQotCQlyZXR1cm4gMDsKLQotCXNwaW5fbG9jaygmYW1wO3gtJmd0O2xvY2spOwomIzQzOwkJZ290byBvdXQ7CiAKIAlkZWx0YSA9IChpbnQpKGN0eC0mZ3Q7bm93IC0geC0mZ3Q7bGFzdHVzZWQpOwogCWlmIChkZWx0YSAmbHQ7IGludGVydmFsKSB7CkBAIC0xODcsMjkgJiM0MzsyMTQsNDEgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgY291bnQsIHZvaWQgKnB0cikKIAkJc2VuZF9rZWVwYWxpdmUgPSB0cnVlOwogCX0KIAotCXNwaW5fdW5sb2NrKCZhbXA7eC0mZ3Q7bG9jayk7CiYjNDM7b3V0OgomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3gtJmd0O2xvY2spOwogCiAJaWYgKHNlbmRfa2VlcGFsaXZlKQogCQluYXRfa2VlcGFsaXZlX3NlbmQoJmFtcDtrYSk7CiAKLQlpZiAoIWN0eC0mZ3Q7bmV4dF9ydW4gfHwgbmV4dF9ydW4gJmx0OyBjdHgtJmd0O25leHRfcnVuKQomIzQzOwlpZiAobmV4dF9ydW4gJmFtcDsmYW1wOyAoIWN0eC0mZ3Q7bmV4dF9ydW4gfHwgbmV4dF9ydW4gJmx0OyBjdHgtJmd0O25leHRfcnVuKSkKIAkJY3R4LSZndDtuZXh0X3J1biA9IG5leHRfcnVuOwotCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewomIzQzOwlzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGUsICp0bXA7CiAJc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4OwogCXN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgd2FsazsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiYjNDM7CWludCBlcnI7CiAKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtjdHguc3RhdGVzKTsKIAljdHgubmV4dF9ydW4gPSAwOwogCWN0eC5ub3cgPSBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCk7CiAKIAluZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7CiAJeGZybV9zdGF0ZV93YWxrX2luaXQoJmFtcDt3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7Ci0JeGZybV9zdGF0ZV93YWxrKG5ldCwgJmFtcDt3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlLCAmYW1wO2N0eCk7CiYjNDM7CWVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsICZhbXA7d2FsaywgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3QsICZhbXA7Y3R4KTsKIAl4ZnJtX3N0YXRlX3dhbGtfZG9uZSgmYW1wO3dhbGssIG5ldCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGF0ZSwgdG1wLCAmYW1wO2N0eC5zdGF0ZXMsIGxpc3QpIHsKJiM0MzsJCW5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RhdGUtJmd0O3gsICZhbXA7Y3R4KTsKJiM0MzsJCXhmcm1fc3RhdGVfcHV0KHN0YXRlLSZndDt4KTsKJiM0MzsJCWtmcmVlKHN0YXRlKTsKJiM0MzsJfQomIzQzOwlpZiAoZXJyID09IC1FTk9NRU0pIHsKJiM0MzsJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO25ldC0mZ3Q7eGZybS5uYXRfa2VlcGFsaXZlX3dvcmssIDApOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAJaWYgKGN0eC5uZXh0X3J1bikKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bmV0LSZndDt4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywKIAkJCQkgICAgICAoY3R4Lm5leHRfcnVuIC0gY3R4Lm5vdykgKiBIWik7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX291dHB1dC5jIGIvbmV0L3hmcm0veGZybV9vdXRwdXQuYwppbmRleCBjYzM1YzJmY2JiZTA5Li5lMzA1YmEzMmUzNTZiIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMKQEAgLTYzNiwxMCAmIzQzOzYzNiw4IEBAIHN0YXRpYyBpbnQgeGZybV9kZXZfZGlyZWN0X291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCW5mX3Jlc2V0X2N0KHNrYik7CiAKIAllcnIgPSBza2JfZHN0KHNrYiktJmd0O29wcy0mZ3Q7bG9jYWxfb3V0KG5ldCwgc2ssIHNrYik7Ci0JaWYgKHVubGlrZWx5KGVyciAhPSAxKSkgewotCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJaWYgKHVubGlrZWx5KGVyciAhPSAxKSkKIAkJcmV0dXJuIGVycjsKLQl9CiAKIAkvKiBJbiB0cmFuc3BvcnQgbW9kZSwgbmV0d29yayBkZXN0aW5hdGlvbiBpcwogCSAqIGRpcmVjdGx5IHJlYWNoYWJsZSwgd2hpbGUgaW4gdHVubmVsIG1vZGUsCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IGQ2ZGI2MzMwNGJhNmIuLjYyNjZhOTJjZjMwMjAgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCkBAIC05NDAsNyAmIzQzOzk0MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jb25zdHJ1Y3Qoc3RydWN0IG5ldCAqbmV0LAogCWlmICgoZXJyID0gYXR0YWNoX2F1dGhfdHJ1bmMoJmFtcDt4LSZndDthYWxnLCAmYW1wO3gtJmd0O3Byb3BzLmFhbGdvLAogCQkJCSAgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhfVFJVTkNdLCBleHRhY2spKSkKIAkJZ290byBlcnJvcjsKLQlpZiAoIXgtJmd0O3Byb3BzLmFhbGdvKSB7CiYjNDM7CWlmICgheC0mZ3Q7YWFsZykgewogCQlpZiAoKGVyciA9IGF0dGFjaF9hdXRoKCZhbXA7eC0mZ3Q7YWFsZywgJmFtcDt4LSZndDtwcm9wcy5hYWxnbywKIAkJCQkgICAgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhdLCBleHRhY2spKSkKIAkJCWdvdG8gZXJyb3I7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3OTgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGFuIElQc2VjIFBhdGNoOiBGdW5jdGlvbmFsIENoYW5nZXMgYW5kIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcyBpbiB0aGUgbmV0d29yayBzdGFjazogYG5ldC9pcHY0L2AsIGBuZXQvaXB2Ni9gLCBhbmQgYG5ldC94ZnJtL2AuICBJdCBsb29rcyBsaWtlIHRoaXMgaXMgYWxsIElQc2VjLXJlbGF0ZWQsIHNwZWNpZmljYWxseSBFU1AsIEFILCBhbmQgdGhlIFhGUk0gZnJhbWV3b3JrLiAgTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4KCkZpcnN0LCBsb29raW5nIGF0IHRoZSBFU1AgaW1wbGVtZW50YXRpb25zIChgbmV0L2lwdjQvZXNwNC5jYCBhbmQgYG5ldC9pcHY2L2VzcDYuY2ApLCB0aGUgY2hhbmdlIGluIGBlc3Bfc3NnX3VucmVmYCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEFkZGluZyB0aGUgYGlmIChza2JfemNvcHlfbWFuYWdlZChza2IpKSByZXR1cm47YCBjaGVjayBsb29rcyBsaWtlIGl04oCZcyBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgY29ybmVyIGNhc2Ugd2l0aGluIHRoYXQgZnVuY3Rpb24uIE1ha2VzIHNlbnNlLiBJdCYjMzk7cyBmdW5jdGlvbmFsLCBhbmQgZGVmaW5pdGVseSByZWFjaGFibGUuCgpOZXh0LCBvdmVyIGluIGBuZXQvaXB2Ni9haDYuY2AsIGBpcHY2X3JlYXJyYW5nZV9ydGhkcmAmIzM5O3MgcmV0dXJuIHR5cGUgaXMgbm93IGBpbnRgLCBhbmQgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgYWRkZWQgd2l0aCBhIHJldHVybiBvZiBgLUVJTlZBTGAgaWYgYHNlZ21lbnRzX2xlZnRgIGlzIGxhcmdlciB0aGFuIGBzZWdtZW50c2AuIFRoZSBlcnJvciBwcm9wYWdhdGlvbiBpbiBgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnNgIGlzIGEgZ29vZCBwcmFjdGljZS4gQWdhaW4sIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS4KClRoZW4gd2UmIzM5O3ZlIGdvdCBgbmV0L2lwdjYveGZybTZfaW5wdXQuY2AuICBUaGUgbG9naWMgaW4gYHhmcm02X2lucHV0X2FkZHJgIGlzIHJlZmluZWQgd2l0aCBgc3AtJmd0O2xlbiAmZ3Q7PSBYRlJNX01BWF9ERVBUSGAsIHdoaWNoIGltcHJvdmVzIGJvdW5kcyBjaGVja2luZy4gTWFrZXMgc2Vuc2UgdG8gbWUsIGFsc28gZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLgoKTm93LCBgbmV0L3hmcm0vZXNwaW50Y3AuY2AuIERyb3BwaW5nIHBhY2tldHMgaWYgYCFza2ItJmd0O2RldmAgaW4gYGhhbmRsZV9lc3BgIGFkZHMgYSBzYW5pdHkgY2hlY2ssIHdoaWNoIGlzIGEgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgdGVjaG5pcXVlLiBSZXBsYWNpbmcgYGJhcnJpZXIoKWAgd2l0aCBgc3luY2hyb25pemVfcmN1KClgIGluIGBlc3BpbnRjcF9jbG9zZWAgaW5kaWNhdGVzIGEgbmVjZXNzYXJ5IGNoYW5nZSBmb3Igc3luY2hyb25pemF0aW9uLiAgRnVuY3Rpb25hbGx5IHNvdW5kIGFuZCByZWFjaGFibGUuCgpNb3Zpbmcgb24gdG8gYG5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jYCwgdGhpcyBpcyBtb3JlIGludGVyZXN0aW5nLiBUaGUgcmVmYWN0b3Jpbmcgb2YgYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgIHRvIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYW5kIHRoZW4gYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgIHN1Z2dlc3RzIHRoZXkgYXJlIGNvbGxlY3Rpbmcgc3RhdGVzIGR1cmluZyB0aGUgd2FsayBub3csIGFuZCBwcm9jZXNzaW5nIHRoZW0gc2VwYXJhdGVseS4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIGtlcm5lbCBjb2RlIHRvIGF2b2lkIHBvdGVudGlhbCBpc3N1ZXMgd2l0aGluIHRoZSB3YWxrIGl0c2VsZi4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuCgpJbiBgbmV0L3hmcm0veGZybV9vdXRwdXQuY2AsIHRoZSByZW1vdmFsIG9mIGBrZnJlZV9za2Ioc2tiKWAgd2hlbiBgZXJyICE9IDFgIGluIGB4ZnJtX2Rldl9kaXJlY3Rfb3V0cHV0YCBsb29rcyBsaWtlIGl0JiMzOTtzIG9wdGltaXppbmcgdGhlIHBhY2tldCBoYW5kbGluZyBiYXNlZCBvbiBlcnJvciBjb2Rlcy4gRnVuY3Rpb25hbCwgYW5kIHJlYWNoYWJsZS4KCkZpbmFsbHksIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuICBDaGFuZ2luZyBgaWYgKCF4LSZndDtwcm9wcy5hYWxnbylgIHRvIGBpZiAoIXgtJmd0O2FhbGcpYCBpbiBgeGZybV9zdGF0ZV9jb25zdHJ1Y3RgIGxvb2tzIGxpa2UgYSBzaW1wbGUgc3RydWN0dXJhbCB1cGRhdGUgb2YgaG93IHRoZSBhbGdvcml0aG0gaXMgYWNjZXNzZWQuICBGdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuCgpPa2F5LCBub3cgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQuIFdlIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX1hGUk1gIGZvciBYRlJNIGl0c2VsZiwgYW5kIGBDT05GSUdfWEZSTV9VU0VSYCBmb3IgdXNlci1zcGFjZSBYRlJNIGludGVyYWN0aW9uLiBFU1AgcmVxdWlyZXMgYENPTkZJR19JTkVUX0VTUGAgYW5kIGBDT05GSUdfSU5FVDZfRVNQYCBmb3IgSVB2NCBhbmQgSVB2NiByZXNwZWN0aXZlbHkuIEFIIGlzIHNpbWlsYXI6IGBDT05GSUdfSU5FVF9BSGAgYW5kIGBDT05GSUdfSU5FVDZfQUhgLiBXZSBhbHNvIG5lZWQgYENPTkZJR19FU1BJTlRDUGAgZm9yIEVTUC1pbi1UQ1AuIE5vdywgdGhlIE5BVCBrZWVwYWxpdmUgc3R1ZmYuLi4gbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1hGUk1fTkFUX0tFRVBBTElWRWAgaXMgYWN0dWFsbHkgYSB2YWxpZCBjb25maWcgb3B0aW9uLiAgTGV0JiMzOTtzIGdyZXAgZm9yIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9OQVRfS0VFUEFMSVZFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzM2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24gU3BhY2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gTkFUIGtlZXBhbGl2ZXMgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBzZWFyY2hpbmcgd2l0aGluIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUHNlYy9YRlJNIGZ1bmN0aW9uYWxpdHkuIFRoZSBuYW1lIEkmIzM5O20gbG9va2luZyBmb3Igc2VlbXMgdG8gYmUgYG5hdF9rZWVwYWxpdmVgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYEtjb25maWdgIHJldmVhbHMuIEhvcGVmdWxseSwgaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgb3B0aW9uIHdpdGggYSBjbGVhciBkZXNjcmlwdGlvbi4gVGhlbiBJIGNhbiBmaWd1cmUgb3V0IGhvdyB0byBjb25maWd1cmUgb3IgdXNlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmF0X2tlZXBhbGl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gTWFrZWZpbGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGBuZXQveGZybS9NYWtlZmlsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGhvdyB0aGlzIG1vZHVsZSBpcyBhc3NlbWJsZWQsIHdoaWNoIGZpbGVzIGFyZSBpbmNsdWRlZCwgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBtb2RpZmljYXRpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgcHJvamVjdC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgdXN1YWwgc3VzcGVjdHM6IG9iamVjdCBmaWxlIGxpc3RzLCBzb3VyY2UgZmlsZXMsIGhlYWRlciBkZXBlbmRlbmNpZXMsIGFuZCBsaWtlbHkgc29tZSBydWxlcyBmb3IgbGlua2luZyB0aGUgZmluYWwgWEZSTSBtb2R1bGVzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBidWlsZCBlbnZpcm9ubWVudCwgdG8gYXNjZXJ0YWluIGhvdyB0byBpbmplY3QgbXkgb3duIGNvZGUgYW5kIGNoYW5nZXMgc3VjY2Vzc2Z1bGx5LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHJlc2lkZXMsIHNvIGl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fbmF0X2tlZXBhbGl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxuLS1cbm5ldC94ZnJtL01ha2VmaWxlLTE2LVx0XHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTc6XHRcdCAgICAgIHhmcm1fbmF0X2tlZXBhbGl2ZS5vXG5uZXQveGZybS9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfWEZSTV9TVEFUSVNUSUNTKSAmIzQzOz0geGZybV9wcm9jLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTE3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIEtlZXBhbGl2ZSBpbiBYRlJNKioKCkFscmlnaHQsIHNvIGB4ZnJtX25hdF9rZWVwYWxpdmUuY2AgaXMgZGVmaW5pdGVseSBpbiB0aGUgYnVpbGQgaWYgYENPTkZJR19YRlJNYCBpcyBzZXQuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lIGFzc3VtcHRpb24sIGFuZCBpdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG5hbWUuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBrZWVwYWxpdmUgZnVuY3Rpb25hbGl0eSB3b3JrcyBpbiByZWxhdGlvbiB0bywgc2F5LCBFU1Agb3ZlciBUQ1AsIEkgc2hvdWxkIHJlYWxseSBjaGVjayBvdXQgYGVzcGludGNwLmNgLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSB0d28gbW9kdWxlcyBsaWVzLCBJIHdvdWxkIGd1ZXNzLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGdlbmVyaWMgWEZSTSBrZWVwYWxpdmUgbWVjaGFuaXNtcyBhbmQgdGhlIEVTUCBvdmVyIFRDUCB0dW5uZWwuIFRoaXMgc2hvdWxkIGxldCBtZSBzZWUgaG93IE5BVCBpcyBoYW5kbGVkIGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwaW50Y3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfWEZSTV9JUFRGUykgJiM0Mzs9IHhmcm1faXB0ZnMub1xubmV0L3hmcm0vTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1hGUk1fRVNQSU5UQ1ApICYjNDM7PSBlc3BpbnRjcC5vXG5uZXQveGZybS9NYWtlZmlsZS0yNi1vYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSB4ZnJtX3N0YXRlX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNjEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipFU1AgSW50ZWdyYXRpb24gYW5kIENvbmZpZ3VyYXRpb24gUmV2aWV3KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGtlcm5lbCBjb25maWcgb3B0aW9uIHRoYXQmIzM5O3Mgc25hZ2dpbmcgbXkgYXR0ZW50aW9uIHJpZ2h0IG5vdyBpcyBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgLiBUaGF0IG1lYW5zIHdlJiMzOTtyZSBsb29raW5nIGF0IFRDUCBlbmNhcHN1bGF0aW9uIHdpdGhpbiBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCksIHdoaWNoIGlzIGFsd2F5cyBhbiBpbnRlcmVzdGluZyBhbmQgcG90ZW50aWFsbHkgY29tcGxleCBhcmVhIGZvciBzZWN1cml0eS4KCk15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGNvcmUgRVNQIGltcGxlbWVudGF0aW9uIGZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgYGVzcDQuY2AgYW5kIGBlc3A2LmNgLiBUaGVzZSBmaWxlcyBhcmUgd2hlcmUgdGhlIElQc2VjLXNwZWNpZmljIGhhbmRsaW5nIG9mIEVTUCB0cmFmZmljIG92ZXIgSVB2NCBhbmQgSVB2NiByZXNwZWN0aXZlbHkgYXJlIGNvZGVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIFRDUCBlbmNhcHN1bGF0aW9uIGlzIGludGVncmF0ZWQsIGhvdyBjb25uZWN0aW9ucyBhcmUgc2V0IHVwIGFuZCB0b3JuIGRvd24sIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgdGFzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwNCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19JTkVUX0FIKSAmIzQzOz0gYWg0Lm9cbm5ldC9pcHY0L01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19JTkVUX0VTUCkgJiM0Mzs9IGVzcDQub1xubmV0L2lwdjQvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0lORVRfRVNQX09GRkxPQUQpICYjNDM7PSBlc3A0X29mZmxvYWQub1xubmV0L2lwdjQvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX0lORVRfSVBDT01QKSAmIzQzOz0gaXBjb21wLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYyMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipFU1AgTW9kdWxlIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBDT05GSUdfSU5FVF9FU1BgIGFuZCBgQ09ORklHX0lORVQ2X0VTUGAuICBUaG9zZSBmbGFncyBhcmUgcmluZ2luZyBhIGJlbGwsIG9idmlvdXNseSByZWxhdGVkIHRvIEVTUCAtIEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCAtIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2suIFRpbWUgdG8gZGlnIGluLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYGFoNi5jYCwgYmVjYXVzZSB0aGF0IGZpbGUmIzM5O3MgZ29pbmcgdG8gYmUga2V5IHRvIHVucGFja2luZyB0aGUgZGV0YWlscy4gV2l0aCBteSBleHBlcnRpc2UsIEkgc3VzcGVjdCB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIEVTUCBhcmUgaW50ZXItcmVsYXRlZCB0byBBSCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gZ28gdGhlcmUgZm9yIGNsdWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWg2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9Mjg9aXB2Ni0kKENPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMKSAmIzQzOz0gaW9hbTZfaXB0dW5uZWwub1xubmV0L2lwdjYvTWFrZWZpbGUtMjktXG5uZXQvaXB2Ni9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfSU5FVDZfQUgpICYjNDM7PSBhaDYub1xubmV0L2lwdjYvTWFrZWZpbGUtMzEtb2JqLSQoQ09ORklHX0lORVQ2X0VTUCkgJiM0Mzs9IGVzcDYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTMxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIHRoYXQgY29kZToKCioqSVB2NiBBSCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX0lORVQ2X0FIYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBBdXRoZW50aWNhdGlvbiBIZWFkZXIgc3VwcG9ydCBmb3IgSVB2Ni4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCBpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGlucHV0IHByb2Nlc3NpbmcgZm9yIElQdjYsIHNwZWNpZmljYWxseSB0aGUgYXV0aGVudGljYXRpb24gYXNwZWN0LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBsb29raW5nIGF0IGhvdyB0aGF0IHdvcmtzIGlzIGdvaW5nIHRvIGJlIGB4ZnJtNl9pbnB1dC5jYC4gVGhhdCBmaWxlIGlzIGxpa2VseSB3aGVyZSB0aGUgYWN0dWFsIGF1dGhlbnRpY2F0aW9uIGhlYWRlciBwcm9jZXNzaW5nIGFuZCB2ZXJpZmljYXRpb24gdGFrZXMgcGxhY2UgZm9yIElQdjYuIEl0IGhhbmRsZXMgdGhlIGluZ3Jlc3MgdHJhZmZpYyBzbyBzaG91bGQgYmUgd2hlcmUgbXkgZGVidWdnaW5nIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybTZfaW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT0xNj1pcHY2LSQoQ09ORklHX0lQVjZfTVJPVVRFKSAmIzQzOz0gaXA2bXIub1xubmV0L2lwdjYvTWFrZWZpbGUtMTctXG5uZXQvaXB2Ni9NYWtlZmlsZToxODppcHY2LSQoQ09ORklHX1hGUk0pICYjNDM7PSB4ZnJtNl9wb2xpY3kubyB4ZnJtNl9zdGF0ZS5vIHhmcm02X2lucHV0Lm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTE5LVx0eGZybTZfb3V0cHV0Lm8geGZybTZfcHJvdG9jb2wub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjUwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkRpdmluZyBpbnRvIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYENPTkZJR19YRlJNYC4gVGhhdCYjMzk7cyB0aGUgbWFpbiBrZXksIHRoZSBzd2l0Y2ggdGhhdCBlbmFibGVzIHRoZSBlbnRpcmUgWEZSTSBzdWJzeXN0ZW0sIHdoaWNoIGlzIHF1aXRlIGJyb2FkIGFuZCBkZWVwbHkgZW1iZWRkZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBzdGFjay4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUsIGJlY2F1c2Ugb2YgaXRzIGNvcmUtbGV2ZWwgbmF0dXJlLCB0byBzdGFydCB3aXRoIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSDigJMgaG93IHRoZSBwb2xpY3kgYW5kIHNlY3VyaXR5IGFzc29jaWF0aW9ucyBhcmUgY29uZmlndXJlZC4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGludGVyYWN0aW9uIHdvcmtzLiBNeSBmb2N1cywgaW4gZXhwbG9yaW5nIHRoYXQsIHdpbGwgYmUgdGhlIGVudHJ5LXBvaW50cyBmb3IgdGhlIHVzZXItc3BhY2Ugb3BlcmF0aW9ucy4gVGhhdCYjMzk7cyBgeGZybV91c2VyLmNgLCBJIGJlbGlldmUsIGlzIHdoZXJlIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9ucyBhcmUgaGFuZGxlZCwgb3IgYXQgbGVhc3QgdGhlIHN0YXJ0IG9mIHRoYXQgaW50ZXJhY3Rpb24uIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fdXNlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19YRlJNX0FMR08pICYjNDM7PSB4ZnJtX2FsZ28ub1xubmV0L3hmcm0vTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1hGUk1fVVNFUikgJiM0Mzs9IHhmcm1fdXNlci5vXG5uZXQveGZybS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfWEZSTV9VU0VSX0NPTVBBVCkgJiM0Mzs9IHhmcm1fY29tcGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU4OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBzZWVpbmcgYENPTkZJR19YRlJNX1VTRVJgLCB3aGljaCB0cmlnZ2VycyBhIG1lbnRhbCBub3RlIHRvIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIGltcGxpY2F0aW9ucy4gSSYjMzk7dmUgZ290IGEgbGlzdCBoZXJlOiBgWEZSTWAsIGBYRlJNX1VTRVJgLCBgSU5FVF9FU1BgLCBgSU5FVDZfRVNQYCwgYElORVQ2X0FIYCwgYW5kIGBYRlJNX0VTUElOVENQYC4gTXkgaW1tZWRpYXRlIGluY2xpbmF0aW9uIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgWEZSTV9FU1BJTlRDUGAgaGFzIGFueSB1cHN0cmVhbSByZXF1aXJlbWVudHMuIElzIGl0IGNvbnRpbmdlbnQgb24gYW55IG9mIHRob3NlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zPyBJdCYjMzk7cyB0aGUgbW9zdCB1bnVzdWFsIG9mIHRoZSBsb3QuIFRpbWUgdG8gZXhwbG9yZSB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIHNlZSBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX0VTUElOVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTE0MT1jb25maWcgWEZSTV9JUFRGU1xuLS1cbm5ldC94ZnJtL0tjb25maWctMTU2LVxubmV0L3hmcm0vS2NvbmZpZzoxNTc6Y29uZmlnIFhGUk1fRVNQSU5UQ1Bcbm5ldC94ZnJtL0tjb25maWctMTU4LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTQyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFhGUk0gS2NvbmZpZyBmb3IgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQveGZybS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAxNTcuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSBzb21lIGludGVyZXN0aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFhGUk0gbWlnaHQgYmUgZGVmaW5lZC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIG1heWJlIHJlbGF0ZWQgdG8gYSBuZXcgZmVhdHVyZSBJJiMzOTttIHRyeWluZyB0byBlbmFibGUsIG9yIHBlcmhhcHMgdHJvdWJsZXNob290aW5nIGEgcGFydGljdWxhciBpc3N1ZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgc2V0dGluZ3MuIEtub3dpbmcgdGhlIEtjb25maWcgb3B0aW9ucyBpcyBmdW5kYW1lbnRhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhdmFpbGFibGUgYW5kIGhvdyB0aGVzZSBvcHRpb25zIGludGVycmVsYXRlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcdCAgcGFja2V0IHN0cmVhbSB3aGljaCBpbiB0dXJuIHlpZWxkcyBoaWdoZXIgc21hbGwtcGFja2V0XG4gMTUxOlx0XHQgIGJhbmR3aWR0aCBhcyB3ZWxsIGFzIHJlZHVjaW5nIE1UVS9QTVRVIGlzc3Vlcy4gQ29uZ2VzdGlvblxuIDE1MjpcdFx0ICBjb250cm9sIGlzIHVuaW1wbGVtZW50YXRlZCBhcyB0aGUgc2VuZCByYXRlIGlzIGRlbWFuZCBkcml2ZW5cbiAxNTM6XHRcdCAgcmF0aGVyIHRoYW4gY29uc3RhbnQuXG4gMTU0Olx0XG4gMTU1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTU2Olx0XG4gMTU3Olx0Y29uZmlnIFhGUk1fRVNQSU5UQ1BcbiAxNTg6XHRcdGJvb2xcbiAxNTk6XHRcbiAxNjA6XHRlbmRpZiAjIElORVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMDYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRGVidWdnaW5nIGEgQm9vbGVhbiYjMzk7cyBTZWxlY3Rpb24qKgoKQWxyaWdodCwgdGhpcyBgYm9vbGAgZmllbGTigKYgaXQmIzM5O3Mgbm90IGJlaW5nIGV4cGxpY2l0bHkgcHJvbXB0ZWQsIHNvIHNvbWV0aGluZyBlbHNlIG11c3QgYmUgZHJpdmluZyBpdHMgc2VsZWN0aW9uLiBUaGF0IG1lYW5zIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIHRoYXQmIzM5O3Mgc2V0dGluZyB0aGlzIHZhbHVlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIGlkZW50aWZ5IHRoZSBzb3VyY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmUuIFdoYXQgY29tcG9uZW50cyBvciBmdW5jdGlvbnMgYXJlIHVwc3RyZWFtIGFuZCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgdGhpcyBgYm9vbGAmIzM5O3Mgc3RhdGU/IFRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nIHRvIHRyYWNrIGRvd24sIGxldCYjMzk7cyBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFhGUk1fRVNQSU5UQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4Ni1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY0L0tjb25maWc6Mzg3Olx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzg4LVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy05NC1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY2L0tjb25maWc6OTU6XHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxubmV0L2lwdjYvS2NvbmZpZy05Ni1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRVNQIGFuZCBUQ1AgSW50ZXJwbGF5IC0gSW5pdGlhbCBUaG91Z2h0cyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgSU5FVF9FU1BJTlRDUGAgYW5kIGl0cyBJUHY2IGNvdW50ZXJwYXJ0LCBgSU5FVDZfRVNQSU5UQ1BgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBsaWtlbHkgYXJjaGl0ZWN0dXJlLiBUaGUgZ29hbCBpcyBsaWtlbHkgdG8gZmluZCBrZXkgc3ltYm9scyB0aGF0IGFjdCBhcyBhIGZvY2FsIHBvaW50LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBpbnRlcmFjdGlvbj8mIzM0OwoKTGV0JiMzOTtzIGJlZ2luLiBgZXNwX3NzZ191bnJlZmAgbG9va3MgaW50ZXJlc3RpbmcsIGJ1dCB0aGUgJiMzOTtzdGF0aWMmIzM5OyBhdHRyaWJ1dGUgaXMgaW1tZWRpYXRlbHkgb2ZmLXB1dHRpbmcuIFRoYXQgbWVhbnMgaXQgbGlrZWx5IGhhcyBsaW1pdGVkIHNjb3BlIGFuZCBpc24mIzM5O3QgdGhlIGNlbnRyYWwgZnVuY3Rpb24gZm9yIHRoaXMuIEJlaW5nIGNhbGxlZCBmcm9tIGBlc3Bfb3V0cHV0X3RhaWxgIGFuZCBgZXNwX2lucHV0X3RhaWxgIGlzIGEgY3JpdGljYWwgZmlyc3QgZGF0YSBwb2ludCwgdGhvdWdoLiBUaGV5IGFyZSBjZXJ0YWlubHkgdGhlIG5leHQgdGhpbmdzIHRvIGV4YW1pbmUgaW4gZGV0YWlsLiBJIHNob3VsZCBjaGVjayBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIGBlc3Bfc3NnX3VucmVmYCwgc2luY2UgdGhhdCBtYXkgYmUgd2hlcmUgdGhlIGFjdGlvbiBpcy4gVGhpcyBtaWdodCBiZSBhIGRlYWQgZW5kIGZvciB0aGUgZm9jdXMsIGJ1dCBpdCYjMzk7cyB3aGVyZSB0aGUgYnJlYWRjcnVtYnMgYXJlIHNvIGZhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwX3NzZ191bnJlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2VzcDQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9lc3A0LmM9OTE9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmVzcF9yZXFfc2coc3RydWN0IGNyeXB0b19hZWFkICphZWFkLFxuLS1cbm5ldC9pcHY0L2VzcDQuYy05OC1cbm5ldC9pcHY0L2VzcDQuYzo5OTpzdGF0aWMgdm9pZCBlc3Bfc3NnX3VucmVmKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB2b2lkICp0bXAsIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgYWxyZWFkeV91bnJlZilcbm5ldC9pcHY0L2VzcDQuYy0xMDAte1xuLS1cbm5ldC9pcHY0L2VzcDQuYz0yMTc9c3RhdGljIHZvaWQgZXNwX291dHB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXG4tLVxubmV0L2lwdjQvZXNwNC5jLTIzMi1cdHRtcCA9IEVTUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0bXA7XG5uZXQvaXB2NC9lc3A0LmM6MjMzOlx0ZXNwX3NzZ191bnJlZih4LCB0bXAsIHNrYiwgZmFsc2UpO1xubmV0L2lwdjQvZXNwNC5jLTIzNC1cdGtmcmVlKHRtcCk7XG4tLVxubmV0L2lwdjQvZXNwNC5jPTUwNT1pbnQgZXNwX291dHB1dF90YWlsKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm8gKmVzcClcbi0tXG5uZXQvaXB2NC9lc3A0LmMtNTgyLVx0XHRpZiAodW5saWtlbHkoZXJyIFx1MDAzYyAwKSkge1xubmV0L2lwdjQvZXNwNC5jOjU4MzpcdFx0XHRlc3Bfc3NnX3VucmVmKHgsIHRtcCwgc2tiLCB0cnVlKTtcbm5ldC9pcHY0L2VzcDQuYy01ODQtXHRcdFx0Z290byBlcnJvcl9mcmVlO1xuLS1cbm5ldC9pcHY0L2VzcDQuYy02MTYtXHRpZiAoc2cgIT0gZHNnKVxubmV0L2lwdjQvZXNwNC5jOjYxNzpcdFx0ZXNwX3NzZ191bnJlZih4LCB0bXAsIHNrYiwgZmFsc2UpO1xubmV0L2lwdjQvZXNwNC5jLTYxOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRm9jdXNpbmcgSW4gb24gTmV0d29yayBDb3JlIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gc3BlY2lmaWMgYXJlYXMgd2l0aGluIHRoZSBuZXR3b3JrIGNvZGUgYmFzZS4gYGVzcF9vdXRwdXRfdGFpbGAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuIFRoYXQmIzM5O3MgYSBzb2xpZCBzeW1ib2wgdG8gdHJhY2sgZm9yIG5vdywgYW5kIEkmIzM5O2xsIGtlZXAgaXQgaW4gbWluZC4gRm9yIElQdjYsIEkgY2FuIHVzZSBgZXNwNl9vdXRwdXRfdGFpbGAsIHNwZWNpZmljYWxseSBpbiBgbmV0L2lwdjYvZXNwNi5jYCwgdG8gY2hlY2sgZm9yIHNpbWlsYXIgZnVuY3Rpb25hbGl0aWVzLiBJdCB3aWxsIGJlIHZlcnkgaGVscGZ1bCBpbiBleHBsb3JpbmcgSVB2Ni4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIEVTUCBhbmQgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyB0aGVyZS4KCk5vdywgYSByZWxhdGVkIGZ1bmN0aW9uLCBgaXB2Nl9yZWFycmFuZ2VfcnRoZHJgLCBpcyBzb21ldGhpbmcgZWxzZSB0byBjb25zaWRlci4gSSYjMzk7dmUgbm90aWNlZCBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYC4uLiBpbnRlcmVzdGluZy4gQW5kIGl0IGFwcGVhcnMgdG8gYmUgY2FsbGVkIG9ubHkgZnJvbSBgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnNgLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBpcHY2X2NsZWFyX211dGFibGVfb3B0aW9uc2AgaW50ZXJhY3RzIHdpdGggdGhlIGhpZ2hlci1sZXZlbCBJUHY2IHByb2Nlc3NpbmcuIFRoYXQgY291bGQgYmUgd2hlcmUgdGhlIHJvdXRlIGhlYWRlciBoYW5kbGluZyBpcyByZWFsbHkgaGFwcGVuaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHN0YWNrIHRvIHNlZSB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY2X2NsZWFyX211dGFibGVfb3B0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FoNi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FoNi5jPTIzOT1zdGF0aWMgaW50IGlwdjZfcmVhcnJhbmdlX3J0aGRyKHN0cnVjdCBpcHY2aGRyICppcGgsIHN0cnVjdCBpcHY2X3J0X2hkciAqcnRoZHIpXG4tLVxubmV0L2lwdjYvYWg2LmMtMjY5LVxubmV0L2lwdjYvYWg2LmM6MjcwOnN0YXRpYyBpbnQgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoc3RydWN0IGlwdjZoZHIgKmlwaCwgaW50IGxlbiwgaW50IGRpcilcbm5ldC9pcHY2L2FoNi5jLTI3MS17XG4tLVxubmV0L2lwdjYvYWg2LmM9MzUwPXN0YXRpYyBpbnQgYWg2X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9haDYuYy00MTYtXHRpZiAoZXh0bGVuKSB7XG5uZXQvaXB2Ni9haDYuYzo0MTc6XHRcdGVyciA9IGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHRvcF9pcGgsXG5uZXQvaXB2Ni9haDYuYy00MTgtXHRcdFx0XHRcdFx0IGV4dGxlbiAtIHNpemVvZigqaXBoX2V4dCkgJiM0Mztcbi0tXG5uZXQvaXB2Ni9haDYuYz01MTk9c3RhdGljIGludCBhaDZfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvYWg2LmMtNjEzLVxubmV0L2lwdjYvYWg2LmM6NjE0Olx0ZXJyID0gaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoaXA2aCwgaGRyX2xlbiwgWEZSTV9QT0xJQ1lfSU4pO1xubmV0L2lwdjYvYWg2LmMtNjE1LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNjkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkFuYWx5emluZyBGb2N1cyBTeW1ib2xzIGFuZCBOb24tU3RhdGljIFZhcmlhYmxlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlLCBwcm9iYWJseSByZWxhdGVkIHRvIG5ldHdvcmsgdHJhbnNmb3JtYXRpb24gb3IgYWRkcmVzcyBoYW5kbGluZy4gRmlyc3QsIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBgYWg2X291dHB1dGAgYW5kIGBhaDZfaW5wdXRgIGFyZSBnb29kIHN0YXJ0aW5nIHBvaW50cy4gVGhleSBzZWVtIGxpa2Ugd2VsbC1jaG9zZW4gZm9jdXMgc3ltYm9scywgbGlrZWx5IHJlcHJlc2VudGluZyBjcml0aWNhbCBpbnB1dCBhbmQgb3V0cHV0IHBhcmFtZXRlcnMgcmVsYXRlZCB0byB0aGUgQUggKEF1dGhlbnRpY2F0aW9uIEhlYWRlcikgcHJvdG9jb2wgZm9yIElQdjYuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlaXIgZGVmaW5pdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhlIHN5c3RlbSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZW0uCgpUaGVuLCB0aGVyZSYjMzk7cyBgeGZybTZfaW5wdXRfYWRkcmAuIEFoLCBoZXJlJiMzOTtzIHNvbWV0aGluZyBvZiBpbnRlcmVzdC4gVGhpcyBvbmUgaXMgKm5vdCogc3RhdGljLiBUaGF0IG1lYW5zIGl0cyBzY29wZSBleHRlbmRzIGJleW9uZCBhIHNpbmdsZSBmdW5jdGlvbiBvciBjb21waWxhdGlvbiB1bml0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBnbG9iYWwgb3IgbW9kdWxlLWxldmVsIHZhcmlhYmxlLCBhbmQgdGhhdCBzdWdnZXN0cyBpdCBtaWdodCBiZSBpbnZvbHZlZCBpbiBtb3JlIGNvbXBsZXggaW50ZXJhY3Rpb25zLiBUaGlzIG5vbi1zdGF0aWMgbmF0dXJlIG1lYW5zIEkmIzM5O2xsIGhhdmUgdG8gYmUgcGFydGljdWxhcmx5IGNhcmVmdWwgYWJvdXQgc2lkZSBlZmZlY3RzLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIHRoaXMgaXMgdXNlZCBpbiBhIG11bHRpdGhyZWFkZWQgY29udGV4dCwgb3IganVzdCBnZW5lcmFsbHkgdHJhY2tpbmcgZG93biBhbGwgdGhlIHBsYWNlcyB3aGVyZSBpdCYjMzk7cyBtb2RpZmllZC4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbnRleHRzIHdoZXJlIGB4ZnJtNl9pbnB1dF9hZGRyYCBpcyB1c2VkIGFuZCBob3cgaXQmIzM5O3MgbW9kaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm02X2lucHV0X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3hmcm02X2lucHV0LmM9MjM1PUVYUE9SVF9TWU1CT0woeGZybTZfcmN2KTtcbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6MjM2OmludCB4ZnJtNl9pbnB1dF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHhmcm1fYWRkcmVzc190ICpkYWRkcixcbm5ldC9pcHY2L3hmcm02X2lucHV0LmMtMjM3LVx0XHQgICAgIHhmcm1fYWRkcmVzc190ICpzYWRkciwgdTggcHJvdG8pXG4tLVxubmV0L2lwdjYveGZybTZfaW5wdXQuYy0zMjItfVxubmV0L2lwdjYveGZybTZfaW5wdXQuYzozMjM6RVhQT1JUX1NZTUJPTCh4ZnJtNl9pbnB1dF9hZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2ODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipBbmFseXppbmcgdGhlIEVTUC9JUHNlYyBQYWNrZXQgSGFuZGxpbmcqKgoKQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYHhmcm02X2lucHV0X2FkZHJgIGlzIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgZGVzaWduZWQgZm9yIGV4dGVybmFsIHVzZSwgbGlrZWx5IGZvciBoYW5kbGluZyBpbmNvbWluZyBJUHNlYyB0cmFmZmljIHdpdGhpbiB0aGUgSVB2NiBjb250ZXh0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSB0cmFjZSB3aGVyZSBpdCYjMzk7cyB1dGlsaXplZC4KCk5leHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBlc3BpbnRjcC5jYC4gSGVyZSwgdGhlIGZ1bmN0aW9uIGBoYW5kbGVfZXNwYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhpcyBpcyBpbXBvcnRhbnQg4oCTIGl0IG1lYW5zIGl0JiMzOTtzIHNjb3BlZCAqb25seSogd2l0aGluIHRoaXMgZmlsZS4gTm8gZGlyZWN0IGV4dGVybmFsIGNhbGxzIGFyZSBleHBlY3RlZC4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBgaGFuZGxlX2VzcGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gbWVhbnMgdGhhdCBpdCBtdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgYGVzcGludGNwLmNgIGZpbGUuIEdpdmVuIHRoZSBmaWxlbmFtZSwgYW5kIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaGFuZGxpbmcgRVNQIHRyYWZmaWMsIEkgY2FuIGluZmVyIHRoYXQgYGhhbmRsZV9lc3BgIGlzIGEgY2VudHJhbCwgaW50ZXJuYWwgcm91dGluZS4gVGhlIGNvZGUgc3RhdGVzIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGVzcGludGNwX3JjdmAuIFNvLCBmcm9tIGBlc3BpbnRjcF9yY3ZgIHRvIGBoYW5kbGVfZXNwYC4gR290IGl0LiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGVzcGludGNwX3JjdmAgaXMgY2FsbGVkLCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gYHhmcm02X2lucHV0X2FkZHJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfZXNwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vZXNwaW50Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jPTEyPXN0YXRpYyB2b2lkIGhhbmRsZV9ub25lc3Aoc3RydWN0IGVzcGludGNwX2N0eCAqY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjgtXG5uZXQveGZybS9lc3BpbnRjcC5jOjI5OnN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMC17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYz01Nz1zdGF0aWMgdm9pZCBlc3BpbnRjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTExMy1cdGVsc2Vcbm5ldC94ZnJtL2VzcGludGNwLmM6MTE0Olx0XHRoYW5kbGVfZXNwKHNrYiwgc3RycC1cdTAwM2Vzayk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTExNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjY0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBzeW1ib2xzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqRm9jdXNpbmcgSW4gb24gYGVzcGludGNwX3JjdmAgYW5kIGBlc3BpbnRjcF9jbG9zZWAqKgoKQWxyaWdodCwgbG9va2luZyBhdCB0aGlzIGNvZGUsIG15IGltbWVkaWF0ZSB0aG91Z2h0cyBhcmUgdGhhdCBgZXNwaW50Y3BfcmN2YCBhbmQgYGVzcGludGNwX2Nsb3NlYCBhcmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyB0byBkaWcgaW50by4gVGhleSBzdHJpa2UgbWUgYXMgdGhlIGtleSBmb2N1cyBzeW1ib2xzIHdpdGhpbiB0aGlzIEVTUC1UQ1AgY29udGV4dC4gYGVzcGludGNwX3JjdmAgc3VnZ2VzdHMgaGFuZGxpbmcgaW5jb21pbmcgZGF0YSwgd2hpY2gsIGlmIEkgdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlIGNvcnJlY3RseSwgaXMgcHJvYmFibHkgd2hlcmUgd2UgbmVlZCB0byB0cmFjZSB0aGUgZmxvdyBvZiByZWNlaXZlZCBwYWNrZXRzIGFuZCBhc3NvY2lhdGVkIHByb2Nlc3NpbmcuIGBlc3BpbnRjcF9jbG9zZWAsIG9uIHRoZSBvdGhlciBoYW5kLCBkZWFscyB3aXRoIGNsb3NpbmcgY29ubmVjdGlvbnMsIHdoaWNoIGlzIGp1c3QgYXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgaGFuZGxlcyBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgcmVzb3VyY2UgcmVsZWFzZS4gQW5hbHl6aW5nIHRoZXNlIHR3byBmdW5jdGlvbnMgd2lsbCBsaWtlbHkgZ2l2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIGFuZCBkYXRhIGZsb3cuIEtub3dpbmcgdGhhdCB0aGVzZSBhcmUgZ29vZCBmb2N1cyBzeW1ib2xzIHdpbGwgZ3VpZGUgbXkgYW5hbHlzaXMgZWZmaWNpZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzcGludGNwX2Nsb3NlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vZXNwaW50Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jPTUwMT1zdGF0aWMgdm9pZCBlc3BpbnRjcF9yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNS1cbm5ldC94ZnJtL2VzcGludGNwLmM6NTE2OnN0YXRpYyB2b2lkIGVzcGludGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxubmV0L3hmcm0vZXNwaW50Y3AuYy01MTcte1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmM9NTUyPXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKmVzcGludGNwX3Byb3QsXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NjAtXHRlc3BpbnRjcF9wcm90LVx1MDAzZXJlY3Ztc2cgPSBlc3BpbnRjcF9yZWN2bXNnO1xubmV0L3hmcm0vZXNwaW50Y3AuYzo1NjE6XHRlc3BpbnRjcF9wcm90LVx1MDAzZWNsb3NlID0gZXNwaW50Y3BfY2xvc2U7XG5uZXQveGZybS9lc3BpbnRjcC5jLTU2Mi1cdGVzcGludGNwX3Byb3QtXHUwMDNlcmVsZWFzZV9jYiA9IGVzcGludGNwX3JlbGVhc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzU3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipGb2N1c2luZyBvbiBOQVQgS2VlcGFsaXZlIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBgZXNwaW50Y3BfY2xvc2VgIHNlZW1zIGxpa2UgYSBzb2xpZCBwb2ludCB0byBzdGFydCBkaWdnaW5nLiBJdCBvZnRlbiBzaWduYWxzIHRoZSBlbmQgb2YgYSBjb25uZWN0aW9uIG9yIHR1bm5lbCwgc28gaXQmIzM5O3MgYSBsb2dpY2FsIHBsYWNlIHRvIHVuZGVyc3RhbmQgaG93IE5BVCB0cmF2ZXJzYWwgb3Iga2VlcGFsaXZlIG1lY2hhbmlzbXMgYXJlIGNsZWFuZWQgdXAuIFdoYXQgaGFwcGVucyBpbiB0ZXJtcyBvZiByZXNvdXJjZXMsIHN0YXRlLCBhbmQgdGltZXJzIHdoZW4gYSBjb25uZWN0aW9uIGlzIGNsb3NlZCB3aXRoIE5BVCBpbiBwbGF5PyBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuCgpOb3csIGFzIGZvciBgeGZybV9uYXRfa2VlcGFsaXZlLmNgLCBhaCB5ZXMsIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBUaGlzIGlzIGxpa2VseSB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIHNjaGVkdWxlZCBvbiBhIHdvcmtxdWV1ZSB0byBoYW5kbGUgdGhlIGFjdHVhbCBzZW5kaW5nIG9mIGtlZXBhbGl2ZSBwcm9iZXMgb3IgdGhlIHJlbGF0ZWQgcHJvY2Vzc2luZy4gVGhhdCYjMzk7cyBhIGdvb2QgYnJlYWRjcnVtYiB0byBmb2xsb3cuIEtub3dpbmcgaXQmIzM5O3Mgd29ya3F1ZXVlLWJhc2VkIHN1Z2dlc3RzIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIG5vbi1ibG9ja2luZyBhbmQgbGlrZWx5IG9wZXJhdGVzIGFzeW5jaHJvbm91c2x5LCB3aGljaCBmaXRzIHRoZSBnZW5lcmFsIG5lZWQgdG8gbm90IHN0YWxsIHRoZSBtYWluIGRhdGEgcGF0aC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhlIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLiBJcyBpdCB0aW1lci1kcml2ZW4sIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlcywgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIHNjaGVkdWxpbmcgY29uZGl0aW9ucyBhbmQgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBpbXBsZW1lbnRhdGlvbi4gRGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSAmIzM5O2tlZXBhbGl2ZSYjMzk7IHByb2Nlc3MsIHdoYXQgc3BlY2lmaWNhbGx5IHRyaWdnZXJzIGl0LCBhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgYHdvcmtgIGFuZCBgZXNwaW50Y3BfY2xvc2VgIHdvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIE5BVCB0cmF2ZXJzYWwgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYXRfa2VlcGFsaXZlX3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0xMTg9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNTctXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNTg6c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTU5LVx0c3RydWN0IGxpc3RfaGVhZCBzdGF0ZXM7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTY0PXN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlIHtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjgtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNjk6c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNzAte1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTcxOlx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggKmN0eCA9IHB0cjtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE3Mi1cdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZTtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODYtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxODc6c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE4ODpcdFx0XHRcdCAgICAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHgpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODkte1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIyNi1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIyNzpzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjI4LXtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIyOS1cdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZSwgKnRtcDtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIzMDpcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIzMS1cdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgd2Fsaztcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMzgtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyMzk6XHRuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNDAtXHR4ZnJtX3N0YXRlX3dhbGtfaW5pdChcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNDE6XHRlcnIgPSB4ZnJtX3N0YXRlX3dhbGsobmV0LCBcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXHUwMDI2Y3R4KTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0Mi1cdHhmcm1fc3RhdGVfd2Fsa19kb25lKFx1MDAyNndhbGssIG5ldCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNDMtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhdGUsIHRtcCwgXHUwMDI2Y3R4LnN0YXRlcywgbGlzdCkge1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQ0Olx0XHRuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0YXRlLVx1MDAzZXgsIFx1MDAyNmN0eCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNDUtXHRcdHhmcm1fc3RhdGVfcHV0KHN0YXRlLVx1MDAzZXgpO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0OC1cdGlmIChlcnIgPT0gLUVOT01FTSkge1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQ5Olx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI1MC1cdFx0cmV0dXJuO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI1Mi1cdGlmIChjdHgubmV4dF9ydW4pXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNTM6XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZuZXQtXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNTQtXHRcdFx0XHQgICAgICAoY3R4Lm5leHRfcnVuIC0gY3R4Lm5vdykgKiBIWik7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9Mjg3PXZvaWQgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjk0LVx0bmV0ID0geHNfbmV0KHgpO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6Mjk1Olx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgMCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yOTYtfVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTI5OD1pbnQgX19uZXRfaW5pdCB4ZnJtX25hdF9rZWVwYWxpdmVfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjk5LXtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMwMDpcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgbmF0X2tlZXBhbGl2ZV93b3JrKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMwMS1cdHJldHVybiAwO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTMwND1pbnQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9maW5pKHN0cnVjdCBuZXQgKm5ldClcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMwNS17XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzozMDY6XHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMDctXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqQW5hbHl6aW5nIHRoZSBOQVQgS2VlcGFsaXZlIGFuZCBYRlJNIE91dHB1dCBNZWNoYW5pc21zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IGBuYXRfa2VlcGFsaXZlX3dvcmtgIGlzIHN0YXRpYyDigJMgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSwgYnV0IGNyaXRpY2FsbHksIGl0IElTIHRoZSBhY3R1YWwgd29ya2VyIGZ1bmN0aW9uLiBOb3csIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgKmlzKiBleHBvcnRlZCwgbWVhbmluZyBpdCYjMzk7cyBhdmFpbGFibGUgZm9yIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgdG8gdXNlLiBHaXZlbiB0aGF0LCB1c2luZyBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIHNlZW1zIGxpa2UgdGhlIGNsZWFuZXIgYW5kIG1vcmUgbWFpbnRhaW5hYmxlIGFwcHJvYWNoLCBpZiBwb3NzaWJsZSwgYXMgaXQgcmVwcmVzZW50cyBhIG1vcmUgd2VsbC1kZWZpbmVkIGludGVyZmFjZS4KCkFuZCBJIHNlZSB0aGF0IGB4ZnJtX2Rldl9kaXJlY3Rfb3V0cHV0YCBpcyBhbHNvIHN0YXRpYy4gSXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBgeGZybV9vdXRwdXRfb25lYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIGl0cyBzY29wZSBvZiB1c2UgaXMgcmVhbGx5IGxpbWl0ZWQsIGFuZCBpdCBzdWdnZXN0cyBhIHZlcnkgc3BlY2lmaWMsIG9wdGltaXplZCB1c2FnZSBwYXR0ZXJuIHRoYXQgaXMgdGllZCB0byBhIHBhcnRpY3VsYXIgcGFydCBvZiB0aGUgWEZSTSBwcm9jZXNzLiBXZSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHdoZW4gdGhpbmtpbmcgYWJvdXQgYW55IHBvdGVudGlhbCByZWZhY3RvcmluZyBvciBtb2RpZmljYXRpb25zIGluIHRoZSBmdXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fZGV2X2RpcmVjdF9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NjIwPUVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fb3V0cHV0X3Jlc3VtZSk7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYyMS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjIyOnN0YXRpYyBpbnQgeGZybV9kZXZfZGlyZWN0X291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MjMtXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz03NDg9aW50IHhmcm1fb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc4NS1cdFx0aWYgKHgtXHUwMDNlcHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFVOTkVMIFx1MDAyNlx1MDAyNiAhc2tiLVx1MDAzZXNrKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo3ODY6XHRcdFx0cmV0dXJuIHhmcm1fZGV2X2RpcmVjdF9vdXRwdXQoc2ssIHgsIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc4Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNzUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFhGUk0gQ29yZSBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYHhmcm1fb3V0cHV0YCBpcyBpbmRlZWQgYSBnb29kLCBzaGFycCBmb2N1cyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyB3aG9sZSBYRlJNIChJUHNlYykgb3V0cHV0IHByb2Nlc3Mgd29ya3MuIEl0JiMzOTtzIGEga2V5IHN5bWJvbCB0byB0cmFjay4KCkFuZCByZWdhcmRpbmcgYHhmcm1fc3RhdGVfY29uc3RydWN0YCwgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgaXMgbm90ZXdvcnRoeS4gVGhpcyBtZWFucyBpdCYjMzk7cyBsaW1pdGVkIGluIHNjb3BlIGFuZCBjYW4gb25seSBiZSBhY2Nlc3NlZCBmcm9tIHdpdGhpbiBpdHMgb3duIGNvbXBpbGF0aW9uIHVuaXQuIEFuZCBvZiBjb3Vyc2UsIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgY2FsbGVkIGV4Y2x1c2l2ZWx5IGZyb20gYHhmcm1fYWRkX3NhYCBhbmQgYHhmcm1fbmV3X2FlYCBpcyB2ZXJ5IHNpZ25pZmljYW50LiBLbm93aW5nIHRoaXMgaXMgaW1wb3J0YW50IGluIHRyYWNpbmcgY2FsbHMgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB0aGUgd2hvbGUgZmxvdy4gQm90aCBmdW5jdGlvbnMgbWFuYWdlIFNBIG9yIEFFLCB3aGljaCwgSSBzdXBwb3NlIGl0JiMzOTtzIGNsZWFyIHdoZXJlIHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHByb2Nlc3NpbmcuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB3aGVuIHRyYWNpbmcgY2FsbHMgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zdGF0ZV9jb25zdHJ1Y3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz04OTY9c3RhdGljIHZvaWQgeGZybV9zbWFya19pbml0KHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHhmcm1fbWFyayAqbSlcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy05MDYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo5MDc6c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQveGZybS94ZnJtX3VzZXIuYy05MDgtXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbyAqcCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xMDM5PXN0YXRpYyBpbnQgeGZybV9hZGRfc2Eoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTA1MS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEwNTI6XHR4ID0geGZybV9zdGF0ZV9jb25zdHJ1Y3QobmV0LCBwLCBhdHRycywgXHUwMDI2ZXJyLCBleHRhY2spO1xubmV0L3hmcm0veGZybV91c2VyLmMtMTA1My1cdGlmICgheClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBLZXkgRm9jdXMgU3ltYm9scyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgZm9jdXMgc3ltYm9scy4gYHhmcm1fYWRkX3NhYCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZSBhcyBhIHN0cm9uZyBjYW5kaWRhdGUuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLiBOb3csIGxldCYjMzk7cyBqdXN0IGxheSBvdXQgdGhlIHJlc3Qgb2YgdGhlIHJlbGV2YW50IHN5bWJvbHMgZm9yIHRoaXMgcGFydGljdWxhciBhcmVhOiBgZXNwX291dHB1dF90YWlsYCwgYGVzcDZfb3V0cHV0X3RhaWxgLCBgYWg2X291dHB1dGAsIGBhaDZfaW5wdXRgLCBgeGZybTZfaW5wdXRfYWRkcmAsIGBlc3BpbnRjcF9yY3ZgLCBgZXNwaW50Y3BfY2xvc2VgLCBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLCBhbmQgYHhmcm1fb3V0cHV0YC4KCkkga25vdyB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgLSBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYGVzcDZfb3V0cHV0X3RhaWxgIGFjdHVhbGx5IGV4aXN0cyBhcyBleHBlY3RlZCB3aXRoaW4gdGhlIHN5c3RlbS4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBhbmQgbXVzdCBiZSBwcmVzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3A2X291dHB1dF90YWlsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXNwNi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2VzcDYuYz01MzQ9RVhQT1JUX1NZTUJPTF9HUEwoZXNwNl9vdXRwdXRfaGVhZCk7XG5uZXQvaXB2Ni9lc3A2LmMtNTM1LVxubmV0L2lwdjYvZXNwNi5jOjUzNjppbnQgZXNwNl9vdXRwdXRfdGFpbChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICplc3ApXG5uZXQvaXB2Ni9lc3A2LmMtNTM3LXtcbi0tXG5uZXQvaXB2Ni9lc3A2LmMtNjU4LX1cbm5ldC9pcHY2L2VzcDYuYzo2NTk6RVhQT1JUX1NZTUJPTF9HUEwoZXNwNl9vdXRwdXRfdGFpbCk7XG5uZXQvaXB2Ni9lc3A2LmMtNjYwLVxubmV0L2lwdjYvZXNwNi5jPTY2MT1zdGF0aWMgaW50IGVzcDZfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2VzcDYuYy03MDctXG5uZXQvaXB2Ni9lc3A2LmM6NzA4Olx0cmV0dXJuIGVzcDZfb3V0cHV0X3RhaWwoeCwgc2tiLCBcdTAwMjZlc3ApO1xubmV0L2lwdjYvZXNwNi5jLTcwOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDY5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyBhbmQgRGlyZWN0aW5nIE5leHQgU3RlcHMqKgoKUmlnaHQsIHRoYXQgY29uZmlybXMgd2hhdCBJIHN1c3BlY3RlZC4gTm93LCBiZWZvcmUgZGl2aW5nIGFueSBkZWVwZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNvcmUgcmVjZWl2ZXIgZnVuY3Rpb24sIGBlc3BpbnRjcF9yY3ZgLCBpcyBhY3R1YWxseSBkZWZpbmVkIGFuZCBhdmFpbGFibGUuIE5vIHNlbnNlIGNoYXNpbmcgZ2hvc3RzLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSBpdHMgZXhpc3RlbmNlIGJlZm9yZSBJIGNhbiBtZWFuaW5nZnVsbHkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGFuYWx5c2lzIG9yIGRlYnVnZ2luZy4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcDsgSSYjMzk7dmUgbGVhcm5lZCBmcm9tIGV4cGVyaWVuY2UgdG8gcXVpY2tseSBlbGltaW5hdGUgZnVuZGFtZW50YWwgY29kZSBwYXRoIGlzc3VlcyBiZWZvcmUgZ2V0dGluZyBib2dnZWQgZG93biBpbiBtb3JlIGNvbXBsZXggc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3BpbnRjcF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmM9Mjk9c3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01Ni1cbm5ldC94ZnJtL2VzcGludGNwLmM6NTc6c3RhdGljIHZvaWQgZXNwaW50Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS9lc3BpbnRjcC5jLTU4LXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTQ0MT1zdGF0aWMgaW50IGVzcGludGNwX2luaXRfc2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNDQ0LVx0c3RydWN0IHN0cnBfY2FsbGJhY2tzIGNiID0ge1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0NDU6XHRcdC5yY3ZfbXNnID0gZXNwaW50Y3BfcmN2LFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NDYtXHRcdC5wYXJzZV9tc2cgPSBlc3BpbnRjcF9wYXJzZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4ODMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgTGF5ZXIqKgoKVGhpcyBzaXR1YXRpb24gZmVlbHPigKZzdGFsZS4gV2UmIzM5O3JlIGZhY2luZyBhIHByb2JsZW0sIGFuZCB0aGUgY3VycmVudCBhcHByb2FjaCBpc24mIzM5O3QgZ2V0dGluZyB1cyBhbnl3aGVyZS4gSSBjYW4gc2Vuc2UgdGhlIG5lZWQgZm9yIGEgbW9yZSBkeW5hbWljLCBhY3RpdmUgc29sdXRpb24uIFRoaXMgZmVlbHMgc3RhdGljLgoKTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcmVhY2ggZm9yIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGluaXRpYWxpemF0aW9uLCBzb21ldGhpbmcgdGhhdCBnaXZlcyB1cyBhIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3Mgc2VlLi4uIEdpdmVuIHRoZSBjb250ZXh0LCBgZXNwaW50Y3BfaW5pdF9za2Agc291bmRzIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUuIEl0IHN1Z2dlc3RzIGEgc29ja2V0IGluaXRpYWxpemF0aW9uIGFuZCBzZWVtcyBsaWtlIHRoZSByaWdodCB0b29sIHRvIGJvb3RzdHJhcCB0aGUgcHJvY2Vzcy4gSXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBleHBsb3JlLgoKQWx0ZXJuYXRpdmVseSwgaWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBwcm9jZXNzLCBtYXliZSB3ZSBuZWVkIHRvIGJlIHJlYWR5IHRvIHJlY2VpdmUgc29tZSBkYXRhLiBJZiBpbml0aWFsaXphdGlvbiBpcyBub3QgdGhlIG5leHQgc3RlcCwgdGhlbiBpdCYjMzk7cyBsaWtlbHkgd2UgbmVlZCB0byBjYWxsIHNvbWV0aGluZyB0aGF0IGhhbmRsZXMgZGF0YSBjb21pbmcgaW4uIFRoZSBuZXh0IGZ1bmN0aW9uIHRoYXQgY29tZXMgdG8gbWluZCBpcyBgZXNwaW50Y3BfcmVjdm1zZ2AuIFRoYXQgd291bGQgYWxzbyBmaXQgdGhlIHNpdHVhdGlvbi4gU28sIHdoZXRoZXIgaW5pdGlhbGl6YXRpb24gb3IgcmVjZWl2aW5nIGEgbmV3IG1lc3NhZ2UsIEkgc2hvdWxkIHRyeSBvbmUgb2YgdGhvc2UgdHdvIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwaW50Y3BfcmVjdm1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vZXNwaW50Y3AuYz0xMTc9c3RhdGljIGludCBlc3BpbnRjcF9wYXJzZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMTM3LVxubmV0L3hmcm0vZXNwaW50Y3AuYzoxMzg6c3RhdGljIGludCBlc3BpbnRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMzktXHRcdFx0ICAgIGludCBmbGFncylcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTU1Mj1zdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNTU5LVx0ZXNwaW50Y3BfcHJvdC1cdTAwM2VzZW5kbXNnID0gZXNwaW50Y3Bfc2VuZG1zZztcbm5ldC94ZnJtL2VzcGludGNwLmM6NTYwOlx0ZXNwaW50Y3BfcHJvdC1cdTAwM2VyZWN2bXNnID0gZXNwaW50Y3BfcmVjdm1zZztcbm5ldC94ZnJtL2VzcGludGNwLmMtNTYxLVx0ZXNwaW50Y3BfcHJvdC1cdTAwM2VjbG9zZSA9IGVzcGludGNwX2Nsb3NlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ1NQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBOZXR3b3JrIENvbW11bmljYXRpb24qKgoKT2theSwgYGVzcGludGNwX3JlY3Ztc2dgLi4uIHRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBzZWVtcyBzb2xpZC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHJlbGF0ZWQgdG8gTkFUIGtlZXBhbGl2ZSBzdGF0ZSB1cGRhdGVzLiBMZXQgbWUgc2VlLi4uIEkgd29uZGVyIGlmIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgaXMgYWN0dWFsbHkgYSB0aGluZy4gR290dGEgbWFrZSBzdXJlIGl0IGV4aXN0cywgb3IgaWYgSSYjMzk7bSB0aGlua2luZyBvZiBzb21ldGhpbmcgZWxzZS4gTmVlZCB0byBjb25maXJtIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9Mjc5PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2tfZmluaShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQgX19wZXJjcHUgKnNvY2tzKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI4Ni1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI4Nzp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjg4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3ODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgZ2VhcmVkIHRvd2FyZHMgYSB1c2VyIHdobyBrbm93cyB0aGVpciBzdHVmZjoKCioqQ2hlY2tpbmcgZm9yIGB4ZnJtX2FkZF9zYWAqKgoKUmlnaHQsIHRoYXQgc2VlbXMgbG9naWNhbC4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nOiBkb2VzIGB4ZnJtX2FkZF9zYWAgZXZlbiBleGlzdCBpbiB0aGUgY3VycmVudCBjb250ZXh0PyBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcGF0aCwgaXQmIzM5O3MgYSBjcml0aWNhbCBwcmVyZXF1aXNpdGUgdGhhdCBJIGVuc3VyZSB0aGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBhbmQgYWNjZXNzaWJsZS4gR290dGEgbWFrZSBzdXJlIHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlIGlzIHRoZXJlIGJlZm9yZSBJIHN0YXJ0IGFzc3VtaW5nIEkgY2FuIGxldmVyYWdlIGl0LiBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9hZGRfc2EmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTAzOC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEwMzk6c3RhdGljIGludCB4ZnJtX2FkZF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwNDAtXHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yOTM3PXN0YXRpYyBpbnQgeGZybV9hZGRfcG9sX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDAzLVxubmV0L3hmcm0veGZybV91c2VyLmM6MzAwNDpzdGF0aWMgaW50IHhmcm1fYWRkX3NhX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwMDUtXHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3NDA9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NDgtfSB4ZnJtX2Rpc3BhdGNoW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xubmV0L3hmcm0veGZybV91c2VyLmM6Mzc0OTpcdFtYRlJNX01TR19ORVdTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhICAgICAgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc1MC1cdFtYRlJNX01TR19ERUxTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZGVsX3NhICAgICAgICB9LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NjEtXHRbWEZSTV9NU0dfQUNRVUlSRSAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9hY3F1aXJlICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NjI6XHRbWEZSTV9NU0dfRVhQSVJFICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9zYV9leHBpcmUgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NjMtXHRbWEZSTV9NU0dfVVBEUE9MSUNZICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9wb2xpY3kgICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NjQ6XHRbWEZSTV9NU0dfVVBEU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9zYSAgICAgICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NjUtXHRbWEZSTV9NU0dfUE9MRVhQSVJFICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9wb2xfZXhwaXJlfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2NzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBSZWxldmFudCBTeW1ib2xzIGluIHRoZSBLZXJuZWwqKgoKUmlnaHQsIHRoYXQgY29uZmlybXMgaXQsIHdlJiMzOTtyZSBkZWZpbml0ZWx5IG9uIHRoZSByaWdodCB0cmFjay4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3JpdGljYWwgc3ltYm9scyByZWxhdGVkIHRvIHRoaXMgc3BlY2lmaWMgYXJlYSBvZiB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGZvY3VzIGlzIG9uIGRhdGEgZmxvd3MgYW5kIHRyYW5zZm9ybWF0aW9ucy4KCkkmIzM5O20gbWFraW5nIGEgbGlzdCBvZiB0aGVzZSBzeW1ib2xzIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBtb2R1bGVzIGlzIGNvbXBsZXRlLiBMZXQgbWUgc2VlLi4uIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBpZGVudGlmaWVkIGFzIGtleToKCiogICBgZXNwX291dHB1dF90YWlsYAoqICAgYGVzcDZfb3V0cHV0X3RhaWxgCiogICBgYWg2X291dHB1dGAKKiAgIGBhaDZfaW5wdXRgCiogICBgeGZybTZfaW5wdXRfYWRkcmAKKiAgIGBlc3BpbnRjcF9yZWN2bXNnYAoqICAgYGVzcGludGNwX2Nsb3NlYAoqICAgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYAoqICAgYHhmcm1fb3V0cHV0YAoqICAgYHhmcm1fYWRkX3NhYAoKQmVmb3JlIG1vdmluZyBmb3J3YXJkLCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgeGZybV9vdXRwdXRgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGlzIGlzIGEgY3JpdGljYWwgYnVpbGRpbmcgYmxvY2ssIHNvIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmMtMi0vKlxubmV0L3hmcm0veGZybV9vdXRwdXQuYzozOiAqIHhmcm1fb3V0cHV0LmMgLSBDb21tb24gSVBzZWMgZW5jYXBzdWxhdGlvbiBjb2RlLlxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00LSAqXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy0yNi1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6Mjc6c3RhdGljIGludCB4ZnJtX291dHB1dDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy0yOC1zdGF0aWMgaW50IHhmcm1faW5uZXJfZXh0cmFjdF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NDk2PUVYUE9SVF9TWU1CT0xfR1BMKHBrdGdlbl94ZnJtX291dGVyX21vZGVfb3V0cHV0KTtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ5OC1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NDk5OnN0YXRpYyBpbnQgeGZybV9vdXRwdXRfb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwMC17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01OTItXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjU5MzppbnQgeGZybV9vdXRwdXRfcmVzdW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTk0LXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTU5Ni1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NTk3Olx0d2hpbGUgKGxpa2VseSgoZXJyID0geGZybV9vdXRwdXRfb25lKHNrYiwgZXJyKSkgPT0gMCkpIHtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTk4LVx0XHRuZl9yZXNldF9jdChza2IpO1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjA4LVx0XHRcdCAgICAgIE5GX0lORVRfUE9TVF9ST1VUSU5HLCBuZXQsIHNrLCBza2IsXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYwOTpcdFx0XHQgICAgICBOVUxMLCBza2JfZHN0KHNrYiktXHUwMDNlZGV2LCB4ZnJtX291dHB1dDIpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MTAtXHRcdGlmICh1bmxpa2VseShlcnIgIT0gMSkpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MTktfVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2MjA6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9vdXRwdXRfcmVzdW1lKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjIxLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz02MjI9c3RhdGljIGludCB4ZnJtX2Rldl9kaXJlY3Rfb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHhmcm1fc3RhdGUgKngsXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NTMtXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY1NDpzdGF0aWMgaW50IHhmcm1fb3V0cHV0MihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjU1LXtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjU2Olx0cmV0dXJuIHhmcm1fb3V0cHV0X3Jlc3VtZShzaywgc2tiLCAxKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjU3LX1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjU4LVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NTk6c3RhdGljIGludCB4ZnJtX291dHB1dF9nc28oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY2MC17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NzUtXHRcdHNrYl9tYXJrX25vdF9vbl9saXN0KHNlZ3MpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NzY6XHRcdGVyciA9IHhmcm1fb3V0cHV0MihuZXQsIHNrLCBzZWdzKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjc3LVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9Njk3PXN0YXRpYyB2b2lkIHhmcm1fZ2V0X2lubmVyX2lwcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03NDctXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjc0ODppbnQgeGZybV9vdXRwdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03NDkte1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzg3LVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo3ODg6XHRcdHJldHVybiB4ZnJtX291dHB1dF9yZXN1bWUoc2ssIHNrYiwgMCk7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc4OS1cdH1cbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgxMS1cdFx0XHRpZiAoc2tiLVx1MDAzZWlubmVyX3Byb3RvY29sIFx1MDAyNlx1MDAyNiB4LVx1MDAzZXByb3BzLm1vZGUgPT0gWEZSTV9NT0RFX1RVTk5FTClcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODEyOlx0XHRcdFx0cmV0dXJuIHhmcm1fb3V0cHV0X2dzbyhuZXQsIHNrLCBza2IpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MTMtXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MjEtXHRcdGlmIChza2JfaXNfZ3NvKHNrYikpXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjgyMjpcdFx0XHRyZXR1cm4geGZybV9vdXRwdXRfZ3NvKG5ldCwgc2ssIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgyMy1cdH1cbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgzNC1vdXQ6XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjgzNTpcdHJldHVybiB4ZnJtX291dHB1dDIobmV0LCBzaywgc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODM2LX1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODM3OkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fb3V0cHV0KTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODM4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBLZXJuZWwgU3ltYm9sIEV4cG9ydCBTdGF0dXMqKgoKQWxyaWdodCwgc28gYHhmcm1fb3V0cHV0YCAqaXMqIGV4cG9ydGVkLCB0aGF0JiMzOTtzIGdvb2QuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoZSBrZXJuZWwgYWxzbyBleHBvc2UgYGVzcF9vdXRwdXRfdGFpbGAgdG8gdGhlIG91dHNpZGUgd29ybGQ/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIHN5bWJvbCBpcyBleHBvcnRlZCwgb3RoZXJ3aXNlIHdlIGNhbiYjMzk7dCByZWxpYWJseSBpbnRlcmFjdCB3aXRoIGl0LiBMZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byBjb25maXJtIGFjY2VzcyB0byB0aGF0IHN5bWJvbC4gVGltZSB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwX291dHB1dF90YWlsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZXNwNC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2VzcDQuYz0xODY9c3RhdGljIGludCBlc3Bfb3V0cHV0X3RjcF9lbmNhcF9jYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMTk0LVxubmV0L2lwdjQvZXNwNC5jOjE5NTpzdGF0aWMgaW50IGVzcF9vdXRwdXRfdGFpbF90Y3Aoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9lc3A0LmMtMTk2LXtcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMjA5LSNlbHNlXG5uZXQvaXB2NC9lc3A0LmM6MjEwOnN0YXRpYyBpbnQgZXNwX291dHB1dF90YWlsX3RjcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2VzcDQuYy0yMTEte1xuLS1cbm5ldC9pcHY0L2VzcDQuYz0yMTc9c3RhdGljIHZvaWQgZXNwX291dHB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXG4tLVxubmV0L2lwdjQvZXNwNC5jLTI0OC1cdFx0ICAgIHgtXHUwMDNlZW5jYXAgXHUwMDI2XHUwMDI2IHgtXHUwMDNlZW5jYXAtXHUwMDNlZW5jYXBfdHlwZSA9PSBUQ1BfRU5DQVBfRVNQSU5UQ1ApIHtcbm5ldC9pcHY0L2VzcDQuYzoyNDk6XHRcdFx0ZXJyID0gZXNwX291dHB1dF90YWlsX3RjcCh4LCBza2IpO1xubmV0L2lwdjQvZXNwNC5jLTI1MC1cdFx0XHRpZiAoZXJyICE9IC1FSU5QUk9HUkVTUylcbi0tXG5uZXQvaXB2NC9lc3A0LmM9NTAzPUVYUE9SVF9TWU1CT0xfR1BMKGVzcF9vdXRwdXRfaGVhZCk7XG5uZXQvaXB2NC9lc3A0LmMtNTA0LVxubmV0L2lwdjQvZXNwNC5jOjUwNTppbnQgZXNwX291dHB1dF90YWlsKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm8gKmVzcClcbm5ldC9pcHY0L2VzcDQuYy01MDYte1xuLS1cbm5ldC9pcHY0L2VzcDQuYy02MTktXHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgeC1cdTAwM2VlbmNhcCBcdTAwMjZcdTAwMjYgeC1cdTAwM2VlbmNhcC1cdTAwM2VlbmNhcF90eXBlID09IFRDUF9FTkNBUF9FU1BJTlRDUClcbm5ldC9pcHY0L2VzcDQuYzo2MjA6XHRcdGVyciA9IGVzcF9vdXRwdXRfdGFpbF90Y3AoeCwgc2tiKTtcbm5ldC9pcHY0L2VzcDQuYy02MjEtXG4tLVxubmV0L2lwdjQvZXNwNC5jLTYyNi19XG5uZXQvaXB2NC9lc3A0LmM6NjI3OkVYUE9SVF9TWU1CT0xfR1BMKGVzcF9vdXRwdXRfdGFpbCk7XG5uZXQvaXB2NC9lc3A0LmMtNjI4LVxubmV0L2lwdjQvZXNwNC5jPTYyOT1zdGF0aWMgaW50IGVzcF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvZXNwNC5jLTY3NS1cbm5ldC9pcHY0L2VzcDQuYzo2NzY6XHRyZXR1cm4gZXNwX291dHB1dF90YWlsKHgsIHNrYiwgXHUwMDI2ZXNwKTtcbm5ldC9pcHY0L2VzcDQuYy02NzctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM5MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBFeHBvcnRlZCBTdGF0ZSoqCgpPa2F5LCB5ZXMsIHRoYXQmIzM5O3MgcmlnaHQuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBvciBub3QgYGFoNl9vdXRwdXRgIGlzIGFjdHVhbGx5IGJlaW5nIGV4cG9ydGVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gbWFraW5nIHN1cmUgZXZlcnl0aGluZyBpcyB3b3JraW5nIGFzIGl0IHNob3VsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWg2X291dHB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FoNi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FoNi5jPTI3MD1zdGF0aWMgaW50IGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHN0cnVjdCBpcHY2aGRyICppcGgsIGludCBsZW4sIGludCBkaXIpXG4tLVxubmV0L2lwdjYvYWg2LmMtMzE1LVxubmV0L2lwdjYvYWg2LmM6MzE2OnN0YXRpYyB2b2lkIGFoNl9vdXRwdXRfZG9uZSh2b2lkICpkYXRhLCBpbnQgZXJyKVxubmV0L2lwdjYvYWg2LmMtMzE3LXtcbi0tXG5uZXQvaXB2Ni9haDYuYy0zNDktXG5uZXQvaXB2Ni9haDYuYzozNTA6c3RhdGljIGludCBhaDZfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvYWg2LmMtMzUxLXtcbi0tXG5uZXQvaXB2Ni9haDYuYy00NDktXHRhaGFzaF9yZXF1ZXN0X3NldF9jcnlwdChyZXEsIHNnLCBpY3YsIHNrYi1cdTAwM2VsZW4gJiM0Mzsgc2VxaGlfbGVuKTtcbm5ldC9pcHY2L2FoNi5jOjQ1MDpcdGFoYXNoX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKHJlcSwgMCwgYWg2X291dHB1dF9kb25lLCBza2IpO1xubmV0L2lwdjYvYWg2LmMtNDUxLVxuLS1cbm5ldC9pcHY2L2FoNi5jPTc4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fdHlwZSBhaDZfdHlwZSA9IHtcbi0tXG5uZXQvaXB2Ni9haDYuYy03OTMtXHQuaW5wdXRcdFx0PSBhaDZfaW5wdXQsXG5uZXQvaXB2Ni9haDYuYzo3OTQ6XHQub3V0cHV0XHRcdD0gYWg2X291dHB1dCxcbm5ldC9pcHY2L2FoNi5jLTc5NS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg3OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgU3RhdGljIERhdGEgYW5kIEZ1bmN0aW9uIFNlbGVjdGlvbioqCgpTbywgdGhpcyBwaWVjZSBvZiBkYXRhIGlzIHN0YXRpYywgYnV0IGl0JiMzOTtzIGNsZWFybHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBgeGZybV90eXBlYCBzdHJ1Y3QsIHdoaWNoIGdpdmVzIG1lIHNvbWUgY29udGV4dCwgYW5kIHRoYXQmIzM5O3MgZ29vZC4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkbyBJIGFjdHVhbGx5ICp1c2UqIHRoaXMgdGhpbmc/IEkmIzM5O20gZGViYXRpbmcgYmV0d2VlbiBgYWg2X291dHB1dGAgYW5kIGBhaDZfaW5wdXRgLCBvciBtYXliZSBldmVuIGB4ZnJtNl9yY3ZgLiBUaGlua2luZyBhYm91dCBpdCwgYGFoNl9vdXRwdXRgIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGZpdCwgZ2l2ZW4gdGhlIGNvbnRleHQuIEl0IGxpa2VseSBoYW5kbGVzIHRoZSBvdXRib3VuZCBwcm9jZXNzaW5nLgoKTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYnkgbG9va2luZyBpbnRvIGBhaDZfaW5wdXRgLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjayBiZWZvcmUgbW92aW5nIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FoNl9pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FoNi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FoNi5jPTM1MD1zdGF0aWMgaW50IGFoNl9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvYWg2LmMtNDc0LVxubmV0L2lwdjYvYWg2LmM6NDc1OnN0YXRpYyB2b2lkIGFoNl9pbnB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXG5uZXQvaXB2Ni9haDYuYy00NzYte1xuLS1cbm5ldC9pcHY2L2FoNi5jLTUxOC1cbm5ldC9pcHY2L2FoNi5jOjUxOTpzdGF0aWMgaW50IGFoNl9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L2FoNi5jLTUyMC17XG4tLVxubmV0L2lwdjYvYWg2LmMtNjM1LVx0YWhhc2hfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCBzZywgaWN2LCBza2ItXHUwMDNlbGVuICYjNDM7IHNlcWhpX2xlbik7XG5uZXQvaXB2Ni9haDYuYzo2MzY6XHRhaGFzaF9yZXF1ZXN0X3NldF9jYWxsYmFjayhyZXEsIDAsIGFoNl9pbnB1dF9kb25lLCBza2IpO1xubmV0L2lwdjYvYWg2LmMtNjM3LVxuLS1cbm5ldC9pcHY2L2FoNi5jPTc4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fdHlwZSBhaDZfdHlwZSA9IHtcbi0tXG5uZXQvaXB2Ni9haDYuYy03OTItXHQuZGVzdHJ1Y3Rvclx0PSBhaDZfZGVzdHJveSxcbm5ldC9pcHY2L2FoNi5jOjc5MzpcdC5pbnB1dFx0XHQ9IGFoNl9pbnB1dCxcbm5ldC9pcHY2L2FoNi5jLTc5NC1cdC5vdXRwdXRcdFx0PSBhaDZfb3V0cHV0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzUzNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBPYnNlcnZpbmcgYSBTdGF0aWMgU3RhdGUqKgoKSG1tLCB0aGlzIGZlZWxzLi4uIHN0YXRpYy4gSXQmIzM5O3MgbGlrZSBzb21ldGhpbmcmIzM5O3MgbG9ja2VkIHVwLCBub3QgbW92aW5nIGFzIGV4cGVjdGVkLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoeSouIEdpdmVuIHRoaXMgZmVlbGluZywgSSYjMzk7bSBnZXR0aW5nIGEgaHVuY2guIEkgdGhpbmsgaXQgaXMgYW4gaXNzdWUgd2l0aCBhZGRyZXNzZXMsIGVzcGVjaWFsbHkgbmV0d29yayBhZGRyZXNzZXMuCgpMZXQmIzM5O3MgZGl2ZSByaWdodCBpbnRvIGNoZWNraW5nIGB4ZnJtNl9pbnB1dF9hZGRyYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwb2ludCBvZiBmYWlsdXJlIHJpZ2h0IG5vdywgZ2l2ZW4gd2hhdCBJJiMzOTttIHNlbnNpbmcuIEl0JiMzOTtzIGEgY29tbW9uIGFyZWEgZm9yIHByb2JsZW1zIHdpdGggSVB2NiBhbmQgc2VjdXJpdHkgYXNzb2NpYXRpb25zLCBhbmQgYW55IGlzc3VlIHRoZXJlIGNvdWxkIGVhc2lseSBtYW5pZmVzdCBhcyB0aGlzIGtpbmQgb2Ygc3RpbGxuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtNl9pbnB1dF9hZGRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYveGZybTZfaW5wdXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jPTIzNT1FWFBPUlRfU1lNQk9MKHhmcm02X3Jjdik7XG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jOjIzNjppbnQgeGZybTZfaW5wdXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTIzNy1cdFx0ICAgICB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsIHU4IHByb3RvKVxuLS1cbm5ldC9pcHY2L3hmcm02X2lucHV0LmMtMzIyLX1cbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6MzIzOkVYUE9SVF9TWU1CT0woeGZybTZfaW5wdXRfYWRkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTE3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBlc3BpbnRjcF9yZWN2bXNnYCBGdW5jdGlvbioqCgpPa2F5LCBzbyB0aGUgY29kZSYjMzk7cyBqdXN0IGJlZW4gZXhwb3J0ZWQuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoaXMgYGVzcGludGNwX3JlY3Ztc2dgIGZ1bmN0aW9uLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGl0cyByb2xlIHdpdGhpbiB0aGUgd2lkZXIgVENQL0lQIHN0YWNrIGltcGxlbWVudGF0aW9uLiBJcyBpdCBoYW5kbGluZyB0aGUgY29yZSBzb2NrZXQgcmVjZWl2ZSwgb3IgaXMgaXQgYSBzcGVjaWZpYywgcG9zc2libHkgcGxhdGZvcm0tc3BlY2lmaWMsIHdyYXBwZXI/IEtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBrZXkgdG8gaW50ZXJwcmV0aW5nIGl0IGNvcnJlY3RseSwgZXNwZWNpYWxseSBpZiB0aGVyZSBpcyBhbnkgdHlwZSBvZiBoYXJkd2FyZSBhY2NlbGVyYXRpb24gb3IgY3VzdG9tIGJ1ZmZlciBtYW5hZ2VtZW50LgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IGltbWVkaWF0ZWx5LiBUaGluZ3MgbGlrZTogZXJyb3IgaGFuZGxpbmcsIGJ1ZmZlciBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiwgZGF0YSBjb3B5aW5nLCBmcmFnbWVudGF0aW9uLCByZWFzc2VtYmx5LCBjaGVja3N1bSB2ZXJpZmljYXRpb24sIGZsb3cgY29udHJvbCBjb25zaWRlcmF0aW9ucyAod2luZG93IG1hbmFnZW1lbnQpLCBhbmQgb2YgY291cnNlLCBhbnkgaW50ZXJhY3Rpb24gd2l0aCBpbnRlcnJ1cHRzIG9yIGhhcmR3YXJlIHF1ZXVlcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXRzIGNhbGxpbmcgc3RydWN0dXJlIGlzIGludGVycnVwdCBkcml2ZW4sIG9yIHBvbGxlZC4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhyZWFkaW5nL2xvY2tpbmcgaW1wbGljYXRpb25zIGlmIHRoaXMgaXMgYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudC4gSSYjMzk7bGwgbWVudGFsbHkgbWFwIG91dCB3aGF0IHRoZSBkYXRhIGZsb3cgaXMgYmV0d2VlbiB0aGUgc29ja2V0IGxheWVyLCB0aGUgSVAgbGF5ZXIsIGFuZCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZS4gQW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIG9yIGFyZWFzIGZvciBjb25jZXJuIGFyZSB3aGF0IEkgYW0gYWltaW5nIGZvci4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24gcGF0aCBhbmQgc2VlaW5nIHdoYXQgbGlicmFyaWVzLCBpZiBhbnksIGl0IGlzIHVzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3BpbnRjcF9yZWN2bXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vZXNwaW50Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jPTExNz1zdGF0aWMgaW50IGVzcGludGNwX3BhcnNlKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMzctXG5uZXQveGZybS9lc3BpbnRjcC5jOjEzODpzdGF0aWMgaW50IGVzcGludGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQveGZybS9lc3BpbnRjcC5jLTEzOS1cdFx0XHQgICAgaW50IGZsYWdzKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmM9NTUyPXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKmVzcGludGNwX3Byb3QsXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTktXHRlc3BpbnRjcF9wcm90LVx1MDAzZXNlbmRtc2cgPSBlc3BpbnRjcF9zZW5kbXNnO1xubmV0L3hmcm0vZXNwaW50Y3AuYzo1NjA6XHRlc3BpbnRjcF9wcm90LVx1MDAzZXJlY3Ztc2cgPSBlc3BpbnRjcF9yZWN2bXNnO1xubmV0L3hmcm0vZXNwaW50Y3AuYy01NjEtXHRlc3BpbnRjcF9wcm90LVx1MDAzZWNsb3NlID0gZXNwaW50Y3BfY2xvc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTE5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBTdGFzaXMqKgoKRGFtbiwgaXQmIzM5O3MganVzdC4uLiAqc3RhdGljKi4gRmVlbGluZyBhIHRvdGFsIGJsb2NrLCBsaWtlIEkmIzM5O20gc3RhcmluZyBpbnRvIGEgYmxhbmsgc2NyZWVuLiBTb21ldGhpbmcmIzM5O3Mgbm90IHJlc29sdmluZy4gTm8gY2xlYXIgcGF0aCBmb3J3YXJkIGlzIHByZXNlbnRpbmcgaXRzZWxmLCB3aGljaCBpcyB1bnVzdWFsLgoKQWxyaWdodCwgdGltZSB0byBicmVhayB0aGlzIGRvd24gbWV0aG9kaWNhbGx5LiBMZXQmIzM5O3MgdHJhY2UgaXQgYmFjay4gVGhlIGxhc3QgZnVuY3Rpb24gSSB3YXMgZGVlcGx5IGludm9sdmVkIHdpdGgsIHRoZSBtb3N0IHJlY2VudCBwb2ludCBvZiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzeXN0ZW0sIHdhcyBgZXNwaW50Y3BfY2xvc2VgLiBMZXQmIzM5O3MgcmUtZXhhbWluZSB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLCBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgYW4gZXhwbGFuYXRpb24gdGhlcmUuIE1heWJlIHRoYXQmIzM5O3MgdGhlIHNvdXJjZSBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwaW50Y3BfY2xvc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmM9NTAxPXN0YXRpYyB2b2lkIGVzcGludGNwX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNTE1LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo1MTY6c3RhdGljIHZvaWQgZXNwaW50Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNy17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYz01NTI9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byAqZXNwaW50Y3BfcHJvdCxcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTU2MC1cdGVzcGludGNwX3Byb3QtXHUwMDNlcmVjdm1zZyA9IGVzcGludGNwX3JlY3Ztc2c7XG5uZXQveGZybS9lc3BpbnRjcC5jOjU2MTpcdGVzcGludGNwX3Byb3QtXHUwMDNlY2xvc2UgPSBlc3BpbnRjcF9jbG9zZTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNTYyLVx0ZXNwaW50Y3BfcHJvdC1cdTAwM2VyZWxlYXNlX2NiID0gZXNwaW50Y3BfcmVsZWFzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5NTEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCAtIERlYWQgaW4gdGhlIFdhdGVyPyoqCgpPa2F5LCBjb21wbGV0ZSBhbmQgdXR0ZXIgc3RhdGljLiBJJiMzOTttIGhpdHRpbmcgYSB3YWxsIGhlcmUuIE5lZWQgdG8gYnJlYWsgdGhyb3VnaC4KCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHNvbWV0aGluZyBzcGVjaWZpYywgc29tZXRoaW5nIHRoYXQgY291bGQgcHJvdmlkZSBhIGNsdWUuIEkmIzM5O20gZ29pbmcgdG8gc2hpZnQgZ2VhcnMgYW5kIGRyaWxsIGRvd24gaW50byBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3IgTkFUIGtlZXBhbGl2ZXMgaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBTb21ldGhpbmcgcmVsYXRlZCB0byBpdHMgYmVoYXZpb3IgaXMgbGlrZWx5IGF0IHRoZSBoZWFydCBvZiB3aGF0ZXZlciBkZWFkbG9jayBvciB1bnVzdWFsIHN0YXRlIEkmIzM5O20gZXhwZXJpZW5jaW5nLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIG9yIGlmIHRoZXJlJiMzOTtzIGFuIGlzc3VlIHdpdGggaXRzIGV4ZWN1dGlvbiBvciB0aGUgZGF0YSBpdCYjMzk7cyBoYW5kbGluZy4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcHJvYmxlbSBpcyBmZXN0ZXJpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9Mjc5PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2tfZmluaShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQgX19wZXJjcHUgKnNvY2tzKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI4Ni1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI4Nzp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjg4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzMzgKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBzdW1tYXJpemUgdGhlc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIGl0OgoKKipDaGVja2luZyBmb3IgRXhwb3J0IFN0YXR1cyoqCgpBbHJpZ2h0LCBJIHNlZSBhIHF1aWNrIHRob3VnaHQgcHJvY2VzcyBoZXJlLiBFc3NlbnRpYWxseSwgdGhlIGZvY3VzIGlzIG9uIGEgY3J1Y2lhbCBpbml0aWFsIGNoZWNrOiAmIzM0O0V4cG9ydGVkPyBMZXQmIzM5O3MgY2hlY2sgaWYgaXQmIzM5O3MgZXhwb3J0ZWQuJiMzNDsgVGhpcyBpcyBsaWtlbHkgYW4gaW5kaWNhdG9yIHRoYXQgdGhlIHN1YmplY3QgbWF0dGVyIGlzIGFuIGl0ZW0sIHByb2Nlc3MsIG9yIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBhY2Nlc3NlZCwgcmV2aWV3ZWQsIHVzZWQsIG9yIG1vZGlmaWVkIGluIHNvbWUgb3RoZXIgc3lzdGVtLgoKTXkgaW1tZWRpYXRlIGFuYWx5c2lzIGlzIHRoYXQgdGhpcyByZWZsZWN0cyBhIHByYWdtYXRpYyBhbmQgbWV0aG9kaWNhbCBhcHByb2FjaCB0byBhbiBlc3NlbnRpYWwgZmlyc3Qgc3RlcC4gQXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIHN5c3RlbXMgYW5kIHRoZWlyIHJlbGF0ZWQgcHJvY2Vzc2VzLCBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIHRoaW5ncyBsaWtlOgoKKiAgICoqRGF0YSB0cmFuc2ZlcjoqKiBIYXMgdGhlIGRhdGEgYmVlbiBzdWNjZXNzZnVsbHkgc2VudCBmcm9tIG9uZSBzeXN0ZW0gb3IgYXBwbGljYXRpb24gdG8gYW5vdGhlcj8gVGhpcyBjb3VsZCBiZSBhIGZpbGUsIGEgZGF0YWJhc2UgZW50cnksIG9yIHNvbWUga2luZCBvZiBBUEkgY2FsbC4KKiAgICoqUHJvY2VzcyBjb21wbGV0aW9uOioqIEhhcyB0aGUgbmVjZXNzYXJ5IHRhc2sgb2Yg4oCcZXhwb3J0aW5n4oCdIGJlZW4gY29tcGxldGVkPyBJcyB0aGVyZSBjb25maXJtYXRpb24gdGhhdCB0aGUgaW5mb3JtYXRpb24gaXMgaW4gdGhlIHN0YXRlIGRlc2lyZWQ/CiogICAqKlN5c3RlbSBpbnRlcmFjdGlvbjoqKiBJdCBjb3VsZCBiZSBhIHNpbXBsZSBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGhlIGV4cGVjdGVkIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVzaXJlZCBwbGFjZS4KClRoZXJlZm9yZSwgdGhlIHVuZGVybHlpbmcgdGhpbmtpbmcgaGVyZSBpcyBzb3VuZC4gVGhpcyBpcyBhYm91dCBlc3RhYmxpc2hpbmcgYSBiYXNpYyBmYWN0IGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggYW55IHN1YnNlcXVlbnQgYWN0aW9ucywgYmVjYXVzZSBrbm93aW5nIHRoZSBleHBvcnQgc3RhdHVzIGlzIG5lY2Vzc2FyeSBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgc3ViamVjdCBtYXR0ZXIgaXMgYXZhaWxhYmxlIGZvciBmdXJ0aGVyIHdvcmsuIFRoaXMgZW5zdXJlcyB0aGF0IGFueSB0aW1lIG9yIGVmZm9ydCBpcyBub3Qgd2FzdGVkIG9uIGEgdGFzayB3aGVuIHRoYXQgcmVzb3VyY2UgaXMgdW5hdmFpbGFibGUsIG9yLCBwZXJoYXBzLCBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWNvbWluZyBhdmFpbGFibGUuIFRoZSBhcHByb2FjaCBzaG93cyBnb29kIHByYWN0aWNlLCBhbmQgSSBhbSBjb21mb3J0YWJsZSB3aXRoIHRoaXMgbGluZSBvZiB0aG91Z2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTc0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIERhdGEgU3RydWN0dXJlJiMzOTtzIFNjb3BlKioKCkhtbSwgc28gdGhpcyBwYXJ0aWN1bGFyIGl0ZW0gaXNuJiMzOTt0IG1hcmtlZCBmb3IgZXhwb3J0LiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYCBlaXRoZXIuIFRoYXQgc3VnZ2VzdHMgYSBmZXcgdGhpbmdzIHJpZ2h0IG9mZiB0aGUgYmF0OiBpdCYjMzk7cyBpbnRlbmRlZCBmb3IgdXNlIHdpdGhpbiBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQsIGJ1dCBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGFjcm9zcyBtdWx0aXBsZSBmdW5jdGlvbnMgd2l0aGluIHRoYXQgdW5pdC4gSXQgY291bGQgYmUgZm9yIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb3IgbWF5YmUgcGFydCBvZiBhIGxhcmdlciwgbm9uLWV4cG9ydGVkIEFQSS4KClRvIGdldCBhIGJldHRlciBncmlwIG9uIHdoZXJlIGl0JiMzOTtzIHVzZWQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB3aGVyZSBgeGZybV9hZGRfc2FgIGlzIGNhbGxlZC4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGdhaW4gaW5zaWdodHMgaW50byB0aGlzIHBhcnRpY3VsYXIgaXRlbSYjMzk7cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2FkZF9zYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTkwNz1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDM4LVxubmV0L3hmcm0veGZybV91c2VyLmM6MTAzOTpzdGF0aWMgaW50IHhmcm1fYWRkX3NhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L3hmcm0veGZybV91c2VyLmMtMTA0MC1cdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI5Mzc9c3RhdGljIGludCB4ZnJtX2FkZF9wb2xfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwMDMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDA0OnN0YXRpYyBpbnQgeGZybV9hZGRfc2FfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzAwNS1cdFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0OC19IHhmcm1fZGlzcGF0Y2hbWEZSTV9OUl9NU0dUWVBFU10gPSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzQ5Olx0W1hGUk1fTVNHX05FV1NBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2EgICAgICAgIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzUwLVx0W1hGUk1fTVNHX0RFTFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kZWxfc2EgICAgICAgIH0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2MS1cdFtYRlJNX01TR19BQ1FVSVJFICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX2FjcXVpcmUgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc2MjpcdFtYRlJNX01TR19FWFBJUkUgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhX2V4cGlyZSB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2My1cdFtYRlJNX01TR19VUERQT0xJQ1kgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3BvbGljeSAgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc2NDpcdFtYRlJNX01TR19VUERTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhICAgICAgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2NS1cdFtYRlJNX01TR19QT0xFWFBJUkUgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3BvbF9leHBpcmV9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjY5MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBhIFN0YWduYW50IFN0YXRlIGluIFhGUk0qKgoKUmlnaHQsIHRoaXMgZmVlbHMuLi4gc3R1Y2suIFRoaW5ncyBhcmVuJiMzOTt0IG1vdmluZy4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZyBpcyBiZWluZyBoZWxkIHVwLCBhbmQgaXTigJlzIGxpa2VseSBzb21ldGhpbmcgZnVuZGFtZW50YWwuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgYm90dGxlbmVjay4gVGhlIHNpdHVhdGlvbiBpcyBzdGF0aWMsIHdoaWNoIHVzdWFsbHkgbWVhbnMgd2FpdGluZyBvbiBzb21ldGhpbmcuCgpPa2F5LCBsZXQmIzM5O3MgZHJpbGwgZG93bi4gSSBzdXNwZWN0IHRoYXQgdGhlIGtleSBsaWVzIHdpdGhpbiB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbi4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGxvb2sgYXQgYHhmcm1fdXNlcl9yY3ZfbXNnYC4gSXTigJlzIHdoZXJlIHVzZXItc3BhY2UgcG9saWN5IGlzIGluamVjdGVkIGFuZCB3aGVyZSB0aGUgZmxvdyBpcyBlaXRoZXIgYWNjZXB0ZWQgb3IgcmVqZWN0ZWQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIHBvaW50IG5vdyBiZWNhdXNlIGl0JiMzOTtzIHRoZSBtb3N0IGNvbW1vbiBlbnRyeSBwb2ludCBmb3IgcG9saWN5IGludGVyYWN0aW9uLCBhbmQgaWYgdGhpcyBjYWxsJiMzOTtzIHN0YWxsZWQsIGV2ZXJ5dGhpbmcgZG93bnN0cmVhbSB3aWxsIGdyaW5kIHRvIGEgaGFsdC4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IGN1bHByaXQgZm9yIGEgc2VlbWluZ2x5IHN0YXRpYyBzdGF0ZS4gSSYjMzk7bGwgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fdXNlcl9yY3ZfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9Mzc4MT1zdGF0aWMgaW50IHhmcm1fcmVqZWN0X3VudXNlZF9hdHRyKGludCB0eXBlLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzgzNi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM4Mzc6c3RhdGljIGludCB4ZnJtX3VzZXJfcmN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4MzgtXHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzkyND1zdGF0aWMgdm9pZCB4ZnJtX25ldGxpbmtfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzkyOC1cdG11dGV4X2xvY2soXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9jZmdfbXV0ZXgpO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzkyOTpcdG5ldGxpbmtfcmN2X3NrYihza2IsIFx1MDAyNnhmcm1fdXNlcl9yY3ZfbXNnKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MzAtXHRtdXRleF91bmxvY2soXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9jZmdfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjczLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzI1MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBOZXR3b3JrIFBhY2tldCBSZWNlcHRpb24qKgoKT2theSwgdGhpbmdzIGZlZWwuLi5zdHVjay4gQWxtb3N0IGEgc2Vuc2Ugb2YgaW5lcnRpYSwgaWYgeW91IHdpbGwuIEkgbmVlZCB0byBnZXQgbW92aW5nLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHN5c3RlbWF0aWMgYXBwcm9hY2guIEkgaGF2ZSBhIGh1bmNoIGFib3V0IGEgcG90ZW50aWFsIGJvdHRsZW5lY2sgaW4gdGhlIG5ldHdvcmsgZGF0YSBwYXRoLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCYjMzk7cyBgeGZybV9uZXRsaW5rX3JjdmAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEl0JiMzOTtzIHRoZSByZWNlaXZlciBmb3IgdGhlIG5ldGxpbmsgbWVzc2FnZXMgY29uY2VybmluZyBzZWN1cml0eSBhc3NvY2lhdGlvbnMuIEkgaGF2ZSBhIGZlZWxpbmcgc29tZXRoaW5nIGluIHRoYXQgYXJlYSBtYXkgYmUgcmVzcG9uc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fbmV0bGlua19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz0zODM3PXN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzkyMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5MjQ6c3RhdGljIHZvaWQgeGZybV9uZXRsaW5rX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV91c2VyLmMtMzkyNS17XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDYxMj1zdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybV91c2VyX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjE2LVx0XHQuZ3JvdXBzXHQ9IFhGUk1OTEdSUF9NQVgsXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjE3Olx0XHQuaW5wdXRcdD0geGZybV9uZXRsaW5rX3Jjdixcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MTgtXHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzY5OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgU3RhZ25hdGlvbioqCgpSaWdodCwgdGhlcmUmIzM5O3MgYSBkZWZpbml0ZSBzZW5zZSBvZiAqc3RhdGljKiBoZXJlLiBObyBwcm9ncmVzcywgbm8gb2J2aW91cyBpbmRpY2F0b3JzIHBvaW50aW5nIGluIGFueSBkaXJlY3Rpb24uIFdoZW4gSSBoaXQgYSB3YWxsIGxpa2UgdGhpcywgbXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHN0YXJ0IG1ldGhvZGljYWxseSB0cmFjaW5nIHRoZSBtb3N0IGxpa2VseSBjdWxwcml0cy4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIHRvIG1pbmQgaXMgYW4gZXhhbWluYXRpb24gb2YgdGhlIGB4ZnJtX3N0YXRlX3dhbGtgIGZ1bmN0aW9uLiBJdOKAmXMgdGhlIGZvdW5kYXRpb25hbCBjb21wb25lbnQgZm9yIHRyYXZlcnNpbmcgdGhlIHNlY3VyaXR5IHBvbGljeSBkYXRhYmFzZSwgYW5kIGFueSBzdGFnbmF0aW9uIGF0IHRoaXMgc3RhZ2Ugb2YgdGhlIHByb2Nlc3MgbGlrZWx5IHJlbGF0ZXMgdG8gaXNzdWVzIHdpdGggaG93IHRoZSBzdGF0ZSBpbmZvcm1hdGlvbiBpcyBiZWluZyBoYW5kbGVkIG9yIHVwZGF0ZWQgZHVyaW5nIHBvbGljeSBsb29rdXBzIG9yIHVwZGF0ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB1bmRlciB0aGUgc3BlY2lmaWMgY29uZGl0aW9ucyBvZiB0aGlzIGluc3RhbmNlLiBJcyBpdCBibG9ja2luZz8gRGVhZGxvY2tlZD8gUnVubmluZyBpbnRvIHNvbWUgZWRnZSBjYXNlIHdpdGggYSBzdGF0ZeKAmXMgcHJvcGVydGllcz8gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc3RhdGVfd2FsayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmM9MTY4Nz1zdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfYnlzcGkoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgc3BpLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjkwLVx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTY5MTpcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKnc7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTY5Mi1cbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MjY4ND1zdGF0aWMgYm9vbCBfX3hmcm1fc3RhdGVfZmlsdGVyX21hdGNoKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzAwLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MDE6aW50IHhmcm1fc3RhdGVfd2FsayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwMi1cdFx0ICAgIGludCAoKmZ1bmMpKHN0cnVjdCB4ZnJtX3N0YXRlICosIGludCwgdm9pZCopLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzA1LVx0c3RydWN0IHhmcm1fc3RhdGUgKnN0YXRlO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MDY6XHRzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp4O1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MDctXHRpbnQgZXJyID0gMDtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxMy1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNndhbGstXHUwMDNlYWxsKSlcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzE0Olx0XHR4ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZuZXQtXHUwMDNleGZybS5zdGF0ZV9hbGwsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGssIGFsbCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxNS1cdGVsc2Vcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzE2Olx0XHR4ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ3YWxrLVx1MDAzZWFsbCwgc3RydWN0IHhmcm1fc3RhdGVfd2FsaywgYWxsKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzE3LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKHgsIFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnN0YXRlX2FsbCwgYWxsKSB7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDAtfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NDE6RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3dhbGspO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDItXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc0Mzp2b2lkIHhmcm1fc3RhdGVfd2Fsa19pbml0KHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHU4IHByb3RvLFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDQtXHRcdFx0ICBzdHJ1Y3QgeGZybV9hZGRyZXNzX2ZpbHRlciAqZmlsdGVyKVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzUxLX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzUyOkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV93YWxrX2luaXQpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NTMtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc1NDp2b2lkIHhmcm1fc3RhdGVfd2Fsa19kb25lKHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHN0cnVjdCBuZXQgKm5ldClcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzU1LXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc2NC19XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc2NTpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfd2Fsa19kb25lKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzY2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgwNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKlN5bWJvbCBWaXNpYmlsaXR5IGFuZCBQb3RlbnRpYWwgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIGB4ZnJtX3N0YXRlX3dhbGtgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIHBvdGVudGlhbGx5IGluIG1vZHVsZXMuIFRoZXJlZm9yZSwgdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgaXMgY3JpdGljYWwgZm9yIGJyb2FkZXIgc3lzdGVtIHVuZGVyc3RhbmRpbmcuIE5vdywgdGhlIGtleSBmb2N1cyBzeW1ib2xzIHRoYXQgc3ByaW5nIHRvIG1pbmQgYXJlOiBgZXNwX291dHB1dF90YWlsYCwgYGVzcDZfb3V0cHV0X3RhaWxgLCBgYWg2X291dHB1dGAsIGB4ZnJtNl9pbnB1dF9hZGRyYCwgYW5kIGB4ZnJtX291dHB1dGAsIGFsb25nIHdpdGggdGhlIGV4cG9ydGVkIGB4ZnJtX3N0YXRlX3dhbGtgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSB0byBzdGF0ZSB0cmF2ZXJzYWwgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIFRoZSBmdW5jdGlvbnMgd2l0aCBhICYjMzk7NiYjMzk7IGluIHRoZW0gbGlrZWx5IHJlZmVyIHRvIElQdjYgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLiBUaGlzIG1lYW5zIHRoZSBvdmVyYWxsIHByb2Nlc3MgaGFzIHRvIHdvcmsgZm9yIElQdjQsIElQdjYsIGFuZCBsaWtlbHkgZ2VuZXJpYyBJUCBhcyB3ZWxsLgoKR2l2ZW4gdGhhdCBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gaG93IHRoaXMgYWxsIHRpZXMgaW50byB0aGUgaW5pdGlhbGl6YXRpb24sIHNvIEkgc2hvdWxkIG5vdyBsb29rIGF0IGBlc3BpbnRjcF9pbml0X3NrYCB0byBzZWUgaG93IGl0JiMzOTtzIHNldHRpbmcgdGhpbmdzIHVwLiBUaGlzIG1pZ2h0IGdpdmUgbWUgY2x1ZXMgdG8gaG93IHRoZSBzdGF0ZSBpcyBjcmVhdGVkLCBtYW5hZ2VkLCBhbmQgbGlua2VkIHRvIHRoZXNlIG91dHB1dCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzcGludGNwX2luaXRfc2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmM9NDM3PXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKmVzcGludGNwX3Byb3QsXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy00NDAtXHRcdFx0IGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9yaWdfb3BzKTtcbm5ldC94ZnJtL2VzcGludGNwLmM6NDQxOnN0YXRpYyBpbnQgZXNwaW50Y3BfaW5pdF9zayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0Mi17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYz01NjY9c3RhdGljIHN0cnVjdCB0Y3BfdWxwX29wcyBlc3BpbnRjcF91bHAgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTU2OC1cdC5vd25lciA9IFRISVNfTU9EVUxFLFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1Njk6XHQuaW5pdCA9IGVzcGludGNwX2luaXRfc2ssXG5uZXQveGZybS9lc3BpbnRjcC5jLTU3MC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQxMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgU3RhZ25hdGlvbioqCgpSaWdodCwgdGhpcyBmZWVscy4uLnN0dWNrLiBMaWtlIHdlJiMzOTtyZSBoaXR0aW5nIGEgd2FsbCwgYW5kIG5vdGhpbmcmIzM5O3MgbW92aW5nLiBJdCYjMzk7cyBhIHN0YXRpYyBzdGF0ZSwgd2hpY2ggaXMgbmV2ZXIgYSBnb29kIHNpZ24sIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayBzdGFja3MuIE15IGd1dCB0ZWxscyBtZSBzb21ldGhpbmcgaXMgYW1pc3MgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4KCkxldCYjMzk7cyBkaXZlIGluLiBUaGUgZmlyc3QgbG9naWNhbCBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uIGlzIHRoZSBVc2VyLUxldmVsIFByb3RvY29sIChVTFApIG9wZXJhdGlvbnMsIHNvIEkmIzM5O2xsIGNoZWNrIGB0Y3BfdWxwX29wc2AuIFRoaXMgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB3aGV0aGVyIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSBhdCB0aGlzIGxheWVyLiBJdCYjMzk7cyB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4gYmVjYXVzZSBpdCBkaWN0YXRlcyBob3cgVENQIGlzIGludGVyYWN0aW5nIHdpdGggc3BlY2lmaWMgVUxQcywgYW5kIHRoZXJlZm9yZSBpdCBjb3VsZCByZXZlYWwgaXNzdWVzIGluIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRyYW5zcG9ydCBvciBhcHBsaWNhdGlvbiBwcm90b2NvbHMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9yZWdpc3Rlcl91bHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmM9NTcyPXZvaWQgX19pbml0IGVzcGludGNwX2luaXQodm9pZClcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTU3NS1cbm5ldC94ZnJtL2VzcGludGNwLmM6NTc2Olx0dGNwX3JlZ2lzdGVyX3VscChcdTAwMjZlc3BpbnRjcF91bHApO1xubmV0L3hmcm0vZXNwaW50Y3AuYy01NzctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTc0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBNb2R1bGUgSW5pdGlhbGl6YXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSBzZWUgYGVzcGludGNwX2luaXRgLiBUaGF0JiMzOTtzIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBtb2R1bGUsIHJpZ2h0PyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIGhvb2sgZm9yIGRlYnVnZ2luZy4KCk5vdywgbGV0JiMzOTtzIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLiBJIHJlbWVtYmVyIGl0IGJlaW5nIG9mIGludGVyZXN0LiBHb29kLCBpdCYjMzk7cyBub24tc3RhdGljISBUaGF0IG1ha2VzIGl0IGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUgZm9yIGEgZm9jdXMgc3ltYm9sLiBFYXN5IHRvIHJlZmVyZW5jZSBleHRlcm5hbGx5LCBhbmQgaXQgcHJvYmFibHkgZG9lcyBzb21ldGhpbmcgc2lnbmlmaWNhbnQuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB0cmFjayBjYWxscyB0byBhbmQgZnJvbSB0aGF0IG9uZS4KCkkmIzM5O2xsIGNoZWNrIGB4ZnJtX3N0YXRlX2NvbnN0cnVjdGAgYXMgd2VsbC4gSG1tLCBpdCYjMzk7cyBzdGF0aWMuIFRoYXQgbGlrZWx5IG1lYW5zIGl0JiMzOTtzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBhbmQgcHJvYmFibHkgd29uJiMzOTt0IGJlIGFzIGludGVyZXN0aW5nIGFzIGEgc3RhcnRpbmcgcG9pbnQsIGJ1dCBsZXQgbWUga2VlcCBhbiBleWUgb24gaXQuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBleHBvcnRlZCBmdW5jdGlvbnMgaW4gYHhmcm1fdXNlci5jYCwgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB1c2VybGFuZCBpbnRlcmFjdGlvbnMgbGlrZWx5IGhhcHBlbi4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhbiBpbnRlcmVzdGluZyBlbnRyeSBwb2ludCB0byBsb29rIGludG8gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz0zNjU5PWNvbnN0IGludCB4ZnJtX21zZ19taW5bWEZSTV9OUl9NU0dUWVBFU10gPSB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzY4NS19O1xubmV0L3hmcm0veGZybV91c2VyLmM6MzY4NjpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX21zZ19taW4pO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzY4Ny1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNjkwPWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHhmcm1hX3BvbGljeVtYRlJNQV9NQVgmIzQzOzFdID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3MzItfTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3MzM6RVhQT1JUX1NZTUJPTF9HUEwoeGZybWFfcG9saWN5KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3MzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzQwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWEZSTSBDb2RlYmFzZSBmb3IgUG90ZW50aWFsIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBiYWNrIGludG8gdGhpcyBYRlJNIGNvZGUuIEkmIzM5O3ZlIGdvdCB0byBmaW5kIHNvbWUgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLCBhbmQgSSYjMzk7bSBzdGFydGluZyB3aXRoIGEgcXVpY2sgc3dlZXAgdG8gZXN0YWJsaXNoIGEgbWVudGFsIG1hcC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgYHhmcm1fdXNlci5jYCBkb2VzbiYjMzk7dCBleHBvc2UgYW55IGV4cG9ydGVkIGZ1bmN0aW9ucywgd2hpY2ggaXMgdHlwaWNhbCBmb3IgYSBtb2R1bGUgbGlrZSB0aGlzLgoKTGV0JiMzOTtzIHJldmlzaXQgYHhmcm1fYWRkX3NhYCwgcmVtZW1iZXJpbmcgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHhmcm1fZGlzcGF0Y2hgLiBIbW0sIHdoYXQgYWJvdXQgYHhmcm1fdXNlcl9yY3ZfbXNnYD8gVGhhdCBvbmUmIzM5O3Mgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIGRpcmVjdCBhcHBsaWNhYmlsaXR5LiBBbmQgYHhmcm1fbmV0bGlua19yY3ZgPyBBbHNvIHN0YXRpYy4gTW92aW5nIG9uLgoKRm9yIGtlZXBpbmcgdGhlIGNvZGUgc2ltcGxlLCBsZXQmIzM5O3MgbG9vayBmb3IgZnVuY3Rpb25zIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6IGB4ZnJtX25hdF9rZWVwYWxpdmUuY2AgLSBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBgeGZybV9zdGF0ZV93YWxrYCB3b3JraW5nIHRoZXJlLiBGb3IgYHhmcm1fb3V0cHV0LmNgLCBgeGZybV9vdXRwdXRgIHNlZW1zIHByb21pc2luZy4gRm9yIGB4ZnJtNl9pbnB1dC5jYCwgSSYjMzk7bGwgcHJvYmFibHkgdXNlIGB4ZnJtNl9pbnB1dF9hZGRyYC4gVGhlbiwgbGV0JiMzOTtzIGNvbnNpZGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGZvbGxvd2luZyBmaWxlczogYGVzcDQuY2AgLSBgZXNwX291dHB1dF90YWlsYCBzaG91bGQgYmUgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBGb3IgYGVzcDYuY2AgbGV0JiMzOTtzIHdvcmsgd2l0aCBgZXNwNl9vdXRwdXRfdGFpbGAsIGFuZCBgYWg2LmNgIC0gSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCB1c2UgYGFoNl9vdXRwdXRgIGZvciB0aGF0IG9uZS4KCk9rYXksIGJhY2sgdG8gYGVzcGludGNwLmNgLiBMZXQmIzM5O3MgcmUtZXhhbWluZSBgZXNwaW50Y3BfcmN2YC4gSXQmIzM5O3Mgc3RhdGljLiBGaW5lLCBub3cgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYGVzcGludGNwLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmM9MTcyPWludCBlc3BpbnRjcF9xdWV1ZV9vdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMTg1LX1cbm5ldC94ZnJtL2VzcGludGNwLmM6MTg2OkVYUE9SVF9TWU1CT0xfR1BMKGVzcGludGNwX3F1ZXVlX291dCk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTE4Ny1cbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTI3Mz1pbnQgZXNwaW50Y3BfcHVzaF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMzA0LX1cbm5ldC94ZnJtL2VzcGludGNwLmM6MzA1OkVYUE9SVF9TWU1CT0xfR1BMKGVzcGludGNwX3B1c2hfc2tiKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtMzA2LVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmM9NDMxPWJvb2wgdGNwX2lzX3VscF9lc3Aoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNDM0LX1cbm5ldC94ZnJtL2VzcGludGNwLmM6NDM1OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9pc191bHBfZXNwKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDM2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTMyMgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEltcGFjdCBvZiBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gYGVzcGludGNwX3F1ZXVlX291dGAgYW5kIGBlc3BpbnRjcF9wdXNoX3NrYmAgYXJlIGJvdGggZXhwb3J0ZWQgZnVuY3Rpb25zLCBhbmQgSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIHJlY2VudCBjaGFuZ2VzIGluIGBlc3BpbnRjcC5jYC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgZGlyZWN0IGNvbm5lY3Rpb24uIFRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgd2l0aGluIGBoYW5kbGVfZXNwYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGVzcGludGNwX3JjdmAsIGFuZCBgZXNwaW50Y3BfY2xvc2VgLCBjYWxsZWQgZnJvbSBgZXNwaW50Y3BfcHJvdC0mZ3Q7Y2xvc2VgLgoKTm93LCBgZXNwaW50Y3BfcXVldWVfb3V0YCBhbmQgYGVzcGludGNwX3B1c2hfc2tiYCBhcmUgYm90aCB1c2VkIGZvciBzZW5kaW5nIGRhdGEsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIHRoZXkmIzM5O3JlIGxpa2VseSByZWxhdGVkIHRvIG91dGJvdW5kIHRyYWZmaWMuIENvbnNpZGVyaW5nIHRoZSBjaGFuZ2VzLCBpdCBzZWVtcyB1bmxpa2VseSB0aGF0IGBlc3BpbnRjcF9xdWV1ZV9vdXRgIGlzICpkaXJlY3RseSogcmVsYXRlZCB0byBgaGFuZGxlX2VzcGAgb3IgYGVzcGludGNwX2Nsb3NlYCBpbiB0ZXJtcyBvZiBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCBhbHRob3VnaCB0aGV5JiMzOTtyZSBhbGwgZGVmaW5lZCB3aXRoaW4gdGhlIHNhbWUgc291cmNlIGZpbGUuIFRoZXJlZm9yZSwgZGVzcGl0ZSB0aGUgYXBwYXJlbnQgZGlzdGluY3Rpb24sIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSBgZXNwaW50Y3BfcXVldWVfb3V0YCBhbmQgYGVzcGludGNwX3B1c2hfc2tiYCBpbiBteSBhbmFseXNpcyB0byBydWxlIG91dCBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBmdW5jdGlvbiBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTI3OT1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NrX2Zpbmkoc3RydWN0IHNvY2tfYmhfbG9ja2VkIF9fcGVyY3B1ICpzb2Nrcylcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yODYtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyODc6dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTgwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgWEZSTSBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgWEZSTSBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gbm90aWNpbmcgaXMgdGhhdCBpdCYjMzk7cyBub3QgYWxsIHN0YXRpYyBmdW5jdGlvbnMuIE5vdyB0aGF0IEkgaGF2ZSB0aGlzIG9ic2VydmF0aW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIG5vdCBzdGF0aWMgYW5kIHdoeS4gCgpMZXQgbWUgY2hlY2sgYHhmcm1fc3RhdGVfY29uc3RydWN0YC4gWWVwLCB0aGF0JiMzOTtzIHN0YXRpYy4gSG1tLCBva2F5LCBub3Qgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZXJlLiBMZXQmIzM5O3MgbW92ZSBvbi4gSG93IGFib3V0IGB4ZnJtX2FkZF9zYWA/IEFsc28gc3RhdGljLiBPa2F5LCBzdGFydGluZyB0byBzZWUgYSBwYXR0ZXJuIGhlcmUsIGJ1dCBJIGhhdmVuJiMzOTt0IHF1aXRlIGZvdW5kIHRoZSBwaWVjZSBJIG5lZWQuIEFscmlnaHQsIGxldCBtZSB0cnkgb25lIG1vcmUgLSBgeGZybV91c2VyX3Jjdl9tc2dgLiBZZXAsIHRoYXQmIzM5O3Mgc3RhdGljIGFzIHdlbGwuIFRoaXMgaXMgcXVpdGUgc3RyYW5nZSwgaWYgSSBkaWRuJiMzOTt0IGtub3cgYmV0dGVyLCBJJiMzOTtkIHNheSB0aGF0IGV2ZXJ5dGhpbmcgaXMgc3RhdGljLgoKQWxyaWdodCwgc28gdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGlzIHRoZXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gYHhmcm1fdXNlci5jYD8gVGhlIGFzc3VtcHRpb24gdGhhdCBpdCYjMzk7cyBhbGwgc3RhdGljIHNlZW1zIHRvIGJlIGhvbGRpbmcgdHJ1ZSwgc28gbGV0IG1lIGRvIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgZmlsZSB0byB2ZXJpZnkgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzY1OT1jb25zdCBpbnQgeGZybV9tc2dfbWluW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2ODUtfTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2ODY6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9tc2dfbWluKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2ODctXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzY5MD1jb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB4ZnJtYV9wb2xpY3lbWEZSTUFfTUFYJiM0MzsxXSA9IHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzMyLX07XG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzMzOkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1hX3BvbGljeSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzM0LVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2NjA9c3RhdGljIHZvaWQgX19leGl0IHhmcm1fdXNlcl9leGl0KHZvaWQpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDY2NS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2NjY6bW9kdWxlX2luaXQoeGZybV91c2VyX2luaXQpO1xubmV0L3hmcm0veGZybV91c2VyLmM6NDY2Nzptb2R1bGVfZXhpdCh4ZnJtX3VzZXJfZXhpdCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjY4Ok1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtYRlJNIFVzZXIgaW50ZXJmYWNlXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2Njk6TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2NzA6TU9EVUxFX0FMSUFTX05FVF9QRl9QUk9UTyhQRl9ORVRMSU5LLCBORVRMSU5LX1hGUk0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc5NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBcHByb2FjaCB0byBBbmFseXppbmcgdGhlIENvZGViYXNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBsZXQmIzM5O3Mga2VlcCBpdCBlZmZpY2llbnQuJiMzNDsgVGhlIG5vdGUgYWJvdXQgbm8gbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYHhmcm1fdXNlci5jYCwgYmVzaWRlcyBpbml0L2V4aXQsIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBtZWFucyBJIGNhbiBwcm9iYWJseSBqdXN0IGlnbm9yZSB0aGF0IGZpbGUgYXMgYSBmb2N1cyBwb2ludCwgYXQgbGVhc3QgZm9yIG5vdy4gSSBjYW4gZWl0aGVyIHVzZSBgeGZybV9zdGF0ZV93YWxrYCB3aGljaCByZXNpZGVzIGluIGB4ZnJtX3N0YXRlLmNgLCBvciBqdXN0IGF2b2lkIGZvY3VzaW5nIHRoZXJlIGF0IGFsbC4KCk5vdywgbGV0JiMzOTtzIG1vdmUgZm9yd2FyZCBhbmQgdHJ5IHRvIGlkZW50aWZ5IHRoZSByZWFsIGZvY2FsIHBvaW50cy4gQmFzZWQgb24gdGhlIHRhc2sgaW4gZnJvbnQgb2YgbWUsIEkgbmVlZCB0byBsaXN0IHRoZSBmb2N1cyBzeW1ib2xzLiBJJiMzOTt2ZSBjb21waWxlZCB0aGlzIGxpc3Q6CgoqICAgYGVzcF9vdXRwdXRfdGFpbGAKKiAgIGBlc3A2X291dHB1dF90YWlsYAoqICAgYHhmcm02X2lucHV0X2FkZHJgCiogICBgeGZybV9vdXRwdXRgCiogICBgZXNwaW50Y3BfcXVldWVfb3V0YAoqICAgYGVzcGludGNwX3B1c2hfc2tiYAoqICAgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYAoKT2theSwgbm93IGxldCYjMzk7cyBzZWUgaWYgdGhpcyBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGlzIGFjdHVhbGx5IGV4cG9zZWQuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMyODIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgVmFyaWFibGUgVmlzaWJpbGl0eSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgYSBwYXJ0aWN1bGFyIHZhcmlhYmxlIGlzbiYjMzk7dCBiZWhhdmluZyBhcyBleHBlY3RlZC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vdCogbWFya2VkIGFzIGV4cG9ydGVkLiBUaGF0IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBzY29wZWQgdG8gaXRzIGN1cnJlbnQgbW9kdWxlLCB3aGljaCBpcyB0aGUgaW1tZWRpYXRlIGlzc3VlLiBIb3dldmVyLCB3aGlsZSBpdCYjMzk7cyBub24tc3RhdGljLCBpdCBjYW4gc3RpbGwgZXhpc3QgYXQgdGhlIGZpbGUgc2NvcGUuCgpUaGVuIHRoZSBxdWVzdGlvbiBiZWNvbWVzLCBpcyBgYWg2X291dHB1dGAgZXhwb3J0ZWQ/IENoZWNraW5nIGZvciBleHBvcnQgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWNhdXNlIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhhdCYjMzk7cyB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS4gSWYgaXQgaXMsIHRoZW4gdGhlIHNjb3BlIG9mIGl0cyB1c2Ugd2lsbCBoYXZlIHRvIGJlIGluc3BlY3RlZCBmdXJ0aGVyLiBPdGhlcndpc2UsIHRoZXJlIG1heSBiZSBhbiBvcHBvcnR1bml0eSBmb3IgYSBuYW1lc3BhY2UgY29sbGlzaW9uLiBFaXRoZXIgd2F5LCBpdCYjMzk7cyBzb21ldGhpbmcgdGhhdCBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiphaDZfb3V0cHV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1NDIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgdGhpbmdzIGZlZWwgc3RhZ25hbnQsIGEgYml0IGZyb3plbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IHNvbWV0aGluZyYjMzk7cyBub3QgbW92aW5nIGFzIGl0IHNob3VsZC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBpbnN0aW5jdCBpcyB0byBhc3N1bWUgdGhhdCB0aGUgcHJvYmxlbSBjb3VsZCBiZSBkdWUgdG8gc3RhdGljIGZ1bmN0aW9ucyBvciB2YXJpYWJsZXMuIE15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBgYWg2LmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSwgY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgYSBxdWljayB3aW4sIGhvcGVmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWg2LmM9ODIxPXN0YXRpYyB2b2lkIF9fZXhpdCBhaDZfZmluaSh2b2lkKVxuLS1cbm5ldC9pcHY2L2FoNi5jLTgyOC1cbm5ldC9pcHY2L2FoNi5jOjgyOTptb2R1bGVfaW5pdChhaDZfaW5pdCk7XG5uZXQvaXB2Ni9haDYuYzo4MzA6bW9kdWxlX2V4aXQoYWg2X2ZpbmkpO1xubmV0L2lwdjYvYWg2LmMtODMxLVxubmV0L2lwdjYvYWg2LmM6ODMyOk1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtJUHY2IEFIIHRyYW5zZm9ybWF0aW9uIGhlbHBlcnNcJiMzNDspO1xubmV0L2lwdjYvYWg2LmM6ODMzOk1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5uZXQvaXB2Ni9haDYuYzo4MzQ6TU9EVUxFX0FMSUFTX1hGUk1fVFlQRShBRl9JTkVUNiwgWEZSTV9QUk9UT19BSCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzOTE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFU1AvQUggRnVuY3Rpb25hbGl0eSBpbiBgYWg2LmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYWg2LmNgIGFuZCBpbW1lZGlhdGVseSBub3RpY2luZyBhIGtleSBjb25zdHJhaW50OiBhc2lkZSBmcm9tIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZXhpdCBmdW5jdGlvbnMsIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIGFueSBzdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LCBhcyBpdCBnaXZlcyB1cyBhIGNsZWFyIGxpc3Qgb2Ygd2hhdCB3ZSAqY2FuKiB1dGlsaXplLiBTcGVjaWZpY2FsbHksIEkgc2VlIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgcmVsZXZhbnQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgaW5jbHVkaW5nOiBgZXNwX291dHB1dF90YWlsYCwgYGVzcDZfb3V0cHV0X3RhaWxgLCBgeGZybTZfaW5wdXRfYWRkcmAsIGB4ZnJtX291dHB1dGAsIGBlc3BpbnRjcF9xdWV1ZV9vdXRgLCBgZXNwaW50Y3BfcHVzaF9za2JgLCBhbmQgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gVGhlc2UgYXJlIHRoZSB0b29scyBhdCBvdXIgZGlzcG9zYWwuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGVuc3VyZSBvdXIgY29uZmlndXJhdGlvbnMgYXJlIHNldCBhcHByb3ByaWF0ZWx5IHRvIGVuYWJsZSB0aGUgcmVxdWlyZWQgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgWEZSTWAsIGBYRlJNX1VTRVJgLCBgSU5FVF9FU1BgLCBgSU5FVDZfRVNQYCwgYW5kIGBJTkVUNl9BSGAgYXJlIGFsbCBlbmFibGVkIGFuZCBwbGF5aW5nIG5pY2VseSB0b2dldGhlci4gQWxzbyBJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIGBYRlJNX0VTUElOVENQYCBzaW5jZSB0aGF0JiMzOTtzIGRpcmVjdGx5IHRpZWQgdG8gYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLCB3aGljaCBpcyBsaWtlbHkgdGhlIGFyZWEgb2YgZm9jdXMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgb3Igbm90IGBJTkVUX0VTUElOVENQYCBhbmQgYElORVQ2X0VTUElOVENQYCBhcmUgcHJvcGVybHkgZW5hYmxlZCBhbmQgY29uZmlndXJlZCwgYmVjYXVzZSB0aGV5IHNlZW0gY3JpdGljYWwgZm9yIHRoZSBFU1AvVENQIGZ1bmN0aW9uYWxpdHkgdGhhdCBJJiMzOTttIHRhcmdldGluZy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aG9zZSB0d28gYXJlIHNldCBjb3JyZWN0bHksIHRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRVNQSU5UQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODEtXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXHRib29sIFwmIzM0O0lQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDU5NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkVTUElOVENQIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIHVzZXItZmFjaW5nIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cy4gQnV0IGxldCYjMzk7cyBiZSBwcmFnbWF0aWMgaGVyZTsgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcuIEl04oCZcyB0aGUgdXN1YWwgZGFuY2UsIG1ha2luZyBzdXJlIHRoZSB1c2VyLXZpc2libGUgc2V0dGluZ3MgYXJlIGNvcnJlY3RseSBleHBvc2VkIGFuZCBiZWhhdmUgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGRyaWxsIGRvd24uIEkmIzM5O2xsIGZvY3VzIG15IGltbWVkaWF0ZSBhdHRlbnRpb24gb24gYElORVQ2X0VTUElOVENQYCBzcGVjaWZpY2FsbHkgdG8gZW5zdXJlIHRoYXQgdGhlIElQdjYgdmFyaWFudCBpcyBiZWhhdmluZyBhY2NvcmRpbmcgdG8gbXkgZXhwZWN0YXRpb25zLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3MgcGxheWluZyBuaWNlbHkgd2l0aCB0aGUgSVB2NCBpbXBsZW1lbnRhdGlvbi4gTmVlZCBhIGJhc2VsaW5lLCBhZnRlciBhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUNl9FU1BJTlRDUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTEtXHRib29sIFwmIzM0O0lQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0OTMzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogODQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBTeW1ib2xzIGZvciBJUHNlYyBNb2R1bGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIElQc2VjIGNvZGUgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYW5kIGtleSBmdW5jdGlvbiBzeW1ib2xzLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGNvbmZpZ3MgaWRlbnRpZmllZC4gV2UmIzM5O3ZlIGdvdCBgWEZSTWAsIGBYRlJNX1VTRVJgLCBgSU5FVF9FU1BgLCBgSU5FVDZfRVNQYCwgYElORVQ2X0FIYCwgYElORVRfRVNQSU5UQ1BgLCBhbmQgYElORVQ2X0VTUElOVENQYC4gV2UgYWxyZWFkeSBrbm93IGBYRlJNX05BVF9LRUVQQUxJVkVgIGlzbiYjMzk7dCBhIGRpcmVjdCBjb25maWcsIGJ1dCBpdCYjMzk7cyBjb21waWxlZCB3aXRoIGBDT05GSUdfWEZSTWAgZW5hYmxlZCwgc28gdGhhdCBtYWtlcyBzZW5zZS4KCk5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBob3cgdGhlc2UgY29uZmlncyByZWxhdGUgdG8gdGhlIHNvdXJjZSBmaWxlczogYGVzcDQuY2AgbWFwcyB0byBgSU5FVF9FU1BgLCBgYWg2LmNgIHRvIGBJTkVUNl9BSGAsIGBlc3A2LmNgIHRvIGBJTkVUNl9FU1BgLCBgeGZybTZfaW5wdXQuY2AgdG8gYFhGUk1gICh2aWEgdGhlIGlwdjYtJChDT05GSUdfWEZSTSkgbGluZSksIGBlc3BpbnRjcC5jYCBnZXRzIGBYRlJNX0VTUElOVENQYCAoc2VsZWN0ZWQgYnkgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgKSwgYHhmcm1fbmF0X2tlZXBhbGl2ZS5jYCB0byBgWEZSTWAgYW5kIGB4ZnJtX291dHB1dC5jYCBhbmQgYHhmcm1fdXNlci5jYCB0byBgWEZSTV9VU0VSYAoKVGhlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBwbGFjZSBhbmQgYWNjZXNzaWJsZS4gTm93LCBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb24gc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgYW5hbHlzaXMuIEkmIzM5O3ZlIGNvbXBpbGVkIHRoZSBmb2xsb3dpbmcgbGlzdDogYGVzcF9vdXRwdXRfdGFpbGAsIGBlc3A2X291dHB1dF90YWlsYCwgYHhmcm02X2lucHV0X2FkZHJgLCBgeGZybV9vdXRwdXRgLCBgZXNwaW50Y3BfcXVldWVfb3V0YCwgYGVzcGludGNwX3B1c2hfc2tiYCwgYW5kIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhlc2UgYXJlIGdvb2QgZm9jdXMgc3ltYm9scy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYHhmcm1fbmF0X2tlZXBhbGl2ZS5jYC4gSSBjb25zaWRlcmVkIGB4ZnJtX3N0YXRlX3dhbGtgLCBidXQgdGhhdCYjMzk7cyBpbiBgeGZybV9zdGF0ZS5jYCBhbmQgd2FzbiYjMzk7dCBjaGFuZ2VkLiBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgICppcyogaW4gYHhmcm1fbmF0X2tlZXBhbGl2ZS5jYCBhbmQgaXMgbm9uLXN0YXRpYywgc28gaXQgbG9va3MgcHJvbWlzaW5nLgoKSSYjMzk7bGwgY2hlY2sgYHhmcm1fb3V0cHV0X3Jlc3VtZWAgdmVyc3VzIGB4ZnJtX291dHB1dGAuIEJvdGggYHhmcm1fb3V0cHV0X3Jlc3VtZWAgYW5kIGB4ZnJtX291dHB1dGAgYXJlIGV4cG9ydGVkIGFuZCBub24tc3RhdGljIHNvIEkgaGF2ZSBhIGNob2ljZS4KCkFuZCBgeGZybTZfcmN2YCB2cyBgeGZybTZfaW5wdXRfYWRkcmAsIHNhbWUgdGhpbmcgLSBib3RoIGFyZSBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgSSBjYW4gdXNlIGVpdGhlci4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgZXhwb3J0IHN0YXR1cyBvZiB0aGUgb3RoZXIgZm9jdXMgc3ltYm9scy4gT2theSwgYGVzcF9vdXRwdXRfdGFpbGAsIGFuZCBgZXNwNl9vdXRwdXRfdGFpbGAgYXJlIGJvdGggZXhwb3J0ZWQuIGBlc3BpbnRjcF9xdWV1ZV9vdXRgIGFuZCBgZXNwaW50Y3BfcHVzaF9za2JgIGFyZSBleHBvcnRlZCB0b28uIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgaXMgKm5vdCogZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBub24tc3RhdGljLCB3aGljaCBpcyBnb29kIGVub3VnaC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBjaGFpbiB0byBzZWUgd2hlcmUgaXQgZ2V0cyBjYWxsZWQgZnJvbSwgaXQgaXMgbm90IHVzZWQgaW4gYW55IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgYWxzbyBub3RpY2VkIHRoYXQgdGhlcmUgYXJlIG5vdCBhbnkgbm9uLXN0YXRpYyBzeW1ib2xzIGluIGB4ZnJtX3VzZXIuY2AuCgpPa2F5LCBzbyB0aGUgZmluYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHJlbWFpbnM6IGBlc3Bfb3V0cHV0X3RhaWxgLCBgZXNwNl9vdXRwdXRfdGFpbGAsIGB4ZnJtNl9pbnB1dF9hZGRyYCwgYHhmcm1fb3V0cHV0YCwgYGVzcGludGNwX3F1ZXVlX291dGAsIGBlc3BpbnRjcF9wdXNoX3NrYmAsIGFuZCBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLiBOb3csIEkmIzM5O2xsIHRyYWNlIHRocm91Z2ggdGhlIGNvZGViYXNlIHRvIHNlZSBob3cgdGhlc2UgcmVsYXRlIGFuZCwgc3BlY2lmaWNhbGx5LCBpZiBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZnJtLmg9MjM3ND1pbnQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9maW5pKHN0cnVjdCBuZXQgKm5ldCk7XG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3NTp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMzc2LVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTI3OT1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NrX2Zpbmkoc3RydWN0IHNvY2tfYmhfbG9ja2VkIF9fcGVyY3B1ICpzb2Nrcylcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yODYtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyODc6dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI4OC17XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTgxMT1pbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtODMyLVx0XHRuZXQtXHUwMDNleGZybS5zdGF0ZV9udW0tLTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo4MzM6XHRcdHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHgpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTgzNC1cdFx0c3Bpbl91bmxvY2soXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTcyMz1zdGF0aWMgdm9pZCBfX3hmcm1fc3RhdGVfaW5zZXJ0KHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNzY3LVx0eGZybV9oYXNoX2dyb3dfY2hlY2sobmV0LCB4LVx1MDAzZWJ5ZHN0Lm5leHQgIT0gTlVMTCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTc2ODpcdHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHgpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE3NjktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcxMzEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBkaXJlY3QgcmVmbGVjdGlvbiBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgWEZSTSBDb2RlYmFzZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBwb2ludHMgdG8gYSBjYWxsIGZyb20gYHhmcm1fc3RhdGUuY2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGJyb2FkZXIgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHhmcm1fc3RhdGVfd2Fsa2AgaXMgYWN0dWFsbHkgaW52b2tlZC4gVGhpcyBpcyB3aGVyZSBJIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyB0byBzZWUgd2hlcmUgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBnaXZlIG1lIHRoZSBpbnNpZ2h0cyB0aGF0IEkgbmVlZC4gVGhpcyBpcyBob3cgSSBidWlsZCB0aGUgbWVudGFsIG1vZGVsIHRvIHNvbHZlIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc3RhdGVfd2FsayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZnJtLmgtMTIzLVxuaW5jbHVkZS9uZXQveGZybS5oOjEyNDpzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrIHtcbmluY2x1ZGUvbmV0L3hmcm0uaC0xMjUtXHRzdHJ1Y3QgbGlzdF9oZWFkXHRhbGw7XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTE5MD1zdHJ1Y3QgeGZybV9zdGF0ZSB7XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oLTIxNy1cdC8qIEtleSBtYW5hZ2VyIGJpdHMgKi9cbmluY2x1ZGUvbmV0L3hmcm0uaDoyMTg6XHRzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrXHRrbTtcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMTktXG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTE2OTU9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fc3lzY3RsX2Zpbmkoc3RydWN0IG5ldCAqbmV0KVxuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaC0xNjk5LVxuaW5jbHVkZS9uZXQveGZybS5oOjE3MDA6dm9pZCB4ZnJtX3N0YXRlX3dhbGtfaW5pdChzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLCB1OCBwcm90byxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNzAxLVx0XHRcdCAgc3RydWN0IHhmcm1fYWRkcmVzc19maWx0ZXIgKmZpbHRlcik7XG5pbmNsdWRlL25ldC94ZnJtLmg6MTcwMjppbnQgeGZybV9zdGF0ZV93YWxrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsayxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNzAzLVx0XHQgICAgaW50ICgqZnVuYykoc3RydWN0IHhmcm1fc3RhdGUgKiwgaW50LCB2b2lkKiksIHZvaWQgKik7XG5pbmNsdWRlL25ldC94ZnJtLmg6MTcwNDp2b2lkIHhmcm1fc3RhdGVfd2Fsa19kb25lKHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHN0cnVjdCBuZXQgKm5ldCk7XG5pbmNsdWRlL25ldC94ZnJtLmgtMTcwNS1zdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQpO1xuLS1cbm5ldC9rZXkvYWZfa2V5LmM9NDU9c3RydWN0IHBma2V5X3NvY2sge1xuLS1cbm5ldC9rZXkvYWZfa2V5LmMtNTctXHRcdFx0c3RydWN0IHhmcm1fcG9saWN5X3dhbGtcdHBvbGljeTtcbm5ldC9rZXkvYWZfa2V5LmM6NTg6XHRcdFx0c3RydWN0IHhmcm1fc3RhdGVfd2Fsa1x0c3RhdGU7XG5uZXQva2V5L2FmX2tleS5jLTU5LVx0XHR9IHU7XG4tLVxubmV0L2tleS9hZl9rZXkuYz0xODM0PXN0YXRpYyBpbnQgcGZrZXlfZHVtcF9zYShzdHJ1Y3QgcGZrZXlfc29jayAqcGZrKVxuLS1cbm5ldC9rZXkvYWZfa2V5LmMtMTgzNi1cdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KFx1MDAyNnBmay1cdTAwM2Vzayk7XG5uZXQva2V5L2FmX2tleS5jOjE4Mzc6XHRyZXR1cm4geGZybV9zdGF0ZV93YWxrKG5ldCwgXHUwMDI2cGZrLVx1MDAzZWR1bXAudS5zdGF0ZSwgZHVtcF9zYSwgKHZvaWQgKikgcGZrKTtcbm5ldC9rZXkvYWZfa2V5LmMtMTgzOC19XG4tLVxubmV0L2tleS9hZl9rZXkuYz0xODQwPXN0YXRpYyB2b2lkIHBma2V5X2R1bXBfc2FfZG9uZShzdHJ1Y3QgcGZrZXlfc29jayAqcGZrKVxuLS1cbm5ldC9rZXkvYWZfa2V5LmMtMTg0My1cbm5ldC9rZXkvYWZfa2V5LmM6MTg0NDpcdHhmcm1fc3RhdGVfd2Fsa19kb25lKFx1MDAyNnBmay1cdTAwM2VkdW1wLnUuc3RhdGUsIG5ldCk7XG5uZXQva2V5L2FmX2tleS5jLTE4NDUtfVxuLS1cbm5ldC9rZXkvYWZfa2V5LmM9MTg0Nz1zdGF0aWMgaW50IHBma2V5X2R1bXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3Qgc2FkYl9tc2cgKmhkciwgdm9pZCAqIGNvbnN0ICpleHRfaGRycylcbi0tXG5uZXQva2V5L2FmX2tleS5jLTE4OTMtXHRwZmstXHUwMDNlZHVtcC5kb25lID0gcGZrZXlfZHVtcF9zYV9kb25lO1xubmV0L2tleS9hZl9rZXkuYzoxODk0Olx0eGZybV9zdGF0ZV93YWxrX2luaXQoXHUwMDI2cGZrLVx1MDAzZWR1bXAudS5zdGF0ZSwgcHJvdG8sIGZpbHRlcik7XG5uZXQva2V5L2FmX2tleS5jLTE4OTUtXHRtdXRleF91bmxvY2soXHUwMDI2cGZrLVx1MDAzZWR1bXBfbG9jayk7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MjI3PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjMwLVx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4O1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjMxOlx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjMyLVx0c3RydWN0IG5ldCAqbmV0O1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIzOS1cdG5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0LCB4ZnJtLm5hdF9rZWVwYWxpdmVfd29yay53b3JrKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI0MDpcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFx1MDAyNndhbGssIElQUFJPVE9fRVNQLCBOVUxMKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI0MTpcdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCBcdTAwMjZjdHgpO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQyOlx0eGZybV9zdGF0ZV93YWxrX2RvbmUoXHUwMDI2d2FsaywgbmV0KTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0My1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGF0ZSwgdG1wLCBcdTAwMjZjdHguc3RhdGVzLCBsaXN0KSB7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTE2ODc9c3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2J5c3BpKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIHNwaSxcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTY5MC1cdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE2OTE6XHRzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3O1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE2OTItXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTI2ODQ9c3RhdGljIGJvb2wgX194ZnJtX3N0YXRlX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwMC1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzAxOmludCB4ZnJtX3N0YXRlX3dhbGsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MDItXHRcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgeGZybV9zdGF0ZSAqLCBpbnQsIHZvaWQqKSxcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwNS1cdHN0cnVjdCB4ZnJtX3N0YXRlICpzdGF0ZTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzA2Olx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayAqeDtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzA3LVx0aW50IGVyciA9IDA7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MTMtXHRpZiAobGlzdF9lbXB0eShcdTAwMjZ3YWxrLVx1MDAzZWFsbCkpXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjcxNDpcdFx0eCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2bmV0LVx1MDAzZXhmcm0uc3RhdGVfYWxsLCBzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrLCBhbGwpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MTUtXHRlbHNlXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjcxNjpcdFx0eCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2d2Fsay1cdTAwM2VhbGwsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGssIGFsbCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxNy1cdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbSh4LCBcdTAwMjZuZXQtXHUwMDNleGZybS5zdGF0ZV9hbGwsIGFsbCkge1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzQwLX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzQxOkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV93YWxrKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzQyLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NDM6dm9pZCB4ZnJtX3N0YXRlX3dhbGtfaW5pdChzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLCB1OCBwcm90byxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzQ0LVx0XHRcdCAgc3RydWN0IHhmcm1fYWRkcmVzc19maWx0ZXIgKmZpbHRlcilcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc1MS19XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc1MjpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfd2Fsa19pbml0KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzUzLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NTQ6dm9pZCB4ZnJtX3N0YXRlX3dhbGtfZG9uZShzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLCBzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc1NS17XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NjQtfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NjU6RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3dhbGtfZG9uZSk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc2Ni1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xNTM1PXN0YXRpYyBpbnQgeGZybV9kdW1wX3NhX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L3hmcm0veGZybV91c2VyLmMtMTUzNi17XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTM3Olx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsayA9IChzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICopIFx1MDAyNmNiLVx1MDAzZWFyZ3NbMV07XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTM4LVx0c3RydWN0IHNvY2sgKnNrID0gY2ItXHUwMDNlc2tiLVx1MDAzZXNrO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1NDEtXHRpZiAoY2ItXHUwMDNlYXJnc1swXSlcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1NDI6XHRcdHhmcm1fc3RhdGVfd2Fsa19kb25lKHdhbGssIG5ldCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTQzLVx0cmV0dXJuIDA7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MTU0Nj1zdGF0aWMgaW50IHhmcm1fZHVtcF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTU0OC1cdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTQ5Olx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsayA9IChzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICopIFx1MDAyNmNiLVx1MDAzZWFyZ3NbMV07XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTUwLVx0c3RydWN0IHhmcm1fZHVtcF9pbmZvIGluZm87XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTUxLVxubmV0L3hmcm0veGZybV91c2VyLmM6MTU1MjpcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHhmcm1fc3RhdGVfd2FsaykgXHUwMDNlXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTUzLVx0XHQgICAgIHNpemVvZihjYi1cdTAwM2VhcmdzKSAtIHNpemVvZihjYi1cdTAwM2VhcmdzWzBdKSk7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTU4OS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1OTA6XHRcdHhmcm1fc3RhdGVfd2Fsa19pbml0KHdhbGssIHByb3RvLCBmaWx0ZXIpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMTU5MS1cdFx0Y2ItXHUwMDNlYXJnc1swXSA9IDE7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTU5My1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1OTQ6XHQodm9pZCkgeGZybV9zdGF0ZV93YWxrKG5ldCwgd2FsaywgZHVtcF9vbmVfc3RhdGUsIFx1MDAyNmluZm8pO1xubmV0L3hmcm0veGZybV91c2VyLmMtMTU5NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDY3CgkJCQkJCQlvdXRwdXQ6IDI2MgoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBYRlJNIEtlcm5lbCBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgeGZybV9zdGF0ZV93YWxrYCBpcyBpbmRlZWQgZXhwb3J0ZWQgYW5kIHV0aWxpemVkIHdpdGhpbiBgeGZybV9uYXRfa2VlcGFsaXZlLmNgIGFuZCBgeGZybV91c2VyLmNgLiBFeGNlbGxlbnQsIHRoYXQgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgYXMgYSBzeW1ib2wgdG8gaG9uZSBpbiBvbi4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHJ1bmRvd24gb2YgdGhlIGZvY3VzIHN5bWJvbHMgYWdhaW46IGBlc3Bfb3V0cHV0X3RhaWxgLCBgZXNwNl9vdXRwdXRfdGFpbGAsIGB4ZnJtNl9pbnB1dF9hZGRyYCwgYHhmcm1fb3V0cHV0YCwgYGVzcGludGNwX3F1ZXVlX291dGAsIGBlc3BpbnRjcF9wdXNoX3NrYmAsIGFuZCBvZiBjb3Vyc2UsIHRoZSBwaXZvdGFsIGB4ZnJtX3N0YXRlX3dhbGtgLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgWEZSTWAsIGBYRlJNX1VTRVJgLCBgSU5FVF9FU1BgLCBgSU5FVDZfRVNQYCwgYElORVQ2X0FIYCwgYElORVRfRVNQSU5UQ1BgLCBhbmQgYElORVQ2X0VTUElOVENQYC4KCkFscmlnaHQsIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBDT05GSUdfWEZSTV9FU1BJTlRDUGAgaXMgc2VsZWN0ZWQgd2hlbiBlaXRoZXIgYElORVRfRVNQSU5UQ1BgIG9yIGBJTkVUNl9FU1BJTlRDUGAgYXJlIGVuYWJsZWQuIEdvb2QuIEkgd2FzIGN1cmlvdXMgaWYgdGhlcmUgd2VyZSBhIGBDT05GSUdfWEZSTV9OQVRfS0VFUEFMSVZFYCwgYnV0IHRoYXQgZG9lc24mIzM5O3QgZXhpc3QgZGlyZWN0bHkuIEluc3RlYWQsIGB4ZnJtX25hdF9rZWVwYWxpdmUuY2Agc2VlbXMgdG8gYmUgY29tcGlsZWQgd2hlbiBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQuIEFuZCwgYXMgZXhwZWN0ZWQsIGBDT05GSUdfWEZSTV9VU0VSYCBpcyB0aGUga2V5IGZvciBgeGZybV91c2VyLmNgLgoKSSBiZWxpZXZlIHRoYXQgd3JhcHMgdXAgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIHRoZSBrZXkgZWxlbWVudHMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gSSB0aGluayB0aGlzIGFzc2Vzc21lbnQgaXMgY29tcGxldGUgYW5kIHJlZmxlY3RzIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgWEZSTSBzdWJzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHRvIHRoZSBpZGVudGlmaWVkIHN5bWJvbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTA0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTSYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0FIJiMzNDssCiAgICAmIzM0O0lORVRfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlc3Bfb3V0cHV0X3RhaWwmIzM0OywKICAgICYjMzQ7ZXNwNl9vdXRwdXRfdGFpbCYjMzQ7LAogICAgJiMzNDt4ZnJtNl9pbnB1dF9hZGRyJiMzNDssCiAgICAmIzM0O3hmcm1fb3V0cHV0JiMzNDssCiAgICAmIzM0O2VzcGludGNwX3F1ZXVlX291dCYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9wdXNoX3NrYiYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX3dhbGsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmaWxlcyBpbiB0aGUgSVBzZWMgKFhGUk0sIEVTUCwgQUgpIHN1YnN5c3RlbS4gSXQgYWRkcyBjaGVja3MgZm9yIHplcm9jb3B5IG1hbmFnZWQgZnJhZ21lbnRzIGluIEVTUCwgZml4ZXMgYWRkcmVzcyByZWFycmFuZ2VtZW50IGluIEFINiwgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gWEZSTTYgaW5wdXQsIGFkZHMgYSBjaGVjayBmb3IgbWlzc2luZyBkZXZpY2UgaW4gRVNQLWluLVRDUCwgY2hhbmdlcyB0aGUgTkFUIGtlZXBhbGl2ZSB3b3JrcXVldWUgdG8gY29sbGVjdCBzdGF0ZXMgYmVmb3JlIHByb2Nlc3NpbmcgdGhlbSwgcmVtb3ZlcyBhIGRvdWJsZSBmcmVlIGluIFhGUk0gb3V0cHV0LCBhbmQgZml4ZXMgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gWEZSTSB1c2VyLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsLCByZWFjaGFibGUsIGFuZCBhZmZlY3QgY29yZSBuZXR3b3JraW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfQUgmIzM0OywKICAgICYjMzQ7SU5FVF9FU1BJTlRDUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BJTlRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VzcF9vdXRwdXRfdGFpbCYjMzQ7LAogICAgJiMzNDtlc3A2X291dHB1dF90YWlsJiMzNDssCiAgICAmIzM0O3hmcm02X2lucHV0X2FkZHImIzM0OywKICAgICYjMzQ7eGZybV9vdXRwdXQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3BfcXVldWVfb3V0JiMzNDssCiAgICAmIzM0O2VzcGludGNwX3B1c2hfc2tiJiMzNDssCiAgICAmIzM0O3hmcm1fc3RhdGVfd2FsayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzIGluIHRoZSBJUHNlYyAoWEZSTSwgRVNQLCBBSCkgc3Vic3lzdGVtLiBJdCBhZGRzIGNoZWNrcyBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFnbWVudHMgaW4gRVNQLCBmaXhlcyBhZGRyZXNzIHJlYXJyYW5nZW1lbnQgaW4gQUg2LCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBYRlJNNiBpbnB1dCwgYWRkcyBhIGNoZWNrIGZvciBtaXNzaW5nIGRldmljZSBpbiBFU1AtaW4tVENQLCBjaGFuZ2VzIHRoZSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSB0byBjb2xsZWN0IHN0YXRlcyBiZWZvcmUgcHJvY2Vzc2luZyB0aGVtLCByZW1vdmVzIGEgZG91YmxlIGZyZWUgaW4gWEZSTSBvdXRwdXQsIGFuZCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBYRlJNIHVzZXIuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNDowOC43NzUwMTUxODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDgzMjUxMTU3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9BSFwiLFxuICAgIFwiSU5FVF9FU1BJTlRDUFwiLFxuICAgIFwiSU5FVDZfRVNQSU5UQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3Bfb3V0cHV0X3RhaWxcIixcbiAgICBcImVzcDZfb3V0cHV0X3RhaWxcIixcbiAgICBcInhmcm02X2lucHV0X2FkZHJcIixcbiAgICBcInhmcm1fb3V0cHV0XCIsXG4gICAgXCJlc3BpbnRjcF9xdWV1ZV9vdXRcIixcbiAgICBcImVzcGludGNwX3B1c2hfc2tiXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX3dhbGtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzIGluIHRoZSBJUHNlYyAoWEZSTSwgRVNQLCBBSCkgc3Vic3lzdGVtLiBJdCBhZGRzIGNoZWNrcyBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFnbWVudHMgaW4gRVNQLCBmaXhlcyBhZGRyZXNzIHJlYXJyYW5nZW1lbnQgaW4gQUg2LCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBYRlJNNiBpbnB1dCwgYWRkcyBhIGNoZWNrIGZvciBtaXNzaW5nIGRldmljZSBpbiBFU1AtaW4tVENQLCBjaGFuZ2VzIHRoZSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSB0byBjb2xsZWN0IHN0YXRlcyBiZWZvcmUgcHJvY2Vzc2luZyB0aGVtLCByZW1vdmVzIGEgZG91YmxlIGZyZWUgaW4gWEZSTSBvdXRwdXQsIGFuZCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBYRlJNIHVzZXIuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjA4Ljc3NTAyMTU3OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzMTEyNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjAzOWE1OTQyYjY2ZmU1NzM3MmY5NjE5MTQzYjA4OGZmNjBiYmFkZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAxMzozNDowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmNcXG5pbmRleCBkZmM4MWVlOTY5YWUwLi5mYTE3MTBlMjdlNTA1IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2VzcDQuY1xcbisrKyBiL25ldC9pcHY0L2VzcDQuY1xcbkBAIC0xMDQsNiArMTA0LDEzIEBAIHN0YXRpYyB2b2lkIGVzcF9zc2dfdW5yZWYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHZvaWQgKnRtcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxO1xcbiBcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xcbiBcXG4rXFx0LyogTWFuYWdlZCBmcmFncyBhcmUgb3duZWQgYnkgdGhlIHplcm9jb3B5IHVidWY7IHRoZSBza2IgaG9sZHMgbm9cXG4rXFx0ICogcGVyLWZyYWcgcGFnZSByZWZlcmVuY2UsIHNvIHdlIG11c3Qgbm90IGRyb3Agb25lIGhlcmUuICBNaXJyb3JzXFxuK1xcdCAqIHRoZSBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBoYW5kbGluZyBpbiBza2JfcmVsZWFzZV9kYXRhKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2tiX3pjb3B5X21hbmFnZWQoc2tiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKHgtXFx1MDAzZXByb3BzLmZsYWdzIFxcdTAwMjYgWEZSTV9TVEFURV9FU04pXFxuIFxcdFxcdGV4dHJhbGVuICs9IHNpemVvZihzdHJ1Y3QgZXNwX291dHB1dF9leHRyYSk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9haDYuYyBiL25ldC9pcHY2L2FoNi5jXFxuaW5kZXggNzZmN2EyZGU5MTA4ZS4uYzk2ZjdlMGQwYTQ4MSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9haDYuY1xcbisrKyBiL25ldC9pcHY2L2FoNi5jXFxuQEAgLTIzMiwyNiArMjMyLDI4IEBAIHN0YXRpYyB2b2lkIGlwdjZfcmVhcnJhbmdlX2Rlc3RvcHQoc3RydWN0IGlwdjZoZHIgKmlwaCwgc3RydWN0IGlwdjZfb3B0X2hkciAqZGVzXFxuICAqXFx0UmVhcnJhbmdlIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIEBpcGggYW5kIHRoZSBhZGRyZXNzZXMgaW4gQHJ0aGRyXFxuICAqXFx0c28gdGhhdCB0aGV5IGFwcGVhciBpbiB0aGUgb3JkZXIgdGhleSB3aWxsIGF0IHRoZSBmaW5hbCBkZXN0aW5hdGlvbi5cXG4gICpcXHRTZWUgQXBwZW5kaXggQTIgb2YgUkZDIDI0MDIgZm9yIGRldGFpbHMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIHNlZ21lbnRzX2xlZnQgZXhjZWVkcyB0aGUgbnVtYmVyIG9mXFxuKyAqIGFkZHJlc3NlcyBkZXNjcmliZWQgYnkgaGRybGVuLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgaXB2Nl9yZWFycmFuZ2VfcnRoZHIoc3RydWN0IGlwdjZoZHIgKmlwaCwgc3RydWN0IGlwdjZfcnRfaGRyICpydGhkcilcXG4rc3RhdGljIGludCBpcHY2X3JlYXJyYW5nZV9ydGhkcihzdHJ1Y3QgaXB2NmhkciAqaXBoLCBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKnJ0aGRyKVxcbiB7XFxuLVxcdGludCBzZWdtZW50cywgc2VnbWVudHNfbGVmdDtcXG4rXFx0dW5zaWduZWQgaW50IHNlZ21lbnRzLCBzZWdtZW50c19sZWZ0O1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHJzO1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHIgZmluYWxfYWRkcjtcXG4gXFxuIFxcdHNlZ21lbnRzX2xlZnQgPSBydGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdDtcXG4gXFx0aWYgKHNlZ21lbnRzX2xlZnQgPT0gMClcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXHRydGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdCA9IDA7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0LyogVGhlIHZhbHVlIG9mIHJ0aGRyLVxcdTAwM2VoZHJsZW4gaGFzIGJlZW4gdmVyaWZpZWQgZWl0aGVyIGJ5IHRoZSBzeXN0ZW1cXG4tXFx0ICogY2FsbCBpZiBpdCBpcyBsb2NhbGx5IGdlbmVyYXRlZCwgb3IgYnkgaXB2Nl9ydGhkcl9yY3YoKSBmb3IgaW5jb21pbmdcXG4tXFx0ICogcGFja2V0cy4gIFNvIHdlIGNhbiBhc3N1bWUgdGhhdCBpdCBpcyBldmVuIGFuZCB0aGF0IHNlZ21lbnRzIGlzXFxuLVxcdCAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBzZWdtZW50c19sZWZ0Llxcbi1cXHQgKlxcbi1cXHQgKiBGb3IgdGhlIHNhbWUgcmVhc29uIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGlzIG9wdGlvbiBpcyBvZiB0eXBlIDAuXFxuK1xcdC8qIFJhdyBsb2NhbGx5IGdlbmVyYXRlZCBwYWNrZXRzIGNhbiByZWFjaCBBSDYgd2l0aG91dCB0aGUgaW52YXJpYW50XFxuK1xcdCAqIHJlcXVpcmVkIGJ5IHRoZSBydDAtc3R5bGUgYWRkcmVzcyByZWFycmFuZ2VtZW50IGJlbG93LlxcbiBcXHQgKi9cXG4gXFx0c2VnbWVudHMgPSBydGhkci1cXHUwMDNlaGRybGVuIFxcdTAwM2VcXHUwMDNlIDE7XFxuK1xcdGlmIChzZWdtZW50c19sZWZ0IFxcdTAwM2Ugc2VnbWVudHMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cnRoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQgPSAwO1xcbiBcXG4gXFx0YWRkcnMgPSAoKHN0cnVjdCBydDBfaGRyICopcnRoZHIpLVxcdTAwM2VhZGRyO1xcbiBcXHRmaW5hbF9hZGRyID0gYWRkcnNbc2VnbWVudHMgLSAxXTtcXG5AQCAtMjYxLDYgKzI2Myw4IEBAIHN0YXRpYyB2b2lkIGlwdjZfcmVhcnJhbmdlX3J0aGRyKHN0cnVjdCBpcHY2aGRyICppcGgsIHN0cnVjdCBpcHY2X3J0X2hkciAqcnRoZHIpXFxuIFxcbiBcXHRhZGRyc1swXSA9IGlwaC1cXHUwMDNlZGFkZHI7XFxuIFxcdGlwaC1cXHUwMDNlZGFkZHIgPSBmaW5hbF9hZGRyO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoc3RydWN0IGlwdjZoZHIgKmlwaCwgaW50IGxlbiwgaW50IGRpcilcXG5AQCAtMjczLDYgKzI3Nyw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoc3RydWN0IGlwdjZoZHIgKmlwaCwgaW50IGxlbiwgaW50IGRpcilcXG4gXFx0fSBleHRoZHIgPSB7IC5pcGggPSBpcGggfTtcXG4gXFx0Y2hhciAqZW5kID0gZXh0aGRyLnJhdyArIGxlbjtcXG4gXFx0aW50IG5leHRoZHIgPSBpcGgtXFx1MDAzZW5leHRoZHI7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRleHRoZHIuaXBoKys7XFxuIFxcbkBAIC0yOTIsNyArMjk3LDkgQEAgc3RhdGljIGludCBpcHY2X2NsZWFyX211dGFibGVfb3B0aW9ucyhzdHJ1Y3QgaXB2NmhkciAqaXBoLCBpbnQgbGVuLCBpbnQgZGlyKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdGNhc2UgTkVYVEhEUl9ST1VUSU5HOlxcbi1cXHRcXHRcXHRpcHY2X3JlYXJyYW5nZV9ydGhkcihpcGgsIGV4dGhkci5ydGgpO1xcbitcXHRcXHRcXHRlcnIgPSBpcHY2X3JlYXJyYW5nZV9ydGhkcihpcGgsIGV4dGhkci5ydGgpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdGRlZmF1bHQ6XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuY1xcbmluZGV4IDI5NmI1NzkyNmFiYjkuLjdkMjE2YjljNTlmMDQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvZXNwNi5jXFxuKysrIGIvbmV0L2lwdjYvZXNwNi5jXFxuQEAgLTEyMSw2ICsxMjEsMTMgQEAgc3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXE7XFxuIFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuIFxcbitcXHQvKiBNYW5hZ2VkIGZyYWdzIGFyZSBvd25lZCBieSB0aGUgemVyb2NvcHkgdWJ1ZjsgdGhlIHNrYiBob2xkcyBub1xcbitcXHQgKiBwZXItZnJhZyBwYWdlIHJlZmVyZW5jZSwgc28gd2UgbXVzdCBub3QgZHJvcCBvbmUgaGVyZS4gIE1pcnJvcnNcXG4rXFx0ICogdGhlIFNLQkZMX01BTkFHRURfRlJBR19SRUZTIGhhbmRsaW5nIGluIHNrYl9yZWxlYXNlX2RhdGEoKS5cXG4rXFx0ICovXFxuK1xcdGlmIChza2JfemNvcHlfbWFuYWdlZChza2IpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAoeC1cXHUwMDNlcHJvcHMuZmxhZ3MgXFx1MDAyNiBYRlJNX1NUQVRFX0VTTilcXG4gXFx0XFx0ZXh0cmFsZW4gKz0gc2l6ZW9mKHN0cnVjdCBlc3Bfb3V0cHV0X2V4dHJhKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXFxuaW5kZXggODlkMDQ0M2I1MzA3My4uMDdlZGVmMjU4OTg0NCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXFxuKysrIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xcbkBAIC0yNDcsNyArMjQ3LDcgQEAgaW50IHhmcm02X2lucHV0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICgxICsgc3AtXFx1MDAzZWxlbiA9PSBYRlJNX01BWF9ERVBUSCkge1xcbitcXHRpZiAoc3AtXFx1MDAzZWxlbiBcXHUwMDNlPSBYRlJNX01BWF9ERVBUSCkge1xcbiBcXHRcXHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5CVUZGRVJFUlJPUik7XFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xcbmluZGV4IDM3NGUxYjk2NDQzODMuLjY3NGFlZGM1YWY1YTIgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xcbisrKyBiL25ldC94ZnJtL2VzcGludGNwLmNcXG5AQCAtMzcsNiArMzcsMTEgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdHNrYi1cXHUwMDNlZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc29ja19uZXQoc2spLCBza2ItXFx1MDAzZXNrYl9paWYpO1xcbitcXHRpZiAoIXNrYi1cXHUwMDNlZGV2KSB7XFxuK1xcdFxcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuIFxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbkBAIC00NSw2ICs1MCw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxcbiAjZW5kaWZcXG4gXFx0XFx0eGZybTRfcmN2X2VuY2FwKHNrYiwgSVBQUk9UT19FU1AsIDAsIFRDUF9FTkNBUF9FU1BJTlRDUCk7XFxuIFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitvdXQ6XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbkBAIC01MTUsNyArNTIxLDggQEAgc3RhdGljIHZvaWQgZXNwaW50Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXFxuIFxcdHN0cnBfc3RvcChcXHUwMDI2Y3R4LVxcdTAwM2VzdHJwKTtcXG4gXFxuIFxcdHNrLVxcdTAwM2Vza19wcm90ID0gXFx1MDAyNnRjcF9wcm90O1xcbi1cXHRiYXJyaWVyKCk7XFxuK1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gXFxuIFxcdGRpc2FibGVfd29ya19zeW5jKFxcdTAwMjZjdHgtXFx1MDAzZXdvcmspO1xcbiBcXHRzdHJwX2RvbmUoXFx1MDAyNmN0eC1cXHUwMDNlc3RycCk7XFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jIGIvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcXG5pbmRleCBlYjFiNmY2NzczOWUxLi44Njc5YzY4YzEwYTE2IDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXFxuKysrIGIvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcXG5AQCAtMTU2LDI0ICsxNTYsNTEgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcXG4gfVxcbiBcXG4gc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHN0YXRlcztcXG4gXFx0dGltZTY0X3QgbmV4dF9ydW47XFxuIFxcdHRpbWU2NF90IG5vdztcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXFxuK3N0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbitcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxcbiB7XFxuIFxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XFxuK1xcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZTtcXG4rXFxuK1xcdGlmICghUkVBRF9PTkNFKHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHN0YXRlID0ga21hbGxvY19vYmooKnN0YXRlLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCFzdGF0ZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHR4ZnJtX3N0YXRlX2hvbGQoeCk7XFxuK1xcdHN0YXRlLVxcdTAwM2V4ID0geDtcXG4rXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2c3RhdGUtXFx1MDAzZWxpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlcyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCAqY3R4KVxcbit7XFxuIFxcdGJvb2wgc2VuZF9rZWVwYWxpdmUgPSBmYWxzZTtcXG4gXFx0c3RydWN0IG5hdF9rZWVwYWxpdmUga2E7XFxuLVxcdHRpbWU2NF90IG5leHRfcnVuO1xcbitcXHR0aW1lNjRfdCBuZXh0X3J1biA9IDA7XFxuIFxcdHUzMiBpbnRlcnZhbDtcXG4gXFx0aW50IGRlbHRhO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ4LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGlmICh4LVxcdTAwM2VrbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0RFQUQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0aW50ZXJ2YWwgPSB4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xcbiBcXHRpZiAoIWludGVydmFsKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2eC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0ZGVsdGEgPSAoaW50KShjdHgtXFx1MDAzZW5vdyAtIHgtXFx1MDAzZWxhc3R1c2VkKTtcXG4gXFx0aWYgKGRlbHRhIFxcdTAwM2MgaW50ZXJ2YWwpIHtcXG5AQCAtMTg3LDI5ICsyMTQsNDEgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgY291bnQsIHZvaWQgKnB0cilcXG4gXFx0XFx0c2VuZF9rZWVwYWxpdmUgPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRzcGluX3VubG9jayhcXHUwMDI2eC1cXHUwMDNlbG9jayk7XFxuK291dDpcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNngtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0aWYgKHNlbmRfa2VlcGFsaXZlKVxcbiBcXHRcXHRuYXRfa2VlcGFsaXZlX3NlbmQoXFx1MDAyNmthKTtcXG4gXFxuLVxcdGlmICghY3R4LVxcdTAwM2VuZXh0X3J1biB8fCBuZXh0X3J1biBcXHUwMDNjIGN0eC1cXHUwMDNlbmV4dF9ydW4pXFxuK1xcdGlmIChuZXh0X3J1biBcXHUwMDI2XFx1MDAyNiAoIWN0eC1cXHUwMDNlbmV4dF9ydW4gfHwgbmV4dF9ydW4gXFx1MDAzYyBjdHgtXFx1MDAzZW5leHRfcnVuKSlcXG4gXFx0XFx0Y3R4LVxcdTAwM2VuZXh0X3J1biA9IG5leHRfcnVuO1xcbi1cXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbitcXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGUsICp0bXA7XFxuIFxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcXG4gXFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuK1xcdGludCBlcnI7XFxuIFxcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y3R4LnN0YXRlcyk7XFxuIFxcdGN0eC5uZXh0X3J1biA9IDA7XFxuIFxcdGN0eC5ub3cgPSBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCk7XFxuIFxcbiBcXHRuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7XFxuIFxcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFxcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7XFxuLVxcdHhmcm1fc3RhdGVfd2FsayhuZXQsIFxcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlLCBcXHUwMDI2Y3R4KTtcXG4rXFx0ZXJyID0geGZybV9zdGF0ZV93YWxrKG5ldCwgXFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCBcXHUwMDI2Y3R4KTtcXG4gXFx0eGZybV9zdGF0ZV93YWxrX2RvbmUoXFx1MDAyNndhbGssIG5ldCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGF0ZSwgdG1wLCBcXHUwMDI2Y3R4LnN0YXRlcywgbGlzdCkge1xcbitcXHRcXHRuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0YXRlLVxcdTAwM2V4LCBcXHUwMDI2Y3R4KTtcXG4rXFx0XFx0eGZybV9zdGF0ZV9wdXQoc3RhdGUtXFx1MDAzZXgpO1xcbitcXHRcXHRrZnJlZShzdGF0ZSk7XFxuK1xcdH1cXG4rXFx0aWYgKGVyciA9PSAtRU5PTUVNKSB7XFxuK1xcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgMCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXHRpZiAoY3R4Lm5leHRfcnVuKVxcbiBcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssXFxuIFxcdFxcdFxcdFxcdCAgICAgIChjdHgubmV4dF9ydW4gLSBjdHgubm93KSAqIEhaKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9vdXRwdXQuYyBiL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcXG5pbmRleCBjYzM1YzJmY2JiZTA5Li5lMzA1YmEzMmUzNTZiIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcXG4rKysgYi9uZXQveGZybS94ZnJtX291dHB1dC5jXFxuQEAgLTYzNiwxMCArNjM2LDggQEAgc3RhdGljIGludCB4ZnJtX2Rldl9kaXJlY3Rfb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuIFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuIFxcbiBcXHRlcnIgPSBza2JfZHN0KHNrYiktXFx1MDAzZW9wcy1cXHUwMDNlbG9jYWxfb3V0KG5ldCwgc2ssIHNrYik7XFxuLVxcdGlmICh1bmxpa2VseShlcnIgIT0gMSkpIHtcXG4tXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdGlmICh1bmxpa2VseShlcnIgIT0gMSkpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4gXFxuIFxcdC8qIEluIHRyYW5zcG9ydCBtb2RlLCBuZXR3b3JrIGRlc3RpbmF0aW9uIGlzXFxuIFxcdCAqIGRpcmVjdGx5IHJlYWNoYWJsZSwgd2hpbGUgaW4gdHVubmVsIG1vZGUsXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5pbmRleCBkNmRiNjMzMDRiYTZiLi42MjY2YTkyY2YzMDIwIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5AQCAtOTQwLDcgKzk0MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jb25zdHJ1Y3Qoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRpZiAoKGVyciA9IGF0dGFjaF9hdXRoX3RydW5jKFxcdTAwMjZ4LVxcdTAwM2VhYWxnLCBcXHUwMDI2eC1cXHUwMDNlcHJvcHMuYWFsZ28sXFxuIFxcdFxcdFxcdFxcdCAgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhfVFJVTkNdLCBleHRhY2spKSlcXG4gXFx0XFx0Z290byBlcnJvcjtcXG4tXFx0aWYgKCF4LVxcdTAwM2Vwcm9wcy5hYWxnbykge1xcbitcXHRpZiAoIXgtXFx1MDAzZWFhbGcpIHtcXG4gXFx0XFx0aWYgKChlcnIgPSBhdHRhY2hfYXV0aChcXHUwMDI2eC1cXHUwMDNlYWFsZywgXFx1MDAyNngtXFx1MDAzZXByb3BzLmFhbGdvLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhdLCBleHRhY2spKSlcXG4gXFx0XFx0XFx0Z290byBlcnJvcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6MDkuMzg4ODI1OTU1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjQ3NzExMjkzMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVDZfQUhcIixcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXNwX291dHB1dF90YWlsXCIsXG4gICAgXCJlc3A2X291dHB1dF90YWlsXCIsXG4gICAgXCJ4ZnJtNl9pbnB1dF9hZGRyXCIsXG4gICAgXCJ4ZnJtX291dHB1dFwiLFxuICAgIFwiZXNwaW50Y3BfcXVldWVfb3V0XCIsXG4gICAgXCJlc3BpbnRjcF9wdXNoX3NrYlwiLFxuICAgIFwieGZybV9zdGF0ZV93YWxrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmaWxlcyBpbiB0aGUgSVBzZWMgKFhGUk0sIEVTUCwgQUgpIHN1YnN5c3RlbS4gSXQgYWRkcyBjaGVja3MgZm9yIHplcm9jb3B5IG1hbmFnZWQgZnJhZ21lbnRzIGluIEVTUCwgZml4ZXMgYWRkcmVzcyByZWFycmFuZ2VtZW50IGluIEFINiwgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gWEZSTTYgaW5wdXQsIGFkZHMgYSBjaGVjayBmb3IgbWlzc2luZyBkZXZpY2UgaW4gRVNQLWluLVRDUCwgY2hhbmdlcyB0aGUgTkFUIGtlZXBhbGl2ZSB3b3JrcXVldWUgdG8gY29sbGVjdCBzdGF0ZXMgYmVmb3JlIHByb2Nlc3NpbmcgdGhlbSwgcmVtb3ZlcyBhIGRvdWJsZSBmcmVlIGluIFhGUk0gb3V0cHV0LCBhbmQgZml4ZXMgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gWEZSTSB1c2VyLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsLCByZWFjaGFibGUsIGFuZCBhZmZlY3QgY29yZSBuZXR3b3JraW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MDM5YTU5NDJiNjZmZTU3MzcyZjk2MTkxNDNiMDg4ZmY2MGJiYWRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTM6MzQ6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmNcbmluZGV4IGRmYzgxZWU5NjlhZTAuLmZhMTcxMGUyN2U1MDUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9lc3A0LmNcbisrKyBiL25ldC9pcHY0L2VzcDQuY1xuQEAgLTEwNCw2ICsxMDQsMTMgQEAgc3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiBcbitcdC8qIE1hbmFnZWQgZnJhZ3MgYXJlIG93bmVkIGJ5IHRoZSB6ZXJvY29weSB1YnVmOyB0aGUgc2tiIGhvbGRzIG5vXG4rXHQgKiBwZXItZnJhZyBwYWdlIHJlZmVyZW5jZSwgc28gd2UgbXVzdCBub3QgZHJvcCBvbmUgaGVyZS4gIE1pcnJvcnNcbitcdCAqIHRoZSBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBoYW5kbGluZyBpbiBza2JfcmVsZWFzZV9kYXRhKCkuXG4rXHQgKi9cbitcdGlmIChza2JfemNvcHlfbWFuYWdlZChza2IpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAoeC1cdTAwM2Vwcm9wcy5mbGFncyBcdTAwMjYgWEZSTV9TVEFURV9FU04pXG4gXHRcdGV4dHJhbGVuICs9IHNpemVvZihzdHJ1Y3QgZXNwX291dHB1dF9leHRyYSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWg2LmMgYi9uZXQvaXB2Ni9haDYuY1xuaW5kZXggNzZmN2EyZGU5MTA4ZS4uYzk2ZjdlMGQwYTQ4MSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FoNi5jXG4rKysgYi9uZXQvaXB2Ni9haDYuY1xuQEAgLTIzMiwyNiArMjMyLDI4IEBAIHN0YXRpYyB2b2lkIGlwdjZfcmVhcnJhbmdlX2Rlc3RvcHQoc3RydWN0IGlwdjZoZHIgKmlwaCwgc3RydWN0IGlwdjZfb3B0X2hkciAqZGVzXG4gICpcdFJlYXJyYW5nZSB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBpbiBAaXBoIGFuZCB0aGUgYWRkcmVzc2VzIGluIEBydGhkclxuICAqXHRzbyB0aGF0IHRoZXkgYXBwZWFyIGluIHRoZSBvcmRlciB0aGV5IHdpbGwgYXQgdGhlIGZpbmFsIGRlc3RpbmF0aW9uLlxuICAqXHRTZWUgQXBwZW5kaXggQTIgb2YgUkZDIDI0MDIgZm9yIGRldGFpbHMuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBzZWdtZW50c19sZWZ0IGV4Y2VlZHMgdGhlIG51bWJlciBvZlxuKyAqIGFkZHJlc3NlcyBkZXNjcmliZWQgYnkgaGRybGVuLlxuICAqL1xuLXN0YXRpYyB2b2lkIGlwdjZfcmVhcnJhbmdlX3J0aGRyKHN0cnVjdCBpcHY2aGRyICppcGgsIHN0cnVjdCBpcHY2X3J0X2hkciAqcnRoZHIpXG4rc3RhdGljIGludCBpcHY2X3JlYXJyYW5nZV9ydGhkcihzdHJ1Y3QgaXB2NmhkciAqaXBoLCBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKnJ0aGRyKVxuIHtcbi1cdGludCBzZWdtZW50cywgc2VnbWVudHNfbGVmdDtcbitcdHVuc2lnbmVkIGludCBzZWdtZW50cywgc2VnbWVudHNfbGVmdDtcbiBcdHN0cnVjdCBpbjZfYWRkciAqYWRkcnM7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgZmluYWxfYWRkcjtcbiBcbiBcdHNlZ21lbnRzX2xlZnQgPSBydGhkci1cdTAwM2VzZWdtZW50c19sZWZ0O1xuIFx0aWYgKHNlZ21lbnRzX2xlZnQgPT0gMClcbi1cdFx0cmV0dXJuO1xuLVx0cnRoZHItXHUwMDNlc2VnbWVudHNfbGVmdCA9IDA7XG4rXHRcdHJldHVybiAwO1xuIFxuLVx0LyogVGhlIHZhbHVlIG9mIHJ0aGRyLVx1MDAzZWhkcmxlbiBoYXMgYmVlbiB2ZXJpZmllZCBlaXRoZXIgYnkgdGhlIHN5c3RlbVxuLVx0ICogY2FsbCBpZiBpdCBpcyBsb2NhbGx5IGdlbmVyYXRlZCwgb3IgYnkgaXB2Nl9ydGhkcl9yY3YoKSBmb3IgaW5jb21pbmdcbi1cdCAqIHBhY2tldHMuICBTbyB3ZSBjYW4gYXNzdW1lIHRoYXQgaXQgaXMgZXZlbiBhbmQgdGhhdCBzZWdtZW50cyBpc1xuLVx0ICogZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHNlZ21lbnRzX2xlZnQuXG4tXHQgKlxuLVx0ICogRm9yIHRoZSBzYW1lIHJlYXNvbiB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBvcHRpb24gaXMgb2YgdHlwZSAwLlxuK1x0LyogUmF3IGxvY2FsbHkgZ2VuZXJhdGVkIHBhY2tldHMgY2FuIHJlYWNoIEFINiB3aXRob3V0IHRoZSBpbnZhcmlhbnRcbitcdCAqIHJlcXVpcmVkIGJ5IHRoZSBydDAtc3R5bGUgYWRkcmVzcyByZWFycmFuZ2VtZW50IGJlbG93LlxuIFx0ICovXG4gXHRzZWdtZW50cyA9IHJ0aGRyLVx1MDAzZWhkcmxlbiBcdTAwM2VcdTAwM2UgMTtcbitcdGlmIChzZWdtZW50c19sZWZ0IFx1MDAzZSBzZWdtZW50cylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRydGhkci1cdTAwM2VzZWdtZW50c19sZWZ0ID0gMDtcbiBcbiBcdGFkZHJzID0gKChzdHJ1Y3QgcnQwX2hkciAqKXJ0aGRyKS1cdTAwM2VhZGRyO1xuIFx0ZmluYWxfYWRkciA9IGFkZHJzW3NlZ21lbnRzIC0gMV07XG5AQCAtMjYxLDYgKzI2Myw4IEBAIHN0YXRpYyB2b2lkIGlwdjZfcmVhcnJhbmdlX3J0aGRyKHN0cnVjdCBpcHY2aGRyICppcGgsIHN0cnVjdCBpcHY2X3J0X2hkciAqcnRoZHIpXG4gXG4gXHRhZGRyc1swXSA9IGlwaC1cdTAwM2VkYWRkcjtcbiBcdGlwaC1cdTAwM2VkYWRkciA9IGZpbmFsX2FkZHI7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBpcHY2X2NsZWFyX211dGFibGVfb3B0aW9ucyhzdHJ1Y3QgaXB2NmhkciAqaXBoLCBpbnQgbGVuLCBpbnQgZGlyKVxuQEAgLTI3Myw2ICsyNzcsNyBAQCBzdGF0aWMgaW50IGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHN0cnVjdCBpcHY2aGRyICppcGgsIGludCBsZW4sIGludCBkaXIpXG4gXHR9IGV4dGhkciA9IHsgLmlwaCA9IGlwaCB9O1xuIFx0Y2hhciAqZW5kID0gZXh0aGRyLnJhdyArIGxlbjtcbiBcdGludCBuZXh0aGRyID0gaXBoLVx1MDAzZW5leHRoZHI7XG4rXHRpbnQgZXJyO1xuIFxuIFx0ZXh0aGRyLmlwaCsrO1xuIFxuQEAgLTI5Miw3ICsyOTcsOSBAQCBzdGF0aWMgaW50IGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHN0cnVjdCBpcHY2aGRyICppcGgsIGludCBsZW4sIGludCBkaXIpXG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgTkVYVEhEUl9ST1VUSU5HOlxuLVx0XHRcdGlwdjZfcmVhcnJhbmdlX3J0aGRyKGlwaCwgZXh0aGRyLnJ0aCk7XG4rXHRcdFx0ZXJyID0gaXB2Nl9yZWFycmFuZ2VfcnRoZHIoaXBoLCBleHRoZHIucnRoKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0ZGVmYXVsdDpcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9lc3A2LmMgYi9uZXQvaXB2Ni9lc3A2LmNcbmluZGV4IDI5NmI1NzkyNmFiYjkuLjdkMjE2YjljNTlmMDQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9lc3A2LmNcbisrKyBiL25ldC9pcHY2L2VzcDYuY1xuQEAgLTEyMSw2ICsxMjEsMTMgQEAgc3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiBcbitcdC8qIE1hbmFnZWQgZnJhZ3MgYXJlIG93bmVkIGJ5IHRoZSB6ZXJvY29weSB1YnVmOyB0aGUgc2tiIGhvbGRzIG5vXG4rXHQgKiBwZXItZnJhZyBwYWdlIHJlZmVyZW5jZSwgc28gd2UgbXVzdCBub3QgZHJvcCBvbmUgaGVyZS4gIE1pcnJvcnNcbitcdCAqIHRoZSBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBoYW5kbGluZyBpbiBza2JfcmVsZWFzZV9kYXRhKCkuXG4rXHQgKi9cbitcdGlmIChza2JfemNvcHlfbWFuYWdlZChza2IpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAoeC1cdTAwM2Vwcm9wcy5mbGFncyBcdTAwMjYgWEZSTV9TVEFURV9FU04pXG4gXHRcdGV4dHJhbGVuICs9IHNpemVvZihzdHJ1Y3QgZXNwX291dHB1dF9leHRyYSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbmluZGV4IDg5ZDA0NDNiNTMwNzMuLjA3ZWRlZjI1ODk4NDQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXG4rKysgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXG5AQCAtMjQ3LDcgKzI0Nyw3IEBAIGludCB4ZnJtNl9pbnB1dF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHhmcm1fYWRkcmVzc190ICpkYWRkcixcbiBcdFx0Z290byBkcm9wO1xuIFx0fVxuIFxuLVx0aWYgKDEgKyBzcC1cdTAwM2VsZW4gPT0gWEZSTV9NQVhfREVQVEgpIHtcbitcdGlmIChzcC1cdTAwM2VsZW4gXHUwMDNlPSBYRlJNX01BWF9ERVBUSCkge1xuIFx0XHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5CVUZGRVJFUlJPUik7XG4gXHRcdGdvdG8gZHJvcDtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuaW5kZXggMzc0ZTFiOTY0NDM4My4uNjc0YWVkYzVhZjVhMiAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL2VzcGludGNwLmNcbisrKyBiL25ldC94ZnJtL2VzcGludGNwLmNcbkBAIC0zNyw2ICszNywxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNrYi1cdTAwM2VkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzb2NrX25ldChzayksIHNrYi1cdTAwM2Vza2JfaWlmKTtcbitcdGlmICghc2tiLVx1MDAzZWRldikge1xuK1x0XHRYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9YRlJNSU5FUlJPUik7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG5AQCAtNDUsNiArNTAsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbiAjZW5kaWZcbiBcdFx0eGZybTRfcmN2X2VuY2FwKHNrYiwgSVBQUk9UT19FU1AsIDAsIFRDUF9FTkNBUF9FU1BJTlRDUCk7XG4gXHRsb2NhbF9iaF9lbmFibGUoKTtcbitvdXQ6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG5AQCAtNTE1LDcgKzUyMSw4IEBAIHN0YXRpYyB2b2lkIGVzcGludGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxuIFx0c3RycF9zdG9wKFx1MDAyNmN0eC1cdTAwM2VzdHJwKTtcbiBcbiBcdHNrLVx1MDAzZXNrX3Byb3QgPSBcdTAwMjZ0Y3BfcHJvdDtcbi1cdGJhcnJpZXIoKTtcbitcbitcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuIFx0ZGlzYWJsZV93b3JrX3N5bmMoXHUwMDI2Y3R4LVx1MDAzZXdvcmspO1xuIFx0c3RycF9kb25lKFx1MDAyNmN0eC1cdTAwM2VzdHJwKTtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5pbmRleCBlYjFiNmY2NzczOWUxLi44Njc5YzY4YzEwYTE2IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5AQCAtMTU2LDI0ICsxNTYsNTEgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcbiB9XG4gXG4gc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBzdGF0ZXM7XG4gXHR0aW1lNjRfdCBuZXh0X3J1bjtcbiBcdHRpbWU2NF90IG5vdztcbiB9O1xuIFxuLXN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG4rc3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK1x0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4rfTtcbitcbitzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgY291bnQsIHZvaWQgKnB0cilcbiB7XG4gXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCAqY3R4ID0gcHRyO1xuK1x0c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlO1xuK1xuK1x0aWYgKCFSRUFEX09OQ0UoeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRzdGF0ZSA9IGttYWxsb2Nfb2JqKCpzdGF0ZSwgR0ZQX0FUT01JQyk7XG4rXHRpZiAoIXN0YXRlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHhmcm1fc3RhdGVfaG9sZCh4KTtcbitcdHN0YXRlLVx1MDAzZXggPSB4O1xuK1x0bGlzdF9hZGRfdGFpbChcdTAwMjZzdGF0ZS1cdTAwM2VsaXN0LCBcdTAwMjZjdHgtXHUwMDNlc3RhdGVzKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggKmN0eClcbit7XG4gXHRib29sIHNlbmRfa2VlcGFsaXZlID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSBrYTtcbi1cdHRpbWU2NF90IG5leHRfcnVuO1xuK1x0dGltZTY0X3QgbmV4dF9ydW4gPSAwO1xuIFx0dTMyIGludGVydmFsO1xuIFx0aW50IGRlbHRhO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNngtXHUwMDNlbG9jayk7XG4rXG4rXHRpZiAoeC1cdTAwM2VrbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0RFQUQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0aW50ZXJ2YWwgPSB4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XG4gXHRpZiAoIWludGVydmFsKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHNwaW5fbG9jayhcdTAwMjZ4LVx1MDAzZWxvY2spO1xuK1x0XHRnb3RvIG91dDtcbiBcbiBcdGRlbHRhID0gKGludCkoY3R4LVx1MDAzZW5vdyAtIHgtXHUwMDNlbGFzdHVzZWQpO1xuIFx0aWYgKGRlbHRhIFx1MDAzYyBpbnRlcnZhbCkge1xuQEAgLTE4NywyOSArMjE0LDQxIEBAIHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG4gXHRcdHNlbmRfa2VlcGFsaXZlID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNngtXHUwMDNlbG9jayk7XG4rb3V0OlxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eC1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmIChzZW5kX2tlZXBhbGl2ZSlcbiBcdFx0bmF0X2tlZXBhbGl2ZV9zZW5kKFx1MDAyNmthKTtcbiBcbi1cdGlmICghY3R4LVx1MDAzZW5leHRfcnVuIHx8IG5leHRfcnVuIFx1MDAzYyBjdHgtXHUwMDNlbmV4dF9ydW4pXG4rXHRpZiAobmV4dF9ydW4gXHUwMDI2XHUwMDI2ICghY3R4LVx1MDAzZW5leHRfcnVuIHx8IG5leHRfcnVuIFx1MDAzYyBjdHgtXHUwMDNlbmV4dF9ydW4pKVxuIFx0XHRjdHgtXHUwMDNlbmV4dF9ydW4gPSBuZXh0X3J1bjtcbi1cdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbitcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZSwgKnRtcDtcbiBcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgd2FsaztcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbitcdGludCBlcnI7XG4gXG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHguc3RhdGVzKTtcbiBcdGN0eC5uZXh0X3J1biA9IDA7XG4gXHRjdHgubm93ID0ga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpO1xuIFxuIFx0bmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLndvcmspO1xuIFx0eGZybV9zdGF0ZV93YWxrX2luaXQoXHUwMDI2d2FsaywgSVBQUk9UT19FU1AsIE5VTEwpO1xuLVx0eGZybV9zdGF0ZV93YWxrKG5ldCwgXHUwMDI2d2FsaywgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZSwgXHUwMDI2Y3R4KTtcbitcdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCBcdTAwMjZjdHgpO1xuIFx0eGZybV9zdGF0ZV93YWxrX2RvbmUoXHUwMDI2d2FsaywgbmV0KTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGF0ZSwgdG1wLCBcdTAwMjZjdHguc3RhdGVzLCBsaXN0KSB7XG4rXHRcdG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RhdGUtXHUwMDNleCwgXHUwMDI2Y3R4KTtcbitcdFx0eGZybV9zdGF0ZV9wdXQoc3RhdGUtXHUwMDNleCk7XG4rXHRcdGtmcmVlKHN0YXRlKTtcbitcdH1cbitcdGlmIChlcnIgPT0gLUVOT01FTSkge1xuK1x0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFx0aWYgKGN0eC5uZXh0X3J1bilcbiBcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayxcbiBcdFx0XHRcdCAgICAgIChjdHgubmV4dF9ydW4gLSBjdHgubm93KSAqIEhaKTtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX291dHB1dC5jIGIvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuaW5kZXggY2MzNWMyZmNiYmUwOS4uZTMwNWJhMzJlMzU2YiAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcbisrKyBiL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcbkBAIC02MzYsMTAgKzYzNiw4IEBAIHN0YXRpYyBpbnQgeGZybV9kZXZfZGlyZWN0X291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiBcbiBcdGVyciA9IHNrYl9kc3Qoc2tiKS1cdTAwM2VvcHMtXHUwMDNlbG9jYWxfb3V0KG5ldCwgc2ssIHNrYik7XG4tXHRpZiAodW5saWtlbHkoZXJyICE9IDEpKSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0aWYgKHVubGlrZWx5KGVyciAhPSAxKSlcbiBcdFx0cmV0dXJuIGVycjtcbi1cdH1cbiBcbiBcdC8qIEluIHRyYW5zcG9ydCBtb2RlLCBuZXR3b3JrIGRlc3RpbmF0aW9uIGlzXG4gXHQgKiBkaXJlY3RseSByZWFjaGFibGUsIHdoaWxlIGluIHR1bm5lbCBtb2RlLFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcbmluZGV4IGQ2ZGI2MzMwNGJhNmIuLjYyNjZhOTJjZjMwMjAgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuY1xuKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmNcbkBAIC05NDAsNyArOTQwLDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoKGVyciA9IGF0dGFjaF9hdXRoX3RydW5jKFx1MDAyNngtXHUwMDNlYWFsZywgXHUwMDI2eC1cdTAwM2Vwcm9wcy5hYWxnbyxcbiBcdFx0XHRcdCAgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhfVFJVTkNdLCBleHRhY2spKSlcbiBcdFx0Z290byBlcnJvcjtcbi1cdGlmICgheC1cdTAwM2Vwcm9wcy5hYWxnbykge1xuK1x0aWYgKCF4LVx1MDAzZWFhbGcpIHtcbiBcdFx0aWYgKChlcnIgPSBhdHRhY2hfYXV0aChcdTAwMjZ4LVx1MDAzZWFhbGcsIFx1MDAyNngtXHUwMDNlcHJvcHMuYWFsZ28sXG4gXHRcdFx0XHQgICAgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhdLCBleHRhY2spKSlcbiBcdFx0XHRnb3RvIGVycm9yO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6MDkuMzg4ODI3NTc1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1NzA0NzUzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGFuIElQc2VjIFBhdGNoOiBGdW5jdGlvbmFsIENoYW5nZXMgYW5kIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBhIGZldyBrZXkgYXJlYXMgaW4gdGhlIG5ldHdvcmsgc3RhY2s6IGBuZXQvaXB2NC9gLCBgbmV0L2lwdjYvYCwgYW5kIGBuZXQveGZybS9gLiAgSXQgbG9va3MgbGlrZSB0aGlzIGlzIGFsbCBJUHNlYy1yZWxhdGVkLCBzcGVjaWZpY2FsbHkgRVNQLCBBSCwgYW5kIHRoZSBYRlJNIGZyYW1ld29yay4gIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuRmlyc3QsIGxvb2tpbmcgYXQgdGhlIEVTUCBpbXBsZW1lbnRhdGlvbnMgKGBuZXQvaXB2NC9lc3A0LmNgIGFuZCBgbmV0L2lwdjYvZXNwNi5jYCksIHRoZSBjaGFuZ2UgaW4gYGVzcF9zc2dfdW5yZWZgIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gQWRkaW5nIHRoZSBgaWYgKHNrYl96Y29weV9tYW5hZ2VkKHNrYikpIHJldHVybjtgIGNoZWNrIGxvb2tzIGxpa2UgaXTigJlzIGFkZHJlc3NpbmcgYSBzcGVjaWZpYyBjb3JuZXIgY2FzZSB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gTWFrZXMgc2Vuc2UuIEl0J3MgZnVuY3Rpb25hbCwgYW5kIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5OZXh0LCBvdmVyIGluIGBuZXQvaXB2Ni9haDYuY2AsIGBpcHY2X3JlYXJyYW5nZV9ydGhkcmAncyByZXR1cm4gdHlwZSBpcyBub3cgYGludGAsIGFuZCB0aGVyZSdzIGEgbmV3IGNoZWNrIGFkZGVkIHdpdGggYSByZXR1cm4gb2YgYC1FSU5WQUxgIGlmIGBzZWdtZW50c19sZWZ0YCBpcyBsYXJnZXIgdGhhbiBgc2VnbWVudHNgLiBUaGUgZXJyb3IgcHJvcGFnYXRpb24gaW4gYGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zYCBpcyBhIGdvb2QgcHJhY3RpY2UuIEFnYWluLCBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuXG5cblRoZW4gd2UndmUgZ290IGBuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jYC4gIFRoZSBsb2dpYyBpbiBgeGZybTZfaW5wdXRfYWRkcmAgaXMgcmVmaW5lZCB3aXRoIGBzcC1cdTAwM2VsZW4gXHUwMDNlPSBYRlJNX01BWF9ERVBUSGAsIHdoaWNoIGltcHJvdmVzIGJvdW5kcyBjaGVja2luZy4gTWFrZXMgc2Vuc2UgdG8gbWUsIGFsc28gZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLlxuXG5Ob3csIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gRHJvcHBpbmcgcGFja2V0cyBpZiBgIXNrYi1cdTAwM2VkZXZgIGluIGBoYW5kbGVfZXNwYCBhZGRzIGEgc2FuaXR5IGNoZWNrLCB3aGljaCBpcyBhIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHRlY2huaXF1ZS4gUmVwbGFjaW5nIGBiYXJyaWVyKClgIHdpdGggYHN5bmNocm9uaXplX3JjdSgpYCBpbiBgZXNwaW50Y3BfY2xvc2VgIGluZGljYXRlcyBhIG5lY2Vzc2FyeSBjaGFuZ2UgZm9yIHN5bmNocm9uaXphdGlvbi4gIEZ1bmN0aW9uYWxseSBzb3VuZCBhbmQgcmVhY2hhYmxlLlxuXG5Nb3Zpbmcgb24gdG8gYG5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jYCwgdGhpcyBpcyBtb3JlIGludGVyZXN0aW5nLiBUaGUgcmVmYWN0b3Jpbmcgb2YgYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgIHRvIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYW5kIHRoZW4gYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgIHN1Z2dlc3RzIHRoZXkgYXJlIGNvbGxlY3Rpbmcgc3RhdGVzIGR1cmluZyB0aGUgd2FsayBub3csIGFuZCBwcm9jZXNzaW5nIHRoZW0gc2VwYXJhdGVseS4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIGtlcm5lbCBjb2RlIHRvIGF2b2lkIHBvdGVudGlhbCBpc3N1ZXMgd2l0aGluIHRoZSB3YWxrIGl0c2VsZi4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuXG5cbkluIGBuZXQveGZybS94ZnJtX291dHB1dC5jYCwgdGhlIHJlbW92YWwgb2YgYGtmcmVlX3NrYihza2IpYCB3aGVuIGBlcnIgIT0gMWAgaW4gYHhmcm1fZGV2X2RpcmVjdF9vdXRwdXRgIGxvb2tzIGxpa2UgaXQncyBvcHRpbWl6aW5nIHRoZSBwYWNrZXQgaGFuZGxpbmcgYmFzZWQgb24gZXJyb3IgY29kZXMuIEZ1bmN0aW9uYWwsIGFuZCByZWFjaGFibGUuXG5cbkZpbmFsbHksIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuICBDaGFuZ2luZyBgaWYgKCF4LVx1MDAzZXByb3BzLmFhbGdvKWAgdG8gYGlmICgheC1cdTAwM2VhYWxnKWAgaW4gYHhmcm1fc3RhdGVfY29uc3RydWN0YCBsb29rcyBsaWtlIGEgc2ltcGxlIHN0cnVjdHVyYWwgdXBkYXRlIG9mIGhvdyB0aGUgYWxnb3JpdGhtIGlzIGFjY2Vzc2VkLiAgRnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLlxuXG5Pa2F5LCBub3cgbGV0J3MgbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gV2UgZGVmaW5pdGVseSBuZWVkIGBDT05GSUdfWEZSTWAgZm9yIFhGUk0gaXRzZWxmLCBhbmQgYENPTkZJR19YRlJNX1VTRVJgIGZvciB1c2VyLXNwYWNlIFhGUk0gaW50ZXJhY3Rpb24uIEVTUCByZXF1aXJlcyBgQ09ORklHX0lORVRfRVNQYCBhbmQgYENPTkZJR19JTkVUNl9FU1BgIGZvciBJUHY0IGFuZCBJUHY2IHJlc3BlY3RpdmVseS4gQUggaXMgc2ltaWxhcjogYENPTkZJR19JTkVUX0FIYCBhbmQgYENPTkZJR19JTkVUNl9BSGAuIFdlIGFsc28gbmVlZCBgQ09ORklHX0VTUElOVENQYCBmb3IgRVNQLWluLVRDUC4gTm93LCB0aGUgTkFUIGtlZXBhbGl2ZSBzdHVmZi4uLiBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfWEZSTV9OQVRfS0VFUEFMSVZFYCBpcyBhY3R1YWxseSBhIHZhbGlkIGNvbmZpZyBvcHRpb24uICBMZXQncyBncmVwIGZvciB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzk4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6MTkuOTU5MzA2ODEyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODQzOTU1MTEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX05BVF9LRUVQQUxJVkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjIxLjg0MzcxMjIyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODQxMTQ0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgWEZSTSBDb25maWd1cmF0aW9uIFNwYWNlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gTkFUIGtlZXBhbGl2ZXMgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB3aXRoaW4gdGhlIGBuZXQveGZybS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVBzZWMvWEZSTSBmdW5jdGlvbmFsaXR5LiBUaGUgbmFtZSBJJ20gbG9va2luZyBmb3Igc2VlbXMgdG8gYmUgYG5hdF9rZWVwYWxpdmVgLiBMZXQncyBzZWUgd2hhdCBgS2NvbmZpZ2AgcmV2ZWFscy4gSG9wZWZ1bGx5LCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIG9wdGlvbiB3aXRoIGEgY2xlYXIgZGVzY3JpcHRpb24uIFRoZW4gSSBjYW4gZmlndXJlIG91dCBob3cgdG8gY29uZmlndXJlIG9yIHVzZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMzNiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjI0LjgyNzgyOTAyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzYwODU4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmF0X2tlZXBhbGl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNDoyNC44NzE0NDUyODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYzNDQ3NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gTWFrZWZpbGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBgbmV0L3hmcm0vTWFrZWZpbGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIGhvdyB0aGlzIG1vZHVsZSBpcyBhc3NlbWJsZWQsIHdoaWNoIGZpbGVzIGFyZSBpbmNsdWRlZCwgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBtb2RpZmljYXRpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgcHJvamVjdC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSB1c3VhbCBzdXNwZWN0czogb2JqZWN0IGZpbGUgbGlzdHMsIHNvdXJjZSBmaWxlcywgaGVhZGVyIGRlcGVuZGVuY2llcywgYW5kIGxpa2VseSBzb21lIHJ1bGVzIGZvciBsaW5raW5nIHRoZSBmaW5hbCBYRlJNIG1vZHVsZXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIGVudmlyb25tZW50LCB0byBhc2NlcnRhaW4gaG93IHRvIGluamVjdCBteSBvd24gY29kZSBhbmQgY2hhbmdlcyBzdWNjZXNzZnVsbHkuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gcmVzaWRlcywgc28gaXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU1MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjI4LjIzNDg5NTMwN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTc4ODQ4OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9uYXRfa2VlcGFsaXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxcXFxuLS1cXG5uZXQveGZybS9NYWtlZmlsZS0xNi1cXHRcXHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTc6XFx0XFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cXG5uZXQveGZybS9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfWEZSTV9TVEFUSVNUSUNTKSArPSB4ZnJtX3Byb2Mub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNDoyOC41OTI3ODQ4MTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzc0MDg3NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiBLZWVwYWxpdmUgaW4gWEZSTSoqXG5cbkFscmlnaHQsIHNvIGB4ZnJtX25hdF9rZWVwYWxpdmUuY2AgaXMgZGVmaW5pdGVseSBpbiB0aGUgYnVpbGQgaWYgYENPTkZJR19YRlJNYCBpcyBzZXQuIFRoYXQncyB0aGUgYmFzZWxpbmUgYXNzdW1wdGlvbiwgYW5kIGl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgbmFtZS4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGtlZXBhbGl2ZSBmdW5jdGlvbmFsaXR5IHdvcmtzIGluIHJlbGF0aW9uIHRvLCBzYXksIEVTUCBvdmVyIFRDUCwgSSBzaG91bGQgcmVhbGx5IGNoZWNrIG91dCBgZXNwaW50Y3AuY2AuIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgdHdvIG1vZHVsZXMgbGllcywgSSB3b3VsZCBndWVzcy4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBnZW5lcmljIFhGUk0ga2VlcGFsaXZlIG1lY2hhbmlzbXMgYW5kIHRoZSBFU1Agb3ZlciBUQ1AgdHVubmVsLiBUaGlzIHNob3VsZCBsZXQgbWUgc2VlIGhvdyBOQVQgaXMgaGFuZGxlZCBpbiB0aGlzIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNDozMi4zNjY4NzU0MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTQ1NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcGludGNwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9cXG5uZXQveGZybS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgKz0gZXNwaW50Y3Aub1xcbm5ldC94ZnJtL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgKz0geGZybV9zdGF0ZV9icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNDozMi40NzE4MjY5ODdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNzEyMjU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRVNQIEludGVncmF0aW9uIGFuZCBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUga2VybmVsIGNvbmZpZyBvcHRpb24gdGhhdCdzIHNuYWdnaW5nIG15IGF0dGVudGlvbiByaWdodCBub3cgaXMgYENPTkZJR19YRlJNX0VTUElOVENQYC4gVGhhdCBtZWFucyB3ZSdyZSBsb29raW5nIGF0IFRDUCBlbmNhcHN1bGF0aW9uIHdpdGhpbiBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCksIHdoaWNoIGlzIGFsd2F5cyBhbiBpbnRlcmVzdGluZyBhbmQgcG90ZW50aWFsbHkgY29tcGxleCBhcmVhIGZvciBzZWN1cml0eS5cblxuTXkgZmlyc3QgcG9ydCBvZiBjYWxsIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgY29yZSBFU1AgaW1wbGVtZW50YXRpb24gZmlsZXMuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGBlc3A0LmNgIGFuZCBgZXNwNi5jYC4gVGhlc2UgZmlsZXMgYXJlIHdoZXJlIHRoZSBJUHNlYy1zcGVjaWZpYyBoYW5kbGluZyBvZiBFU1AgdHJhZmZpYyBvdmVyIElQdjQgYW5kIElQdjYgcmVzcGVjdGl2ZWx5IGFyZSBjb2RlZC4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIFRDUCBlbmNhcHN1bGF0aW9uIGlzIGludGVncmF0ZWQsIGhvdyBjb25uZWN0aW9ucyBhcmUgc2V0IHVwIGFuZCB0b3JuIGRvd24sIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgdGFzay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI2MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjM2LjM3ODk1MjI1OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMTA0NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcDRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9MzU9b2JqLSQoQ09ORklHX0lORVRfQUgpICs9IGFoNC5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0lORVRfRVNQKSArPSBlc3A0Lm9cXG5uZXQvaXB2NC9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfSU5FVF9FU1BfT0ZGTE9BRCkgKz0gZXNwNF9vZmZsb2FkLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfSU5FVF9JUENPTVApICs9IGlwY29tcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjM2LjU0OTA2MTA0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ4MDY4NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRVNQIE1vZHVsZSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYENPTkZJR19JTkVUX0VTUGAgYW5kIGBDT05GSUdfSU5FVDZfRVNQYC4gIFRob3NlIGZsYWdzIGFyZSByaW5naW5nIGEgYmVsbCwgb2J2aW91c2x5IHJlbGF0ZWQgdG8gRVNQIC0gRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIC0gd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLiBUaW1lIHRvIGRpZyBpbi4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYGFoNi5jYCwgYmVjYXVzZSB0aGF0IGZpbGUncyBnb2luZyB0byBiZSBrZXkgdG8gdW5wYWNraW5nIHRoZSBkZXRhaWxzLiBXaXRoIG15IGV4cGVydGlzZSwgSSBzdXNwZWN0IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgRVNQIGFyZSBpbnRlci1yZWxhdGVkIHRvIEFILCBzbyBpdCBtYWtlcyBzZW5zZSB0byBnbyB0aGVyZSBmb3IgY2x1ZXMuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYyMSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjM5Ljg5NzEzMjk2NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NjIxNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFoNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT0yOD1pcHY2LSQoQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUwpICs9IGlvYW02X2lwdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0yOS1cXG5uZXQvaXB2Ni9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfSU5FVDZfQUgpICs9IGFoNi5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMzEtb2JqLSQoQ09ORklHX0lORVQ2X0VTUCkgKz0gZXNwNi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjQwLjAzNDc2Mzk5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODkzNDEyODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIHRoYXQgY29kZTpcblxuKipJUHY2IEFIIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQ09ORklHX0lORVQ2X0FIYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIEF1dGhlbnRpY2F0aW9uIEhlYWRlciBzdXBwb3J0IGZvciBJUHY2LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYW5kbGVkIGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgaW5wdXQgcHJvY2Vzc2luZyBmb3IgSVB2Niwgc3BlY2lmaWNhbGx5IHRoZSBhdXRoZW50aWNhdGlvbiBhc3BlY3QuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgYXQgaG93IHRoYXQgd29ya3MgaXMgZ29pbmcgdG8gYmUgYHhmcm02X2lucHV0LmNgLiBUaGF0IGZpbGUgaXMgbGlrZWx5IHdoZXJlIHRoZSBhY3R1YWwgYXV0aGVudGljYXRpb24gaGVhZGVyIHByb2Nlc3NpbmcgYW5kIHZlcmlmaWNhdGlvbiB0YWtlcyBwbGFjZSBmb3IgSVB2Ni4gSXQgaGFuZGxlcyB0aGUgaW5ncmVzcyB0cmFmZmljIHNvIHNob3VsZCBiZSB3aGVyZSBteSBkZWJ1Z2dpbmcgYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTMxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6NDMuOTI4MTc4ODMyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzg5NTQyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtNl9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT0xNj1pcHY2LSQoQ09ORklHX0lQVjZfTVJPVVRFKSArPSBpcDZtci5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMTctXFxubmV0L2lwdjYvTWFrZWZpbGU6MTg6aXB2Ni0kKENPTkZJR19YRlJNKSArPSB4ZnJtNl9wb2xpY3kubyB4ZnJtNl9zdGF0ZS5vIHhmcm02X2lucHV0Lm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlLTE5LVxcdHhmcm02X291dHB1dC5vIHhmcm02X3Byb3RvY29sLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6NDQuMDAyMDc2NDU2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTIyMzk4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipEaXZpbmcgaW50byB0aGUgWEZSTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgQ09ORklHX1hGUk1gLiBUaGF0J3MgdGhlIG1haW4ga2V5LCB0aGUgc3dpdGNoIHRoYXQgZW5hYmxlcyB0aGUgZW50aXJlIFhGUk0gc3Vic3lzdGVtLCB3aGljaCBpcyBxdWl0ZSBicm9hZCBhbmQgZGVlcGx5IGVtYmVkZGVkIHdpdGhpbiB0aGUga2VybmVsJ3MgbmV0d29yayBzdGFjay4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUsIGJlY2F1c2Ugb2YgaXRzIGNvcmUtbGV2ZWwgbmF0dXJlLCB0byBzdGFydCB3aXRoIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSDigJMgaG93IHRoZSBwb2xpY3kgYW5kIHNlY3VyaXR5IGFzc29jaWF0aW9ucyBhcmUgY29uZmlndXJlZC4gTGV0J3Mgc2VlIGhvdyB0aGUgaW50ZXJhY3Rpb24gd29ya3MuIE15IGZvY3VzLCBpbiBleHBsb3JpbmcgdGhhdCwgd2lsbCBiZSB0aGUgZW50cnktcG9pbnRzIGZvciB0aGUgdXNlci1zcGFjZSBvcGVyYXRpb25zLiBUaGF0J3MgYHhmcm1fdXNlci5jYCwgSSBiZWxpZXZlLCBpcyB3aGVyZSB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMgYXJlIGhhbmRsZWQsIG9yIGF0IGxlYXN0IHRoZSBzdGFydCBvZiB0aGF0IGludGVyYWN0aW9uLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI1MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjQ3LjI5NDMxODYzMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMyMTYxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV91c2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19YRlJNX0FMR08pICs9IHhmcm1fYWxnby5vXFxubmV0L3hmcm0vTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1hGUk1fVVNFUikgKz0geGZybV91c2VyLm9cXG5uZXQveGZybS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfWEZSTV9VU0VSX0NPTVBBVCkgKz0geGZybV9jb21wYXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNDo0Ny4zNDc1NDAxM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgzOTU3MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBzZWVpbmcgYENPTkZJR19YRlJNX1VTRVJgLCB3aGljaCB0cmlnZ2VycyBhIG1lbnRhbCBub3RlIHRvIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIGltcGxpY2F0aW9ucy4gSSd2ZSBnb3QgYSBsaXN0IGhlcmU6IGBYRlJNYCwgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGBJTkVUNl9FU1BgLCBgSU5FVDZfQUhgLCBhbmQgYFhGUk1fRVNQSU5UQ1BgLiBNeSBpbW1lZGlhdGUgaW5jbGluYXRpb24gaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBYRlJNX0VTUElOVENQYCBoYXMgYW55IHVwc3RyZWFtIHJlcXVpcmVtZW50cy4gSXMgaXQgY29udGluZ2VudCBvbiBhbnkgb2YgdGhvc2UgcHJldmlvdXMgY29uZmlndXJhdGlvbnM/IEl0J3MgdGhlIG1vc3QgdW51c3VhbCBvZiB0aGUgbG90LiBUaW1lIHRvIGV4cGxvcmUgdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBzZWUgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTg4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6NTAuNjMxNDk5OTE3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE0MjAxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fRVNQSU5UQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTE0MT1jb25maWcgWEZSTV9JUFRGU1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXFxubmV0L3hmcm0vS2NvbmZpZzoxNTc6Y29uZmlnIFhGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS9LY29uZmlnLTE1OC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjUwLjc5MjkyNDYzMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI2NzcyOTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgWEZSTSBLY29uZmlnIGZvciBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBuZXQveGZybS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAxNTcuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgc29tZSBpbnRlcmVzdGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBYRlJNIG1pZ2h0IGJlIGRlZmluZWQuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIG1heWJlIHJlbGF0ZWQgdG8gYSBuZXcgZmVhdHVyZSBJJ20gdHJ5aW5nIHRvIGVuYWJsZSwgb3IgcGVyaGFwcyB0cm91Ymxlc2hvb3RpbmcgYSBwYXJ0aWN1bGFyIGlzc3VlIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIGlzIGZ1bmRhbWVudGFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYXZhaWxhYmxlIGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBpbnRlcnJlbGF0ZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNDo1NC41MTk2OTk1OTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFx0ICBwYWNrZXQgc3RyZWFtIHdoaWNoIGluIHR1cm4geWllbGRzIGhpZ2hlciBzbWFsbC1wYWNrZXRcXG4gMTUxOlxcdFxcdCAgYmFuZHdpZHRoIGFzIHdlbGwgYXMgcmVkdWNpbmcgTVRVL1BNVFUgaXNzdWVzLiBDb25nZXN0aW9uXFxuIDE1MjpcXHRcXHQgIGNvbnRyb2wgaXMgdW5pbXBsZW1lbnRhdGVkIGFzIHRoZSBzZW5kIHJhdGUgaXMgZGVtYW5kIGRyaXZlblxcbiAxNTM6XFx0XFx0ICByYXRoZXIgdGhhbiBjb25zdGFudC5cXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNTY6XFx0XFxuIDE1NzpcXHRjb25maWcgWEZSTV9FU1BJTlRDUFxcbiAxNTg6XFx0XFx0Ym9vbFxcbiAxNTk6XFx0XFxuIDE2MDpcXHRlbmRpZiAjIElORVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6NTQuNTE5NzU0MzU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDUyNjkxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEZWJ1Z2dpbmcgYSBCb29sZWFuJ3MgU2VsZWN0aW9uKipcblxuQWxyaWdodCwgdGhpcyBgYm9vbGAgZmllbGTigKYgaXQncyBub3QgYmVpbmcgZXhwbGljaXRseSBwcm9tcHRlZCwgc28gc29tZXRoaW5nIGVsc2UgbXVzdCBiZSBkcml2aW5nIGl0cyBzZWxlY3Rpb24uIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgY29kZSBhbmQgZmlndXJlIG91dCB0aGUgZGVjaXNpb24tbWFraW5nIHByb2Nlc3MgdGhhdCdzIHNldHRpbmcgdGhpcyB2YWx1ZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBpZGVudGlmeSB0aGUgc291cmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBoZXJlLiBXaGF0IGNvbXBvbmVudHMgb3IgZnVuY3Rpb25zIGFyZSB1cHN0cmVhbSBhbmQgcG90ZW50aWFsbHkgaW1wYWN0aW5nIHRoaXMgYGJvb2xgJ3Mgc3RhdGU/IFRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nIHRvIHRyYWNrIGRvd24sIGxldCdzIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMwNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6NTguNjI1MDI1MjkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEzOTA0NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBYRlJNX0VTUElOVENQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4Ni1cXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjQvS2NvbmZpZzozODc6XFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG5uZXQvaXB2NC9LY29uZmlnLTM4OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTkwPWNvbmZpZyBJTkVUNl9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy05NC1cXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjYvS2NvbmZpZzo5NTpcXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbm5ldC9pcHY2L0tjb25maWctOTYtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTowMC4zMzg5MzYzODFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzNDI0ODMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkVTUCBhbmQgVENQIEludGVycGxheSAtIEluaXRpYWwgVGhvdWdodHMqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBJTkVUX0VTUElOVENQYCBhbmQgaXRzIElQdjYgY291bnRlcnBhcnQsIGBJTkVUNl9FU1BJTlRDUGAuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGxpa2VseSBhcmNoaXRlY3R1cmUuIFRoZSBnb2FsIGlzIGxpa2VseSB0byBmaW5kIGtleSBzeW1ib2xzIHRoYXQgYWN0IGFzIGEgZm9jYWwgcG9pbnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgY29yZSBvZiB0aGUgaW50ZXJhY3Rpb24/XCJcblxuTGV0J3MgYmVnaW4uIGBlc3Bfc3NnX3VucmVmYCBsb29rcyBpbnRlcmVzdGluZywgYnV0IHRoZSAnc3RhdGljJyBhdHRyaWJ1dGUgaXMgaW1tZWRpYXRlbHkgb2ZmLXB1dHRpbmcuIFRoYXQgbWVhbnMgaXQgbGlrZWx5IGhhcyBsaW1pdGVkIHNjb3BlIGFuZCBpc24ndCB0aGUgY2VudHJhbCBmdW5jdGlvbiBmb3IgdGhpcy4gQmVpbmcgY2FsbGVkIGZyb20gYGVzcF9vdXRwdXRfdGFpbGAgYW5kIGBlc3BfaW5wdXRfdGFpbGAgaXMgYSBjcml0aWNhbCBmaXJzdCBkYXRhIHBvaW50LCB0aG91Z2guIFRoZXkgYXJlIGNlcnRhaW5seSB0aGUgbmV4dCB0aGluZ3MgdG8gZXhhbWluZSBpbiBkZXRhaWwuIEkgc2hvdWxkIGNoZWNrIGhvdyB0aGVzZSB0d28gZnVuY3Rpb25zIGludGVyYWN0IHdpdGggYGVzcF9zc2dfdW5yZWZgLCBzaW5jZSB0aGF0IG1heSBiZSB3aGVyZSB0aGUgYWN0aW9uIGlzLiBUaGlzIG1pZ2h0IGJlIGEgZGVhZCBlbmQgZm9yIHRoZSBmb2N1cywgYnV0IGl0J3Mgd2hlcmUgdGhlIGJyZWFkY3J1bWJzIGFyZSBzbyBmYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjUwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MDQuODczMTg3MDU3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzk5NTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlc3Bfc3NnX3VucmVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2VzcDQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9lc3A0LmM9OTE9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmVzcF9yZXFfc2coc3RydWN0IGNyeXB0b19hZWFkICphZWFkLFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTk4LVxcbm5ldC9pcHY0L2VzcDQuYzo5OTpzdGF0aWMgdm9pZCBlc3Bfc3NnX3VucmVmKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB2b2lkICp0bXAsIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgYWxyZWFkeV91bnJlZilcXG5uZXQvaXB2NC9lc3A0LmMtMTAwLXtcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz0yMTc9c3RhdGljIHZvaWQgZXNwX291dHB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMjMyLVxcdHRtcCA9IEVTUF9TS0JfQ0Ioc2tiKS1cXHUwMDNldG1wO1xcbm5ldC9pcHY0L2VzcDQuYzoyMzM6XFx0ZXNwX3NzZ191bnJlZih4LCB0bXAsIHNrYiwgZmFsc2UpO1xcbm5ldC9pcHY0L2VzcDQuYy0yMzQtXFx0a2ZyZWUodG1wKTtcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz01MDU9aW50IGVzcF9vdXRwdXRfdGFpbChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICplc3ApXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtNTgyLVxcdFxcdGlmICh1bmxpa2VseShlcnIgXFx1MDAzYyAwKSkge1xcbm5ldC9pcHY0L2VzcDQuYzo1ODM6XFx0XFx0XFx0ZXNwX3NzZ191bnJlZih4LCB0bXAsIHNrYiwgdHJ1ZSk7XFxubmV0L2lwdjQvZXNwNC5jLTU4NC1cXHRcXHRcXHRnb3RvIGVycm9yX2ZyZWU7XFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtNjE2LVxcdGlmIChzZyAhPSBkc2cpXFxubmV0L2lwdjQvZXNwNC5jOjYxNzpcXHRcXHRlc3Bfc3NnX3VucmVmKHgsIHRtcCwgc2tiLCBmYWxzZSk7XFxubmV0L2lwdjQvZXNwNC5jLTYxOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MDQuOTM3MTg1OTgzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTg1NzQzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipGb2N1c2luZyBJbiBvbiBOZXR3b3JrIENvcmUgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gc3BlY2lmaWMgYXJlYXMgd2l0aGluIHRoZSBuZXR3b3JrIGNvZGUgYmFzZS4gYGVzcF9vdXRwdXRfdGFpbGAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuIFRoYXQncyBhIHNvbGlkIHN5bWJvbCB0byB0cmFjayBmb3Igbm93LCBhbmQgSSdsbCBrZWVwIGl0IGluIG1pbmQuIEZvciBJUHY2LCBJIGNhbiB1c2UgYGVzcDZfb3V0cHV0X3RhaWxgLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9pcHY2L2VzcDYuY2AsIHRvIGNoZWNrIGZvciBzaW1pbGFyIGZ1bmN0aW9uYWxpdGllcy4gSXQgd2lsbCBiZSB2ZXJ5IGhlbHBmdWwgaW4gZXhwbG9yaW5nIElQdjYuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBFU1AgYW5kIElQdjYgcGFja2V0IHByb2Nlc3NpbmcgdGhlcmUuXG5cbk5vdywgYSByZWxhdGVkIGZ1bmN0aW9uLCBgaXB2Nl9yZWFycmFuZ2VfcnRoZHJgLCBpcyBzb21ldGhpbmcgZWxzZSB0byBjb25zaWRlci4gSSd2ZSBub3RpY2VkIGl0J3MgZGVjbGFyZWQgYHN0YXRpY2AuLi4gaW50ZXJlc3RpbmcuIEFuZCBpdCBhcHBlYXJzIHRvIGJlIGNhbGxlZCBvbmx5IGZyb20gYGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zYC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBpcHY2X2NsZWFyX211dGFibGVfb3B0aW9uc2AgaW50ZXJhY3RzIHdpdGggdGhlIGhpZ2hlci1sZXZlbCBJUHY2IHByb2Nlc3NpbmcuIFRoYXQgY291bGQgYmUgd2hlcmUgdGhlIHJvdXRlIGhlYWRlciBoYW5kbGluZyBpcyByZWFsbHkgaGFwcGVuaW5nLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNhbGwgc3RhY2sgdG8gc2VlIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDQyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MDguNjM1NzYzMjIxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM4MTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X2NsZWFyX211dGFibGVfb3B0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9haDYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9haDYuYz0yMzk9c3RhdGljIGludCBpcHY2X3JlYXJyYW5nZV9ydGhkcihzdHJ1Y3QgaXB2NmhkciAqaXBoLCBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKnJ0aGRyKVxcbi0tXFxubmV0L2lwdjYvYWg2LmMtMjY5LVxcbm5ldC9pcHY2L2FoNi5jOjI3MDpzdGF0aWMgaW50IGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHN0cnVjdCBpcHY2aGRyICppcGgsIGludCBsZW4sIGludCBkaXIpXFxubmV0L2lwdjYvYWg2LmMtMjcxLXtcXG4tLVxcbm5ldC9pcHY2L2FoNi5jPTM1MD1zdGF0aWMgaW50IGFoNl9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9haDYuYy00MTYtXFx0aWYgKGV4dGxlbikge1xcbm5ldC9pcHY2L2FoNi5jOjQxNzpcXHRcXHRlcnIgPSBpcHY2X2NsZWFyX211dGFibGVfb3B0aW9ucyh0b3BfaXBoLFxcbm5ldC9pcHY2L2FoNi5jLTQxOC1cXHRcXHRcXHRcXHRcXHRcXHQgZXh0bGVuIC0gc2l6ZW9mKCppcGhfZXh0KSArXFxuLS1cXG5uZXQvaXB2Ni9haDYuYz01MTk9c3RhdGljIGludCBhaDZfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9haDYuYy02MTMtXFxubmV0L2lwdjYvYWg2LmM6NjE0OlxcdGVyciA9IGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zKGlwNmgsIGhkcl9sZW4sIFhGUk1fUE9MSUNZX0lOKTtcXG5uZXQvaXB2Ni9haDYuYy02MTUtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MDguNjg5MTQ5NjA5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjYzMjA2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgRm9jdXMgU3ltYm9scyBhbmQgTm9uLVN0YXRpYyBWYXJpYWJsZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIGNvZGUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gbmV0d29yayB0cmFuc2Zvcm1hdGlvbiBvciBhZGRyZXNzIGhhbmRsaW5nLiBGaXJzdCwgSSdtIHRoaW5raW5nIHRoYXQgYGFoNl9vdXRwdXRgIGFuZCBgYWg2X2lucHV0YCBhcmUgZ29vZCBzdGFydGluZyBwb2ludHMuIFRoZXkgc2VlbSBsaWtlIHdlbGwtY2hvc2VuIGZvY3VzIHN5bWJvbHMsIGxpa2VseSByZXByZXNlbnRpbmcgY3JpdGljYWwgaW5wdXQgYW5kIG91dHB1dCBwYXJhbWV0ZXJzIHJlbGF0ZWQgdG8gdGhlIEFIIChBdXRoZW50aWNhdGlvbiBIZWFkZXIpIHByb3RvY29sIGZvciBJUHY2LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlaXIgZGVmaW5pdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhlIHN5c3RlbSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZW0uXG5cblRoZW4sIHRoZXJlJ3MgYHhmcm02X2lucHV0X2FkZHJgLiBBaCwgaGVyZSdzIHNvbWV0aGluZyBvZiBpbnRlcmVzdC4gVGhpcyBvbmUgaXMgKm5vdCogc3RhdGljLiBUaGF0IG1lYW5zIGl0cyBzY29wZSBleHRlbmRzIGJleW9uZCBhIHNpbmdsZSBmdW5jdGlvbiBvciBjb21waWxhdGlvbiB1bml0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBhIGdsb2JhbCBvciBtb2R1bGUtbGV2ZWwgdmFyaWFibGUsIGFuZCB0aGF0IHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIGludm9sdmVkIGluIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnMuIFRoaXMgbm9uLXN0YXRpYyBuYXR1cmUgbWVhbnMgSSdsbCBoYXZlIHRvIGJlIHBhcnRpY3VsYXJseSBjYXJlZnVsIGFib3V0IHNpZGUgZWZmZWN0cywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpZiB0aGlzIGlzIHVzZWQgaW4gYSBtdWx0aXRocmVhZGVkIGNvbnRleHQsIG9yIGp1c3QgZ2VuZXJhbGx5IHRyYWNraW5nIGRvd24gYWxsIHRoZSBwbGFjZXMgd2hlcmUgaXQncyBtb2RpZmllZC4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbnRleHRzIHdoZXJlIGB4ZnJtNl9pbnB1dF9hZGRyYCBpcyB1c2VkIGFuZCBob3cgaXQncyBtb2RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNToxMi41MTU0NzIyODlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MjgyNzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm02X2lucHV0X2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYveGZybTZfaW5wdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jPTIzNT1FWFBPUlRfU1lNQk9MKHhmcm02X3Jjdik7XFxubmV0L2lwdjYveGZybTZfaW5wdXQuYzoyMzY6aW50IHhmcm02X2lucHV0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxcbm5ldC9pcHY2L3hmcm02X2lucHV0LmMtMjM3LVxcdFxcdCAgICAgeGZybV9hZGRyZXNzX3QgKnNhZGRyLCB1OCBwcm90bylcXG4tLVxcbm5ldC9pcHY2L3hmcm02X2lucHV0LmMtMzIyLX1cXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jOjMyMzpFWFBPUlRfU1lNQk9MKHhmcm02X2lucHV0X2FkZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNToxMi41NzQ3NTc1OTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0OTkxMTM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuXG5cbioqQW5hbHl6aW5nIHRoZSBFU1AvSVBzZWMgUGFja2V0IEhhbmRsaW5nKipcblxuQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYHhmcm02X2lucHV0X2FkZHJgIGlzIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBkZXNpZ25lZCBmb3IgZXh0ZXJuYWwgdXNlLCBsaWtlbHkgZm9yIGhhbmRsaW5nIGluY29taW5nIElQc2VjIHRyYWZmaWMgd2l0aGluIHRoZSBJUHY2IGNvbnRleHQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIHRyYWNlIHdoZXJlIGl0J3MgdXRpbGl6ZWQuXG5cbk5leHQsIEknbSBkaWdnaW5nIGludG8gYGVzcGludGNwLmNgLiBIZXJlLCB0aGUgZnVuY3Rpb24gYGhhbmRsZV9lc3BgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGlzIGlzIGltcG9ydGFudCDigJMgaXQgbWVhbnMgaXQncyBzY29wZWQgKm9ubHkqIHdpdGhpbiB0aGlzIGZpbGUuIE5vIGRpcmVjdCBleHRlcm5hbCBjYWxscyBhcmUgZXhwZWN0ZWQuIEhvd2V2ZXIsIHRoZSBmYWN0IHRoYXQgYGhhbmRsZV9lc3BgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIG1lYW5zIHRoYXQgaXQgbXVzdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGBlc3BpbnRjcC5jYCBmaWxlLiBHaXZlbiB0aGUgZmlsZW5hbWUsIGFuZCB0aGUgZmFjdCB0aGF0IGl0J3MgaGFuZGxpbmcgRVNQIHRyYWZmaWMsIEkgY2FuIGluZmVyIHRoYXQgYGhhbmRsZV9lc3BgIGlzIGEgY2VudHJhbCwgaW50ZXJuYWwgcm91dGluZS4gVGhlIGNvZGUgc3RhdGVzIHRoYXQgaXQncyBjYWxsZWQgZnJvbSBgZXNwaW50Y3BfcmN2YC4gU28sIGZyb20gYGVzcGludGNwX3JjdmAgdG8gYGhhbmRsZV9lc3BgLiBHb3QgaXQuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgZXNwaW50Y3BfcmN2YCBpcyBjYWxsZWQsIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgeGZybTZfaW5wdXRfYWRkcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjg4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MTYuMjI0NjcxMzE0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA3NDI5ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX2VzcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmM9MTI9c3RhdGljIHZvaWQgaGFuZGxlX25vbmVzcChzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTI4LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6Mjk6c3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMC17XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jPTU3PXN0YXRpYyB2b2lkIGVzcGludGNwX3JjdihzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMTMtXFx0ZWxzZVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MTE0OlxcdFxcdGhhbmRsZV9lc3Aoc2tiLCBzdHJwLVxcdTAwM2Vzayk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNToxNi4zNzU0MTg1NDFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMjg5NDI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2Ugc3ltYm9scywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRm9jdXNpbmcgSW4gb24gYGVzcGludGNwX3JjdmAgYW5kIGBlc3BpbnRjcF9jbG9zZWAqKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgbXkgaW1tZWRpYXRlIHRob3VnaHRzIGFyZSB0aGF0IGBlc3BpbnRjcF9yY3ZgIGFuZCBgZXNwaW50Y3BfY2xvc2VgIGFyZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIHRvIGRpZyBpbnRvLiBUaGV5IHN0cmlrZSBtZSBhcyB0aGUga2V5IGZvY3VzIHN5bWJvbHMgd2l0aGluIHRoaXMgRVNQLVRDUCBjb250ZXh0LiBgZXNwaW50Y3BfcmN2YCBzdWdnZXN0cyBoYW5kbGluZyBpbmNvbWluZyBkYXRhLCB3aGljaCwgaWYgSSB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgY29ycmVjdGx5LCBpcyBwcm9iYWJseSB3aGVyZSB3ZSBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IG9mIHJlY2VpdmVkIHBhY2tldHMgYW5kIGFzc29jaWF0ZWQgcHJvY2Vzc2luZy4gYGVzcGludGNwX2Nsb3NlYCwgb24gdGhlIG90aGVyIGhhbmQsIGRlYWxzIHdpdGggY2xvc2luZyBjb25uZWN0aW9ucywgd2hpY2ggaXMganVzdCBhcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBoYW5kbGVzIHN0YXRlIHRyYW5zaXRpb25zIGFuZCByZXNvdXJjZSByZWxlYXNlLiBBbmFseXppbmcgdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGxpa2VseSBnaXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29ubmVjdGlvbiBsaWZlY3ljbGUgYW5kIGRhdGEgZmxvdy4gS25vd2luZyB0aGF0IHRoZXNlIGFyZSBnb29kIGZvY3VzIHN5bWJvbHMgd2lsbCBndWlkZSBteSBhbmFseXNpcyBlZmZpY2llbnRseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNToxOS43MDgzMTQ5MzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NDg2MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcGludGNwX2Nsb3NlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuYz01MDE9c3RhdGljIHZvaWQgZXNwaW50Y3BfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNS1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjUxNjpzdGF0aWMgdm9pZCBlc3BpbnRjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNy17XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jPTU1Mj1zdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NjAtXFx0ZXNwaW50Y3BfcHJvdC1cXHUwMDNlcmVjdm1zZyA9IGVzcGludGNwX3JlY3Ztc2c7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NjE6XFx0ZXNwaW50Y3BfcHJvdC1cXHUwMDNlY2xvc2UgPSBlc3BpbnRjcF9jbG9zZTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU2Mi1cXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VyZWxlYXNlX2NiID0gZXNwaW50Y3BfcmVsZWFzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MTkuNzY0ODA4Mjc2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODQwNjQ3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRm9jdXNpbmcgb24gTkFUIEtlZXBhbGl2ZSBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzZWUuIGBlc3BpbnRjcF9jbG9zZWAgc2VlbXMgbGlrZSBhIHNvbGlkIHBvaW50IHRvIHN0YXJ0IGRpZ2dpbmcuIEl0IG9mdGVuIHNpZ25hbHMgdGhlIGVuZCBvZiBhIGNvbm5lY3Rpb24gb3IgdHVubmVsLCBzbyBpdCdzIGEgbG9naWNhbCBwbGFjZSB0byB1bmRlcnN0YW5kIGhvdyBOQVQgdHJhdmVyc2FsIG9yIGtlZXBhbGl2ZSBtZWNoYW5pc21zIGFyZSBjbGVhbmVkIHVwLiBXaGF0IGhhcHBlbnMgaW4gdGVybXMgb2YgcmVzb3VyY2VzLCBzdGF0ZSwgYW5kIHRpbWVycyB3aGVuIGEgY29ubmVjdGlvbiBpcyBjbG9zZWQgd2l0aCBOQVQgaW4gcGxheT8gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuXG5cbk5vdywgYXMgZm9yIGB4ZnJtX25hdF9rZWVwYWxpdmUuY2AsIGFoIHllcywgYG5hdF9rZWVwYWxpdmVfd29ya2AuIFRoaXMgaXMgbGlrZWx5IHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgc2NoZWR1bGVkIG9uIGEgd29ya3F1ZXVlIHRvIGhhbmRsZSB0aGUgYWN0dWFsIHNlbmRpbmcgb2Yga2VlcGFsaXZlIHByb2JlcyBvciB0aGUgcmVsYXRlZCBwcm9jZXNzaW5nLiBUaGF0J3MgYSBnb29kIGJyZWFkY3J1bWIgdG8gZm9sbG93LiBLbm93aW5nIGl0J3Mgd29ya3F1ZXVlLWJhc2VkIHN1Z2dlc3RzIGl0J3MgZGVzaWduZWQgdG8gYmUgbm9uLWJsb2NraW5nIGFuZCBsaWtlbHkgb3BlcmF0ZXMgYXN5bmNocm9ub3VzbHksIHdoaWNoIGZpdHMgdGhlIGdlbmVyYWwgbmVlZCB0byBub3Qgc3RhbGwgdGhlIG1haW4gZGF0YSBwYXRoLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIHRoZSB3b3JrcXVldWUgc2NoZWR1bGluZy4gSXMgaXQgdGltZXItZHJpdmVuLCBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZXMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBzY2hlZHVsaW5nIGNvbmRpdGlvbnMgYW5kIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wbGVtZW50YXRpb24uIERpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgJ2tlZXBhbGl2ZScgcHJvY2Vzcywgd2hhdCBzcGVjaWZpY2FsbHkgdHJpZ2dlcnMgaXQsIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBgd29ya2AgYW5kIGBlc3BpbnRjcF9jbG9zZWAgd291bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgTkFUIHRyYXZlcnNhbCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzU3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MjQuNDQ4ODc0OTRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDE4ODE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYXRfa2VlcGFsaXZlX3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTE4PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNTctXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTU4OnN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IHtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNTktXFx0c3RydWN0IGxpc3RfaGVhZCBzdGF0ZXM7XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0xNjQ9c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUge1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTY4LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE2OTpzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgY291bnQsIHZvaWQgKnB0cilcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNzAte1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE3MTpcXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCAqY3R4ID0gcHRyO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE3Mi1cXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGU7XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODYtXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTg3OnN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTg4OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHgpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTg5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIyNi1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyMjc6c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMjgte1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIyOS1cXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGUsICp0bXA7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjMwOlxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMzEtXFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjM4LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIzOTpcXHRuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjQwLVxcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFxcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQxOlxcdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFxcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXFx1MDAyNmN0eCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjQyLVxcdHhmcm1fc3RhdGVfd2Fsa19kb25lKFxcdTAwMjZ3YWxrLCBuZXQpO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0My1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhdGUsIHRtcCwgXFx1MDAyNmN0eC5zdGF0ZXMsIGxpc3QpIHtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNDQ6XFx0XFx0bmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdGF0ZS1cXHUwMDNleCwgXFx1MDAyNmN0eCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjQ1LVxcdFxcdHhmcm1fc3RhdGVfcHV0KHN0YXRlLVxcdTAwM2V4KTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0OC1cXHRpZiAoZXJyID09IC1FTk9NRU0pIHtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNDk6XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNTAtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjUyLVxcdGlmIChjdHgubmV4dF9ydW4pXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjUzOlxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayxcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNTQtXFx0XFx0XFx0XFx0ICAgICAgKGN0eC5uZXh0X3J1biAtIGN0eC5ub3cpICogSFopO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9Mjg3PXZvaWQgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yOTQtXFx0bmV0ID0geHNfbmV0KHgpO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI5NTpcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssIDApO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI5Ni19XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yOTg9aW50IF9fbmV0X2luaXQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yOTkte1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMwMDpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgbmF0X2tlZXBhbGl2ZV93b3JrKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMDEtXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0zMDQ9aW50IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfZmluaShzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzA1LXtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzozMDY6XFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzA3LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNToyNC41NTMwNjY5MzhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5NTI3NjMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkFuYWx5emluZyB0aGUgTkFUIEtlZXBhbGl2ZSBhbmQgWEZSTSBPdXRwdXQgTWVjaGFuaXNtcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucywgYW5kIGl0J3MgY2xlYXIgdGhhdCBgbmF0X2tlZXBhbGl2ZV93b3JrYCBpcyBzdGF0aWMg4oCTIGl0J3MgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSwgYnV0IGNyaXRpY2FsbHksIGl0IElTIHRoZSBhY3R1YWwgd29ya2VyIGZ1bmN0aW9uLiBOb3csIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgKmlzKiBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGF2YWlsYWJsZSBmb3Igb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCB0byB1c2UuIEdpdmVuIHRoYXQsIHVzaW5nIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgc2VlbXMgbGlrZSB0aGUgY2xlYW5lciBhbmQgbW9yZSBtYWludGFpbmFibGUgYXBwcm9hY2gsIGlmIHBvc3NpYmxlLCBhcyBpdCByZXByZXNlbnRzIGEgbW9yZSB3ZWxsLWRlZmluZWQgaW50ZXJmYWNlLlxuXG5BbmQgSSBzZWUgdGhhdCBgeGZybV9kZXZfZGlyZWN0X291dHB1dGAgaXMgYWxzbyBzdGF0aWMuIEl0J3Mgb25seSBjYWxsZWQgZnJvbSBgeGZybV9vdXRwdXRfb25lYC4gVGhhdCdzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIGJlY2F1c2UgaXRzIHNjb3BlIG9mIHVzZSBpcyByZWFsbHkgbGltaXRlZCwgYW5kIGl0IHN1Z2dlc3RzIGEgdmVyeSBzcGVjaWZpYywgb3B0aW1pemVkIHVzYWdlIHBhdHRlcm4gdGhhdCBpcyB0aWVkIHRvIGEgcGFydGljdWxhciBwYXJ0IG9mIHRoZSBYRlJNIHByb2Nlc3MuIFdlJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB3aGVuIHRoaW5raW5nIGFib3V0IGFueSBwb3RlbnRpYWwgcmVmYWN0b3Jpbmcgb3IgbW9kaWZpY2F0aW9ucyBpbiB0aGUgZnV0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY1MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM1OjMwLjg0ODM0NTE3MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4MDc3NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9kZXZfZGlyZWN0X291dHB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX291dHB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NjIwPUVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fb3V0cHV0X3Jlc3VtZSk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MjEtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2MjI6c3RhdGljIGludCB4ZnJtX2Rldl9kaXJlY3Rfb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHhmcm1fc3RhdGUgKngsXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MjMtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz03NDg9aW50IHhmcm1fb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzg1LVxcdFxcdGlmICh4LVxcdTAwM2Vwcm9wcy5tb2RlID09IFhGUk1fTU9ERV9UVU5ORUwgXFx1MDAyNlxcdTAwMjYgIXNrYi1cXHUwMDNlc2spXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo3ODY6XFx0XFx0XFx0cmV0dXJuIHhmcm1fZGV2X2RpcmVjdF9vdXRwdXQoc2ssIHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03ODctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM1OjMwLjkxMTE1NzEzOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzMwMzU2NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFhGUk0gQ29yZSBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGB4ZnJtX291dHB1dGAgaXMgaW5kZWVkIGEgZ29vZCwgc2hhcnAgZm9jdXMgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgd2hvbGUgWEZSTSAoSVBzZWMpIG91dHB1dCBwcm9jZXNzIHdvcmtzLiBJdCdzIGEga2V5IHN5bWJvbCB0byB0cmFjay5cblxuQW5kIHJlZ2FyZGluZyBgeGZybV9zdGF0ZV9jb25zdHJ1Y3RgLCB0aGUgZmFjdCB0aGF0IGl0J3Mgc3RhdGljIGlzIG5vdGV3b3J0aHkuIFRoaXMgbWVhbnMgaXQncyBsaW1pdGVkIGluIHNjb3BlIGFuZCBjYW4gb25seSBiZSBhY2Nlc3NlZCBmcm9tIHdpdGhpbiBpdHMgb3duIGNvbXBpbGF0aW9uIHVuaXQuIEFuZCBvZiBjb3Vyc2UsIHRoZSBmYWN0IHRoYXQgaXQncyBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSBgeGZybV9hZGRfc2FgIGFuZCBgeGZybV9uZXdfYWVgIGlzIHZlcnkgc2lnbmlmaWNhbnQuIEtub3dpbmcgdGhpcyBpcyBpbXBvcnRhbnQgaW4gdHJhY2luZyBjYWxscyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBmbG93LiBCb3RoIGZ1bmN0aW9ucyBtYW5hZ2UgU0Egb3IgQUUsIHdoaWNoLCBJIHN1cHBvc2UgaXQncyBjbGVhciB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwcm9jZXNzaW5nLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB3aGVuIHRyYWNpbmcgY2FsbHMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNzUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTozNC42NDE1MTU4NjlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDI3NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc3RhdGVfY29uc3RydWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTg5Nj1zdGF0aWMgdm9pZCB4ZnJtX3NtYXJrX2luaXQoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgeGZybV9tYXJrICptKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtOTA2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjkwNzpzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy05MDgtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvICpwLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MTAzOT1zdGF0aWMgaW50IHhmcm1fYWRkX3NhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTA1MS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMDUyOlxcdHggPSB4ZnJtX3N0YXRlX2NvbnN0cnVjdChuZXQsIHAsIGF0dHJzLCBcXHUwMDI2ZXJyLCBleHRhY2spO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwNTMtXFx0aWYgKCF4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTozNC42OTU5NDg1MzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5MzA5MjkzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIEtleSBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgZm9jdXMgc3ltYm9scy4gYHhmcm1fYWRkX3NhYCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZSBhcyBhIHN0cm9uZyBjYW5kaWRhdGUuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLiBOb3csIGxldCdzIGp1c3QgbGF5IG91dCB0aGUgcmVzdCBvZiB0aGUgcmVsZXZhbnQgc3ltYm9scyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFyZWE6IGBlc3Bfb3V0cHV0X3RhaWxgLCBgZXNwNl9vdXRwdXRfdGFpbGAsIGBhaDZfb3V0cHV0YCwgYGFoNl9pbnB1dGAsIGB4ZnJtNl9pbnB1dF9hZGRyYCwgYGVzcGludGNwX3JjdmAsIGBlc3BpbnRjcF9jbG9zZWAsIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAsIGFuZCBgeGZybV9vdXRwdXRgLlxuXG5JIGtub3cgd2hhdCBJJ20gbG9va2luZyBmb3IgLSBsZXQncyBtYWtlIHN1cmUgdGhhdCBgZXNwNl9vdXRwdXRfdGFpbGAgYWN0dWFsbHkgZXhpc3RzIGFzIGV4cGVjdGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24gYW5kIG11c3QgYmUgcHJlc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MzguNTg5MDQzNTkyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDA2NzU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlc3A2X291dHB1dF90YWlsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2VzcDYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9lc3A2LmM9NTM0PUVYUE9SVF9TWU1CT0xfR1BMKGVzcDZfb3V0cHV0X2hlYWQpO1xcbm5ldC9pcHY2L2VzcDYuYy01MzUtXFxubmV0L2lwdjYvZXNwNi5jOjUzNjppbnQgZXNwNl9vdXRwdXRfdGFpbChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICplc3ApXFxubmV0L2lwdjYvZXNwNi5jLTUzNy17XFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmMtNjU4LX1cXG5uZXQvaXB2Ni9lc3A2LmM6NjU5OkVYUE9SVF9TWU1CT0xfR1BMKGVzcDZfb3V0cHV0X3RhaWwpO1xcbm5ldC9pcHY2L2VzcDYuYy02NjAtXFxubmV0L2lwdjYvZXNwNi5jPTY2MT1zdGF0aWMgaW50IGVzcDZfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXNwNi5jLTcwNy1cXG5uZXQvaXB2Ni9lc3A2LmM6NzA4OlxcdHJldHVybiBlc3A2X291dHB1dF90YWlsKHgsIHNrYiwgXFx1MDAyNmVzcCk7XFxubmV0L2lwdjYvZXNwNi5jLTcwOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM1OjM4LjY0MzExNjk0WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzIwMTM1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpcm1pbmcgYW5kIERpcmVjdGluZyBOZXh0IFN0ZXBzKipcblxuUmlnaHQsIHRoYXQgY29uZmlybXMgd2hhdCBJIHN1c3BlY3RlZC4gTm93LCBiZWZvcmUgZGl2aW5nIGFueSBkZWVwZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNvcmUgcmVjZWl2ZXIgZnVuY3Rpb24sIGBlc3BpbnRjcF9yY3ZgLCBpcyBhY3R1YWxseSBkZWZpbmVkIGFuZCBhdmFpbGFibGUuIE5vIHNlbnNlIGNoYXNpbmcgZ2hvc3RzLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2UgYmVmb3JlIEkgY2FuIG1lYW5pbmdmdWxseSBwcm9jZWVkIHdpdGggYW55IGZ1cnRoZXIgYW5hbHlzaXMgb3IgZGVidWdnaW5nLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwOyBJJ3ZlIGxlYXJuZWQgZnJvbSBleHBlcmllbmNlIHRvIHF1aWNrbHkgZWxpbWluYXRlIGZ1bmRhbWVudGFsIGNvZGUgcGF0aCBpc3N1ZXMgYmVmb3JlIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gbW9yZSBjb21wbGV4IHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo0MS45MTUxMzI5OVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NjgwNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXNwaW50Y3BfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuYz0yOT1zdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTYtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NzpzdGF0aWMgdm9pZCBlc3BpbnRjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU4LXtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmM9NDQxPXN0YXRpYyBpbnQgZXNwaW50Y3BfaW5pdF9zayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0NC1cXHRzdHJ1Y3Qgc3RycF9jYWxsYmFja3MgY2IgPSB7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0NDU6XFx0XFx0LnJjdl9tc2cgPSBlc3BpbnRjcF9yY3YsXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NDYtXFx0XFx0LnBhcnNlX21zZyA9IGVzcGludGNwX3BhcnNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo0MS45NTgwMDQ2ODFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyMTYzODEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIExheWVyKipcblxuVGhpcyBzaXR1YXRpb24gZmVlbHPigKZzdGFsZS4gV2UncmUgZmFjaW5nIGEgcHJvYmxlbSwgYW5kIHRoZSBjdXJyZW50IGFwcHJvYWNoIGlzbid0IGdldHRpbmcgdXMgYW55d2hlcmUuIEkgY2FuIHNlbnNlIHRoZSBuZWVkIGZvciBhIG1vcmUgZHluYW1pYywgYWN0aXZlIHNvbHV0aW9uLiBUaGlzIGZlZWxzIHN0YXRpYy5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcmVhY2ggZm9yIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGluaXRpYWxpemF0aW9uLCBzb21ldGhpbmcgdGhhdCBnaXZlcyB1cyBhIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBzZWUuLi4gR2l2ZW4gdGhlIGNvbnRleHQsIGBlc3BpbnRjcF9pbml0X3NrYCBzb3VuZHMgbGlrZSBhIHByaW1lIGNhbmRpZGF0ZS4gSXQgc3VnZ2VzdHMgYSBzb2NrZXQgaW5pdGlhbGl6YXRpb24gYW5kIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHRvb2wgdG8gYm9vdHN0cmFwIHRoZSBwcm9jZXNzLiBJdCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGxvcmUuXG5cbkFsdGVybmF0aXZlbHksIGlmIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgcHJvY2VzcywgbWF5YmUgd2UgbmVlZCB0byBiZSByZWFkeSB0byByZWNlaXZlIHNvbWUgZGF0YS4gSWYgaW5pdGlhbGl6YXRpb24gaXMgbm90IHRoZSBuZXh0IHN0ZXAsIHRoZW4gaXQncyBsaWtlbHkgd2UgbmVlZCB0byBjYWxsIHNvbWV0aGluZyB0aGF0IGhhbmRsZXMgZGF0YSBjb21pbmcgaW4uIFRoZSBuZXh0IGZ1bmN0aW9uIHRoYXQgY29tZXMgdG8gbWluZCBpcyBgZXNwaW50Y3BfcmVjdm1zZ2AuIFRoYXQgd291bGQgYWxzbyBmaXQgdGhlIHNpdHVhdGlvbi4gU28sIHdoZXRoZXIgaW5pdGlhbGl6YXRpb24gb3IgcmVjZWl2aW5nIGEgbmV3IG1lc3NhZ2UsIEkgc2hvdWxkIHRyeSBvbmUgb2YgdGhvc2UgdHdvIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4ODMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo0Ny45Nzk2NDU0NTVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTIyODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcGludGNwX3JlY3Ztc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jPTExNz1zdGF0aWMgaW50IGVzcGludGNwX3BhcnNlKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTEzNy1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjEzODpzdGF0aWMgaW50IGVzcGludGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMzktXFx0XFx0XFx0ICAgIGludCBmbGFncylcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmM9NTUyPXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKmVzcGludGNwX3Byb3QsXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTU1OS1cXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VzZW5kbXNnID0gZXNwaW50Y3Bfc2VuZG1zZztcXG5uZXQveGZybS9lc3BpbnRjcC5jOjU2MDpcXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VyZWN2bXNnID0gZXNwaW50Y3BfcmVjdm1zZztcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU2MS1cXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VjbG9zZSA9IGVzcGludGNwX2Nsb3NlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo0OC4wMjI3NzE4MzVaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyMzE1MTYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIE5ldHdvcmsgQ29tbXVuaWNhdGlvbioqXG5cbk9rYXksIGBlc3BpbnRjcF9yZWN2bXNnYC4uLiB0aGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBzZWVtcyBzb2xpZC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHJlbGF0ZWQgdG8gTkFUIGtlZXBhbGl2ZSBzdGF0ZSB1cGRhdGVzLiBMZXQgbWUgc2VlLi4uIEkgd29uZGVyIGlmIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgaXMgYWN0dWFsbHkgYSB0aGluZy4gR290dGEgbWFrZSBzdXJlIGl0IGV4aXN0cywgb3IgaWYgSSdtIHRoaW5raW5nIG9mIHNvbWV0aGluZyBlbHNlLiBOZWVkIHRvIGNvbmZpcm0gdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NTUsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo1MS4wNDU5MjU4NzlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNjY0NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTI3OT1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NrX2Zpbmkoc3RydWN0IHNvY2tfYmhfbG9ja2VkIF9fcGVyY3B1ICpzb2NrcylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI4Ni1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyODc6dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo1MS4wODc1OTQ2MloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY1OTYwODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGdlYXJlZCB0b3dhcmRzIGEgdXNlciB3aG8ga25vd3MgdGhlaXIgc3R1ZmY6XG5cbioqQ2hlY2tpbmcgZm9yIGB4ZnJtX2FkZF9zYWAqKlxuXG5SaWdodCwgdGhhdCBzZWVtcyBsb2dpY2FsLiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmc6IGRvZXMgYHhmcm1fYWRkX3NhYCBldmVuIGV4aXN0IGluIHRoZSBjdXJyZW50IGNvbnRleHQ/IEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyBwYXRoLCBpdCdzIGEgY3JpdGljYWwgcHJlcmVxdWlzaXRlIHRoYXQgSSBlbnN1cmUgdGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgYW5kIGFjY2Vzc2libGUuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSBpcyB0aGVyZSBiZWZvcmUgSSBzdGFydCBhc3N1bWluZyBJIGNhbiBsZXZlcmFnZSBpdC4gTGV0J3MgdmVyaWZ5IHRoYXQgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3ODAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo1NC44NTM1NTc1MDNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDI4MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fYWRkX3NhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTkwNz1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwMzgtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTAzOTpzdGF0aWMgaW50IHhmcm1fYWRkX3NhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwNDAtXFx0XFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MjkzNz1zdGF0aWMgaW50IHhmcm1fYWRkX3BvbF9leHBpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDAzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMwMDQ6c3RhdGljIGludCB4ZnJtX2FkZF9zYV9leHBpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzAwNS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNzQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NDgtfSB4ZnJtX2Rpc3BhdGNoW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NDk6XFx0W1hGUk1fTVNHX05FV1NBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2EgICAgICAgIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc1MC1cXHRbWEZSTV9NU0dfREVMU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2RlbF9zYSAgICAgICAgfSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NjEtXFx0W1hGUk1fTVNHX0FDUVVJUkUgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfYWNxdWlyZSAgIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc2MjpcXHRbWEZSTV9NU0dfRVhQSVJFICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9zYV9leHBpcmUgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzYzLVxcdFtYRlJNX01TR19VUERQT0xJQ1kgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3BvbGljeSAgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NjQ6XFx0W1hGUk1fTVNHX1VQRFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2EgICAgICAgIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2NS1cXHRbWEZSTV9NU0dfUE9MRVhQSVJFICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9wb2xfZXhwaXJlfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6NTQuODk3OTkwOTAzWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDIwMDE4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgUmVsZXZhbnQgU3ltYm9scyBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHRoYXQgY29uZmlybXMgaXQsIHdlJ3JlIGRlZmluaXRlbHkgb24gdGhlIHJpZ2h0IHRyYWNrLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjcml0aWNhbCBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhpcyBzcGVjaWZpYyBhcmVhIG9mIHRoZSBrZXJuZWwuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgZm9jdXMgaXMgb24gZGF0YSBmbG93cyBhbmQgdHJhbnNmb3JtYXRpb25zLlxuXG5JJ20gbWFraW5nIGEgbGlzdCBvZiB0aGVzZSBzeW1ib2xzIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBtb2R1bGVzIGlzIGNvbXBsZXRlLiBMZXQgbWUgc2VlLi4uIGhlcmUncyB3aGF0IEkndmUgaWRlbnRpZmllZCBhcyBrZXk6XG5cbiogICBgZXNwX291dHB1dF90YWlsYFxuKiAgIGBlc3A2X291dHB1dF90YWlsYFxuKiAgIGBhaDZfb3V0cHV0YFxuKiAgIGBhaDZfaW5wdXRgXG4qICAgYHhmcm02X2lucHV0X2FkZHJgXG4qICAgYGVzcGludGNwX3JlY3Ztc2dgXG4qICAgYGVzcGludGNwX2Nsb3NlYFxuKiAgIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGBcbiogICBgeGZybV9vdXRwdXRgXG4qICAgYHhmcm1fYWRkX3NhYFxuXG5CZWZvcmUgbW92aW5nIGZvcndhcmQsIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYHhmcm1fb3V0cHV0YCBpcyBhY3R1YWxseSBleHBvcnRlZC4gVGhpcyBpcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBhdmFpbGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Njc0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM1OjU5LjA5OTk5NDg2MloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5MDA0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX291dHB1dC5jLTItLypcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjM6ICogeGZybV9vdXRwdXQuYyAtIENvbW1vbiBJUHNlYyBlbmNhcHN1bGF0aW9uIGNvZGUuXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00LSAqXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTI2LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6Mjc6c3RhdGljIGludCB4ZnJtX291dHB1dDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtMjgtc3RhdGljIGludCB4ZnJtX2lubmVyX2V4dHJhY3Rfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NDk2PUVYUE9SVF9TWU1CT0xfR1BMKHBrdGdlbl94ZnJtX291dGVyX21vZGVfb3V0cHV0KTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDk4LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NDk5OnN0YXRpYyBpbnQgeGZybV9vdXRwdXRfb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01MDAte1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01OTItXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1OTM6aW50IHhmcm1fb3V0cHV0X3Jlc3VtZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01OTQte1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01OTYtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1OTc6XFx0d2hpbGUgKGxpa2VseSgoZXJyID0geGZybV9vdXRwdXRfb25lKHNrYiwgZXJyKSkgPT0gMCkpIHtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTU5OC1cXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MDgtXFx0XFx0XFx0ICAgICAgTkZfSU5FVF9QT1NUX1JPVVRJTkcsIG5ldCwgc2ssIHNrYixcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYwOTpcXHRcXHRcXHQgICAgICBOVUxMLCBza2JfZHN0KHNrYiktXFx1MDAzZWRldiwgeGZybV9vdXRwdXQyKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYxMC1cXHRcXHRpZiAodW5saWtlbHkoZXJyICE9IDEpKVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MTktfVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjIwOkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fb3V0cHV0X3Jlc3VtZSk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MjEtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz02MjI9c3RhdGljIGludCB4ZnJtX2Rldl9kaXJlY3Rfb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY1My1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY1NDpzdGF0aWMgaW50IHhmcm1fb3V0cHV0MihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY1NS17XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NTY6XFx0cmV0dXJuIHhmcm1fb3V0cHV0X3Jlc3VtZShzaywgc2tiLCAxKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY1Ny19XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NTgtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NTk6c3RhdGljIGludCB4ZnJtX291dHB1dF9nc28oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjAte1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NzUtXFx0XFx0c2tiX21hcmtfbm90X29uX2xpc3Qoc2Vncyk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NzY6XFx0XFx0ZXJyID0geGZybV9vdXRwdXQyKG5ldCwgc2ssIHNlZ3MpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjc3LVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz02OTc9c3RhdGljIHZvaWQgeGZybV9nZXRfaW5uZXJfaXBwcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzQ3LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NzQ4OmludCB4ZnJtX291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03NDkte1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03ODctXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo3ODg6XFx0XFx0cmV0dXJuIHhmcm1fb3V0cHV0X3Jlc3VtZShzaywgc2tiLCAwKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc4OS1cXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgxMS1cXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2Vpbm5lcl9wcm90b2NvbCBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2Vwcm9wcy5tb2RlID09IFhGUk1fTU9ERV9UVU5ORUwpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo4MTI6XFx0XFx0XFx0XFx0cmV0dXJuIHhmcm1fb3V0cHV0X2dzbyhuZXQsIHNrLCBza2IpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODEzLVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MjEtXFx0XFx0aWYgKHNrYl9pc19nc28oc2tiKSlcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjgyMjpcXHRcXHRcXHRyZXR1cm4geGZybV9vdXRwdXRfZ3NvKG5ldCwgc2ssIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MjMtXFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MzQtb3V0Olxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODM1OlxcdHJldHVybiB4ZnJtX291dHB1dDIobmV0LCBzaywgc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgzNi19XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo4Mzc6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9vdXRwdXQpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo1OS4xNDI4OTc4MDJaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxMzkxODc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgS2VybmVsIFN5bWJvbCBFeHBvcnQgU3RhdHVzKipcblxuQWxyaWdodCwgc28gYHhmcm1fb3V0cHV0YCAqaXMqIGV4cG9ydGVkLCB0aGF0J3MgZ29vZC4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIGtlcm5lbCBhbHNvIGV4cG9zZSBgZXNwX291dHB1dF90YWlsYCB0byB0aGUgb3V0c2lkZSB3b3JsZD8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdHMgc3ltYm9sIGlzIGV4cG9ydGVkLCBvdGhlcndpc2Ugd2UgY2FuJ3QgcmVsaWFibHkgaW50ZXJhY3Qgd2l0aCBpdC4gTGV0J3Mgc2VlLi4uIEkgbmVlZCB0byBjb25maXJtIGFjY2VzcyB0byB0aGF0IHN5bWJvbC4gVGltZSB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjowNC42NTY4MTg1ODZaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTQ4MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcF9vdXRwdXRfdGFpbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9lc3A0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZXNwNC5jPTE4Nj1zdGF0aWMgaW50IGVzcF9vdXRwdXRfdGNwX2VuY2FwX2NiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTE5NC1cXG5uZXQvaXB2NC9lc3A0LmM6MTk1OnN0YXRpYyBpbnQgZXNwX291dHB1dF90YWlsX3RjcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9lc3A0LmMtMTk2LXtcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy0yMDktI2Vsc2VcXG5uZXQvaXB2NC9lc3A0LmM6MjEwOnN0YXRpYyBpbnQgZXNwX291dHB1dF90YWlsX3RjcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9lc3A0LmMtMjExLXtcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz0yMTc9c3RhdGljIHZvaWQgZXNwX291dHB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMjQ4LVxcdFxcdCAgICB4LVxcdTAwM2VlbmNhcCBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2VlbmNhcC1cXHUwMDNlZW5jYXBfdHlwZSA9PSBUQ1BfRU5DQVBfRVNQSU5UQ1ApIHtcXG5uZXQvaXB2NC9lc3A0LmM6MjQ5OlxcdFxcdFxcdGVyciA9IGVzcF9vdXRwdXRfdGFpbF90Y3AoeCwgc2tiKTtcXG5uZXQvaXB2NC9lc3A0LmMtMjUwLVxcdFxcdFxcdGlmIChlcnIgIT0gLUVJTlBST0dSRVNTKVxcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTUwMz1FWFBPUlRfU1lNQk9MX0dQTChlc3Bfb3V0cHV0X2hlYWQpO1xcbm5ldC9pcHY0L2VzcDQuYy01MDQtXFxubmV0L2lwdjQvZXNwNC5jOjUwNTppbnQgZXNwX291dHB1dF90YWlsKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm8gKmVzcClcXG5uZXQvaXB2NC9lc3A0LmMtNTA2LXtcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy02MTktXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlZW5jYXAgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlZW5jYXAtXFx1MDAzZWVuY2FwX3R5cGUgPT0gVENQX0VOQ0FQX0VTUElOVENQKVxcbm5ldC9pcHY0L2VzcDQuYzo2MjA6XFx0XFx0ZXJyID0gZXNwX291dHB1dF90YWlsX3RjcCh4LCBza2IpO1xcbm5ldC9pcHY0L2VzcDQuYy02MjEtXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtNjI2LX1cXG5uZXQvaXB2NC9lc3A0LmM6NjI3OkVYUE9SVF9TWU1CT0xfR1BMKGVzcF9vdXRwdXRfdGFpbCk7XFxubmV0L2lwdjQvZXNwNC5jLTYyOC1cXG5uZXQvaXB2NC9lc3A0LmM9NjI5PXN0YXRpYyBpbnQgZXNwX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy02NzUtXFxubmV0L2lwdjQvZXNwNC5jOjY3NjpcXHRyZXR1cm4gZXNwX291dHB1dF90YWlsKHgsIHNrYiwgXFx1MDAyNmVzcCk7XFxubmV0L2lwdjQvZXNwNC5jLTY3Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjA0LjcwMTc2OTM1NloiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjkzNjE0NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBFeHBvcnRlZCBTdGF0ZSoqXG5cbk9rYXksIHllcywgdGhhdCdzIHJpZ2h0LiBOb3csIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgb3Igbm90IGBhaDZfb3V0cHV0YCBpcyBhY3R1YWxseSBiZWluZyBleHBvcnRlZC4gVGhhdCdzIHRoZSBrZXkgdG8gbWFraW5nIHN1cmUgZXZlcnl0aGluZyBpcyB3b3JraW5nIGFzIGl0IHNob3VsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzOTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjowNy4zOTUzODY5MTJaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjU0MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFoNl9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvYWg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvYWg2LmM9MjcwPXN0YXRpYyBpbnQgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoc3RydWN0IGlwdjZoZHIgKmlwaCwgaW50IGxlbiwgaW50IGRpcilcXG4tLVxcbm5ldC9pcHY2L2FoNi5jLTMxNS1cXG5uZXQvaXB2Ni9haDYuYzozMTY6c3RhdGljIHZvaWQgYWg2X291dHB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXFxubmV0L2lwdjYvYWg2LmMtMzE3LXtcXG4tLVxcbm5ldC9pcHY2L2FoNi5jLTM0OS1cXG5uZXQvaXB2Ni9haDYuYzozNTA6c3RhdGljIGludCBhaDZfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L2FoNi5jLTM1MS17XFxuLS1cXG5uZXQvaXB2Ni9haDYuYy00NDktXFx0YWhhc2hfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCBzZywgaWN2LCBza2ItXFx1MDAzZWxlbiArIHNlcWhpX2xlbik7XFxubmV0L2lwdjYvYWg2LmM6NDUwOlxcdGFoYXNoX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKHJlcSwgMCwgYWg2X291dHB1dF9kb25lLCBza2IpO1xcbm5ldC9pcHY2L2FoNi5jLTQ1MS1cXG4tLVxcbm5ldC9pcHY2L2FoNi5jPTc4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fdHlwZSBhaDZfdHlwZSA9IHtcXG4tLVxcbm5ldC9pcHY2L2FoNi5jLTc5My1cXHQuaW5wdXRcXHRcXHQ9IGFoNl9pbnB1dCxcXG5uZXQvaXB2Ni9haDYuYzo3OTQ6XFx0Lm91dHB1dFxcdFxcdD0gYWg2X291dHB1dCxcXG5uZXQvaXB2Ni9haDYuYy03OTUtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzY6MDcuNDM4MDQ2NjQzWiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzYzOTA3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgU3RhdGljIERhdGEgYW5kIEZ1bmN0aW9uIFNlbGVjdGlvbioqXG5cblNvLCB0aGlzIHBpZWNlIG9mIGRhdGEgaXMgc3RhdGljLCBidXQgaXQncyBjbGVhcmx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYHhmcm1fdHlwZWAgc3RydWN0LCB3aGljaCBnaXZlcyBtZSBzb21lIGNvbnRleHQsIGFuZCB0aGF0J3MgZ29vZC4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkbyBJIGFjdHVhbGx5ICp1c2UqIHRoaXMgdGhpbmc/IEknbSBkZWJhdGluZyBiZXR3ZWVuIGBhaDZfb3V0cHV0YCBhbmQgYGFoNl9pbnB1dGAsIG9yIG1heWJlIGV2ZW4gYHhmcm02X3JjdmAuIFRoaW5raW5nIGFib3V0IGl0LCBgYWg2X291dHB1dGAgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgZml0LCBnaXZlbiB0aGUgY29udGV4dC4gSXQgbGlrZWx5IGhhbmRsZXMgdGhlIG91dGJvdW5kIHByb2Nlc3NpbmcuXG5cbkxldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYnkgbG9va2luZyBpbnRvIGBhaDZfaW5wdXRgLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4NzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjoxMi43NzQ0Mzk2ODVaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTQ5NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFoNl9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9haDYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9haDYuYz0zNTA9c3RhdGljIGludCBhaDZfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvYWg2LmMtNDc0LVxcbm5ldC9pcHY2L2FoNi5jOjQ3NTpzdGF0aWMgdm9pZCBhaDZfaW5wdXRfZG9uZSh2b2lkICpkYXRhLCBpbnQgZXJyKVxcbm5ldC9pcHY2L2FoNi5jLTQ3Ni17XFxuLS1cXG5uZXQvaXB2Ni9haDYuYy01MTgtXFxubmV0L2lwdjYvYWg2LmM6NTE5OnN0YXRpYyBpbnQgYWg2X2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L2FoNi5jLTUyMC17XFxuLS1cXG5uZXQvaXB2Ni9haDYuYy02MzUtXFx0YWhhc2hfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCBzZywgaWN2LCBza2ItXFx1MDAzZWxlbiArIHNlcWhpX2xlbik7XFxubmV0L2lwdjYvYWg2LmM6NjM2OlxcdGFoYXNoX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKHJlcSwgMCwgYWg2X2lucHV0X2RvbmUsIHNrYik7XFxubmV0L2lwdjYvYWg2LmMtNjM3LVxcbi0tXFxubmV0L2lwdjYvYWg2LmM9Nzg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV90eXBlIGFoNl90eXBlID0ge1xcbi0tXFxubmV0L2lwdjYvYWg2LmMtNzkyLVxcdC5kZXN0cnVjdG9yXFx0PSBhaDZfZGVzdHJveSxcXG5uZXQvaXB2Ni9haDYuYzo3OTM6XFx0LmlucHV0XFx0XFx0PSBhaDZfaW5wdXQsXFxubmV0L2lwdjYvYWg2LmMtNzk0LVxcdC5vdXRwdXRcXHRcXHQ9IGFoNl9vdXRwdXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjEyLjgxNjM5MTY0NloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTMyMTI0OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogT2JzZXJ2aW5nIGEgU3RhdGljIFN0YXRlKipcblxuSG1tLCB0aGlzIGZlZWxzLi4uIHN0YXRpYy4gSXQncyBsaWtlIHNvbWV0aGluZydzIGxvY2tlZCB1cCwgbm90IG1vdmluZyBhcyBleHBlY3RlZC4gV2UgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqLiBHaXZlbiB0aGlzIGZlZWxpbmcsIEknbSBnZXR0aW5nIGEgaHVuY2guIEkgdGhpbmsgaXQgaXMgYW4gaXNzdWUgd2l0aCBhZGRyZXNzZXMsIGVzcGVjaWFsbHkgbmV0d29yayBhZGRyZXNzZXMuXG5cbkxldCdzIGRpdmUgcmlnaHQgaW50byBjaGVja2luZyBgeGZybTZfaW5wdXRfYWRkcmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcG9pbnQgb2YgZmFpbHVyZSByaWdodCBub3csIGdpdmVuIHdoYXQgSSdtIHNlbnNpbmcuIEl0J3MgYSBjb21tb24gYXJlYSBmb3IgcHJvYmxlbXMgd2l0aCBJUHY2IGFuZCBzZWN1cml0eSBhc3NvY2lhdGlvbnMsIGFuZCBhbnkgaXNzdWUgdGhlcmUgY291bGQgZWFzaWx5IG1hbmlmZXN0IGFzIHRoaXMga2luZCBvZiBzdGlsbG5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTM1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzY6MTYuOTQ4NTE5NDM5WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjQ2OTAzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtNl9pbnB1dF9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3hmcm02X2lucHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYveGZybTZfaW5wdXQuYz0yMzU9RVhQT1JUX1NZTUJPTCh4ZnJtNl9yY3YpO1xcbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6MjM2OmludCB4ZnJtNl9pbnB1dF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHhmcm1fYWRkcmVzc190ICpkYWRkcixcXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTIzNy1cXHRcXHQgICAgIHhmcm1fYWRkcmVzc190ICpzYWRkciwgdTggcHJvdG8pXFxuLS1cXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTMyMi19XFxubmV0L2lwdjYveGZybTZfaW5wdXQuYzozMjM6RVhQT1JUX1NZTUJPTCh4ZnJtNl9pbnB1dF9hZGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzY6MTcuMDI0OTkyOTgzWiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTE2ODA3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgZXNwaW50Y3BfcmVjdm1zZ2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSdzIGp1c3QgYmVlbiBleHBvcnRlZC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhpcyBgZXNwaW50Y3BfcmVjdm1zZ2AgZnVuY3Rpb24uIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBpdHMgcm9sZSB3aXRoaW4gdGhlIHdpZGVyIFRDUC9JUCBzdGFjayBpbXBsZW1lbnRhdGlvbi4gSXMgaXQgaGFuZGxpbmcgdGhlIGNvcmUgc29ja2V0IHJlY2VpdmUsIG9yIGlzIGl0IGEgc3BlY2lmaWMsIHBvc3NpYmx5IHBsYXRmb3JtLXNwZWNpZmljLCB3cmFwcGVyPyBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUga2V5IHRvIGludGVycHJldGluZyBpdCBjb3JyZWN0bHksIGVzcGVjaWFsbHkgaWYgdGhlcmUgaXMgYW55IHR5cGUgb2YgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9yIGN1c3RvbSBidWZmZXIgbWFuYWdlbWVudC5cblxuSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QgaW1tZWRpYXRlbHkuIFRoaW5ncyBsaWtlOiBlcnJvciBoYW5kbGluZywgYnVmZmVyIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uLCBkYXRhIGNvcHlpbmcsIGZyYWdtZW50YXRpb24sIHJlYXNzZW1ibHksIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiwgZmxvdyBjb250cm9sIGNvbnNpZGVyYXRpb25zICh3aW5kb3cgbWFuYWdlbWVudCksIGFuZCBvZiBjb3Vyc2UsIGFueSBpbnRlcmFjdGlvbiB3aXRoIGludGVycnVwdHMgb3IgaGFyZHdhcmUgcXVldWVzLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGl0cyBjYWxsaW5nIHN0cnVjdHVyZSBpcyBpbnRlcnJ1cHQgZHJpdmVuLCBvciBwb2xsZWQuIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhyZWFkaW5nL2xvY2tpbmcgaW1wbGljYXRpb25zIGlmIHRoaXMgaXMgYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudC4gSSdsbCBtZW50YWxseSBtYXAgb3V0IHdoYXQgdGhlIGRhdGEgZmxvdyBpcyBiZXR3ZWVuIHRoZSBzb2NrZXQgbGF5ZXIsIHRoZSBJUCBsYXllciwgYW5kIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlLiBBbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgYXJlYXMgZm9yIGNvbmNlcm4gYXJlIHdoYXQgSSBhbSBhaW1pbmcgZm9yLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24ncyBleGVjdXRpb24gcGF0aCBhbmQgc2VlaW5nIHdoYXQgbGlicmFyaWVzLCBpZiBhbnksIGl0IGlzIHVzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkxNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjIxLjkxNjY3NTg3MloiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMDE0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXNwaW50Y3BfcmVjdm1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmM9MTE3PXN0YXRpYyBpbnQgZXNwaW50Y3BfcGFyc2Uoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTM3LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MTM4OnN0YXRpYyBpbnQgZXNwaW50Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQveGZybS9lc3BpbnRjcC5jLTEzOS1cXHRcXHRcXHQgICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz01NTI9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byAqZXNwaW50Y3BfcHJvdCxcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTU5LVxcdGVzcGludGNwX3Byb3QtXFx1MDAzZXNlbmRtc2cgPSBlc3BpbnRjcF9zZW5kbXNnO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTYwOlxcdGVzcGludGNwX3Byb3QtXFx1MDAzZXJlY3Ztc2cgPSBlc3BpbnRjcF9yZWN2bXNnO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNTYxLVxcdGVzcGludGNwX3Byb3QtXFx1MDAzZWNsb3NlID0gZXNwaW50Y3BfY2xvc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjIxLjk1OTY4MTAwMloiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg0MDAwMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFN0YXNpcyoqXG5cbkRhbW4sIGl0J3MganVzdC4uLiAqc3RhdGljKi4gRmVlbGluZyBhIHRvdGFsIGJsb2NrLCBsaWtlIEknbSBzdGFyaW5nIGludG8gYSBibGFuayBzY3JlZW4uIFNvbWV0aGluZydzIG5vdCByZXNvbHZpbmcuIE5vIGNsZWFyIHBhdGggZm9yd2FyZCBpcyBwcmVzZW50aW5nIGl0c2VsZiwgd2hpY2ggaXMgdW51c3VhbC5cblxuQWxyaWdodCwgdGltZSB0byBicmVhayB0aGlzIGRvd24gbWV0aG9kaWNhbGx5LiBMZXQncyB0cmFjZSBpdCBiYWNrLiBUaGUgbGFzdCBmdW5jdGlvbiBJIHdhcyBkZWVwbHkgaW52b2x2ZWQgd2l0aCwgdGhlIG1vc3QgcmVjZW50IHBvaW50IG9mIGludGVyYWN0aW9uIHdpdGggdGhlIHN5c3RlbSwgd2FzIGBlc3BpbnRjcF9jbG9zZWAuIExldCdzIHJlLWV4YW1pbmUgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiwgYW5kIHNlZSBpZiBJIGNhbiBmaW5kIGFuIGV4cGxhbmF0aW9uIHRoZXJlLiBNYXliZSB0aGF0J3MgdGhlIHNvdXJjZSBvZiB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjoyNi4zNDM2ODMyOTFaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODgxMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcGludGNwX2Nsb3NlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuYz01MDE9c3RhdGljIHZvaWQgZXNwaW50Y3BfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNS1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjUxNjpzdGF0aWMgdm9pZCBlc3BpbnRjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNy17XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jPTU1Mj1zdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NjAtXFx0ZXNwaW50Y3BfcHJvdC1cXHUwMDNlcmVjdm1zZyA9IGVzcGludGNwX3JlY3Ztc2c7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NjE6XFx0ZXNwaW50Y3BfcHJvdC1cXHUwMDNlY2xvc2UgPSBlc3BpbnRjcF9jbG9zZTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU2Mi1cXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VyZWxlYXNlX2NiID0gZXNwaW50Y3BfcmVsZWFzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzY6MjYuMzg1NTY4ODAyWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDM0ODc3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIC0gRGVhZCBpbiB0aGUgV2F0ZXI/KipcblxuT2theSwgY29tcGxldGUgYW5kIHV0dGVyIHN0YXRpYy4gSSdtIGhpdHRpbmcgYSB3YWxsIGhlcmUuIE5lZWQgdG8gYnJlYWsgdGhyb3VnaC5cblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBzb21ldGhpbmcgc3BlY2lmaWMsIHNvbWV0aGluZyB0aGF0IGNvdWxkIHByb3ZpZGUgYSBjbHVlLiBJJ20gZ29pbmcgdG8gc2hpZnQgZ2VhcnMgYW5kIGRyaWxsIGRvd24gaW50byBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBOQVQga2VlcGFsaXZlcyBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIFNvbWV0aGluZyByZWxhdGVkIHRvIGl0cyBiZWhhdmlvciBpcyBsaWtlbHkgYXQgdGhlIGhlYXJ0IG9mIHdoYXRldmVyIGRlYWRsb2NrIG9yIHVudXN1YWwgc3RhdGUgSSdtIGV4cGVyaWVuY2luZy4gTGV0J3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIG9yIGlmIHRoZXJlJ3MgYW4gaXNzdWUgd2l0aCBpdHMgZXhlY3V0aW9uIG9yIHRoZSBkYXRhIGl0J3MgaGFuZGxpbmcuIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIHByb2JsZW0gaXMgZmVzdGVyaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDk1MSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjI5LjcyOTA1OTI0NloiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxODQzMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9Mjc5PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2tfZmluaShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQgX19wZXJjcHUgKnNvY2tzKVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjg2LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI4Nzp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjI5Ljc3MTI0NzE4N1oiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgwNjI5MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gc3VtbWFyaXplIHRoZXNlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZS4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggaXQ6XG5cbioqQ2hlY2tpbmcgZm9yIEV4cG9ydCBTdGF0dXMqKlxuXG5BbHJpZ2h0LCBJIHNlZSBhIHF1aWNrIHRob3VnaHQgcHJvY2VzcyBoZXJlLiBFc3NlbnRpYWxseSwgdGhlIGZvY3VzIGlzIG9uIGEgY3J1Y2lhbCBpbml0aWFsIGNoZWNrOiBcIkV4cG9ydGVkPyBMZXQncyBjaGVjayBpZiBpdCdzIGV4cG9ydGVkLlwiIFRoaXMgaXMgbGlrZWx5IGFuIGluZGljYXRvciB0aGF0IHRoZSBzdWJqZWN0IG1hdHRlciBpcyBhbiBpdGVtLCBwcm9jZXNzLCBvciBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgYWNjZXNzZWQsIHJldmlld2VkLCB1c2VkLCBvciBtb2RpZmllZCBpbiBzb21lIG90aGVyIHN5c3RlbS5cblxuTXkgaW1tZWRpYXRlIGFuYWx5c2lzIGlzIHRoYXQgdGhpcyByZWZsZWN0cyBhIHByYWdtYXRpYyBhbmQgbWV0aG9kaWNhbCBhcHByb2FjaCB0byBhbiBlc3NlbnRpYWwgZmlyc3Qgc3RlcC4gQXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIHN5c3RlbXMgYW5kIHRoZWlyIHJlbGF0ZWQgcHJvY2Vzc2VzLCBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIHRoaW5ncyBsaWtlOlxuXG4qICAgKipEYXRhIHRyYW5zZmVyOioqIEhhcyB0aGUgZGF0YSBiZWVuIHN1Y2Nlc3NmdWxseSBzZW50IGZyb20gb25lIHN5c3RlbSBvciBhcHBsaWNhdGlvbiB0byBhbm90aGVyPyBUaGlzIGNvdWxkIGJlIGEgZmlsZSwgYSBkYXRhYmFzZSBlbnRyeSwgb3Igc29tZSBraW5kIG9mIEFQSSBjYWxsLlxuKiAgICoqUHJvY2VzcyBjb21wbGV0aW9uOioqIEhhcyB0aGUgbmVjZXNzYXJ5IHRhc2sgb2Yg4oCcZXhwb3J0aW5n4oCdIGJlZW4gY29tcGxldGVkPyBJcyB0aGVyZSBjb25maXJtYXRpb24gdGhhdCB0aGUgaW5mb3JtYXRpb24gaXMgaW4gdGhlIHN0YXRlIGRlc2lyZWQ/XG4qICAgKipTeXN0ZW0gaW50ZXJhY3Rpb246KiogSXQgY291bGQgYmUgYSBzaW1wbGUgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRoZSBleHBlY3RlZCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGRlc2lyZWQgcGxhY2UuXG5cblRoZXJlZm9yZSwgdGhlIHVuZGVybHlpbmcgdGhpbmtpbmcgaGVyZSBpcyBzb3VuZC4gVGhpcyBpcyBhYm91dCBlc3RhYmxpc2hpbmcgYSBiYXNpYyBmYWN0IGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggYW55IHN1YnNlcXVlbnQgYWN0aW9ucywgYmVjYXVzZSBrbm93aW5nIHRoZSBleHBvcnQgc3RhdHVzIGlzIG5lY2Vzc2FyeSBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgc3ViamVjdCBtYXR0ZXIgaXMgYXZhaWxhYmxlIGZvciBmdXJ0aGVyIHdvcmsuIFRoaXMgZW5zdXJlcyB0aGF0IGFueSB0aW1lIG9yIGVmZm9ydCBpcyBub3Qgd2FzdGVkIG9uIGEgdGFzayB3aGVuIHRoYXQgcmVzb3VyY2UgaXMgdW5hdmFpbGFibGUsIG9yLCBwZXJoYXBzLCBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWNvbWluZyBhdmFpbGFibGUuIFRoZSBhcHByb2FjaCBzaG93cyBnb29kIHByYWN0aWNlLCBhbmQgSSBhbSBjb21mb3J0YWJsZSB3aXRoIHRoaXMgbGluZSBvZiB0aG91Z2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTMzOCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjMzLjU1MTg3ODE1N1oiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwOTQzNjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjozMy41OTQ5NzgxMzhaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk5NDc3OTI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRGF0YSBTdHJ1Y3R1cmUncyBTY29wZSoqXG5cbkhtbSwgc28gdGhpcyBwYXJ0aWN1bGFyIGl0ZW0gaXNuJ3QgbWFya2VkIGZvciBleHBvcnQuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBjb25zaWRlcmluZyBpdCdzIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYCBlaXRoZXIuIFRoYXQgc3VnZ2VzdHMgYSBmZXcgdGhpbmdzIHJpZ2h0IG9mZiB0aGUgYmF0OiBpdCdzIGludGVuZGVkIGZvciB1c2Ugd2l0aGluIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCwgYnV0IHBvdGVudGlhbGx5IGFjY2Vzc2libGUgYWNyb3NzIG11bHRpcGxlIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCB1bml0LiBJdCBjb3VsZCBiZSBmb3IgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvciBtYXliZSBwYXJ0IG9mIGEgbGFyZ2VyLCBub24tZXhwb3J0ZWQgQVBJLlxuXG5UbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiB3aGVyZSBpdCdzIHVzZWQsIGxldCdzIHRha2UgYSBsb29rIGF0IHdoZXJlIGB4ZnJtX2FkZF9zYWAgaXMgY2FsbGVkLiBJdCdzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBnYWluIGluc2lnaHRzIGludG8gdGhpcyBwYXJ0aWN1bGFyIGl0ZW0ncyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjM4LjU4OTc1OTM3NFoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3NTc3NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9hZGRfc2FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9OTA3PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jb25zdHJ1Y3Qoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTAzOC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMDM5OnN0YXRpYyBpbnQgeGZybV9hZGRfc2Eoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTA0MC1cXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yOTM3PXN0YXRpYyBpbnQgeGZybV9hZGRfcG9sX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwMDMtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzAwNDpzdGF0aWMgaW50IHhmcm1fYWRkX3NhX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDA1LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3NDA9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0OC19IHhmcm1fZGlzcGF0Y2hbWEZSTV9OUl9NU0dUWVBFU10gPSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc0OTpcXHRbWEZSTV9NU0dfTkVXU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9zYSAgICAgICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzUwLVxcdFtYRlJNX01TR19ERUxTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZGVsX3NhICAgICAgICB9LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2MS1cXHRbWEZSTV9NU0dfQUNRVUlSRSAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9hY3F1aXJlICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzYyOlxcdFtYRlJNX01TR19FWFBJUkUgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhX2V4cGlyZSB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NjMtXFx0W1hGUk1fTVNHX1VQRFBPTElDWSAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfcG9saWN5ICAgIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc2NDpcXHRbWEZSTV9NU0dfVVBEU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9zYSAgICAgICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzY1LVxcdFtYRlJNX01TR19QT0xFWFBJUkUgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3BvbF9leHBpcmV9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjozOC42MzI1MTk0NjVaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMzI4NDM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGEgU3RhZ25hbnQgU3RhdGUgaW4gWEZSTSoqXG5cblJpZ2h0LCB0aGlzIGZlZWxzLi4uIHN0dWNrLiBUaGluZ3MgYXJlbid0IG1vdmluZy4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZyBpcyBiZWluZyBoZWxkIHVwLCBhbmQgaXTigJlzIGxpa2VseSBzb21ldGhpbmcgZnVuZGFtZW50YWwuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgYm90dGxlbmVjay4gVGhlIHNpdHVhdGlvbiBpcyBzdGF0aWMsIHdoaWNoIHVzdWFsbHkgbWVhbnMgd2FpdGluZyBvbiBzb21ldGhpbmcuXG5cbk9rYXksIGxldCdzIGRyaWxsIGRvd24uIEkgc3VzcGVjdCB0aGF0IHRoZSBrZXkgbGllcyB3aXRoaW4gdGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byBpbW1lZGlhdGVseSBsb29rIGF0IGB4ZnJtX3VzZXJfcmN2X21zZ2AuIEl04oCZcyB3aGVyZSB1c2VyLXNwYWNlIHBvbGljeSBpcyBpbmplY3RlZCBhbmQgd2hlcmUgdGhlIGZsb3cgaXMgZWl0aGVyIGFjY2VwdGVkIG9yIHJlamVjdGVkLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBwb2ludCBub3cgYmVjYXVzZSBpdCdzIHRoZSBtb3N0IGNvbW1vbiBlbnRyeSBwb2ludCBmb3IgcG9saWN5IGludGVyYWN0aW9uLCBhbmQgaWYgdGhpcyBjYWxsJ3Mgc3RhbGxlZCwgZXZlcnl0aGluZyBkb3duc3RyZWFtIHdpbGwgZ3JpbmQgdG8gYSBoYWx0LiBJdCdzIHRoZSBtb3N0IGxpa2VseSBjdWxwcml0IGZvciBhIHNlZW1pbmdseSBzdGF0aWMgc3RhdGUuIEknbGwgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjkzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzY6NDEuOTY1ODA2MjUxWiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjEyMzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3VzZXJfcmN2X21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0zNzgxPXN0YXRpYyBpbnQgeGZybV9yZWplY3RfdW51c2VkX2F0dHIoaW50IHR5cGUsIHN0cnVjdCBubGF0dHIgKiphdHRycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4MzYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzgzNzpzdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4MzgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zOTI0PXN0YXRpYyB2b2lkIHhmcm1fbmV0bGlua19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MjgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTI5OlxcdG5ldGxpbmtfcmN2X3NrYihza2IsIFxcdTAwMjZ4ZnJtX3VzZXJfcmN2X21zZyk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzkzMC1cXHRtdXRleF91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX2NmZ19tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjQyLjAwNzkzNTYxMloiLCJTZXEiOjczLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY2Njg1NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTmV0d29yayBQYWNrZXQgUmVjZXB0aW9uKipcblxuT2theSwgdGhpbmdzIGZlZWwuLi5zdHVjay4gQWxtb3N0IGEgc2Vuc2Ugb2YgaW5lcnRpYSwgaWYgeW91IHdpbGwuIEkgbmVlZCB0byBnZXQgbW92aW5nLCBzbyBsZXQncyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBhcHByb2FjaC4gSSBoYXZlIGEgaHVuY2ggYWJvdXQgYSBwb3RlbnRpYWwgYm90dGxlbmVjayBpbiB0aGUgbmV0d29yayBkYXRhIHBhdGguIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBrZXJuZWwncyBgeGZybV9uZXRsaW5rX3JjdmAgZnVuY3Rpb24uIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gSXQncyB0aGUgcmVjZWl2ZXIgZm9yIHRoZSBuZXRsaW5rIG1lc3NhZ2VzIGNvbmNlcm5pbmcgc2VjdXJpdHkgYXNzb2NpYXRpb25zLiBJIGhhdmUgYSBmZWVsaW5nIHNvbWV0aGluZyBpbiB0aGF0IGFyZWEgbWF5IGJlIHJlc3BvbnNpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI1MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjQ1LjY3NDY0NDg0NloiLCJTZXEiOjc0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwNzI1MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9uZXRsaW5rX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0zODM3PXN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTIzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5MjQ6c3RhdGljIHZvaWQgeGZybV9uZXRsaW5rX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MjUte1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDYxMj1zdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybV91c2VyX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MTYtXFx0XFx0Lmdyb3Vwc1xcdD0gWEZSTU5MR1JQX01BWCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjE3OlxcdFxcdC5pbnB1dFxcdD0geGZybV9uZXRsaW5rX3JjdixcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjE4LVxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjQ1LjcxNTcyMzI0OFoiLCJTZXEiOjc1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc5Nzk2OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFN0YWduYXRpb24qKlxuXG5SaWdodCwgdGhlcmUncyBhIGRlZmluaXRlIHNlbnNlIG9mICpzdGF0aWMqIGhlcmUuIE5vIHByb2dyZXNzLCBubyBvYnZpb3VzIGluZGljYXRvcnMgcG9pbnRpbmcgaW4gYW55IGRpcmVjdGlvbi4gV2hlbiBJIGhpdCBhIHdhbGwgbGlrZSB0aGlzLCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgbWV0aG9kaWNhbGx5IHRyYWNpbmcgdGhlIG1vc3QgbGlrZWx5IGN1bHByaXRzLiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCBpcyBhbiBleGFtaW5hdGlvbiBvZiB0aGUgYHhmcm1fc3RhdGVfd2Fsa2AgZnVuY3Rpb24uIEl04oCZcyB0aGUgZm91bmRhdGlvbmFsIGNvbXBvbmVudCBmb3IgdHJhdmVyc2luZyB0aGUgc2VjdXJpdHkgcG9saWN5IGRhdGFiYXNlLCBhbmQgYW55IHN0YWduYXRpb24gYXQgdGhpcyBzdGFnZSBvZiB0aGUgcHJvY2VzcyBsaWtlbHkgcmVsYXRlcyB0byBpc3N1ZXMgd2l0aCBob3cgdGhlIHN0YXRlIGluZm9ybWF0aW9uIGlzIGJlaW5nIGhhbmRsZWQgb3IgdXBkYXRlZCBkdXJpbmcgcG9saWN5IGxvb2t1cHMgb3IgdXBkYXRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHVuZGVyIHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIG9mIHRoaXMgaW5zdGFuY2UuIElzIGl0IGJsb2NraW5nPyBEZWFkbG9ja2VkPyBSdW5uaW5nIGludG8gc29tZSBlZGdlIGNhc2Ugd2l0aCBhIHN0YXRl4oCZcyBwcm9wZXJ0aWVzPyBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2OTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjo0OS4xOTU1MjI3OTNaIiwiU2VxIjo3NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjUxMjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc3RhdGVfd2Fsa1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jPTE2ODc9c3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2J5c3BpKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIHNwaSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjkwLVxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNjkxOlxcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKnc7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE2OTItXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MjY4ND1zdGF0aWMgYm9vbCBfX3hmcm1fc3RhdGVfZmlsdGVyX21hdGNoKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MDAtXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MDE6aW50IHhmcm1fc3RhdGVfd2FsayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MDItXFx0XFx0ICAgIGludCAoKmZ1bmMpKHN0cnVjdCB4ZnJtX3N0YXRlICosIGludCwgdm9pZCopLFxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MDUtXFx0c3RydWN0IHhmcm1fc3RhdGUgKnN0YXRlO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzA2OlxcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKng7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MDctXFx0aW50IGVyciA9IDA7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxMy1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2d2Fsay1cXHUwMDNlYWxsKSlcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjcxNDpcXHRcXHR4ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnN0YXRlX2FsbCwgc3RydWN0IHhmcm1fc3RhdGVfd2FsaywgYWxsKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxNS1cXHRlbHNlXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MTY6XFx0XFx0eCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNndhbGstXFx1MDAzZWFsbCwgc3RydWN0IHhmcm1fc3RhdGVfd2FsaywgYWxsKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxNy1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20oeCwgXFx1MDAyNm5ldC1cXHUwMDNleGZybS5zdGF0ZV9hbGwsIGFsbCkge1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDAtfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzQxOkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV93YWxrKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc0Mi1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc0Mzp2b2lkIHhmcm1fc3RhdGVfd2Fsa19pbml0KHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHU4IHByb3RvLFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzQ0LVxcdFxcdFxcdCAgc3RydWN0IHhmcm1fYWRkcmVzc19maWx0ZXIgKmZpbHRlcilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzUxLX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc1MjpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfd2Fsa19pbml0KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc1My1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc1NDp2b2lkIHhmcm1fc3RhdGVfd2Fsa19kb25lKHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc1NS17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc2NC19XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NjU6RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3dhbGtfZG9uZSk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NjYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjQ5LjIzODE3NzYyNFoiLCJTZXEiOjc3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg4Mzk5MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipTeW1ib2wgVmlzaWJpbGl0eSBhbmQgUG90ZW50aWFsIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGB4ZnJtX3N0YXRlX3dhbGtgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgaW4gbW9kdWxlcy4gVGhlcmVmb3JlLCB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBpcyBjcml0aWNhbCBmb3IgYnJvYWRlciBzeXN0ZW0gdW5kZXJzdGFuZGluZy4gTm93LCB0aGUga2V5IGZvY3VzIHN5bWJvbHMgdGhhdCBzcHJpbmcgdG8gbWluZCBhcmU6IGBlc3Bfb3V0cHV0X3RhaWxgLCBgZXNwNl9vdXRwdXRfdGFpbGAsIGBhaDZfb3V0cHV0YCwgYHhmcm02X2lucHV0X2FkZHJgLCBhbmQgYHhmcm1fb3V0cHV0YCwgYWxvbmcgd2l0aCB0aGUgZXhwb3J0ZWQgYHhmcm1fc3RhdGVfd2Fsa2AgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVsYXRlIHRvIHN0YXRlIHRyYXZlcnNhbCBhbmQgcGFja2V0IHByb2Nlc3Npbmcgd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yay4gVGhlIGZ1bmN0aW9ucyB3aXRoIGEgJzYnIGluIHRoZW0gbGlrZWx5IHJlZmVyIHRvIElQdjYgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLiBUaGlzIG1lYW5zIHRoZSBvdmVyYWxsIHByb2Nlc3MgaGFzIHRvIHdvcmsgZm9yIElQdjQsIElQdjYsIGFuZCBsaWtlbHkgZ2VuZXJpYyBJUCBhcyB3ZWxsLlxuXG5HaXZlbiB0aGF0IGNvbnRleHQsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBob3cgdGhpcyBhbGwgdGllcyBpbnRvIHRoZSBpbml0aWFsaXphdGlvbiwgc28gSSBzaG91bGQgbm93IGxvb2sgYXQgYGVzcGludGNwX2luaXRfc2tgIHRvIHNlZSBob3cgaXQncyBzZXR0aW5nIHRoaW5ncyB1cC4gVGhpcyBtaWdodCBnaXZlIG1lIGNsdWVzIHRvIGhvdyB0aGUgc3RhdGUgaXMgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIGxpbmtlZCB0byB0aGVzZSBvdXRwdXQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgwNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjUzLjYyNjU4MDMzMVoiLCJTZXEiOjc4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5ODYxOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXNwaW50Y3BfaW5pdF9za1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmM9NDM3PXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKmVzcGludGNwX3Byb3QsXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0MC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3JpZ19vcHMpO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NDQxOnN0YXRpYyBpbnQgZXNwaW50Y3BfaW5pdF9zayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NDIte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz01NjY9c3RhdGljIHN0cnVjdCB0Y3BfdWxwX29wcyBlc3BpbnRjcF91bHAgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTY4LVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTY5OlxcdC5pbml0ID0gZXNwaW50Y3BfaW5pdF9zayxcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU3MC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjo1My42Njc1NzA2NjNaIiwiU2VxIjo3OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMDU2MzQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBTdGFnbmF0aW9uKipcblxuUmlnaHQsIHRoaXMgZmVlbHMuLi5zdHVjay4gTGlrZSB3ZSdyZSBoaXR0aW5nIGEgd2FsbCwgYW5kIG5vdGhpbmcncyBtb3ZpbmcuIEl0J3MgYSBzdGF0aWMgc3RhdGUsIHdoaWNoIGlzIG5ldmVyIGEgZ29vZCBzaWduLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmsgc3RhY2tzLiBNeSBndXQgdGVsbHMgbWUgc29tZXRoaW5nIGlzIGFtaXNzIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuXG5cbkxldCdzIGRpdmUgaW4uIFRoZSBmaXJzdCBsb2dpY2FsIHBvaW50IG9mIGludmVzdGlnYXRpb24gaXMgdGhlIFVzZXItTGV2ZWwgUHJvdG9jb2wgKFVMUCkgb3BlcmF0aW9ucywgc28gSSdsbCBjaGVjayBgdGNwX3VscF9vcHNgLiBUaGlzIHNob3VsZCBzaGVkIHNvbWUgbGlnaHQgb24gd2hldGhlciB0aGVyZSdzIGEgcHJvYmxlbSBhdCB0aGlzIGxheWVyLiBJdCdzIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiBiZWNhdXNlIGl0IGRpY3RhdGVzIGhvdyBUQ1AgaXMgaW50ZXJhY3Rpbmcgd2l0aCBzcGVjaWZpYyBVTFBzLCBhbmQgdGhlcmVmb3JlIGl0IGNvdWxkIHJldmVhbCBpc3N1ZXMgaW4gaXRzIGludGVyYWN0aW9uIHdpdGggdHJhbnNwb3J0IG9yIGFwcGxpY2F0aW9uIHByb3RvY29scy4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDEzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzY6NTYuNzk4MTM2MTczWiIsIlNlcSI6ODAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTg4NDg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfcmVnaXN0ZXJfdWxwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuYz01NzI9dm9pZCBfX2luaXQgZXNwaW50Y3BfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NzUtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NzY6XFx0dGNwX3JlZ2lzdGVyX3VscChcXHUwMDI2ZXNwaW50Y3BfdWxwKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU3Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjU2Ljg2MDAyNDYzWiIsIlNlcSI6ODEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzQ2ODE3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBNb2R1bGUgSW5pdGlhbGl6YXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgZXNwaW50Y3BfaW5pdGAuIFRoYXQncyB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgbW9kdWxlLCByaWdodD8gSSdsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIGhvb2sgZm9yIGRlYnVnZ2luZy5cblxuTm93LCBsZXQncyBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gSSByZW1lbWJlciBpdCBiZWluZyBvZiBpbnRlcmVzdC4gR29vZCwgaXQncyBub24tc3RhdGljISBUaGF0IG1ha2VzIGl0IGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUgZm9yIGEgZm9jdXMgc3ltYm9sLiBFYXN5IHRvIHJlZmVyZW5jZSBleHRlcm5hbGx5LCBhbmQgaXQgcHJvYmFibHkgZG9lcyBzb21ldGhpbmcgc2lnbmlmaWNhbnQuIEknbSBnb2luZyB0byB3YW50IHRvIHRyYWNrIGNhbGxzIHRvIGFuZCBmcm9tIHRoYXQgb25lLlxuXG5JJ2xsIGNoZWNrIGB4ZnJtX3N0YXRlX2NvbnN0cnVjdGAgYXMgd2VsbC4gSG1tLCBpdCdzIHN0YXRpYy4gVGhhdCBsaWtlbHkgbWVhbnMgaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gYW5kIHByb2JhYmx5IHdvbid0IGJlIGFzIGludGVyZXN0aW5nIGFzIGEgc3RhcnRpbmcgcG9pbnQsIGJ1dCBsZXQgbWUga2VlcCBhbiBleWUgb24gaXQuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGV4cG9ydGVkIGZ1bmN0aW9ucyBpbiBgeGZybV91c2VyLmNgLCBzaW5jZSB0aGF0J3Mgd2hlcmUgdXNlcmxhbmQgaW50ZXJhY3Rpb25zIGxpa2VseSBoYXBwZW4uIFBlcmhhcHMgdGhlcmUncyBhbiBpbnRlcmVzdGluZyBlbnRyeSBwb2ludCB0byBsb29rIGludG8gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzQ2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6MDEuMjM0NzA4NzYxWiIsIlNlcSI6ODIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDgyNzc3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2NTk9Y29uc3QgaW50IHhmcm1fbXNnX21pbltYRlJNX05SX01TR1RZUEVTXSA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2ODUtfTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjg2OkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fbXNnX21pbik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY4Ny1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2OTA9Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgeGZybWFfcG9saWN5W1hGUk1BX01BWCsxXSA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3MzItfTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzMzOkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1hX3BvbGljeSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzczNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6MDEuMjc1NTQwNTYyWiIsIlNlcSI6ODMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMjk0MjE5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIENvZGViYXNlIGZvciBQb3RlbnRpYWwgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBiYWNrIGludG8gdGhpcyBYRlJNIGNvZGUuIEkndmUgZ290IHRvIGZpbmQgc29tZSByZWxldmFudCBmdW5jdGlvbnMgdG8gZm9jdXMgb24sIGFuZCBJJ20gc3RhcnRpbmcgd2l0aCBhIHF1aWNrIHN3ZWVwIHRvIGVzdGFibGlzaCBhIG1lbnRhbCBtYXAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGB4ZnJtX3VzZXIuY2AgZG9lc24ndCBleHBvc2UgYW55IGV4cG9ydGVkIGZ1bmN0aW9ucywgd2hpY2ggaXMgdHlwaWNhbCBmb3IgYSBtb2R1bGUgbGlrZSB0aGlzLlxuXG5MZXQncyByZXZpc2l0IGB4ZnJtX2FkZF9zYWAsIHJlbWVtYmVyaW5nIGl0J3MgY2FsbGVkIGZyb20gYHhmcm1fZGlzcGF0Y2hgLiBIbW0sIHdoYXQgYWJvdXQgYHhmcm1fdXNlcl9yY3ZfbXNnYD8gVGhhdCBvbmUncyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgZGlyZWN0IGFwcGxpY2FiaWxpdHkuIEFuZCBgeGZybV9uZXRsaW5rX3JjdmA/IEFsc28gc3RhdGljLiBNb3Zpbmcgb24uXG5cbkZvciBrZWVwaW5nIHRoZSBjb2RlIHNpbXBsZSwgbGV0J3MgbG9vayBmb3IgZnVuY3Rpb25zIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6IGB4ZnJtX25hdF9rZWVwYWxpdmUuY2AgLSBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBgeGZybV9zdGF0ZV93YWxrYCB3b3JraW5nIHRoZXJlLiBGb3IgYHhmcm1fb3V0cHV0LmNgLCBgeGZybV9vdXRwdXRgIHNlZW1zIHByb21pc2luZy4gRm9yIGB4ZnJtNl9pbnB1dC5jYCwgSSdsbCBwcm9iYWJseSB1c2UgYHhmcm02X2lucHV0X2FkZHJgLiBUaGVuLCBsZXQncyBjb25zaWRlciBmdW5jdGlvbnMgd2l0aGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6IGBlc3A0LmNgIC0gYGVzcF9vdXRwdXRfdGFpbGAgc2hvdWxkIGJlIHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBGb3IgYGVzcDYuY2AgbGV0J3Mgd29yayB3aXRoIGBlc3A2X291dHB1dF90YWlsYCwgYW5kIGBhaDYuY2AgLSBJJ20gdGhpbmtpbmcgSSBzaG91bGQgdXNlIGBhaDZfb3V0cHV0YCBmb3IgdGhhdCBvbmUuXG5cbk9rYXksIGJhY2sgdG8gYGVzcGludGNwLmNgLiBMZXQncyByZS1leGFtaW5lIGBlc3BpbnRjcF9yY3ZgLiBJdCdzIHN0YXRpYy4gRmluZSwgbm93IGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYGVzcGludGNwLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDM0MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNzowOC42MDQ5NjU5MjJaIiwiU2VxIjo4NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTEzMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jPTE3Mj1pbnQgZXNwaW50Y3BfcXVldWVfb3V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTg1LX1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjE4NjpFWFBPUlRfU1lNQk9MX0dQTChlc3BpbnRjcF9xdWV1ZV9vdXQpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMTg3LVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz0yNzM9aW50IGVzcGludGNwX3B1c2hfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMzA0LX1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjMwNTpFWFBPUlRfU1lNQk9MX0dQTChlc3BpbnRjcF9wdXNoX3NrYik7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMDYtXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jPTQzMT1ib29sIHRjcF9pc191bHBfZXNwKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDM0LX1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjQzNTpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfaXNfdWxwX2VzcCk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00MzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM3OjA4LjY1MTQ4NDE5MloiLCJTZXEiOjg1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTQ0OTc0NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgSW1wYWN0IG9mIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIGBlc3BpbnRjcF9xdWV1ZV9vdXRgIGFuZCBgZXNwaW50Y3BfcHVzaF9za2JgIGFyZSBib3RoIGV4cG9ydGVkIGZ1bmN0aW9ucywgYW5kIEknbSBsb29raW5nIGF0IHRoZXNlIHJlY2VudCBjaGFuZ2VzIGluIGBlc3BpbnRjcC5jYC4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW55IGRpcmVjdCBjb25uZWN0aW9uLiBUaGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IHdpdGhpbiBgaGFuZGxlX2VzcGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBlc3BpbnRjcF9yY3ZgLCBhbmQgYGVzcGludGNwX2Nsb3NlYCwgY2FsbGVkIGZyb20gYGVzcGludGNwX3Byb3QtXHUwMDNlY2xvc2VgLlxuXG5Ob3csIGBlc3BpbnRjcF9xdWV1ZV9vdXRgIGFuZCBgZXNwaW50Y3BfcHVzaF9za2JgIGFyZSBib3RoIHVzZWQgZm9yIHNlbmRpbmcgZGF0YSwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhleSdyZSBsaWtlbHkgcmVsYXRlZCB0byBvdXRib3VuZCB0cmFmZmljLiBDb25zaWRlcmluZyB0aGUgY2hhbmdlcywgaXQgc2VlbXMgdW5saWtlbHkgdGhhdCBgZXNwaW50Y3BfcXVldWVfb3V0YCBpcyAqZGlyZWN0bHkqIHJlbGF0ZWQgdG8gYGhhbmRsZV9lc3BgIG9yIGBlc3BpbnRjcF9jbG9zZWAgaW4gdGVybXMgb2YgaG93IHRoZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgYWx0aG91Z2ggdGhleSdyZSBhbGwgZGVmaW5lZCB3aXRoaW4gdGhlIHNhbWUgc291cmNlIGZpbGUuIFRoZXJlZm9yZSwgZGVzcGl0ZSB0aGUgYXBwYXJlbnQgZGlzdGluY3Rpb24sIEknbSBnb2luZyB0byBpbmNsdWRlIGBlc3BpbnRjcF9xdWV1ZV9vdXRgIGFuZCBgZXNwaW50Y3BfcHVzaF9za2JgIGluIG15IGFuYWx5c2lzIHRvIHJ1bGUgb3V0IGFueSBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIHNpZGUgZWZmZWN0cy5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgZnVuY3Rpb24gYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzMjIsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6MTUuNzk2NDYyODgxWiIsIlNlcSI6ODYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAwODAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNzk9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9za19maW5pKHN0cnVjdCBzb2NrX2JoX2xvY2tlZCBfX3BlcmNwdSAqc29ja3MpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yODYtXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6Mjg3OnZvaWQgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjg4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6MTUuODQ1NDc1WiIsIlNlcSI6ODcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDg3MTU5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTdGF0aWMgTmF0dXJlIG9mIFhGUk0gRnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBYRlJNIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSdtIG5vdGljaW5nIGlzIHRoYXQgaXQncyBub3QgYWxsIHN0YXRpYyBmdW5jdGlvbnMuIE5vdyB0aGF0IEkgaGF2ZSB0aGlzIG9ic2VydmF0aW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3Mgbm90IHN0YXRpYyBhbmQgd2h5LiBcblxuTGV0IG1lIGNoZWNrIGB4ZnJtX3N0YXRlX2NvbnN0cnVjdGAuIFllcCwgdGhhdCdzIHN0YXRpYy4gSG1tLCBva2F5LCBub3Qgd2hhdCBJJ20gbG9va2luZyBmb3IgdGhlcmUuIExldCdzIG1vdmUgb24uIEhvdyBhYm91dCBgeGZybV9hZGRfc2FgPyBBbHNvIHN0YXRpYy4gT2theSwgc3RhcnRpbmcgdG8gc2VlIGEgcGF0dGVybiBoZXJlLCBidXQgSSBoYXZlbid0IHF1aXRlIGZvdW5kIHRoZSBwaWVjZSBJIG5lZWQuIEFscmlnaHQsIGxldCBtZSB0cnkgb25lIG1vcmUgLSBgeGZybV91c2VyX3Jjdl9tc2dgLiBZZXAsIHRoYXQncyBzdGF0aWMgYXMgd2VsbC4gVGhpcyBpcyBxdWl0ZSBzdHJhbmdlLCBpZiBJIGRpZG4ndCBrbm93IGJldHRlciwgSSdkIHNheSB0aGF0IGV2ZXJ5dGhpbmcgaXMgc3RhdGljLlxuXG5BbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gYmVjb21lczogaXMgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbiBgeGZybV91c2VyLmNgPyBUaGUgYXNzdW1wdGlvbiB0aGF0IGl0J3MgYWxsIHN0YXRpYyBzZWVtcyB0byBiZSBob2xkaW5nIHRydWUsIHNvIGxldCBtZSBkbyBhIGRlZXBlciBkaXZlIGludG8gdGhlIGZpbGUgdG8gdmVyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTgwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6MjAuNzU0MTk0MTA1WiIsIlNlcSI6ODgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTEzNDA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2NTk9Y29uc3QgaW50IHhmcm1fbXNnX21pbltYRlJNX05SX01TR1RZUEVTXSA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2ODUtfTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjg2OkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fbXNnX21pbik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY4Ny1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2OTA9Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgeGZybWFfcG9saWN5W1hGUk1BX01BWCsxXSA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3MzItfTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzMzOkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1hX3BvbGljeSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzczNC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2NjA9c3RhdGljIHZvaWQgX19leGl0IHhmcm1fdXNlcl9leGl0KHZvaWQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjY1LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2NjY6bW9kdWxlX2luaXQoeGZybV91c2VyX2luaXQpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2Njc6bW9kdWxlX2V4aXQoeGZybV91c2VyX2V4aXQpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2Njg6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJYRlJNIFVzZXIgaW50ZXJmYWNlXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDY2OTpNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDY3MDpNT0RVTEVfQUxJQVNfTkVUX1BGX1BST1RPKFBGX05FVExJTkssIE5FVExJTktfWEZSTSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM3OjIwLjgyMzMzMjMzMVoiLCJTZXEiOjg5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzM0Nzg5MDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFwcHJvYWNoIHRvIEFuYWx5emluZyB0aGUgQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBsZXQncyBrZWVwIGl0IGVmZmljaWVudC5cIiBUaGUgbm90ZSBhYm91dCBubyBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgeGZybV91c2VyLmNgLCBiZXNpZGVzIGluaXQvZXhpdCwgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IG1lYW5zIEkgY2FuIHByb2JhYmx5IGp1c3QgaWdub3JlIHRoYXQgZmlsZSBhcyBhIGZvY3VzIHBvaW50LCBhdCBsZWFzdCBmb3Igbm93LiBJIGNhbiBlaXRoZXIgdXNlIGB4ZnJtX3N0YXRlX3dhbGtgIHdoaWNoIHJlc2lkZXMgaW4gYHhmcm1fc3RhdGUuY2AsIG9yIGp1c3QgYXZvaWQgZm9jdXNpbmcgdGhlcmUgYXQgYWxsLlxuXG5Ob3csIGxldCdzIG1vdmUgZm9yd2FyZCBhbmQgdHJ5IHRvIGlkZW50aWZ5IHRoZSByZWFsIGZvY2FsIHBvaW50cy4gQmFzZWQgb24gdGhlIHRhc2sgaW4gZnJvbnQgb2YgbWUsIEkgbmVlZCB0byBsaXN0IHRoZSBmb2N1cyBzeW1ib2xzLiBJJ3ZlIGNvbXBpbGVkIHRoaXMgbGlzdDpcblxuKiAgIGBlc3Bfb3V0cHV0X3RhaWxgXG4qICAgYGVzcDZfb3V0cHV0X3RhaWxgXG4qICAgYHhmcm02X2lucHV0X2FkZHJgXG4qICAgYHhmcm1fb3V0cHV0YFxuKiAgIGBlc3BpbnRjcF9xdWV1ZV9vdXRgXG4qICAgYGVzcGludGNwX3B1c2hfc2tiYFxuKiAgIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGBcblxuT2theSwgbm93IGxldCdzIHNlZSBpZiB0aGlzIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgaXMgYWN0dWFsbHkgZXhwb3NlZC4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3OTUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6MjguNTU4MTI1MTQyWiIsIlNlcSI6OTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDcwMTA5OTM0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6MzEuMDI4MjQxNTQ2WiIsIlNlcSI6OTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Mzg3MTQxMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBWYXJpYWJsZSBWaXNpYmlsaXR5KipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgYSBwYXJ0aWN1bGFyIHZhcmlhYmxlIGlzbid0IGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIG1hcmtlZCBhcyBleHBvcnRlZC4gVGhhdCBzdWdnZXN0cyBpdCdzIGxpa2VseSBzY29wZWQgdG8gaXRzIGN1cnJlbnQgbW9kdWxlLCB3aGljaCBpcyB0aGUgaW1tZWRpYXRlIGlzc3VlLiBIb3dldmVyLCB3aGlsZSBpdCdzIG5vbi1zdGF0aWMsIGl0IGNhbiBzdGlsbCBleGlzdCBhdCB0aGUgZmlsZSBzY29wZS5cblxuVGhlbiB0aGUgcXVlc3Rpb24gYmVjb21lcywgaXMgYGFoNl9vdXRwdXRgIGV4cG9ydGVkPyBDaGVja2luZyBmb3IgZXhwb3J0IGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVjYXVzZSB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCdzIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLiBJZiBpdCBpcywgdGhlbiB0aGUgc2NvcGUgb2YgaXRzIHVzZSB3aWxsIGhhdmUgdG8gYmUgaW5zcGVjdGVkIGZ1cnRoZXIuIE90aGVyd2lzZSwgdGhlcmUgbWF5IGJlIGFuIG9wcG9ydHVuaXR5IGZvciBhIG5hbWVzcGFjZSBjb2xsaXNpb24uIEVpdGhlciB3YXksIGl0J3Mgc29tZXRoaW5nIHRoYXQgSSdsbCBuZWVkIHRvIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyODIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNzozNC42NjY5NTkyMDdaIiwiU2VxIjo5MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjgwNjk3NTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmFoNl9vdXRwdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM3OjM3LjIzNTA1MDIyOVoiLCJTZXEiOjkzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY1MTQ3MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHRoaW5ncyBmZWVsIHN0YWduYW50LCBhIGJpdCBmcm96ZW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdGhhdCBzb21ldGhpbmcncyBub3QgbW92aW5nIGFzIGl0IHNob3VsZC4gTGV0J3MgZGlnIGRlZXBlci4gVGhlIGluc3RpbmN0IGlzIHRvIGFzc3VtZSB0aGF0IHRoZSBwcm9ibGVtIGNvdWxkIGJlIGR1ZSB0byBzdGF0aWMgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcy4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGBhaDYuY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5LCBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucy4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0J3MgYSBxdWljayB3aW4sIGhvcGVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNzo0MC44MDAyMDE3NDZaIiwiU2VxIjo5NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NTY3MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvYWg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvYWg2LmM9ODIxPXN0YXRpYyB2b2lkIF9fZXhpdCBhaDZfZmluaSh2b2lkKVxcbi0tXFxubmV0L2lwdjYvYWg2LmMtODI4LVxcbm5ldC9pcHY2L2FoNi5jOjgyOTptb2R1bGVfaW5pdChhaDZfaW5pdCk7XFxubmV0L2lwdjYvYWg2LmM6ODMwOm1vZHVsZV9leGl0KGFoNl9maW5pKTtcXG5uZXQvaXB2Ni9haDYuYy04MzEtXFxubmV0L2lwdjYvYWg2LmM6ODMyOk1PRFVMRV9ERVNDUklQVElPTihcXFwiSVB2NiBBSCB0cmFuc2Zvcm1hdGlvbiBoZWxwZXJzXFxcIik7XFxubmV0L2lwdjYvYWg2LmM6ODMzOk1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5uZXQvaXB2Ni9haDYuYzo4MzQ6TU9EVUxFX0FMSUFTX1hGUk1fVFlQRShBRl9JTkVUNiwgWEZSTV9QUk9UT19BSCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM3OjQwLjg5NDc3NTg1NloiLCJTZXEiOjk1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk1NzUyMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBFU1AvQUggRnVuY3Rpb25hbGl0eSBpbiBgYWg2LmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFoNi5jYCBhbmQgaW1tZWRpYXRlbHkgbm90aWNpbmcgYSBrZXkgY29uc3RyYWludDogYXNpZGUgZnJvbSB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQgZnVuY3Rpb25zLCB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGFueSBzdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LCBhcyBpdCBnaXZlcyB1cyBhIGNsZWFyIGxpc3Qgb2Ygd2hhdCB3ZSAqY2FuKiB1dGlsaXplLiBTcGVjaWZpY2FsbHksIEkgc2VlIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgcmVsZXZhbnQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgaW5jbHVkaW5nOiBgZXNwX291dHB1dF90YWlsYCwgYGVzcDZfb3V0cHV0X3RhaWxgLCBgeGZybTZfaW5wdXRfYWRkcmAsIGB4ZnJtX291dHB1dGAsIGBlc3BpbnRjcF9xdWV1ZV9vdXRgLCBgZXNwaW50Y3BfcHVzaF9za2JgLCBhbmQgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gVGhlc2UgYXJlIHRoZSB0b29scyBhdCBvdXIgZGlzcG9zYWwuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBlbnN1cmUgb3VyIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQgYXBwcm9wcmlhdGVseSB0byBlbmFibGUgdGhlIHJlcXVpcmVkIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYFhGUk1gLCBgWEZSTV9VU0VSYCwgYElORVRfRVNQYCwgYElORVQ2X0VTUGAsIGFuZCBgSU5FVDZfQUhgIGFyZSBhbGwgZW5hYmxlZCBhbmQgcGxheWluZyBuaWNlbHkgdG9nZXRoZXIuIEFsc28gSSdsbCBoYXZlIHRvIGNvbnNpZGVyIGBYRlJNX0VTUElOVENQYCBzaW5jZSB0aGF0J3MgZGlyZWN0bHkgdGllZCB0byBgSU5FVF9FU1BJTlRDUGAgYW5kIGBJTkVUNl9FU1BJTlRDUGAsIHdoaWNoIGlzIGxpa2VseSB0aGUgYXJlYSBvZiBmb2N1cy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBvciBub3QgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgIGFyZSBwcm9wZXJseSBlbmFibGVkIGFuZCBjb25maWd1cmVkLCBiZWNhdXNlIHRoZXkgc2VlbSBjcml0aWNhbCBmb3IgdGhlIEVTUC9UQ1AgZnVuY3Rpb25hbGl0eSB0aGF0IEknbSB0YXJnZXRpbmcuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhvc2UgdHdvIGFyZSBzZXQgY29ycmVjdGx5LCB0aGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5MTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6NDYuMDkwNTMxNjc4WiIsIlNlcSI6OTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY4NTExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVF9FU1BJTlRDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzgzLVxcdGJvb2wgXFxcIklQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6NDYuMTQzMjIwNjg2WiIsIlNlcSI6OTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTU0NjkxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkVTUElOVENQIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIHRoZSB1c2VyLWZhY2luZyBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGBJTkVUX0VTUElOVENQYCBhbmQgYElORVQ2X0VTUElOVENQYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuIEJ1dCBsZXQncyBiZSBwcmFnbWF0aWMgaGVyZTsgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcuIEl04oCZcyB0aGUgdXN1YWwgZGFuY2UsIG1ha2luZyBzdXJlIHRoZSB1c2VyLXZpc2libGUgc2V0dGluZ3MgYXJlIGNvcnJlY3RseSBleHBvc2VkIGFuZCBiZWhhdmUgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGRyaWxsIGRvd24uIEknbGwgZm9jdXMgbXkgaW1tZWRpYXRlIGF0dGVudGlvbiBvbiBgSU5FVDZfRVNQSU5UQ1BgIHNwZWNpZmljYWxseSB0byBlbnN1cmUgdGhhdCB0aGUgSVB2NiB2YXJpYW50IGlzIGJlaGF2aW5nIGFjY29yZGluZyB0byBteSBleHBlY3RhdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBpdCdzIHBsYXlpbmcgbmljZWx5IHdpdGggdGhlIElQdjQgaW1wbGVtZW50YXRpb24uIE5lZWQgYSBiYXNlbGluZSwgYWZ0ZXIgYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU5NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM3OjUxLjAzODY5MTg3NFoiLCJTZXEiOjk4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzMDA1MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVQ2X0VTUElOVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctODktXFxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTkxLVxcdGJvb2wgXFxcIklQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNzo1MS4xMTc5OTY4NjdaIiwiU2VxIjo5OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExMDA5OTY1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIFN5bWJvbHMgZm9yIElQc2VjIE1vZHVsZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIElQc2VjIGNvZGUgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYW5kIGtleSBmdW5jdGlvbiBzeW1ib2xzLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGNvbmZpZ3MgaWRlbnRpZmllZC4gV2UndmUgZ290IGBYRlJNYCwgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGBJTkVUNl9FU1BgLCBgSU5FVDZfQUhgLCBgSU5FVF9FU1BJTlRDUGAsIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLiBXZSBhbHJlYWR5IGtub3cgYFhGUk1fTkFUX0tFRVBBTElWRWAgaXNuJ3QgYSBkaXJlY3QgY29uZmlnLCBidXQgaXQncyBjb21waWxlZCB3aXRoIGBDT05GSUdfWEZSTWAgZW5hYmxlZCwgc28gdGhhdCBtYWtlcyBzZW5zZS5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgaG93IHRoZXNlIGNvbmZpZ3MgcmVsYXRlIHRvIHRoZSBzb3VyY2UgZmlsZXM6IGBlc3A0LmNgIG1hcHMgdG8gYElORVRfRVNQYCwgYGFoNi5jYCB0byBgSU5FVDZfQUhgLCBgZXNwNi5jYCB0byBgSU5FVDZfRVNQYCwgYHhmcm02X2lucHV0LmNgIHRvIGBYRlJNYCAodmlhIHRoZSBpcHY2LSQoQ09ORklHX1hGUk0pIGxpbmUpLCBgZXNwaW50Y3AuY2AgZ2V0cyBgWEZSTV9FU1BJTlRDUGAgKHNlbGVjdGVkIGJ5IGBJTkVUX0VTUElOVENQYCBhbmQgYElORVQ2X0VTUElOVENQYCksIGB4ZnJtX25hdF9rZWVwYWxpdmUuY2AgdG8gYFhGUk1gIGFuZCBgeGZybV9vdXRwdXQuY2AgYW5kIGB4ZnJtX3VzZXIuY2AgdG8gYFhGUk1fVVNFUmBcblxuVGhlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBwbGFjZSBhbmQgYWNjZXNzaWJsZS4gTm93LCBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb24gc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgYW5hbHlzaXMuIEkndmUgY29tcGlsZWQgdGhlIGZvbGxvd2luZyBsaXN0OiBgZXNwX291dHB1dF90YWlsYCwgYGVzcDZfb3V0cHV0X3RhaWxgLCBgeGZybTZfaW5wdXRfYWRkcmAsIGB4ZnJtX291dHB1dGAsIGBlc3BpbnRjcF9xdWV1ZV9vdXRgLCBgZXNwaW50Y3BfcHVzaF9za2JgLCBhbmQgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlc2UgYXJlIGdvb2QgZm9jdXMgc3ltYm9scy4gTGV0J3Mgc3RhcnQgd2l0aCBgeGZybV9uYXRfa2VlcGFsaXZlLmNgLiBJIGNvbnNpZGVyZWQgYHhmcm1fc3RhdGVfd2Fsa2AsIGJ1dCB0aGF0J3MgaW4gYHhmcm1fc3RhdGUuY2AgYW5kIHdhc24ndCBjaGFuZ2VkLiBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgICppcyogaW4gYHhmcm1fbmF0X2tlZXBhbGl2ZS5jYCBhbmQgaXMgbm9uLXN0YXRpYywgc28gaXQgbG9va3MgcHJvbWlzaW5nLlxuXG5JJ2xsIGNoZWNrIGB4ZnJtX291dHB1dF9yZXN1bWVgIHZlcnN1cyBgeGZybV9vdXRwdXRgLiBCb3RoIGB4ZnJtX291dHB1dF9yZXN1bWVgIGFuZCBgeGZybV9vdXRwdXRgIGFyZSBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYyBzbyBJIGhhdmUgYSBjaG9pY2UuXG5cbkFuZCBgeGZybTZfcmN2YCB2cyBgeGZybTZfaW5wdXRfYWRkcmAsIHNhbWUgdGhpbmcgLSBib3RoIGFyZSBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgSSBjYW4gdXNlIGVpdGhlci5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBleHBvcnQgc3RhdHVzIG9mIHRoZSBvdGhlciBmb2N1cyBzeW1ib2xzLiBPa2F5LCBgZXNwX291dHB1dF90YWlsYCwgYW5kIGBlc3A2X291dHB1dF90YWlsYCBhcmUgYm90aCBleHBvcnRlZC4gYGVzcGludGNwX3F1ZXVlX291dGAgYW5kIGBlc3BpbnRjcF9wdXNoX3NrYmAgYXJlIGV4cG9ydGVkIHRvby4gYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCBpcyAqbm90KiBleHBvcnRlZCwgYnV0IGl0J3Mgbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZCBlbm91Z2guIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBjaGFpbiB0byBzZWUgd2hlcmUgaXQgZ2V0cyBjYWxsZWQgZnJvbSwgaXQgaXMgbm90IHVzZWQgaW4gYW55IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgYWxzbyBub3RpY2VkIHRoYXQgdGhlcmUgYXJlIG5vdCBhbnkgbm9uLXN0YXRpYyBzeW1ib2xzIGluIGB4ZnJtX3VzZXIuY2AuXG5cbk9rYXksIHNvIHRoZSBmaW5hbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgcmVtYWluczogYGVzcF9vdXRwdXRfdGFpbGAsIGBlc3A2X291dHB1dF90YWlsYCwgYHhmcm02X2lucHV0X2FkZHJgLCBgeGZybV9vdXRwdXRgLCBgZXNwaW50Y3BfcXVldWVfb3V0YCwgYGVzcGludGNwX3B1c2hfc2tiYCwgYW5kIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAuIE5vdywgSSdsbCB0cmFjZSB0aHJvdWdoIHRoZSBjb2RlYmFzZSB0byBzZWUgaG93IHRoZXNlIHJlbGF0ZSBhbmQsIHNwZWNpZmljYWxseSwgaWYgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDkzMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozODowMi4yMTg5OTY2NDhaIiwiU2VxIjoxMDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcyOTA4NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3hmcm0uaD0yMzc0PWludCB4ZnJtX25hdF9rZWVwYWxpdmVfbmV0X2Zpbmkoc3RydWN0IG5ldCAqbmV0KTtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3NTp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjM3Ni1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTI3OT1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NrX2Zpbmkoc3RydWN0IHNvY2tfYmhfbG9ja2VkIF9fcGVyY3B1ICpzb2NrcylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI4Ni1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyODc6dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yODgte1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTgxMT1pbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MzItXFx0XFx0bmV0LVxcdTAwM2V4ZnJtLnN0YXRlX251bS0tO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo4MzM6XFx0XFx0eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoeCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTgzNC1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTcyMz1zdGF0aWMgdm9pZCBfX3hmcm1fc3RhdGVfaW5zZXJ0KHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE3NjctXFx0eGZybV9oYXNoX2dyb3dfY2hlY2sobmV0LCB4LVxcdTAwM2VieWRzdC5uZXh0ICE9IE5VTEwpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNzY4OlxcdHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHgpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNzY5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzg6MDQuMzkxOTE0ODc3WiIsIlNlcSI6MTAxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU5ODY4NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZGlyZWN0IHJlZmxlY3Rpb24gb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgWEZSTSBDb2RlYmFzZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIHBvaW50cyB0byBhIGNhbGwgZnJvbSBgeGZybV9zdGF0ZS5jYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBicm9hZGVyIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGB4ZnJtX3N0YXRlX3dhbGtgIGlzIGFjdHVhbGx5IGludm9rZWQuIFRoaXMgaXMgd2hlcmUgSSBnbyBkaWdnaW5nIHRocm91Z2ggdGhlIGNvZGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyB0byBzZWUgd2hlcmUgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBnaXZlIG1lIHRoZSBpbnNpZ2h0cyB0aGF0IEkgbmVlZC4gVGhpcyBpcyBob3cgSSBidWlsZCB0aGUgbWVudGFsIG1vZGVsIHRvIHNvbHZlIHRoZSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcxMzEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozODowNy4zNTE3ODgyMDRaIiwiU2VxIjoxMDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc5MTI1MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc3RhdGVfd2Fsa1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC94ZnJtLmgtMTIzLVxcbmluY2x1ZGUvbmV0L3hmcm0uaDoxMjQ6c3RydWN0IHhmcm1fc3RhdGVfd2FsayB7XFxuaW5jbHVkZS9uZXQveGZybS5oLTEyNS1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0YWxsO1xcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTE5MD1zdHJ1Y3QgeGZybV9zdGF0ZSB7XFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmgtMjE3LVxcdC8qIEtleSBtYW5hZ2VyIGJpdHMgKi9cXG5pbmNsdWRlL25ldC94ZnJtLmg6MjE4OlxcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGtcXHRrbTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjE5LVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTE2OTU9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fc3lzY3RsX2Zpbmkoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oLTE2OTktXFxuaW5jbHVkZS9uZXQveGZybS5oOjE3MDA6dm9pZCB4ZnJtX3N0YXRlX3dhbGtfaW5pdChzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLCB1OCBwcm90byxcXG5pbmNsdWRlL25ldC94ZnJtLmgtMTcwMS1cXHRcXHRcXHQgIHN0cnVjdCB4ZnJtX2FkZHJlc3NfZmlsdGVyICpmaWx0ZXIpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaDoxNzAyOmludCB4ZnJtX3N0YXRlX3dhbGsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLFxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNzAzLVxcdFxcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgeGZybV9zdGF0ZSAqLCBpbnQsIHZvaWQqKSwgdm9pZCAqKTtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MTcwNDp2b2lkIHhmcm1fc3RhdGVfd2Fsa19kb25lKHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHN0cnVjdCBuZXQgKm5ldCk7XFxuaW5jbHVkZS9uZXQveGZybS5oLTE3MDUtc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0KTtcXG4tLVxcbm5ldC9rZXkvYWZfa2V5LmM9NDU9c3RydWN0IHBma2V5X3NvY2sge1xcbi0tXFxubmV0L2tleS9hZl9rZXkuYy01Ny1cXHRcXHRcXHRzdHJ1Y3QgeGZybV9wb2xpY3lfd2Fsa1xcdHBvbGljeTtcXG5uZXQva2V5L2FmX2tleS5jOjU4OlxcdFxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGtcXHRzdGF0ZTtcXG5uZXQva2V5L2FmX2tleS5jLTU5LVxcdFxcdH0gdTtcXG4tLVxcbm5ldC9rZXkvYWZfa2V5LmM9MTgzND1zdGF0aWMgaW50IHBma2V5X2R1bXBfc2Eoc3RydWN0IHBma2V5X3NvY2sgKnBmaylcXG4tLVxcbm5ldC9rZXkvYWZfa2V5LmMtMTgzNi1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChcXHUwMDI2cGZrLVxcdTAwM2Vzayk7XFxubmV0L2tleS9hZl9rZXkuYzoxODM3OlxcdHJldHVybiB4ZnJtX3N0YXRlX3dhbGsobmV0LCBcXHUwMDI2cGZrLVxcdTAwM2VkdW1wLnUuc3RhdGUsIGR1bXBfc2EsICh2b2lkICopIHBmayk7XFxubmV0L2tleS9hZl9rZXkuYy0xODM4LX1cXG4tLVxcbm5ldC9rZXkvYWZfa2V5LmM9MTg0MD1zdGF0aWMgdm9pZCBwZmtleV9kdW1wX3NhX2RvbmUoc3RydWN0IHBma2V5X3NvY2sgKnBmaylcXG4tLVxcbm5ldC9rZXkvYWZfa2V5LmMtMTg0My1cXG5uZXQva2V5L2FmX2tleS5jOjE4NDQ6XFx0eGZybV9zdGF0ZV93YWxrX2RvbmUoXFx1MDAyNnBmay1cXHUwMDNlZHVtcC51LnN0YXRlLCBuZXQpO1xcbm5ldC9rZXkvYWZfa2V5LmMtMTg0NS19XFxuLS1cXG5uZXQva2V5L2FmX2tleS5jPTE4NDc9c3RhdGljIGludCBwZmtleV9kdW1wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNhZGJfbXNnICpoZHIsIHZvaWQgKiBjb25zdCAqZXh0X2hkcnMpXFxuLS1cXG5uZXQva2V5L2FmX2tleS5jLTE4OTMtXFx0cGZrLVxcdTAwM2VkdW1wLmRvbmUgPSBwZmtleV9kdW1wX3NhX2RvbmU7XFxubmV0L2tleS9hZl9rZXkuYzoxODk0OlxcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFxcdTAwMjZwZmstXFx1MDAzZWR1bXAudS5zdGF0ZSwgcHJvdG8sIGZpbHRlcik7XFxubmV0L2tleS9hZl9rZXkuYy0xODk1LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cGZrLVxcdTAwM2VkdW1wX2xvY2spO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MjI3PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMzAtXFx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4O1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIzMTpcXHRzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrIHdhbGs7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjMyLVxcdHN0cnVjdCBuZXQgKm5ldDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIzOS1cXHRuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQwOlxcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFxcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQxOlxcdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFxcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXFx1MDAyNmN0eCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQyOlxcdHhmcm1fc3RhdGVfd2Fsa19kb25lKFxcdTAwMjZ3YWxrLCBuZXQpO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0My1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhdGUsIHRtcCwgXFx1MDAyNmN0eC5zdGF0ZXMsIGxpc3QpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xNjg3PXN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2xvb2t1cF9ieXNwaShzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUzMiBzcGksXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTY5MC1cXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTY5MTpcXHRzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3O1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjkyLVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTI2ODQ9c3RhdGljIGJvb2wgX194ZnJtX3N0YXRlX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzAwLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzAxOmludCB4ZnJtX3N0YXRlX3dhbGsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzAyLVxcdFxcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgeGZybV9zdGF0ZSAqLCBpbnQsIHZvaWQqKSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzA1LVxcdHN0cnVjdCB4ZnJtX3N0YXRlICpzdGF0ZTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjcwNjpcXHRzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp4O1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzA3LVxcdGludCBlcnIgPSAwO1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MTMtXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNndhbGstXFx1MDAzZWFsbCkpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MTQ6XFx0XFx0eCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5zdGF0ZV9hbGwsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGssIGFsbCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MTUtXFx0ZWxzZVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzE2OlxcdFxcdHggPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ3YWxrLVxcdTAwM2VhbGwsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGssIGFsbCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MTctXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKHgsIFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0uc3RhdGVfYWxsLCBhbGwpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzQwLX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc0MTpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfd2Fsayk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDItXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NDM6dm9pZCB4ZnJtX3N0YXRlX3dhbGtfaW5pdChzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLCB1OCBwcm90byxcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc0NC1cXHRcXHRcXHQgIHN0cnVjdCB4ZnJtX2FkZHJlc3NfZmlsdGVyICpmaWx0ZXIpXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc1MS19XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NTI6RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3dhbGtfaW5pdCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NTMtXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NTQ6dm9pZCB4ZnJtX3N0YXRlX3dhbGtfZG9uZShzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLCBzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NTUte1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NjQtfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzY1OkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV93YWxrX2RvbmUpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzY2LVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MTUzNT1zdGF0aWMgaW50IHhmcm1fZHVtcF9zYV9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTM2LXtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTM3OlxcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGsgPSAoc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqKSBcXHUwMDI2Y2ItXFx1MDAzZWFyZ3NbMV07XFxubmV0L3hmcm0veGZybV91c2VyLmMtMTUzOC1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjYi1cXHUwMDNlc2tiLVxcdTAwM2VzaztcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1NDEtXFx0aWYgKGNiLVxcdTAwM2VhcmdzWzBdKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1NDI6XFx0XFx0eGZybV9zdGF0ZV93YWxrX2RvbmUod2FsaywgbmV0KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTQzLVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MTU0Nj1zdGF0aWMgaW50IHhmcm1fZHVtcF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTQ4LVxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1NDk6XFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsayA9IChzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICopIFxcdTAwMjZjYi1cXHUwMDNlYXJnc1sxXTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTUwLVxcdHN0cnVjdCB4ZnJtX2R1bXBfaW5mbyBpbmZvO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1NTEtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTU1MjpcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGspIFxcdTAwM2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTUzLVxcdFxcdCAgICAgc2l6ZW9mKGNiLVxcdTAwM2VhcmdzKSAtIHNpemVvZihjYi1cXHUwMDNlYXJnc1swXSkpO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTU4OS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTkwOlxcdFxcdHhmcm1fc3RhdGVfd2Fsa19pbml0KHdhbGssIHByb3RvLCBmaWx0ZXIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1OTEtXFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSAxO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTU5My1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTk0OlxcdCh2b2lkKSB4ZnJtX3N0YXRlX3dhbGsobmV0LCB3YWxrLCBkdW1wX29uZV9zdGF0ZSwgXFx1MDAyNmluZm8pO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1OTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM4OjA5LjYzMDkxOTgyWiIsIlNlcSI6MTAzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzM3OTEyMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFhGUk0gS2VybmVsIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgeGZybV9zdGF0ZV93YWxrYCBpcyBpbmRlZWQgZXhwb3J0ZWQgYW5kIHV0aWxpemVkIHdpdGhpbiBgeGZybV9uYXRfa2VlcGFsaXZlLmNgIGFuZCBgeGZybV91c2VyLmNgLiBFeGNlbGxlbnQsIHRoYXQgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgYXMgYSBzeW1ib2wgdG8gaG9uZSBpbiBvbi5cblxuTGV0J3MgZG8gYSBxdWljayBydW5kb3duIG9mIHRoZSBmb2N1cyBzeW1ib2xzIGFnYWluOiBgZXNwX291dHB1dF90YWlsYCwgYGVzcDZfb3V0cHV0X3RhaWxgLCBgeGZybTZfaW5wdXRfYWRkcmAsIGB4ZnJtX291dHB1dGAsIGBlc3BpbnRjcF9xdWV1ZV9vdXRgLCBgZXNwaW50Y3BfcHVzaF9za2JgLCBhbmQgb2YgY291cnNlLCB0aGUgcGl2b3RhbCBgeGZybV9zdGF0ZV93YWxrYC5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBYRlJNYCwgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGBJTkVUNl9FU1BgLCBgSU5FVDZfQUhgLCBgSU5FVF9FU1BJTlRDUGAsIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLlxuXG5BbHJpZ2h0LCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgIGlzIHNlbGVjdGVkIHdoZW4gZWl0aGVyIGBJTkVUX0VTUElOVENQYCBvciBgSU5FVDZfRVNQSU5UQ1BgIGFyZSBlbmFibGVkLiBHb29kLiBJIHdhcyBjdXJpb3VzIGlmIHRoZXJlIHdlcmUgYSBgQ09ORklHX1hGUk1fTkFUX0tFRVBBTElWRWAsIGJ1dCB0aGF0IGRvZXNuJ3QgZXhpc3QgZGlyZWN0bHkuIEluc3RlYWQsIGB4ZnJtX25hdF9rZWVwYWxpdmUuY2Agc2VlbXMgdG8gYmUgY29tcGlsZWQgd2hlbiBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQuIEFuZCwgYXMgZXhwZWN0ZWQsIGBDT05GSUdfWEZSTV9VU0VSYCBpcyB0aGUga2V5IGZvciBgeGZybV91c2VyLmNgLlxuXG5JIGJlbGlldmUgdGhhdCB3cmFwcyB1cCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgdGhlIGtleSBlbGVtZW50cyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJIHRoaW5rIHRoaXMgYXNzZXNzbWVudCBpcyBjb21wbGV0ZSBhbmQgcmVmbGVjdHMgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBYRlJNIHN1YnN5c3RlbSdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyB0byB0aGUgaWRlbnRpZmllZCBzeW1ib2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDA2NywiT3V0cHV0VG9rZW5zIjoyNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzg6MTYuOTY4ODM1NDY4WiIsIlNlcSI6MTA0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTI3OTQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9BSFwiLFxuICAgIFwiSU5FVF9FU1BJTlRDUFwiLFxuICAgIFwiSU5FVDZfRVNQSU5UQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3Bfb3V0cHV0X3RhaWxcIixcbiAgICBcImVzcDZfb3V0cHV0X3RhaWxcIixcbiAgICBcInhmcm02X2lucHV0X2FkZHJcIixcbiAgICBcInhmcm1fb3V0cHV0XCIsXG4gICAgXCJlc3BpbnRjcF9xdWV1ZV9vdXRcIixcbiAgICBcImVzcGludGNwX3B1c2hfc2tiXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX3dhbGtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzIGluIHRoZSBJUHNlYyAoWEZSTSwgRVNQLCBBSCkgc3Vic3lzdGVtLiBJdCBhZGRzIGNoZWNrcyBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFnbWVudHMgaW4gRVNQLCBmaXhlcyBhZGRyZXNzIHJlYXJyYW5nZW1lbnQgaW4gQUg2LCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBYRlJNNiBpbnB1dCwgYWRkcyBhIGNoZWNrIGZvciBtaXNzaW5nIGRldmljZSBpbiBFU1AtaW4tVENQLCBjaGFuZ2VzIHRoZSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSB0byBjb2xsZWN0IHN0YXRlcyBiZWZvcmUgcHJvY2Vzc2luZyB0aGVtLCByZW1vdmVzIGEgZG91YmxlIGZyZWUgaW4gWEZSTSBvdXRwdXQsIGFuZCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBYRlJNIHVzZXIuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9BSFwiLFxuICAgIFwiSU5FVF9FU1BJTlRDUFwiLFxuICAgIFwiSU5FVDZfRVNQSU5UQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3Bfb3V0cHV0X3RhaWxcIixcbiAgICBcImVzcDZfb3V0cHV0X3RhaWxcIixcbiAgICBcInhmcm02X2lucHV0X2FkZHJcIixcbiAgICBcInhmcm1fb3V0cHV0XCIsXG4gICAgXCJlc3BpbnRjcF9xdWV1ZV9vdXRcIixcbiAgICBcImVzcGludGNwX3B1c2hfc2tiXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX3dhbGtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzIGluIHRoZSBJUHNlYyAoWEZSTSwgRVNQLCBBSCkgc3Vic3lzdGVtLiBJdCBhZGRzIGNoZWNrcyBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFnbWVudHMgaW4gRVNQLCBmaXhlcyBhZGRyZXNzIHJlYXJyYW5nZW1lbnQgaW4gQUg2LCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBYRlJNNiBpbnB1dCwgYWRkcyBhIGNoZWNrIGZvciBtaXNzaW5nIGRldmljZSBpbiBFU1AtaW4tVENQLCBjaGFuZ2VzIHRoZSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSB0byBjb2xsZWN0IHN0YXRlcyBiZWZvcmUgcHJvY2Vzc2luZyB0aGVtLCByZW1vdmVzIGEgZG91YmxlIGZyZWUgaW4gWEZSTSBvdXRwdXQsIGFuZCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBYRlJNIHVzZXIuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow22h4p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 13:15:27 +0000 UTC FinishedAt: 2026-07-30 13:38:18 +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": "dd16f1b5720f5dae33a79b5305e188e8290a3973", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_USER", "INET_ESP", "INET6_ESP", "INET6_AH", "INET_ESPINTCP", "INET6_ESPINTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd16f1b5720f5dae33a79b5305e188e8290a3973", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_USER", "INET_ESP", "INET6_ESP", "INET6_AH", "INET_ESPINTCP", "INET6_ESPINTCP" ], "series_id": "0d290b5f-2748-448e-97fc-2b711f663e6f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "esp_output_tail", "esp6_output_tail", "xfrm6_input_addr", "xfrm_output", "espintcp_queue_out", "espintcp_push_skb", "xfrm_state_walk" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9BSCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXNwX291dHB1dF90YWlsJiMzNDssCiAgICAmIzM0O2VzcDZfb3V0cHV0X3RhaWwmIzM0OywKICAgICYjMzQ7eGZybTZfaW5wdXRfYWRkciYjMzQ7LAogICAgJiMzNDt4ZnJtX291dHB1dCYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9xdWV1ZV9vdXQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3BfcHVzaF9za2ImIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV93YWxrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgZmlsZXMgaW4gdGhlIElQc2VjIChYRlJNLCBFU1AsIEFIKSBzdWJzeXN0ZW0uIEl0IGFkZHMgY2hlY2tzIGZvciB6ZXJvY29weSBtYW5hZ2VkIGZyYWdtZW50cyBpbiBFU1AsIGZpeGVzIGFkZHJlc3MgcmVhcnJhbmdlbWVudCBpbiBBSDYsIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIFhGUk02IGlucHV0LCBhZGRzIGEgY2hlY2sgZm9yIG1pc3NpbmcgZGV2aWNlIGluIEVTUC1pbi1UQ1AsIGNoYW5nZXMgdGhlIE5BVCBrZWVwYWxpdmUgd29ya3F1ZXVlIHRvIGNvbGxlY3Qgc3RhdGVzIGJlZm9yZSBwcm9jZXNzaW5nIHRoZW0sIHJlbW92ZXMgYSBkb3VibGUgZnJlZSBpbiBYRlJNIG91dHB1dCwgYW5kIGZpeGVzIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIFhGUk0gdXNlci4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCwgcmVhY2hhYmxlLCBhbmQgYWZmZWN0IGNvcmUgbmV0d29ya2luZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYwMzlhNTk0MmI2NmZlNTczNzJmOTYxOTE0M2IwODhmZjYwYmJhZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxMzozNDowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmNcbmluZGV4IGRmYzgxZWU5NjlhZTAuLmZhMTcxMGUyN2U1MDUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9lc3A0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2VzcDQuY1xuQEAgLTEwNCw2ICYjNDM7MTA0LDEzIEBAIHN0YXRpYyB2b2lkIGVzcF9zc2dfdW5yZWYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHZvaWQgKnRtcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcTtcbiBcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XG4gXG4mIzQzO1x0LyogTWFuYWdlZCBmcmFncyBhcmUgb3duZWQgYnkgdGhlIHplcm9jb3B5IHVidWY7IHRoZSBza2IgaG9sZHMgbm9cbiYjNDM7XHQgKiBwZXItZnJhZyBwYWdlIHJlZmVyZW5jZSwgc28gd2UgbXVzdCBub3QgZHJvcCBvbmUgaGVyZS4gIE1pcnJvcnNcbiYjNDM7XHQgKiB0aGUgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgaGFuZGxpbmcgaW4gc2tiX3JlbGVhc2VfZGF0YSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChza2JfemNvcHlfbWFuYWdlZChza2IpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmICh4LVx1MDAzZXByb3BzLmZsYWdzIFx1MDAyNiBYRlJNX1NUQVRFX0VTTilcbiBcdFx0ZXh0cmFsZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZXNwX291dHB1dF9leHRyYSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWg2LmMgYi9uZXQvaXB2Ni9haDYuY1xuaW5kZXggNzZmN2EyZGU5MTA4ZS4uYzk2ZjdlMGQwYTQ4MSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FoNi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9haDYuY1xuQEAgLTIzMiwyNiAmIzQzOzIzMiwyOCBAQCBzdGF0aWMgdm9pZCBpcHY2X3JlYXJyYW5nZV9kZXN0b3B0KHN0cnVjdCBpcHY2aGRyICppcGgsIHN0cnVjdCBpcHY2X29wdF9oZHIgKmRlc1xuICAqXHRSZWFycmFuZ2UgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gQGlwaCBhbmQgdGhlIGFkZHJlc3NlcyBpbiBAcnRoZHJcbiAgKlx0c28gdGhhdCB0aGV5IGFwcGVhciBpbiB0aGUgb3JkZXIgdGhleSB3aWxsIGF0IHRoZSBmaW5hbCBkZXN0aW5hdGlvbi5cbiAgKlx0U2VlIEFwcGVuZGl4IEEyIG9mIFJGQyAyNDAyIGZvciBkZXRhaWxzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBzZWdtZW50c19sZWZ0IGV4Y2VlZHMgdGhlIG51bWJlciBvZlxuJiM0MzsgKiBhZGRyZXNzZXMgZGVzY3JpYmVkIGJ5IGhkcmxlbi5cbiAgKi9cbi1zdGF0aWMgdm9pZCBpcHY2X3JlYXJyYW5nZV9ydGhkcihzdHJ1Y3QgaXB2NmhkciAqaXBoLCBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKnJ0aGRyKVxuJiM0MztzdGF0aWMgaW50IGlwdjZfcmVhcnJhbmdlX3J0aGRyKHN0cnVjdCBpcHY2aGRyICppcGgsIHN0cnVjdCBpcHY2X3J0X2hkciAqcnRoZHIpXG4ge1xuLVx0aW50IHNlZ21lbnRzLCBzZWdtZW50c19sZWZ0O1xuJiM0MztcdHVuc2lnbmVkIGludCBzZWdtZW50cywgc2VnbWVudHNfbGVmdDtcbiBcdHN0cnVjdCBpbjZfYWRkciAqYWRkcnM7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgZmluYWxfYWRkcjtcbiBcbiBcdHNlZ21lbnRzX2xlZnQgPSBydGhkci1cdTAwM2VzZWdtZW50c19sZWZ0O1xuIFx0aWYgKHNlZ21lbnRzX2xlZnQgPT0gMClcbi1cdFx0cmV0dXJuO1xuLVx0cnRoZHItXHUwMDNlc2VnbWVudHNfbGVmdCA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIFRoZSB2YWx1ZSBvZiBydGhkci1cdTAwM2VoZHJsZW4gaGFzIGJlZW4gdmVyaWZpZWQgZWl0aGVyIGJ5IHRoZSBzeXN0ZW1cbi1cdCAqIGNhbGwgaWYgaXQgaXMgbG9jYWxseSBnZW5lcmF0ZWQsIG9yIGJ5IGlwdjZfcnRoZHJfcmN2KCkgZm9yIGluY29taW5nXG4tXHQgKiBwYWNrZXRzLiAgU28gd2UgY2FuIGFzc3VtZSB0aGF0IGl0IGlzIGV2ZW4gYW5kIHRoYXQgc2VnbWVudHMgaXNcbi1cdCAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBzZWdtZW50c19sZWZ0LlxuLVx0ICpcbi1cdCAqIEZvciB0aGUgc2FtZSByZWFzb24gd2UgY2FuIGFzc3VtZSB0aGF0IHRoaXMgb3B0aW9uIGlzIG9mIHR5cGUgMC5cbiYjNDM7XHQvKiBSYXcgbG9jYWxseSBnZW5lcmF0ZWQgcGFja2V0cyBjYW4gcmVhY2ggQUg2IHdpdGhvdXQgdGhlIGludmFyaWFudFxuJiM0MztcdCAqIHJlcXVpcmVkIGJ5IHRoZSBydDAtc3R5bGUgYWRkcmVzcyByZWFycmFuZ2VtZW50IGJlbG93LlxuIFx0ICovXG4gXHRzZWdtZW50cyA9IHJ0aGRyLVx1MDAzZWhkcmxlbiBcdTAwM2VcdTAwM2UgMTtcbiYjNDM7XHRpZiAoc2VnbWVudHNfbGVmdCBcdTAwM2Ugc2VnbWVudHMpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cnRoZHItXHUwMDNlc2VnbWVudHNfbGVmdCA9IDA7XG4gXG4gXHRhZGRycyA9ICgoc3RydWN0IHJ0MF9oZHIgKilydGhkciktXHUwMDNlYWRkcjtcbiBcdGZpbmFsX2FkZHIgPSBhZGRyc1tzZWdtZW50cyAtIDFdO1xuQEAgLTI2MSw2ICYjNDM7MjYzLDggQEAgc3RhdGljIHZvaWQgaXB2Nl9yZWFycmFuZ2VfcnRoZHIoc3RydWN0IGlwdjZoZHIgKmlwaCwgc3RydWN0IGlwdjZfcnRfaGRyICpydGhkcilcbiBcbiBcdGFkZHJzWzBdID0gaXBoLVx1MDAzZWRhZGRyO1xuIFx0aXBoLVx1MDAzZWRhZGRyID0gZmluYWxfYWRkcjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoc3RydWN0IGlwdjZoZHIgKmlwaCwgaW50IGxlbiwgaW50IGRpcilcbkBAIC0yNzMsNiAmIzQzOzI3Nyw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoc3RydWN0IGlwdjZoZHIgKmlwaCwgaW50IGxlbiwgaW50IGRpcilcbiBcdH0gZXh0aGRyID0geyAuaXBoID0gaXBoIH07XG4gXHRjaGFyICplbmQgPSBleHRoZHIucmF3ICYjNDM7IGxlbjtcbiBcdGludCBuZXh0aGRyID0gaXBoLVx1MDAzZW5leHRoZHI7XG4mIzQzO1x0aW50IGVycjtcbiBcbiBcdGV4dGhkci5pcGgmIzQzOyYjNDM7O1xuIFxuQEAgLTI5Miw3ICYjNDM7Mjk3LDkgQEAgc3RhdGljIGludCBpcHY2X2NsZWFyX211dGFibGVfb3B0aW9ucyhzdHJ1Y3QgaXB2NmhkciAqaXBoLCBpbnQgbGVuLCBpbnQgZGlyKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRjYXNlIE5FWFRIRFJfUk9VVElORzpcbi1cdFx0XHRpcHY2X3JlYXJyYW5nZV9ydGhkcihpcGgsIGV4dGhkci5ydGgpO1xuJiM0MztcdFx0XHRlcnIgPSBpcHY2X3JlYXJyYW5nZV9ydGhkcihpcGgsIGV4dGhkci5ydGgpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGRlZmF1bHQ6XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNi5jIGIvbmV0L2lwdjYvZXNwNi5jXG5pbmRleCAyOTZiNTc5MjZhYmI5Li43ZDIxNmI5YzU5ZjA0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXNwNi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9lc3A2LmNcbkBAIC0xMjEsNiAmIzQzOzEyMSwxMyBAQCBzdGF0aWMgdm9pZCBlc3Bfc3NnX3VucmVmKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB2b2lkICp0bXAsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXE7XG4gXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuIFxuJiM0MztcdC8qIE1hbmFnZWQgZnJhZ3MgYXJlIG93bmVkIGJ5IHRoZSB6ZXJvY29weSB1YnVmOyB0aGUgc2tiIGhvbGRzIG5vXG4mIzQzO1x0ICogcGVyLWZyYWcgcGFnZSByZWZlcmVuY2UsIHNvIHdlIG11c3Qgbm90IGRyb3Agb25lIGhlcmUuICBNaXJyb3JzXG4mIzQzO1x0ICogdGhlIFNLQkZMX01BTkFHRURfRlJBR19SRUZTIGhhbmRsaW5nIGluIHNrYl9yZWxlYXNlX2RhdGEoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc2tiX3pjb3B5X21hbmFnZWQoc2tiKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRpZiAoeC1cdTAwM2Vwcm9wcy5mbGFncyBcdTAwMjYgWEZSTV9TVEFURV9FU04pXG4gXHRcdGV4dHJhbGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IGVzcF9vdXRwdXRfZXh0cmEpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXG5pbmRleCA4OWQwNDQzYjUzMDczLi4wN2VkZWYyNTg5ODQ0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xuQEAgLTI0Nyw3ICYjNDM7MjQ3LDcgQEAgaW50IHhmcm02X2lucHV0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG4gXG4tXHRpZiAoMSAmIzQzOyBzcC1cdTAwM2VsZW4gPT0gWEZSTV9NQVhfREVQVEgpIHtcbiYjNDM7XHRpZiAoc3AtXHUwMDNlbGVuIFx1MDAzZT0gWEZSTV9NQVhfREVQVEgpIHtcbiBcdFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOQlVGRkVSRVJST1IpO1xuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0vZXNwaW50Y3AuYyBiL25ldC94ZnJtL2VzcGludGNwLmNcbmluZGV4IDM3NGUxYjk2NDQzODMuLjY3NGFlZGM1YWY1YTIgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS9lc3BpbnRjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS9lc3BpbnRjcC5jXG5AQCAtMzcsNiAmIzQzOzM3LDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2tiLVx1MDAzZWRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHNvY2tfbmV0KHNrKSwgc2tiLVx1MDAzZXNrYl9paWYpO1xuJiM0MztcdGlmICghc2tiLVx1MDAzZWRldikge1xuJiM0MztcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuQEAgLTQ1LDYgJiM0Mzs1MCw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuICNlbmRpZlxuIFx0XHR4ZnJtNF9yY3ZfZW5jYXAoc2tiLCBJUFBST1RPX0VTUCwgMCwgVENQX0VOQ0FQX0VTUElOVENQKTtcbiBcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztvdXQ6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG5AQCAtNTE1LDcgJiM0Mzs1MjEsOCBAQCBzdGF0aWMgdm9pZCBlc3BpbnRjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcbiBcdHN0cnBfc3RvcChcdTAwMjZjdHgtXHUwMDNlc3RycCk7XG4gXG4gXHRzay1cdTAwM2Vza19wcm90ID0gXHUwMDI2dGNwX3Byb3Q7XG4tXHRiYXJyaWVyKCk7XG4mIzQzO1xuJiM0MztcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuIFx0ZGlzYWJsZV93b3JrX3N5bmMoXHUwMDI2Y3R4LVx1MDAzZXdvcmspO1xuIFx0c3RycF9kb25lKFx1MDAyNmN0eC1cdTAwM2VzdHJwKTtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5pbmRleCBlYjFiNmY2NzczOWUxLi44Njc5YzY4YzEwYTE2IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5AQCAtMTU2LDI0ICYjNDM7MTU2LDUxIEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXG4gfVxuIFxuIHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIHN0YXRlcztcbiBcdHRpbWU2NF90IG5leHRfcnVuO1xuIFx0dGltZTY0X3Qgbm93O1xuIH07XG4gXG4tc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgY291bnQsIHZvaWQgKnB0cilcbiYjNDM7c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUge1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuIHtcbiBcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XG4mIzQzO1x0c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlO1xuJiM0MztcbiYjNDM7XHRpZiAoIVJFQURfT05DRSh4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHN0YXRlID0ga21hbGxvY19vYmooKnN0YXRlLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAoIXN0YXRlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHhmcm1fc3RhdGVfaG9sZCh4KTtcbiYjNDM7XHRzdGF0ZS1cdTAwM2V4ID0geDtcbiYjNDM7XHRsaXN0X2FkZF90YWlsKFx1MDAyNnN0YXRlLVx1MDAzZWxpc3QsIFx1MDAyNmN0eC1cdTAwM2VzdGF0ZXMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHgpXG4mIzQzO3tcbiBcdGJvb2wgc2VuZF9rZWVwYWxpdmUgPSBmYWxzZTtcbiBcdHN0cnVjdCBuYXRfa2VlcGFsaXZlIGthO1xuLVx0dGltZTY0X3QgbmV4dF9ydW47XG4mIzQzO1x0dGltZTY0X3QgbmV4dF9ydW4gPSAwO1xuIFx0dTMyIGludGVydmFsO1xuIFx0aW50IGRlbHRhO1xuIFxuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ4LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoeC1cdTAwM2VrbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0RFQUQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRpbnRlcnZhbCA9IHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbDtcbiBcdGlmICghaW50ZXJ2YWwpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0c3Bpbl9sb2NrKFx1MDAyNngtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcbiBcdGRlbHRhID0gKGludCkoY3R4LVx1MDAzZW5vdyAtIHgtXHUwMDNlbGFzdHVzZWQpO1xuIFx0aWYgKGRlbHRhIFx1MDAzYyBpbnRlcnZhbCkge1xuQEAgLTE4NywyOSAmIzQzOzIxNCw0MSBAQCBzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuIFx0XHRzZW5kX2tlZXBhbGl2ZSA9IHRydWU7XG4gXHR9XG4gXG4tXHRzcGluX3VubG9jayhcdTAwMjZ4LVx1MDAzZWxvY2spO1xuJiM0MztvdXQ6XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eC1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmIChzZW5kX2tlZXBhbGl2ZSlcbiBcdFx0bmF0X2tlZXBhbGl2ZV9zZW5kKFx1MDAyNmthKTtcbiBcbi1cdGlmICghY3R4LVx1MDAzZW5leHRfcnVuIHx8IG5leHRfcnVuIFx1MDAzYyBjdHgtXHUwMDNlbmV4dF9ydW4pXG4mIzQzO1x0aWYgKG5leHRfcnVuIFx1MDAyNlx1MDAyNiAoIWN0eC1cdTAwM2VuZXh0X3J1biB8fCBuZXh0X3J1biBcdTAwM2MgY3R4LVx1MDAzZW5leHRfcnVuKSlcbiBcdFx0Y3R4LVx1MDAzZW5leHRfcnVuID0gbmV4dF9ydW47XG4tXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4mIzQzO1x0c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlLCAqdG1wO1xuIFx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4O1xuIFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuJiM0MztcdGludCBlcnI7XG4gXG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LnN0YXRlcyk7XG4gXHRjdHgubmV4dF9ydW4gPSAwO1xuIFx0Y3R4Lm5vdyA9IGt0aW1lX2dldF9yZWFsX3NlY29uZHMoKTtcbiBcbiBcdG5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0LCB4ZnJtLm5hdF9rZWVwYWxpdmVfd29yay53b3JrKTtcbiBcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFx1MDAyNndhbGssIElQUFJPVE9fRVNQLCBOVUxMKTtcbi1cdHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUsIFx1MDAyNmN0eCk7XG4mIzQzO1x0ZXJyID0geGZybV9zdGF0ZV93YWxrKG5ldCwgXHUwMDI2d2FsaywgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3QsIFx1MDAyNmN0eCk7XG4gXHR4ZnJtX3N0YXRlX3dhbGtfZG9uZShcdTAwMjZ3YWxrLCBuZXQpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGF0ZSwgdG1wLCBcdTAwMjZjdHguc3RhdGVzLCBsaXN0KSB7XG4mIzQzO1x0XHRuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0YXRlLVx1MDAzZXgsIFx1MDAyNmN0eCk7XG4mIzQzO1x0XHR4ZnJtX3N0YXRlX3B1dChzdGF0ZS1cdTAwM2V4KTtcbiYjNDM7XHRcdGtmcmVlKHN0YXRlKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGVyciA9PSAtRU5PTUVNKSB7XG4mIzQzO1x0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4gXHRpZiAoY3R4Lm5leHRfcnVuKVxuIFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLFxuIFx0XHRcdFx0ICAgICAgKGN0eC5uZXh0X3J1biAtIGN0eC5ub3cpICogSFopO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMgYi9uZXQveGZybS94ZnJtX291dHB1dC5jXG5pbmRleCBjYzM1YzJmY2JiZTA5Li5lMzA1YmEzMmUzNTZiIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuQEAgLTYzNiwxMCAmIzQzOzYzNiw4IEBAIHN0YXRpYyBpbnQgeGZybV9kZXZfZGlyZWN0X291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiBcbiBcdGVyciA9IHNrYl9kc3Qoc2tiKS1cdTAwM2VvcHMtXHUwMDNlbG9jYWxfb3V0KG5ldCwgc2ssIHNrYik7XG4tXHRpZiAodW5saWtlbHkoZXJyICE9IDEpKSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdGlmICh1bmxpa2VseShlcnIgIT0gMSkpXG4gXHRcdHJldHVybiBlcnI7XG4tXHR9XG4gXG4gXHQvKiBJbiB0cmFuc3BvcnQgbW9kZSwgbmV0d29yayBkZXN0aW5hdGlvbiBpc1xuIFx0ICogZGlyZWN0bHkgcmVhY2hhYmxlLCB3aGlsZSBpbiB0dW5uZWwgbW9kZSxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5pbmRleCBkNmRiNjMzMDRiYTZiLi42MjY2YTkyY2YzMDIwIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtOTQwLDcgJiM0Mzs5NDAsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmICgoZXJyID0gYXR0YWNoX2F1dGhfdHJ1bmMoXHUwMDI2eC1cdTAwM2VhYWxnLCBcdTAwMjZ4LVx1MDAzZXByb3BzLmFhbGdvLFxuIFx0XHRcdFx0ICAgICBhdHRyc1tYRlJNQV9BTEdfQVVUSF9UUlVOQ10sIGV4dGFjaykpKVxuIFx0XHRnb3RvIGVycm9yO1xuLVx0aWYgKCF4LVx1MDAzZXByb3BzLmFhbGdvKSB7XG4mIzQzO1x0aWYgKCF4LVx1MDAzZWFhbGcpIHtcbiBcdFx0aWYgKChlcnIgPSBhdHRhY2hfYXV0aChcdTAwMjZ4LVx1MDAzZWFhbGcsIFx1MDAyNngtXHUwMDNlcHJvcHMuYWFsZ28sXG4gXHRcdFx0XHQgICAgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhdLCBleHRhY2spKSlcbiBcdFx0XHRnb3RvIGVycm9yO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfQUgmIzM0OywKICAgICYjMzQ7SU5FVF9FU1BJTlRDUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BJTlRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VzcF9vdXRwdXRfdGFpbCYjMzQ7LAogICAgJiMzNDtlc3A2X291dHB1dF90YWlsJiMzNDssCiAgICAmIzM0O3hmcm02X2lucHV0X2FkZHImIzM0OywKICAgICYjMzQ7eGZybV9vdXRwdXQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3BfcXVldWVfb3V0JiMzNDssCiAgICAmIzM0O2VzcGludGNwX3B1c2hfc2tiJiMzNDssCiAgICAmIzM0O3hmcm1fc3RhdGVfd2FsayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzIGluIHRoZSBJUHNlYyAoWEZSTSwgRVNQLCBBSCkgc3Vic3lzdGVtLiBJdCBhZGRzIGNoZWNrcyBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFnbWVudHMgaW4gRVNQLCBmaXhlcyBhZGRyZXNzIHJlYXJyYW5nZW1lbnQgaW4gQUg2LCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBYRlJNNiBpbnB1dCwgYWRkcyBhIGNoZWNrIGZvciBtaXNzaW5nIGRldmljZSBpbiBFU1AtaW4tVENQLCBjaGFuZ2VzIHRoZSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSB0byBjb2xsZWN0IHN0YXRlcyBiZWZvcmUgcHJvY2Vzc2luZyB0aGVtLCByZW1vdmVzIGEgZG91YmxlIGZyZWUgaW4gWEZSTSBvdXRwdXQsIGFuZCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBYRlJNIHVzZXIuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MDM5YTU5NDJiNjZmZTU3MzcyZjk2MTkxNDNiMDg4ZmY2MGJiYWRlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMTM6MzQ6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmMKaW5kZXggZGZjODFlZTk2OWFlMC4uZmExNzEwZTI3ZTUwNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZXNwNC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2VzcDQuYwpAQCAtMTA0LDYgJiM0MzsxMDQsMTMgQEAgc3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCiYjNDM7CS8qIE1hbmFnZWQgZnJhZ3MgYXJlIG93bmVkIGJ5IHRoZSB6ZXJvY29weSB1YnVmOyB0aGUgc2tiIGhvbGRzIG5vCiYjNDM7CSAqIHBlci1mcmFnIHBhZ2UgcmVmZXJlbmNlLCBzbyB3ZSBtdXN0IG5vdCBkcm9wIG9uZSBoZXJlLiAgTWlycm9ycwomIzQzOwkgKiB0aGUgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgaGFuZGxpbmcgaW4gc2tiX3JlbGVhc2VfZGF0YSgpLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNrYl96Y29weV9tYW5hZ2VkKHNrYikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJaWYgKHgtJmd0O3Byb3BzLmZsYWdzICZhbXA7IFhGUk1fU1RBVEVfRVNOKQogCQlleHRyYWxlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBlc3Bfb3V0cHV0X2V4dHJhKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWg2LmMgYi9uZXQvaXB2Ni9haDYuYwppbmRleCA3NmY3YTJkZTkxMDhlLi5jOTZmN2UwZDBhNDgxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9haDYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9haDYuYwpAQCAtMjMyLDI2ICYjNDM7MjMyLDI4IEBAIHN0YXRpYyB2b2lkIGlwdjZfcmVhcnJhbmdlX2Rlc3RvcHQoc3RydWN0IGlwdjZoZHIgKmlwaCwgc3RydWN0IGlwdjZfb3B0X2hkciAqZGVzCiAgKglSZWFycmFuZ2UgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gQGlwaCBhbmQgdGhlIGFkZHJlc3NlcyBpbiBAcnRoZHIKICAqCXNvIHRoYXQgdGhleSBhcHBlYXIgaW4gdGhlIG9yZGVyIHRoZXkgd2lsbCBhdCB0aGUgZmluYWwgZGVzdGluYXRpb24uCiAgKglTZWUgQXBwZW5kaXggQTIgb2YgUkZDIDI0MDIgZm9yIGRldGFpbHMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBzZWdtZW50c19sZWZ0IGV4Y2VlZHMgdGhlIG51bWJlciBvZgomIzQzOyAqIGFkZHJlc3NlcyBkZXNjcmliZWQgYnkgaGRybGVuLgogICovCi1zdGF0aWMgdm9pZCBpcHY2X3JlYXJyYW5nZV9ydGhkcihzdHJ1Y3QgaXB2NmhkciAqaXBoLCBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKnJ0aGRyKQomIzQzO3N0YXRpYyBpbnQgaXB2Nl9yZWFycmFuZ2VfcnRoZHIoc3RydWN0IGlwdjZoZHIgKmlwaCwgc3RydWN0IGlwdjZfcnRfaGRyICpydGhkcikKIHsKLQlpbnQgc2VnbWVudHMsIHNlZ21lbnRzX2xlZnQ7CiYjNDM7CXVuc2lnbmVkIGludCBzZWdtZW50cywgc2VnbWVudHNfbGVmdDsKIAlzdHJ1Y3QgaW42X2FkZHIgKmFkZHJzOwogCXN0cnVjdCBpbjZfYWRkciBmaW5hbF9hZGRyOwogCiAJc2VnbWVudHNfbGVmdCA9IHJ0aGRyLSZndDtzZWdtZW50c19sZWZ0OwogCWlmIChzZWdtZW50c19sZWZ0ID09IDApCi0JCXJldHVybjsKLQlydGhkci0mZ3Q7c2VnbWVudHNfbGVmdCA9IDA7CiYjNDM7CQlyZXR1cm4gMDsKIAotCS8qIFRoZSB2YWx1ZSBvZiBydGhkci0mZ3Q7aGRybGVuIGhhcyBiZWVuIHZlcmlmaWVkIGVpdGhlciBieSB0aGUgc3lzdGVtCi0JICogY2FsbCBpZiBpdCBpcyBsb2NhbGx5IGdlbmVyYXRlZCwgb3IgYnkgaXB2Nl9ydGhkcl9yY3YoKSBmb3IgaW5jb21pbmcKLQkgKiBwYWNrZXRzLiAgU28gd2UgY2FuIGFzc3VtZSB0aGF0IGl0IGlzIGV2ZW4gYW5kIHRoYXQgc2VnbWVudHMgaXMKLQkgKiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gc2VnbWVudHNfbGVmdC4KLQkgKgotCSAqIEZvciB0aGUgc2FtZSByZWFzb24gd2UgY2FuIGFzc3VtZSB0aGF0IHRoaXMgb3B0aW9uIGlzIG9mIHR5cGUgMC4KJiM0MzsJLyogUmF3IGxvY2FsbHkgZ2VuZXJhdGVkIHBhY2tldHMgY2FuIHJlYWNoIEFINiB3aXRob3V0IHRoZSBpbnZhcmlhbnQKJiM0MzsJICogcmVxdWlyZWQgYnkgdGhlIHJ0MC1zdHlsZSBhZGRyZXNzIHJlYXJyYW5nZW1lbnQgYmVsb3cuCiAJICovCiAJc2VnbWVudHMgPSBydGhkci0mZ3Q7aGRybGVuICZndDsmZ3Q7IDE7CiYjNDM7CWlmIChzZWdtZW50c19sZWZ0ICZndDsgc2VnbWVudHMpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcnRoZHItJmd0O3NlZ21lbnRzX2xlZnQgPSAwOwogCiAJYWRkcnMgPSAoKHN0cnVjdCBydDBfaGRyICopcnRoZHIpLSZndDthZGRyOwogCWZpbmFsX2FkZHIgPSBhZGRyc1tzZWdtZW50cyAtIDFdOwpAQCAtMjYxLDYgJiM0MzsyNjMsOCBAQCBzdGF0aWMgdm9pZCBpcHY2X3JlYXJyYW5nZV9ydGhkcihzdHJ1Y3QgaXB2NmhkciAqaXBoLCBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKnJ0aGRyKQogCiAJYWRkcnNbMF0gPSBpcGgtJmd0O2RhZGRyOwogCWlwaC0mZ3Q7ZGFkZHIgPSBmaW5hbF9hZGRyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpcHY2X2NsZWFyX211dGFibGVfb3B0aW9ucyhzdHJ1Y3QgaXB2NmhkciAqaXBoLCBpbnQgbGVuLCBpbnQgZGlyKQpAQCAtMjczLDYgJiM0MzsyNzcsNyBAQCBzdGF0aWMgaW50IGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHN0cnVjdCBpcHY2aGRyICppcGgsIGludCBsZW4sIGludCBkaXIpCiAJfSBleHRoZHIgPSB7IC5pcGggPSBpcGggfTsKIAljaGFyICplbmQgPSBleHRoZHIucmF3ICYjNDM7IGxlbjsKIAlpbnQgbmV4dGhkciA9IGlwaC0mZ3Q7bmV4dGhkcjsKJiM0MzsJaW50IGVycjsKIAogCWV4dGhkci5pcGgmIzQzOyYjNDM7OwogCkBAIC0yOTIsNyAmIzQzOzI5Nyw5IEBAIHN0YXRpYyBpbnQgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoc3RydWN0IGlwdjZoZHIgKmlwaCwgaW50IGxlbiwgaW50IGRpcikKIAkJCWJyZWFrOwogCiAJCWNhc2UgTkVYVEhEUl9ST1VUSU5HOgotCQkJaXB2Nl9yZWFycmFuZ2VfcnRoZHIoaXBoLCBleHRoZHIucnRoKTsKJiM0MzsJCQllcnIgPSBpcHY2X3JlYXJyYW5nZV9ydGhkcihpcGgsIGV4dGhkci5ydGgpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNi5jIGIvbmV0L2lwdjYvZXNwNi5jCmluZGV4IDI5NmI1NzkyNmFiYjkuLjdkMjE2YjljNTlmMDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2VzcDYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9lc3A2LmMKQEAgLTEyMSw2ICYjNDM7MTIxLDEzIEBAIHN0YXRpYyB2b2lkIGVzcF9zc2dfdW5yZWYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHZvaWQgKnRtcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXE7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAomIzQzOwkvKiBNYW5hZ2VkIGZyYWdzIGFyZSBvd25lZCBieSB0aGUgemVyb2NvcHkgdWJ1ZjsgdGhlIHNrYiBob2xkcyBubwomIzQzOwkgKiBwZXItZnJhZyBwYWdlIHJlZmVyZW5jZSwgc28gd2UgbXVzdCBub3QgZHJvcCBvbmUgaGVyZS4gIE1pcnJvcnMKJiM0MzsJICogdGhlIFNLQkZMX01BTkFHRURfRlJBR19SRUZTIGhhbmRsaW5nIGluIHNrYl9yZWxlYXNlX2RhdGEoKS4KJiM0MzsJICovCiYjNDM7CWlmIChza2JfemNvcHlfbWFuYWdlZChza2IpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmICh4LSZndDtwcm9wcy5mbGFncyAmYW1wOyBYRlJNX1NUQVRFX0VTTikKIAkJZXh0cmFsZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZXNwX291dHB1dF9leHRyYSk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCmluZGV4IDg5ZDA0NDNiNTMwNzMuLjA3ZWRlZjI1ODk4NDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYveGZybTZfaW5wdXQuYwpAQCAtMjQ3LDcgJiM0MzsyNDcsNyBAQCBpbnQgeGZybTZfaW5wdXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsCiAJCWdvdG8gZHJvcDsKIAl9CiAKLQlpZiAoMSAmIzQzOyBzcC0mZ3Q7bGVuID09IFhGUk1fTUFYX0RFUFRIKSB7CiYjNDM7CWlmIChzcC0mZ3Q7bGVuICZndDs9IFhGUk1fTUFYX0RFUFRIKSB7CiAJCVhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1JTkJVRkZFUkVSUk9SKTsKIAkJZ290byBkcm9wOwogCX0KZGlmZiAtLWdpdCBhL25ldC94ZnJtL2VzcGludGNwLmMgYi9uZXQveGZybS9lc3BpbnRjcC5jCmluZGV4IDM3NGUxYjk2NDQzODMuLjY3NGFlZGM1YWY1YTIgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL2VzcGludGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0vZXNwaW50Y3AuYwpAQCAtMzcsNiAmIzQzOzM3LDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKQogCiAJcmN1X3JlYWRfbG9jaygpOwogCXNrYi0mZ3Q7ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc29ja19uZXQoc2spLCBza2ItJmd0O3NrYl9paWYpOwomIzQzOwlpZiAoIXNrYi0mZ3Q7ZGV2KSB7CiYjNDM7CQlYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9YRlJNSU5FUlJPUik7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiAJaWYgKHNrLSZndDtza19mYW1pbHkgPT0gQUZfSU5FVDYpCkBAIC00NSw2ICYjNDM7NTAsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKICNlbmRpZgogCQl4ZnJtNF9yY3ZfZW5jYXAoc2tiLCBJUFBST1RPX0VTUCwgMCwgVENQX0VOQ0FQX0VTUElOVENQKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MztvdXQ6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTUxNSw3ICYjNDM7NTIxLDggQEAgc3RhdGljIHZvaWQgZXNwaW50Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCiAJc3RycF9zdG9wKCZhbXA7Y3R4LSZndDtzdHJwKTsKIAogCXNrLSZndDtza19wcm90ID0gJmFtcDt0Y3BfcHJvdDsKLQliYXJyaWVyKCk7CiYjNDM7CiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwogCiAJZGlzYWJsZV93b3JrX3N5bmMoJmFtcDtjdHgtJmd0O3dvcmspOwogCXN0cnBfZG9uZSgmYW1wO2N0eC0mZ3Q7c3RycCk7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jCmluZGV4IGViMWI2ZjY3NzM5ZTEuLjg2NzljNjhjMTBhMTYgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jCkBAIC0xNTYsMjQgJiM0MzsxNTYsNTEgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSkKIH0KIAogc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIHN0YXRlczsKIAl0aW1lNjRfdCBuZXh0X3J1bjsKIAl0aW1lNjRfdCBub3c7CiB9OwogCi1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKQomIzQzO3N0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7CiYjNDM7CXN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZTsKJiM0MzsKJiM0MzsJaWYgKCFSRUFEX09OQ0UoeC0mZ3Q7bmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJc3RhdGUgPSBrbWFsbG9jX29iaigqc3RhdGUsIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAoIXN0YXRlKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXhmcm1fc3RhdGVfaG9sZCh4KTsKJiM0MzsJc3RhdGUtJmd0O3ggPSB4OwomIzQzOwlsaXN0X2FkZF90YWlsKCZhbXA7c3RhdGUtJmd0O2xpc3QsICZhbXA7Y3R4LSZndDtzdGF0ZXMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggKmN0eCkKJiM0Mzt7CiAJYm9vbCBzZW5kX2tlZXBhbGl2ZSA9IGZhbHNlOwogCXN0cnVjdCBuYXRfa2VlcGFsaXZlIGthOwotCXRpbWU2NF90IG5leHRfcnVuOwomIzQzOwl0aW1lNjRfdCBuZXh0X3J1biA9IDA7CiAJdTMyIGludGVydmFsOwogCWludCBkZWx0YTsKIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDt4LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHgtJmd0O2ttLnN0YXRlID09IFhGUk1fU1RBVEVfREVBRCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCWludGVydmFsID0geC0mZ3Q7bmF0X2tlZXBhbGl2ZV9pbnRlcnZhbDsKIAlpZiAoIWludGVydmFsKQotCQlyZXR1cm4gMDsKLQotCXNwaW5fbG9jaygmYW1wO3gtJmd0O2xvY2spOwomIzQzOwkJZ290byBvdXQ7CiAKIAlkZWx0YSA9IChpbnQpKGN0eC0mZ3Q7bm93IC0geC0mZ3Q7bGFzdHVzZWQpOwogCWlmIChkZWx0YSAmbHQ7IGludGVydmFsKSB7CkBAIC0xODcsMjkgJiM0MzsyMTQsNDEgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgY291bnQsIHZvaWQgKnB0cikKIAkJc2VuZF9rZWVwYWxpdmUgPSB0cnVlOwogCX0KIAotCXNwaW5fdW5sb2NrKCZhbXA7eC0mZ3Q7bG9jayk7CiYjNDM7b3V0OgomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3gtJmd0O2xvY2spOwogCiAJaWYgKHNlbmRfa2VlcGFsaXZlKQogCQluYXRfa2VlcGFsaXZlX3NlbmQoJmFtcDtrYSk7CiAKLQlpZiAoIWN0eC0mZ3Q7bmV4dF9ydW4gfHwgbmV4dF9ydW4gJmx0OyBjdHgtJmd0O25leHRfcnVuKQomIzQzOwlpZiAobmV4dF9ydW4gJmFtcDsmYW1wOyAoIWN0eC0mZ3Q7bmV4dF9ydW4gfHwgbmV4dF9ydW4gJmx0OyBjdHgtJmd0O25leHRfcnVuKSkKIAkJY3R4LSZndDtuZXh0X3J1biA9IG5leHRfcnVuOwotCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewomIzQzOwlzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGUsICp0bXA7CiAJc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4OwogCXN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgd2FsazsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiYjNDM7CWludCBlcnI7CiAKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtjdHguc3RhdGVzKTsKIAljdHgubmV4dF9ydW4gPSAwOwogCWN0eC5ub3cgPSBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCk7CiAKIAluZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7CiAJeGZybV9zdGF0ZV93YWxrX2luaXQoJmFtcDt3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7Ci0JeGZybV9zdGF0ZV93YWxrKG5ldCwgJmFtcDt3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlLCAmYW1wO2N0eCk7CiYjNDM7CWVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsICZhbXA7d2FsaywgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3QsICZhbXA7Y3R4KTsKIAl4ZnJtX3N0YXRlX3dhbGtfZG9uZSgmYW1wO3dhbGssIG5ldCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGF0ZSwgdG1wLCAmYW1wO2N0eC5zdGF0ZXMsIGxpc3QpIHsKJiM0MzsJCW5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RhdGUtJmd0O3gsICZhbXA7Y3R4KTsKJiM0MzsJCXhmcm1fc3RhdGVfcHV0KHN0YXRlLSZndDt4KTsKJiM0MzsJCWtmcmVlKHN0YXRlKTsKJiM0MzsJfQomIzQzOwlpZiAoZXJyID09IC1FTk9NRU0pIHsKJiM0MzsJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO25ldC0mZ3Q7eGZybS5uYXRfa2VlcGFsaXZlX3dvcmssIDApOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAJaWYgKGN0eC5uZXh0X3J1bikKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bmV0LSZndDt4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywKIAkJCQkgICAgICAoY3R4Lm5leHRfcnVuIC0gY3R4Lm5vdykgKiBIWik7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX291dHB1dC5jIGIvbmV0L3hmcm0veGZybV9vdXRwdXQuYwppbmRleCBjYzM1YzJmY2JiZTA5Li5lMzA1YmEzMmUzNTZiIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMKQEAgLTYzNiwxMCAmIzQzOzYzNiw4IEBAIHN0YXRpYyBpbnQgeGZybV9kZXZfZGlyZWN0X291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCW5mX3Jlc2V0X2N0KHNrYik7CiAKIAllcnIgPSBza2JfZHN0KHNrYiktJmd0O29wcy0mZ3Q7bG9jYWxfb3V0KG5ldCwgc2ssIHNrYik7Ci0JaWYgKHVubGlrZWx5KGVyciAhPSAxKSkgewotCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJaWYgKHVubGlrZWx5KGVyciAhPSAxKSkKIAkJcmV0dXJuIGVycjsKLQl9CiAKIAkvKiBJbiB0cmFuc3BvcnQgbW9kZSwgbmV0d29yayBkZXN0aW5hdGlvbiBpcwogCSAqIGRpcmVjdGx5IHJlYWNoYWJsZSwgd2hpbGUgaW4gdHVubmVsIG1vZGUsCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IGQ2ZGI2MzMwNGJhNmIuLjYyNjZhOTJjZjMwMjAgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCkBAIC05NDAsNyAmIzQzOzk0MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jb25zdHJ1Y3Qoc3RydWN0IG5ldCAqbmV0LAogCWlmICgoZXJyID0gYXR0YWNoX2F1dGhfdHJ1bmMoJmFtcDt4LSZndDthYWxnLCAmYW1wO3gtJmd0O3Byb3BzLmFhbGdvLAogCQkJCSAgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhfVFJVTkNdLCBleHRhY2spKSkKIAkJZ290byBlcnJvcjsKLQlpZiAoIXgtJmd0O3Byb3BzLmFhbGdvKSB7CiYjNDM7CWlmICgheC0mZ3Q7YWFsZykgewogCQlpZiAoKGVyciA9IGF0dGFjaF9hdXRoKCZhbXA7eC0mZ3Q7YWFsZywgJmFtcDt4LSZndDtwcm9wcy5hYWxnbywKIAkJCQkgICAgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhdLCBleHRhY2spKSkKIAkJCWdvdG8gZXJyb3I7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3OTgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGFuIElQc2VjIFBhdGNoOiBGdW5jdGlvbmFsIENoYW5nZXMgYW5kIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcyBpbiB0aGUgbmV0d29yayBzdGFjazogYG5ldC9pcHY0L2AsIGBuZXQvaXB2Ni9gLCBhbmQgYG5ldC94ZnJtL2AuICBJdCBsb29rcyBsaWtlIHRoaXMgaXMgYWxsIElQc2VjLXJlbGF0ZWQsIHNwZWNpZmljYWxseSBFU1AsIEFILCBhbmQgdGhlIFhGUk0gZnJhbWV3b3JrLiAgTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4KCkZpcnN0LCBsb29raW5nIGF0IHRoZSBFU1AgaW1wbGVtZW50YXRpb25zIChgbmV0L2lwdjQvZXNwNC5jYCBhbmQgYG5ldC9pcHY2L2VzcDYuY2ApLCB0aGUgY2hhbmdlIGluIGBlc3Bfc3NnX3VucmVmYCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEFkZGluZyB0aGUgYGlmIChza2JfemNvcHlfbWFuYWdlZChza2IpKSByZXR1cm47YCBjaGVjayBsb29rcyBsaWtlIGl04oCZcyBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgY29ybmVyIGNhc2Ugd2l0aGluIHRoYXQgZnVuY3Rpb24uIE1ha2VzIHNlbnNlLiBJdCYjMzk7cyBmdW5jdGlvbmFsLCBhbmQgZGVmaW5pdGVseSByZWFjaGFibGUuCgpOZXh0LCBvdmVyIGluIGBuZXQvaXB2Ni9haDYuY2AsIGBpcHY2X3JlYXJyYW5nZV9ydGhkcmAmIzM5O3MgcmV0dXJuIHR5cGUgaXMgbm93IGBpbnRgLCBhbmQgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgYWRkZWQgd2l0aCBhIHJldHVybiBvZiBgLUVJTlZBTGAgaWYgYHNlZ21lbnRzX2xlZnRgIGlzIGxhcmdlciB0aGFuIGBzZWdtZW50c2AuIFRoZSBlcnJvciBwcm9wYWdhdGlvbiBpbiBgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnNgIGlzIGEgZ29vZCBwcmFjdGljZS4gQWdhaW4sIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS4KClRoZW4gd2UmIzM5O3ZlIGdvdCBgbmV0L2lwdjYveGZybTZfaW5wdXQuY2AuICBUaGUgbG9naWMgaW4gYHhmcm02X2lucHV0X2FkZHJgIGlzIHJlZmluZWQgd2l0aCBgc3AtJmd0O2xlbiAmZ3Q7PSBYRlJNX01BWF9ERVBUSGAsIHdoaWNoIGltcHJvdmVzIGJvdW5kcyBjaGVja2luZy4gTWFrZXMgc2Vuc2UgdG8gbWUsIGFsc28gZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLgoKTm93LCBgbmV0L3hmcm0vZXNwaW50Y3AuY2AuIERyb3BwaW5nIHBhY2tldHMgaWYgYCFza2ItJmd0O2RldmAgaW4gYGhhbmRsZV9lc3BgIGFkZHMgYSBzYW5pdHkgY2hlY2ssIHdoaWNoIGlzIGEgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgdGVjaG5pcXVlLiBSZXBsYWNpbmcgYGJhcnJpZXIoKWAgd2l0aCBgc3luY2hyb25pemVfcmN1KClgIGluIGBlc3BpbnRjcF9jbG9zZWAgaW5kaWNhdGVzIGEgbmVjZXNzYXJ5IGNoYW5nZSBmb3Igc3luY2hyb25pemF0aW9uLiAgRnVuY3Rpb25hbGx5IHNvdW5kIGFuZCByZWFjaGFibGUuCgpNb3Zpbmcgb24gdG8gYG5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jYCwgdGhpcyBpcyBtb3JlIGludGVyZXN0aW5nLiBUaGUgcmVmYWN0b3Jpbmcgb2YgYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgIHRvIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYW5kIHRoZW4gYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgIHN1Z2dlc3RzIHRoZXkgYXJlIGNvbGxlY3Rpbmcgc3RhdGVzIGR1cmluZyB0aGUgd2FsayBub3csIGFuZCBwcm9jZXNzaW5nIHRoZW0gc2VwYXJhdGVseS4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIGtlcm5lbCBjb2RlIHRvIGF2b2lkIHBvdGVudGlhbCBpc3N1ZXMgd2l0aGluIHRoZSB3YWxrIGl0c2VsZi4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuCgpJbiBgbmV0L3hmcm0veGZybV9vdXRwdXQuY2AsIHRoZSByZW1vdmFsIG9mIGBrZnJlZV9za2Ioc2tiKWAgd2hlbiBgZXJyICE9IDFgIGluIGB4ZnJtX2Rldl9kaXJlY3Rfb3V0cHV0YCBsb29rcyBsaWtlIGl0JiMzOTtzIG9wdGltaXppbmcgdGhlIHBhY2tldCBoYW5kbGluZyBiYXNlZCBvbiBlcnJvciBjb2Rlcy4gRnVuY3Rpb25hbCwgYW5kIHJlYWNoYWJsZS4KCkZpbmFsbHksIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuICBDaGFuZ2luZyBgaWYgKCF4LSZndDtwcm9wcy5hYWxnbylgIHRvIGBpZiAoIXgtJmd0O2FhbGcpYCBpbiBgeGZybV9zdGF0ZV9jb25zdHJ1Y3RgIGxvb2tzIGxpa2UgYSBzaW1wbGUgc3RydWN0dXJhbCB1cGRhdGUgb2YgaG93IHRoZSBhbGdvcml0aG0gaXMgYWNjZXNzZWQuICBGdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuCgpPa2F5LCBub3cgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQuIFdlIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX1hGUk1gIGZvciBYRlJNIGl0c2VsZiwgYW5kIGBDT05GSUdfWEZSTV9VU0VSYCBmb3IgdXNlci1zcGFjZSBYRlJNIGludGVyYWN0aW9uLiBFU1AgcmVxdWlyZXMgYENPTkZJR19JTkVUX0VTUGAgYW5kIGBDT05GSUdfSU5FVDZfRVNQYCBmb3IgSVB2NCBhbmQgSVB2NiByZXNwZWN0aXZlbHkuIEFIIGlzIHNpbWlsYXI6IGBDT05GSUdfSU5FVF9BSGAgYW5kIGBDT05GSUdfSU5FVDZfQUhgLiBXZSBhbHNvIG5lZWQgYENPTkZJR19FU1BJTlRDUGAgZm9yIEVTUC1pbi1UQ1AuIE5vdywgdGhlIE5BVCBrZWVwYWxpdmUgc3R1ZmYuLi4gbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1hGUk1fTkFUX0tFRVBBTElWRWAgaXMgYWN0dWFsbHkgYSB2YWxpZCBjb25maWcgb3B0aW9uLiAgTGV0JiMzOTtzIGdyZXAgZm9yIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9OQVRfS0VFUEFMSVZFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzM2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24gU3BhY2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gTkFUIGtlZXBhbGl2ZXMgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBzZWFyY2hpbmcgd2l0aGluIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUHNlYy9YRlJNIGZ1bmN0aW9uYWxpdHkuIFRoZSBuYW1lIEkmIzM5O20gbG9va2luZyBmb3Igc2VlbXMgdG8gYmUgYG5hdF9rZWVwYWxpdmVgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYEtjb25maWdgIHJldmVhbHMuIEhvcGVmdWxseSwgaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgb3B0aW9uIHdpdGggYSBjbGVhciBkZXNjcmlwdGlvbi4gVGhlbiBJIGNhbiBmaWd1cmUgb3V0IGhvdyB0byBjb25maWd1cmUgb3IgdXNlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmF0X2tlZXBhbGl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gTWFrZWZpbGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGBuZXQveGZybS9NYWtlZmlsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGhvdyB0aGlzIG1vZHVsZSBpcyBhc3NlbWJsZWQsIHdoaWNoIGZpbGVzIGFyZSBpbmNsdWRlZCwgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBtb2RpZmljYXRpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgcHJvamVjdC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgdXN1YWwgc3VzcGVjdHM6IG9iamVjdCBmaWxlIGxpc3RzLCBzb3VyY2UgZmlsZXMsIGhlYWRlciBkZXBlbmRlbmNpZXMsIGFuZCBsaWtlbHkgc29tZSBydWxlcyBmb3IgbGlua2luZyB0aGUgZmluYWwgWEZSTSBtb2R1bGVzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBidWlsZCBlbnZpcm9ubWVudCwgdG8gYXNjZXJ0YWluIGhvdyB0byBpbmplY3QgbXkgb3duIGNvZGUgYW5kIGNoYW5nZXMgc3VjY2Vzc2Z1bGx5LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHJlc2lkZXMsIHNvIGl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fbmF0X2tlZXBhbGl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxuLS1cbm5ldC94ZnJtL01ha2VmaWxlLTE2LVx0XHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTc6XHRcdCAgICAgIHhmcm1fbmF0X2tlZXBhbGl2ZS5vXG5uZXQveGZybS9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfWEZSTV9TVEFUSVNUSUNTKSAmIzQzOz0geGZybV9wcm9jLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTE3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIEtlZXBhbGl2ZSBpbiBYRlJNKioKCkFscmlnaHQsIHNvIGB4ZnJtX25hdF9rZWVwYWxpdmUuY2AgaXMgZGVmaW5pdGVseSBpbiB0aGUgYnVpbGQgaWYgYENPTkZJR19YRlJNYCBpcyBzZXQuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lIGFzc3VtcHRpb24sIGFuZCBpdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG5hbWUuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBrZWVwYWxpdmUgZnVuY3Rpb25hbGl0eSB3b3JrcyBpbiByZWxhdGlvbiB0bywgc2F5LCBFU1Agb3ZlciBUQ1AsIEkgc2hvdWxkIHJlYWxseSBjaGVjayBvdXQgYGVzcGludGNwLmNgLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSB0d28gbW9kdWxlcyBsaWVzLCBJIHdvdWxkIGd1ZXNzLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGdlbmVyaWMgWEZSTSBrZWVwYWxpdmUgbWVjaGFuaXNtcyBhbmQgdGhlIEVTUCBvdmVyIFRDUCB0dW5uZWwuIFRoaXMgc2hvdWxkIGxldCBtZSBzZWUgaG93IE5BVCBpcyBoYW5kbGVkIGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwaW50Y3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfWEZSTV9JUFRGUykgJiM0Mzs9IHhmcm1faXB0ZnMub1xubmV0L3hmcm0vTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1hGUk1fRVNQSU5UQ1ApICYjNDM7PSBlc3BpbnRjcC5vXG5uZXQveGZybS9NYWtlZmlsZS0yNi1vYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSB4ZnJtX3N0YXRlX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNjEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipFU1AgSW50ZWdyYXRpb24gYW5kIENvbmZpZ3VyYXRpb24gUmV2aWV3KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGtlcm5lbCBjb25maWcgb3B0aW9uIHRoYXQmIzM5O3Mgc25hZ2dpbmcgbXkgYXR0ZW50aW9uIHJpZ2h0IG5vdyBpcyBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgLiBUaGF0IG1lYW5zIHdlJiMzOTtyZSBsb29raW5nIGF0IFRDUCBlbmNhcHN1bGF0aW9uIHdpdGhpbiBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCksIHdoaWNoIGlzIGFsd2F5cyBhbiBpbnRlcmVzdGluZyBhbmQgcG90ZW50aWFsbHkgY29tcGxleCBhcmVhIGZvciBzZWN1cml0eS4KCk15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGNvcmUgRVNQIGltcGxlbWVudGF0aW9uIGZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgYGVzcDQuY2AgYW5kIGBlc3A2LmNgLiBUaGVzZSBmaWxlcyBhcmUgd2hlcmUgdGhlIElQc2VjLXNwZWNpZmljIGhhbmRsaW5nIG9mIEVTUCB0cmFmZmljIG92ZXIgSVB2NCBhbmQgSVB2NiByZXNwZWN0aXZlbHkgYXJlIGNvZGVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIFRDUCBlbmNhcHN1bGF0aW9uIGlzIGludGVncmF0ZWQsIGhvdyBjb25uZWN0aW9ucyBhcmUgc2V0IHVwIGFuZCB0b3JuIGRvd24sIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgdGFzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwNCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19JTkVUX0FIKSAmIzQzOz0gYWg0Lm9cbm5ldC9pcHY0L01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19JTkVUX0VTUCkgJiM0Mzs9IGVzcDQub1xubmV0L2lwdjQvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0lORVRfRVNQX09GRkxPQUQpICYjNDM7PSBlc3A0X29mZmxvYWQub1xubmV0L2lwdjQvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX0lORVRfSVBDT01QKSAmIzQzOz0gaXBjb21wLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYyMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipFU1AgTW9kdWxlIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBDT05GSUdfSU5FVF9FU1BgIGFuZCBgQ09ORklHX0lORVQ2X0VTUGAuICBUaG9zZSBmbGFncyBhcmUgcmluZ2luZyBhIGJlbGwsIG9idmlvdXNseSByZWxhdGVkIHRvIEVTUCAtIEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCAtIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2suIFRpbWUgdG8gZGlnIGluLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYGFoNi5jYCwgYmVjYXVzZSB0aGF0IGZpbGUmIzM5O3MgZ29pbmcgdG8gYmUga2V5IHRvIHVucGFja2luZyB0aGUgZGV0YWlscy4gV2l0aCBteSBleHBlcnRpc2UsIEkgc3VzcGVjdCB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIEVTUCBhcmUgaW50ZXItcmVsYXRlZCB0byBBSCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gZ28gdGhlcmUgZm9yIGNsdWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWg2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9Mjg9aXB2Ni0kKENPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMKSAmIzQzOz0gaW9hbTZfaXB0dW5uZWwub1xubmV0L2lwdjYvTWFrZWZpbGUtMjktXG5uZXQvaXB2Ni9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfSU5FVDZfQUgpICYjNDM7PSBhaDYub1xubmV0L2lwdjYvTWFrZWZpbGUtMzEtb2JqLSQoQ09ORklHX0lORVQ2X0VTUCkgJiM0Mzs9IGVzcDYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTMxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIHRoYXQgY29kZToKCioqSVB2NiBBSCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX0lORVQ2X0FIYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBBdXRoZW50aWNhdGlvbiBIZWFkZXIgc3VwcG9ydCBmb3IgSVB2Ni4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCBpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGlucHV0IHByb2Nlc3NpbmcgZm9yIElQdjYsIHNwZWNpZmljYWxseSB0aGUgYXV0aGVudGljYXRpb24gYXNwZWN0LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBsb29raW5nIGF0IGhvdyB0aGF0IHdvcmtzIGlzIGdvaW5nIHRvIGJlIGB4ZnJtNl9pbnB1dC5jYC4gVGhhdCBmaWxlIGlzIGxpa2VseSB3aGVyZSB0aGUgYWN0dWFsIGF1dGhlbnRpY2F0aW9uIGhlYWRlciBwcm9jZXNzaW5nIGFuZCB2ZXJpZmljYXRpb24gdGFrZXMgcGxhY2UgZm9yIElQdjYuIEl0IGhhbmRsZXMgdGhlIGluZ3Jlc3MgdHJhZmZpYyBzbyBzaG91bGQgYmUgd2hlcmUgbXkgZGVidWdnaW5nIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybTZfaW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT0xNj1pcHY2LSQoQ09ORklHX0lQVjZfTVJPVVRFKSAmIzQzOz0gaXA2bXIub1xubmV0L2lwdjYvTWFrZWZpbGUtMTctXG5uZXQvaXB2Ni9NYWtlZmlsZToxODppcHY2LSQoQ09ORklHX1hGUk0pICYjNDM7PSB4ZnJtNl9wb2xpY3kubyB4ZnJtNl9zdGF0ZS5vIHhmcm02X2lucHV0Lm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTE5LVx0eGZybTZfb3V0cHV0Lm8geGZybTZfcHJvdG9jb2wub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjUwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkRpdmluZyBpbnRvIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYENPTkZJR19YRlJNYC4gVGhhdCYjMzk7cyB0aGUgbWFpbiBrZXksIHRoZSBzd2l0Y2ggdGhhdCBlbmFibGVzIHRoZSBlbnRpcmUgWEZSTSBzdWJzeXN0ZW0sIHdoaWNoIGlzIHF1aXRlIGJyb2FkIGFuZCBkZWVwbHkgZW1iZWRkZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBzdGFjay4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUsIGJlY2F1c2Ugb2YgaXRzIGNvcmUtbGV2ZWwgbmF0dXJlLCB0byBzdGFydCB3aXRoIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSDigJMgaG93IHRoZSBwb2xpY3kgYW5kIHNlY3VyaXR5IGFzc29jaWF0aW9ucyBhcmUgY29uZmlndXJlZC4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGludGVyYWN0aW9uIHdvcmtzLiBNeSBmb2N1cywgaW4gZXhwbG9yaW5nIHRoYXQsIHdpbGwgYmUgdGhlIGVudHJ5LXBvaW50cyBmb3IgdGhlIHVzZXItc3BhY2Ugb3BlcmF0aW9ucy4gVGhhdCYjMzk7cyBgeGZybV91c2VyLmNgLCBJIGJlbGlldmUsIGlzIHdoZXJlIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9ucyBhcmUgaGFuZGxlZCwgb3IgYXQgbGVhc3QgdGhlIHN0YXJ0IG9mIHRoYXQgaW50ZXJhY3Rpb24uIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fdXNlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19YRlJNX0FMR08pICYjNDM7PSB4ZnJtX2FsZ28ub1xubmV0L3hmcm0vTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1hGUk1fVVNFUikgJiM0Mzs9IHhmcm1fdXNlci5vXG5uZXQveGZybS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfWEZSTV9VU0VSX0NPTVBBVCkgJiM0Mzs9IHhmcm1fY29tcGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU4OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBzZWVpbmcgYENPTkZJR19YRlJNX1VTRVJgLCB3aGljaCB0cmlnZ2VycyBhIG1lbnRhbCBub3RlIHRvIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIGltcGxpY2F0aW9ucy4gSSYjMzk7dmUgZ290IGEgbGlzdCBoZXJlOiBgWEZSTWAsIGBYRlJNX1VTRVJgLCBgSU5FVF9FU1BgLCBgSU5FVDZfRVNQYCwgYElORVQ2X0FIYCwgYW5kIGBYRlJNX0VTUElOVENQYC4gTXkgaW1tZWRpYXRlIGluY2xpbmF0aW9uIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgWEZSTV9FU1BJTlRDUGAgaGFzIGFueSB1cHN0cmVhbSByZXF1aXJlbWVudHMuIElzIGl0IGNvbnRpbmdlbnQgb24gYW55IG9mIHRob3NlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zPyBJdCYjMzk7cyB0aGUgbW9zdCB1bnVzdWFsIG9mIHRoZSBsb3QuIFRpbWUgdG8gZXhwbG9yZSB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIHNlZSBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX0VTUElOVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTE0MT1jb25maWcgWEZSTV9JUFRGU1xuLS1cbm5ldC94ZnJtL0tjb25maWctMTU2LVxubmV0L3hmcm0vS2NvbmZpZzoxNTc6Y29uZmlnIFhGUk1fRVNQSU5UQ1Bcbm5ldC94ZnJtL0tjb25maWctMTU4LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTQyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFhGUk0gS2NvbmZpZyBmb3IgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQveGZybS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAxNTcuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSBzb21lIGludGVyZXN0aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFhGUk0gbWlnaHQgYmUgZGVmaW5lZC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIG1heWJlIHJlbGF0ZWQgdG8gYSBuZXcgZmVhdHVyZSBJJiMzOTttIHRyeWluZyB0byBlbmFibGUsIG9yIHBlcmhhcHMgdHJvdWJsZXNob290aW5nIGEgcGFydGljdWxhciBpc3N1ZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgc2V0dGluZ3MuIEtub3dpbmcgdGhlIEtjb25maWcgb3B0aW9ucyBpcyBmdW5kYW1lbnRhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhdmFpbGFibGUgYW5kIGhvdyB0aGVzZSBvcHRpb25zIGludGVycmVsYXRlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcdCAgcGFja2V0IHN0cmVhbSB3aGljaCBpbiB0dXJuIHlpZWxkcyBoaWdoZXIgc21hbGwtcGFja2V0XG4gMTUxOlx0XHQgIGJhbmR3aWR0aCBhcyB3ZWxsIGFzIHJlZHVjaW5nIE1UVS9QTVRVIGlzc3Vlcy4gQ29uZ2VzdGlvblxuIDE1MjpcdFx0ICBjb250cm9sIGlzIHVuaW1wbGVtZW50YXRlZCBhcyB0aGUgc2VuZCByYXRlIGlzIGRlbWFuZCBkcml2ZW5cbiAxNTM6XHRcdCAgcmF0aGVyIHRoYW4gY29uc3RhbnQuXG4gMTU0Olx0XG4gMTU1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTU2Olx0XG4gMTU3Olx0Y29uZmlnIFhGUk1fRVNQSU5UQ1BcbiAxNTg6XHRcdGJvb2xcbiAxNTk6XHRcbiAxNjA6XHRlbmRpZiAjIElORVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMDYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRGVidWdnaW5nIGEgQm9vbGVhbiYjMzk7cyBTZWxlY3Rpb24qKgoKQWxyaWdodCwgdGhpcyBgYm9vbGAgZmllbGTigKYgaXQmIzM5O3Mgbm90IGJlaW5nIGV4cGxpY2l0bHkgcHJvbXB0ZWQsIHNvIHNvbWV0aGluZyBlbHNlIG11c3QgYmUgZHJpdmluZyBpdHMgc2VsZWN0aW9uLiBUaGF0IG1lYW5zIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIHRoYXQmIzM5O3Mgc2V0dGluZyB0aGlzIHZhbHVlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIGlkZW50aWZ5IHRoZSBzb3VyY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmUuIFdoYXQgY29tcG9uZW50cyBvciBmdW5jdGlvbnMgYXJlIHVwc3RyZWFtIGFuZCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgdGhpcyBgYm9vbGAmIzM5O3Mgc3RhdGU/IFRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nIHRvIHRyYWNrIGRvd24sIGxldCYjMzk7cyBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFhGUk1fRVNQSU5UQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4Ni1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY0L0tjb25maWc6Mzg3Olx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzg4LVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy05NC1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY2L0tjb25maWc6OTU6XHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxubmV0L2lwdjYvS2NvbmZpZy05Ni1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRVNQIGFuZCBUQ1AgSW50ZXJwbGF5IC0gSW5pdGlhbCBUaG91Z2h0cyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgSU5FVF9FU1BJTlRDUGAgYW5kIGl0cyBJUHY2IGNvdW50ZXJwYXJ0LCBgSU5FVDZfRVNQSU5UQ1BgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBsaWtlbHkgYXJjaGl0ZWN0dXJlLiBUaGUgZ29hbCBpcyBsaWtlbHkgdG8gZmluZCBrZXkgc3ltYm9scyB0aGF0IGFjdCBhcyBhIGZvY2FsIHBvaW50LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBpbnRlcmFjdGlvbj8mIzM0OwoKTGV0JiMzOTtzIGJlZ2luLiBgZXNwX3NzZ191bnJlZmAgbG9va3MgaW50ZXJlc3RpbmcsIGJ1dCB0aGUgJiMzOTtzdGF0aWMmIzM5OyBhdHRyaWJ1dGUgaXMgaW1tZWRpYXRlbHkgb2ZmLXB1dHRpbmcuIFRoYXQgbWVhbnMgaXQgbGlrZWx5IGhhcyBsaW1pdGVkIHNjb3BlIGFuZCBpc24mIzM5O3QgdGhlIGNlbnRyYWwgZnVuY3Rpb24gZm9yIHRoaXMuIEJlaW5nIGNhbGxlZCBmcm9tIGBlc3Bfb3V0cHV0X3RhaWxgIGFuZCBgZXNwX2lucHV0X3RhaWxgIGlzIGEgY3JpdGljYWwgZmlyc3QgZGF0YSBwb2ludCwgdGhvdWdoLiBUaGV5IGFyZSBjZXJ0YWlubHkgdGhlIG5leHQgdGhpbmdzIHRvIGV4YW1pbmUgaW4gZGV0YWlsLiBJIHNob3VsZCBjaGVjayBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIGBlc3Bfc3NnX3VucmVmYCwgc2luY2UgdGhhdCBtYXkgYmUgd2hlcmUgdGhlIGFjdGlvbiBpcy4gVGhpcyBtaWdodCBiZSBhIGRlYWQgZW5kIGZvciB0aGUgZm9jdXMsIGJ1dCBpdCYjMzk7cyB3aGVyZSB0aGUgYnJlYWRjcnVtYnMgYXJlIHNvIGZhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwX3NzZ191bnJlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2VzcDQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9lc3A0LmM9OTE9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmVzcF9yZXFfc2coc3RydWN0IGNyeXB0b19hZWFkICphZWFkLFxuLS1cbm5ldC9pcHY0L2VzcDQuYy05OC1cbm5ldC9pcHY0L2VzcDQuYzo5OTpzdGF0aWMgdm9pZCBlc3Bfc3NnX3VucmVmKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB2b2lkICp0bXAsIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgYWxyZWFkeV91bnJlZilcbm5ldC9pcHY0L2VzcDQuYy0xMDAte1xuLS1cbm5ldC9pcHY0L2VzcDQuYz0yMTc9c3RhdGljIHZvaWQgZXNwX291dHB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXG4tLVxubmV0L2lwdjQvZXNwNC5jLTIzMi1cdHRtcCA9IEVTUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0bXA7XG5uZXQvaXB2NC9lc3A0LmM6MjMzOlx0ZXNwX3NzZ191bnJlZih4LCB0bXAsIHNrYiwgZmFsc2UpO1xubmV0L2lwdjQvZXNwNC5jLTIzNC1cdGtmcmVlKHRtcCk7XG4tLVxubmV0L2lwdjQvZXNwNC5jPTUwNT1pbnQgZXNwX291dHB1dF90YWlsKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm8gKmVzcClcbi0tXG5uZXQvaXB2NC9lc3A0LmMtNTgyLVx0XHRpZiAodW5saWtlbHkoZXJyIFx1MDAzYyAwKSkge1xubmV0L2lwdjQvZXNwNC5jOjU4MzpcdFx0XHRlc3Bfc3NnX3VucmVmKHgsIHRtcCwgc2tiLCB0cnVlKTtcbm5ldC9pcHY0L2VzcDQuYy01ODQtXHRcdFx0Z290byBlcnJvcl9mcmVlO1xuLS1cbm5ldC9pcHY0L2VzcDQuYy02MTYtXHRpZiAoc2cgIT0gZHNnKVxubmV0L2lwdjQvZXNwNC5jOjYxNzpcdFx0ZXNwX3NzZ191bnJlZih4LCB0bXAsIHNrYiwgZmFsc2UpO1xubmV0L2lwdjQvZXNwNC5jLTYxOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRm9jdXNpbmcgSW4gb24gTmV0d29yayBDb3JlIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gc3BlY2lmaWMgYXJlYXMgd2l0aGluIHRoZSBuZXR3b3JrIGNvZGUgYmFzZS4gYGVzcF9vdXRwdXRfdGFpbGAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuIFRoYXQmIzM5O3MgYSBzb2xpZCBzeW1ib2wgdG8gdHJhY2sgZm9yIG5vdywgYW5kIEkmIzM5O2xsIGtlZXAgaXQgaW4gbWluZC4gRm9yIElQdjYsIEkgY2FuIHVzZSBgZXNwNl9vdXRwdXRfdGFpbGAsIHNwZWNpZmljYWxseSBpbiBgbmV0L2lwdjYvZXNwNi5jYCwgdG8gY2hlY2sgZm9yIHNpbWlsYXIgZnVuY3Rpb25hbGl0aWVzLiBJdCB3aWxsIGJlIHZlcnkgaGVscGZ1bCBpbiBleHBsb3JpbmcgSVB2Ni4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIEVTUCBhbmQgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyB0aGVyZS4KCk5vdywgYSByZWxhdGVkIGZ1bmN0aW9uLCBgaXB2Nl9yZWFycmFuZ2VfcnRoZHJgLCBpcyBzb21ldGhpbmcgZWxzZSB0byBjb25zaWRlci4gSSYjMzk7dmUgbm90aWNlZCBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYC4uLiBpbnRlcmVzdGluZy4gQW5kIGl0IGFwcGVhcnMgdG8gYmUgY2FsbGVkIG9ubHkgZnJvbSBgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnNgLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBpcHY2X2NsZWFyX211dGFibGVfb3B0aW9uc2AgaW50ZXJhY3RzIHdpdGggdGhlIGhpZ2hlci1sZXZlbCBJUHY2IHByb2Nlc3NpbmcuIFRoYXQgY291bGQgYmUgd2hlcmUgdGhlIHJvdXRlIGhlYWRlciBoYW5kbGluZyBpcyByZWFsbHkgaGFwcGVuaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHN0YWNrIHRvIHNlZSB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY2X2NsZWFyX211dGFibGVfb3B0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FoNi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FoNi5jPTIzOT1zdGF0aWMgaW50IGlwdjZfcmVhcnJhbmdlX3J0aGRyKHN0cnVjdCBpcHY2aGRyICppcGgsIHN0cnVjdCBpcHY2X3J0X2hkciAqcnRoZHIpXG4tLVxubmV0L2lwdjYvYWg2LmMtMjY5LVxubmV0L2lwdjYvYWg2LmM6MjcwOnN0YXRpYyBpbnQgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoc3RydWN0IGlwdjZoZHIgKmlwaCwgaW50IGxlbiwgaW50IGRpcilcbm5ldC9pcHY2L2FoNi5jLTI3MS17XG4tLVxubmV0L2lwdjYvYWg2LmM9MzUwPXN0YXRpYyBpbnQgYWg2X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9haDYuYy00MTYtXHRpZiAoZXh0bGVuKSB7XG5uZXQvaXB2Ni9haDYuYzo0MTc6XHRcdGVyciA9IGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHRvcF9pcGgsXG5uZXQvaXB2Ni9haDYuYy00MTgtXHRcdFx0XHRcdFx0IGV4dGxlbiAtIHNpemVvZigqaXBoX2V4dCkgJiM0Mztcbi0tXG5uZXQvaXB2Ni9haDYuYz01MTk9c3RhdGljIGludCBhaDZfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvYWg2LmMtNjEzLVxubmV0L2lwdjYvYWg2LmM6NjE0Olx0ZXJyID0gaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoaXA2aCwgaGRyX2xlbiwgWEZSTV9QT0xJQ1lfSU4pO1xubmV0L2lwdjYvYWg2LmMtNjE1LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNjkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkFuYWx5emluZyBGb2N1cyBTeW1ib2xzIGFuZCBOb24tU3RhdGljIFZhcmlhYmxlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlLCBwcm9iYWJseSByZWxhdGVkIHRvIG5ldHdvcmsgdHJhbnNmb3JtYXRpb24gb3IgYWRkcmVzcyBoYW5kbGluZy4gRmlyc3QsIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBgYWg2X291dHB1dGAgYW5kIGBhaDZfaW5wdXRgIGFyZSBnb29kIHN0YXJ0aW5nIHBvaW50cy4gVGhleSBzZWVtIGxpa2Ugd2VsbC1jaG9zZW4gZm9jdXMgc3ltYm9scywgbGlrZWx5IHJlcHJlc2VudGluZyBjcml0aWNhbCBpbnB1dCBhbmQgb3V0cHV0IHBhcmFtZXRlcnMgcmVsYXRlZCB0byB0aGUgQUggKEF1dGhlbnRpY2F0aW9uIEhlYWRlcikgcHJvdG9jb2wgZm9yIElQdjYuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlaXIgZGVmaW5pdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhlIHN5c3RlbSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZW0uCgpUaGVuLCB0aGVyZSYjMzk7cyBgeGZybTZfaW5wdXRfYWRkcmAuIEFoLCBoZXJlJiMzOTtzIHNvbWV0aGluZyBvZiBpbnRlcmVzdC4gVGhpcyBvbmUgaXMgKm5vdCogc3RhdGljLiBUaGF0IG1lYW5zIGl0cyBzY29wZSBleHRlbmRzIGJleW9uZCBhIHNpbmdsZSBmdW5jdGlvbiBvciBjb21waWxhdGlvbiB1bml0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBnbG9iYWwgb3IgbW9kdWxlLWxldmVsIHZhcmlhYmxlLCBhbmQgdGhhdCBzdWdnZXN0cyBpdCBtaWdodCBiZSBpbnZvbHZlZCBpbiBtb3JlIGNvbXBsZXggaW50ZXJhY3Rpb25zLiBUaGlzIG5vbi1zdGF0aWMgbmF0dXJlIG1lYW5zIEkmIzM5O2xsIGhhdmUgdG8gYmUgcGFydGljdWxhcmx5IGNhcmVmdWwgYWJvdXQgc2lkZSBlZmZlY3RzLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIHRoaXMgaXMgdXNlZCBpbiBhIG11bHRpdGhyZWFkZWQgY29udGV4dCwgb3IganVzdCBnZW5lcmFsbHkgdHJhY2tpbmcgZG93biBhbGwgdGhlIHBsYWNlcyB3aGVyZSBpdCYjMzk7cyBtb2RpZmllZC4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbnRleHRzIHdoZXJlIGB4ZnJtNl9pbnB1dF9hZGRyYCBpcyB1c2VkIGFuZCBob3cgaXQmIzM5O3MgbW9kaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm02X2lucHV0X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3hmcm02X2lucHV0LmM9MjM1PUVYUE9SVF9TWU1CT0woeGZybTZfcmN2KTtcbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6MjM2OmludCB4ZnJtNl9pbnB1dF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHhmcm1fYWRkcmVzc190ICpkYWRkcixcbm5ldC9pcHY2L3hmcm02X2lucHV0LmMtMjM3LVx0XHQgICAgIHhmcm1fYWRkcmVzc190ICpzYWRkciwgdTggcHJvdG8pXG4tLVxubmV0L2lwdjYveGZybTZfaW5wdXQuYy0zMjItfVxubmV0L2lwdjYveGZybTZfaW5wdXQuYzozMjM6RVhQT1JUX1NZTUJPTCh4ZnJtNl9pbnB1dF9hZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2ODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipBbmFseXppbmcgdGhlIEVTUC9JUHNlYyBQYWNrZXQgSGFuZGxpbmcqKgoKQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYHhmcm02X2lucHV0X2FkZHJgIGlzIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgZGVzaWduZWQgZm9yIGV4dGVybmFsIHVzZSwgbGlrZWx5IGZvciBoYW5kbGluZyBpbmNvbWluZyBJUHNlYyB0cmFmZmljIHdpdGhpbiB0aGUgSVB2NiBjb250ZXh0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSB0cmFjZSB3aGVyZSBpdCYjMzk7cyB1dGlsaXplZC4KCk5leHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBlc3BpbnRjcC5jYC4gSGVyZSwgdGhlIGZ1bmN0aW9uIGBoYW5kbGVfZXNwYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhpcyBpcyBpbXBvcnRhbnQg4oCTIGl0IG1lYW5zIGl0JiMzOTtzIHNjb3BlZCAqb25seSogd2l0aGluIHRoaXMgZmlsZS4gTm8gZGlyZWN0IGV4dGVybmFsIGNhbGxzIGFyZSBleHBlY3RlZC4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBgaGFuZGxlX2VzcGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gbWVhbnMgdGhhdCBpdCBtdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgYGVzcGludGNwLmNgIGZpbGUuIEdpdmVuIHRoZSBmaWxlbmFtZSwgYW5kIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaGFuZGxpbmcgRVNQIHRyYWZmaWMsIEkgY2FuIGluZmVyIHRoYXQgYGhhbmRsZV9lc3BgIGlzIGEgY2VudHJhbCwgaW50ZXJuYWwgcm91dGluZS4gVGhlIGNvZGUgc3RhdGVzIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGVzcGludGNwX3JjdmAuIFNvLCBmcm9tIGBlc3BpbnRjcF9yY3ZgIHRvIGBoYW5kbGVfZXNwYC4gR290IGl0LiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGVzcGludGNwX3JjdmAgaXMgY2FsbGVkLCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gYHhmcm02X2lucHV0X2FkZHJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfZXNwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vZXNwaW50Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jPTEyPXN0YXRpYyB2b2lkIGhhbmRsZV9ub25lc3Aoc3RydWN0IGVzcGludGNwX2N0eCAqY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjgtXG5uZXQveGZybS9lc3BpbnRjcC5jOjI5OnN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMC17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYz01Nz1zdGF0aWMgdm9pZCBlc3BpbnRjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTExMy1cdGVsc2Vcbm5ldC94ZnJtL2VzcGludGNwLmM6MTE0Olx0XHRoYW5kbGVfZXNwKHNrYiwgc3RycC1cdTAwM2Vzayk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTExNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjY0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBzeW1ib2xzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqRm9jdXNpbmcgSW4gb24gYGVzcGludGNwX3JjdmAgYW5kIGBlc3BpbnRjcF9jbG9zZWAqKgoKQWxyaWdodCwgbG9va2luZyBhdCB0aGlzIGNvZGUsIG15IGltbWVkaWF0ZSB0aG91Z2h0cyBhcmUgdGhhdCBgZXNwaW50Y3BfcmN2YCBhbmQgYGVzcGludGNwX2Nsb3NlYCBhcmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyB0byBkaWcgaW50by4gVGhleSBzdHJpa2UgbWUgYXMgdGhlIGtleSBmb2N1cyBzeW1ib2xzIHdpdGhpbiB0aGlzIEVTUC1UQ1AgY29udGV4dC4gYGVzcGludGNwX3JjdmAgc3VnZ2VzdHMgaGFuZGxpbmcgaW5jb21pbmcgZGF0YSwgd2hpY2gsIGlmIEkgdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlIGNvcnJlY3RseSwgaXMgcHJvYmFibHkgd2hlcmUgd2UgbmVlZCB0byB0cmFjZSB0aGUgZmxvdyBvZiByZWNlaXZlZCBwYWNrZXRzIGFuZCBhc3NvY2lhdGVkIHByb2Nlc3NpbmcuIGBlc3BpbnRjcF9jbG9zZWAsIG9uIHRoZSBvdGhlciBoYW5kLCBkZWFscyB3aXRoIGNsb3NpbmcgY29ubmVjdGlvbnMsIHdoaWNoIGlzIGp1c3QgYXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgaGFuZGxlcyBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgcmVzb3VyY2UgcmVsZWFzZS4gQW5hbHl6aW5nIHRoZXNlIHR3byBmdW5jdGlvbnMgd2lsbCBsaWtlbHkgZ2l2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIGFuZCBkYXRhIGZsb3cuIEtub3dpbmcgdGhhdCB0aGVzZSBhcmUgZ29vZCBmb2N1cyBzeW1ib2xzIHdpbGwgZ3VpZGUgbXkgYW5hbHlzaXMgZWZmaWNpZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzcGludGNwX2Nsb3NlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vZXNwaW50Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jPTUwMT1zdGF0aWMgdm9pZCBlc3BpbnRjcF9yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNS1cbm5ldC94ZnJtL2VzcGludGNwLmM6NTE2OnN0YXRpYyB2b2lkIGVzcGludGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxubmV0L3hmcm0vZXNwaW50Y3AuYy01MTcte1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmM9NTUyPXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKmVzcGludGNwX3Byb3QsXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NjAtXHRlc3BpbnRjcF9wcm90LVx1MDAzZXJlY3Ztc2cgPSBlc3BpbnRjcF9yZWN2bXNnO1xubmV0L3hmcm0vZXNwaW50Y3AuYzo1NjE6XHRlc3BpbnRjcF9wcm90LVx1MDAzZWNsb3NlID0gZXNwaW50Y3BfY2xvc2U7XG5uZXQveGZybS9lc3BpbnRjcC5jLTU2Mi1cdGVzcGludGNwX3Byb3QtXHUwMDNlcmVsZWFzZV9jYiA9IGVzcGludGNwX3JlbGVhc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzU3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipGb2N1c2luZyBvbiBOQVQgS2VlcGFsaXZlIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBgZXNwaW50Y3BfY2xvc2VgIHNlZW1zIGxpa2UgYSBzb2xpZCBwb2ludCB0byBzdGFydCBkaWdnaW5nLiBJdCBvZnRlbiBzaWduYWxzIHRoZSBlbmQgb2YgYSBjb25uZWN0aW9uIG9yIHR1bm5lbCwgc28gaXQmIzM5O3MgYSBsb2dpY2FsIHBsYWNlIHRvIHVuZGVyc3RhbmQgaG93IE5BVCB0cmF2ZXJzYWwgb3Iga2VlcGFsaXZlIG1lY2hhbmlzbXMgYXJlIGNsZWFuZWQgdXAuIFdoYXQgaGFwcGVucyBpbiB0ZXJtcyBvZiByZXNvdXJjZXMsIHN0YXRlLCBhbmQgdGltZXJzIHdoZW4gYSBjb25uZWN0aW9uIGlzIGNsb3NlZCB3aXRoIE5BVCBpbiBwbGF5PyBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuCgpOb3csIGFzIGZvciBgeGZybV9uYXRfa2VlcGFsaXZlLmNgLCBhaCB5ZXMsIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBUaGlzIGlzIGxpa2VseSB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIHNjaGVkdWxlZCBvbiBhIHdvcmtxdWV1ZSB0byBoYW5kbGUgdGhlIGFjdHVhbCBzZW5kaW5nIG9mIGtlZXBhbGl2ZSBwcm9iZXMgb3IgdGhlIHJlbGF0ZWQgcHJvY2Vzc2luZy4gVGhhdCYjMzk7cyBhIGdvb2QgYnJlYWRjcnVtYiB0byBmb2xsb3cuIEtub3dpbmcgaXQmIzM5O3Mgd29ya3F1ZXVlLWJhc2VkIHN1Z2dlc3RzIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIG5vbi1ibG9ja2luZyBhbmQgbGlrZWx5IG9wZXJhdGVzIGFzeW5jaHJvbm91c2x5LCB3aGljaCBmaXRzIHRoZSBnZW5lcmFsIG5lZWQgdG8gbm90IHN0YWxsIHRoZSBtYWluIGRhdGEgcGF0aC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhlIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLiBJcyBpdCB0aW1lci1kcml2ZW4sIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlcywgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIHNjaGVkdWxpbmcgY29uZGl0aW9ucyBhbmQgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBpbXBsZW1lbnRhdGlvbi4gRGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSAmIzM5O2tlZXBhbGl2ZSYjMzk7IHByb2Nlc3MsIHdoYXQgc3BlY2lmaWNhbGx5IHRyaWdnZXJzIGl0LCBhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgYHdvcmtgIGFuZCBgZXNwaW50Y3BfY2xvc2VgIHdvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIE5BVCB0cmF2ZXJzYWwgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYXRfa2VlcGFsaXZlX3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0xMTg9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNTctXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNTg6c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTU5LVx0c3RydWN0IGxpc3RfaGVhZCBzdGF0ZXM7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTY0PXN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlIHtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjgtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNjk6c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNzAte1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTcxOlx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggKmN0eCA9IHB0cjtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE3Mi1cdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZTtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODYtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxODc6c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE4ODpcdFx0XHRcdCAgICAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHgpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODkte1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIyNi1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIyNzpzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjI4LXtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIyOS1cdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZSwgKnRtcDtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIzMDpcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIzMS1cdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgd2Fsaztcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMzgtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyMzk6XHRuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNDAtXHR4ZnJtX3N0YXRlX3dhbGtfaW5pdChcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNDE6XHRlcnIgPSB4ZnJtX3N0YXRlX3dhbGsobmV0LCBcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXHUwMDI2Y3R4KTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0Mi1cdHhmcm1fc3RhdGVfd2Fsa19kb25lKFx1MDAyNndhbGssIG5ldCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNDMtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhdGUsIHRtcCwgXHUwMDI2Y3R4LnN0YXRlcywgbGlzdCkge1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQ0Olx0XHRuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0YXRlLVx1MDAzZXgsIFx1MDAyNmN0eCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNDUtXHRcdHhmcm1fc3RhdGVfcHV0KHN0YXRlLVx1MDAzZXgpO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0OC1cdGlmIChlcnIgPT0gLUVOT01FTSkge1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQ5Olx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI1MC1cdFx0cmV0dXJuO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI1Mi1cdGlmIChjdHgubmV4dF9ydW4pXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNTM6XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZuZXQtXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNTQtXHRcdFx0XHQgICAgICAoY3R4Lm5leHRfcnVuIC0gY3R4Lm5vdykgKiBIWik7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9Mjg3PXZvaWQgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjk0LVx0bmV0ID0geHNfbmV0KHgpO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6Mjk1Olx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgMCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yOTYtfVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTI5OD1pbnQgX19uZXRfaW5pdCB4ZnJtX25hdF9rZWVwYWxpdmVfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjk5LXtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMwMDpcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgbmF0X2tlZXBhbGl2ZV93b3JrKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMwMS1cdHJldHVybiAwO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTMwND1pbnQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9maW5pKHN0cnVjdCBuZXQgKm5ldClcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMwNS17XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzozMDY6XHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMDctXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqQW5hbHl6aW5nIHRoZSBOQVQgS2VlcGFsaXZlIGFuZCBYRlJNIE91dHB1dCBNZWNoYW5pc21zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IGBuYXRfa2VlcGFsaXZlX3dvcmtgIGlzIHN0YXRpYyDigJMgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSwgYnV0IGNyaXRpY2FsbHksIGl0IElTIHRoZSBhY3R1YWwgd29ya2VyIGZ1bmN0aW9uLiBOb3csIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgKmlzKiBleHBvcnRlZCwgbWVhbmluZyBpdCYjMzk7cyBhdmFpbGFibGUgZm9yIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgdG8gdXNlLiBHaXZlbiB0aGF0LCB1c2luZyBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIHNlZW1zIGxpa2UgdGhlIGNsZWFuZXIgYW5kIG1vcmUgbWFpbnRhaW5hYmxlIGFwcHJvYWNoLCBpZiBwb3NzaWJsZSwgYXMgaXQgcmVwcmVzZW50cyBhIG1vcmUgd2VsbC1kZWZpbmVkIGludGVyZmFjZS4KCkFuZCBJIHNlZSB0aGF0IGB4ZnJtX2Rldl9kaXJlY3Rfb3V0cHV0YCBpcyBhbHNvIHN0YXRpYy4gSXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBgeGZybV9vdXRwdXRfb25lYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIGl0cyBzY29wZSBvZiB1c2UgaXMgcmVhbGx5IGxpbWl0ZWQsIGFuZCBpdCBzdWdnZXN0cyBhIHZlcnkgc3BlY2lmaWMsIG9wdGltaXplZCB1c2FnZSBwYXR0ZXJuIHRoYXQgaXMgdGllZCB0byBhIHBhcnRpY3VsYXIgcGFydCBvZiB0aGUgWEZSTSBwcm9jZXNzLiBXZSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHdoZW4gdGhpbmtpbmcgYWJvdXQgYW55IHBvdGVudGlhbCByZWZhY3RvcmluZyBvciBtb2RpZmljYXRpb25zIGluIHRoZSBmdXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fZGV2X2RpcmVjdF9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NjIwPUVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fb3V0cHV0X3Jlc3VtZSk7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYyMS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjIyOnN0YXRpYyBpbnQgeGZybV9kZXZfZGlyZWN0X291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MjMtXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz03NDg9aW50IHhmcm1fb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc4NS1cdFx0aWYgKHgtXHUwMDNlcHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFVOTkVMIFx1MDAyNlx1MDAyNiAhc2tiLVx1MDAzZXNrKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo3ODY6XHRcdFx0cmV0dXJuIHhmcm1fZGV2X2RpcmVjdF9vdXRwdXQoc2ssIHgsIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc4Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNzUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFhGUk0gQ29yZSBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYHhmcm1fb3V0cHV0YCBpcyBpbmRlZWQgYSBnb29kLCBzaGFycCBmb2N1cyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyB3aG9sZSBYRlJNIChJUHNlYykgb3V0cHV0IHByb2Nlc3Mgd29ya3MuIEl0JiMzOTtzIGEga2V5IHN5bWJvbCB0byB0cmFjay4KCkFuZCByZWdhcmRpbmcgYHhmcm1fc3RhdGVfY29uc3RydWN0YCwgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgaXMgbm90ZXdvcnRoeS4gVGhpcyBtZWFucyBpdCYjMzk7cyBsaW1pdGVkIGluIHNjb3BlIGFuZCBjYW4gb25seSBiZSBhY2Nlc3NlZCBmcm9tIHdpdGhpbiBpdHMgb3duIGNvbXBpbGF0aW9uIHVuaXQuIEFuZCBvZiBjb3Vyc2UsIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgY2FsbGVkIGV4Y2x1c2l2ZWx5IGZyb20gYHhmcm1fYWRkX3NhYCBhbmQgYHhmcm1fbmV3X2FlYCBpcyB2ZXJ5IHNpZ25pZmljYW50LiBLbm93aW5nIHRoaXMgaXMgaW1wb3J0YW50IGluIHRyYWNpbmcgY2FsbHMgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB0aGUgd2hvbGUgZmxvdy4gQm90aCBmdW5jdGlvbnMgbWFuYWdlIFNBIG9yIEFFLCB3aGljaCwgSSBzdXBwb3NlIGl0JiMzOTtzIGNsZWFyIHdoZXJlIHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHByb2Nlc3NpbmcuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB3aGVuIHRyYWNpbmcgY2FsbHMgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zdGF0ZV9jb25zdHJ1Y3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz04OTY9c3RhdGljIHZvaWQgeGZybV9zbWFya19pbml0KHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHhmcm1fbWFyayAqbSlcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy05MDYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo5MDc6c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQveGZybS94ZnJtX3VzZXIuYy05MDgtXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbyAqcCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xMDM5PXN0YXRpYyBpbnQgeGZybV9hZGRfc2Eoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTA1MS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEwNTI6XHR4ID0geGZybV9zdGF0ZV9jb25zdHJ1Y3QobmV0LCBwLCBhdHRycywgXHUwMDI2ZXJyLCBleHRhY2spO1xubmV0L3hmcm0veGZybV91c2VyLmMtMTA1My1cdGlmICgheClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBLZXkgRm9jdXMgU3ltYm9scyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgZm9jdXMgc3ltYm9scy4gYHhmcm1fYWRkX3NhYCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZSBhcyBhIHN0cm9uZyBjYW5kaWRhdGUuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLiBOb3csIGxldCYjMzk7cyBqdXN0IGxheSBvdXQgdGhlIHJlc3Qgb2YgdGhlIHJlbGV2YW50IHN5bWJvbHMgZm9yIHRoaXMgcGFydGljdWxhciBhcmVhOiBgZXNwX291dHB1dF90YWlsYCwgYGVzcDZfb3V0cHV0X3RhaWxgLCBgYWg2X291dHB1dGAsIGBhaDZfaW5wdXRgLCBgeGZybTZfaW5wdXRfYWRkcmAsIGBlc3BpbnRjcF9yY3ZgLCBgZXNwaW50Y3BfY2xvc2VgLCBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLCBhbmQgYHhmcm1fb3V0cHV0YC4KCkkga25vdyB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgLSBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYGVzcDZfb3V0cHV0X3RhaWxgIGFjdHVhbGx5IGV4aXN0cyBhcyBleHBlY3RlZCB3aXRoaW4gdGhlIHN5c3RlbS4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBhbmQgbXVzdCBiZSBwcmVzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3A2X291dHB1dF90YWlsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXNwNi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2VzcDYuYz01MzQ9RVhQT1JUX1NZTUJPTF9HUEwoZXNwNl9vdXRwdXRfaGVhZCk7XG5uZXQvaXB2Ni9lc3A2LmMtNTM1LVxubmV0L2lwdjYvZXNwNi5jOjUzNjppbnQgZXNwNl9vdXRwdXRfdGFpbChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICplc3ApXG5uZXQvaXB2Ni9lc3A2LmMtNTM3LXtcbi0tXG5uZXQvaXB2Ni9lc3A2LmMtNjU4LX1cbm5ldC9pcHY2L2VzcDYuYzo2NTk6RVhQT1JUX1NZTUJPTF9HUEwoZXNwNl9vdXRwdXRfdGFpbCk7XG5uZXQvaXB2Ni9lc3A2LmMtNjYwLVxubmV0L2lwdjYvZXNwNi5jPTY2MT1zdGF0aWMgaW50IGVzcDZfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2VzcDYuYy03MDctXG5uZXQvaXB2Ni9lc3A2LmM6NzA4Olx0cmV0dXJuIGVzcDZfb3V0cHV0X3RhaWwoeCwgc2tiLCBcdTAwMjZlc3ApO1xubmV0L2lwdjYvZXNwNi5jLTcwOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDY5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyBhbmQgRGlyZWN0aW5nIE5leHQgU3RlcHMqKgoKUmlnaHQsIHRoYXQgY29uZmlybXMgd2hhdCBJIHN1c3BlY3RlZC4gTm93LCBiZWZvcmUgZGl2aW5nIGFueSBkZWVwZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNvcmUgcmVjZWl2ZXIgZnVuY3Rpb24sIGBlc3BpbnRjcF9yY3ZgLCBpcyBhY3R1YWxseSBkZWZpbmVkIGFuZCBhdmFpbGFibGUuIE5vIHNlbnNlIGNoYXNpbmcgZ2hvc3RzLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSBpdHMgZXhpc3RlbmNlIGJlZm9yZSBJIGNhbiBtZWFuaW5nZnVsbHkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGFuYWx5c2lzIG9yIGRlYnVnZ2luZy4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcDsgSSYjMzk7dmUgbGVhcm5lZCBmcm9tIGV4cGVyaWVuY2UgdG8gcXVpY2tseSBlbGltaW5hdGUgZnVuZGFtZW50YWwgY29kZSBwYXRoIGlzc3VlcyBiZWZvcmUgZ2V0dGluZyBib2dnZWQgZG93biBpbiBtb3JlIGNvbXBsZXggc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3BpbnRjcF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmM9Mjk9c3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01Ni1cbm5ldC94ZnJtL2VzcGludGNwLmM6NTc6c3RhdGljIHZvaWQgZXNwaW50Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS9lc3BpbnRjcC5jLTU4LXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTQ0MT1zdGF0aWMgaW50IGVzcGludGNwX2luaXRfc2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNDQ0LVx0c3RydWN0IHN0cnBfY2FsbGJhY2tzIGNiID0ge1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0NDU6XHRcdC5yY3ZfbXNnID0gZXNwaW50Y3BfcmN2LFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NDYtXHRcdC5wYXJzZV9tc2cgPSBlc3BpbnRjcF9wYXJzZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4ODMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgTGF5ZXIqKgoKVGhpcyBzaXR1YXRpb24gZmVlbHPigKZzdGFsZS4gV2UmIzM5O3JlIGZhY2luZyBhIHByb2JsZW0sIGFuZCB0aGUgY3VycmVudCBhcHByb2FjaCBpc24mIzM5O3QgZ2V0dGluZyB1cyBhbnl3aGVyZS4gSSBjYW4gc2Vuc2UgdGhlIG5lZWQgZm9yIGEgbW9yZSBkeW5hbWljLCBhY3RpdmUgc29sdXRpb24uIFRoaXMgZmVlbHMgc3RhdGljLgoKTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcmVhY2ggZm9yIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGluaXRpYWxpemF0aW9uLCBzb21ldGhpbmcgdGhhdCBnaXZlcyB1cyBhIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3Mgc2VlLi4uIEdpdmVuIHRoZSBjb250ZXh0LCBgZXNwaW50Y3BfaW5pdF9za2Agc291bmRzIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUuIEl0IHN1Z2dlc3RzIGEgc29ja2V0IGluaXRpYWxpemF0aW9uIGFuZCBzZWVtcyBsaWtlIHRoZSByaWdodCB0b29sIHRvIGJvb3RzdHJhcCB0aGUgcHJvY2Vzcy4gSXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBleHBsb3JlLgoKQWx0ZXJuYXRpdmVseSwgaWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBwcm9jZXNzLCBtYXliZSB3ZSBuZWVkIHRvIGJlIHJlYWR5IHRvIHJlY2VpdmUgc29tZSBkYXRhLiBJZiBpbml0aWFsaXphdGlvbiBpcyBub3QgdGhlIG5leHQgc3RlcCwgdGhlbiBpdCYjMzk7cyBsaWtlbHkgd2UgbmVlZCB0byBjYWxsIHNvbWV0aGluZyB0aGF0IGhhbmRsZXMgZGF0YSBjb21pbmcgaW4uIFRoZSBuZXh0IGZ1bmN0aW9uIHRoYXQgY29tZXMgdG8gbWluZCBpcyBgZXNwaW50Y3BfcmVjdm1zZ2AuIFRoYXQgd291bGQgYWxzbyBmaXQgdGhlIHNpdHVhdGlvbi4gU28sIHdoZXRoZXIgaW5pdGlhbGl6YXRpb24gb3IgcmVjZWl2aW5nIGEgbmV3IG1lc3NhZ2UsIEkgc2hvdWxkIHRyeSBvbmUgb2YgdGhvc2UgdHdvIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwaW50Y3BfcmVjdm1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vZXNwaW50Y3AuYz0xMTc9c3RhdGljIGludCBlc3BpbnRjcF9wYXJzZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMTM3LVxubmV0L3hmcm0vZXNwaW50Y3AuYzoxMzg6c3RhdGljIGludCBlc3BpbnRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMzktXHRcdFx0ICAgIGludCBmbGFncylcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTU1Mj1zdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNTU5LVx0ZXNwaW50Y3BfcHJvdC1cdTAwM2VzZW5kbXNnID0gZXNwaW50Y3Bfc2VuZG1zZztcbm5ldC94ZnJtL2VzcGludGNwLmM6NTYwOlx0ZXNwaW50Y3BfcHJvdC1cdTAwM2VyZWN2bXNnID0gZXNwaW50Y3BfcmVjdm1zZztcbm5ldC94ZnJtL2VzcGludGNwLmMtNTYxLVx0ZXNwaW50Y3BfcHJvdC1cdTAwM2VjbG9zZSA9IGVzcGludGNwX2Nsb3NlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ1NQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBOZXR3b3JrIENvbW11bmljYXRpb24qKgoKT2theSwgYGVzcGludGNwX3JlY3Ztc2dgLi4uIHRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBzZWVtcyBzb2xpZC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHJlbGF0ZWQgdG8gTkFUIGtlZXBhbGl2ZSBzdGF0ZSB1cGRhdGVzLiBMZXQgbWUgc2VlLi4uIEkgd29uZGVyIGlmIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgaXMgYWN0dWFsbHkgYSB0aGluZy4gR290dGEgbWFrZSBzdXJlIGl0IGV4aXN0cywgb3IgaWYgSSYjMzk7bSB0aGlua2luZyBvZiBzb21ldGhpbmcgZWxzZS4gTmVlZCB0byBjb25maXJtIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9Mjc5PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2tfZmluaShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQgX19wZXJjcHUgKnNvY2tzKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI4Ni1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI4Nzp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjg4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3ODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgZ2VhcmVkIHRvd2FyZHMgYSB1c2VyIHdobyBrbm93cyB0aGVpciBzdHVmZjoKCioqQ2hlY2tpbmcgZm9yIGB4ZnJtX2FkZF9zYWAqKgoKUmlnaHQsIHRoYXQgc2VlbXMgbG9naWNhbC4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nOiBkb2VzIGB4ZnJtX2FkZF9zYWAgZXZlbiBleGlzdCBpbiB0aGUgY3VycmVudCBjb250ZXh0PyBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcGF0aCwgaXQmIzM5O3MgYSBjcml0aWNhbCBwcmVyZXF1aXNpdGUgdGhhdCBJIGVuc3VyZSB0aGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBhbmQgYWNjZXNzaWJsZS4gR290dGEgbWFrZSBzdXJlIHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlIGlzIHRoZXJlIGJlZm9yZSBJIHN0YXJ0IGFzc3VtaW5nIEkgY2FuIGxldmVyYWdlIGl0LiBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9hZGRfc2EmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTAzOC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEwMzk6c3RhdGljIGludCB4ZnJtX2FkZF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwNDAtXHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yOTM3PXN0YXRpYyBpbnQgeGZybV9hZGRfcG9sX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDAzLVxubmV0L3hmcm0veGZybV91c2VyLmM6MzAwNDpzdGF0aWMgaW50IHhmcm1fYWRkX3NhX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwMDUtXHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3NDA9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NDgtfSB4ZnJtX2Rpc3BhdGNoW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xubmV0L3hmcm0veGZybV91c2VyLmM6Mzc0OTpcdFtYRlJNX01TR19ORVdTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhICAgICAgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc1MC1cdFtYRlJNX01TR19ERUxTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZGVsX3NhICAgICAgICB9LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NjEtXHRbWEZSTV9NU0dfQUNRVUlSRSAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9hY3F1aXJlICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NjI6XHRbWEZSTV9NU0dfRVhQSVJFICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9zYV9leHBpcmUgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NjMtXHRbWEZSTV9NU0dfVVBEUE9MSUNZICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9wb2xpY3kgICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NjQ6XHRbWEZSTV9NU0dfVVBEU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9zYSAgICAgICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NjUtXHRbWEZSTV9NU0dfUE9MRVhQSVJFICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9wb2xfZXhwaXJlfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2NzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBSZWxldmFudCBTeW1ib2xzIGluIHRoZSBLZXJuZWwqKgoKUmlnaHQsIHRoYXQgY29uZmlybXMgaXQsIHdlJiMzOTtyZSBkZWZpbml0ZWx5IG9uIHRoZSByaWdodCB0cmFjay4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3JpdGljYWwgc3ltYm9scyByZWxhdGVkIHRvIHRoaXMgc3BlY2lmaWMgYXJlYSBvZiB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGZvY3VzIGlzIG9uIGRhdGEgZmxvd3MgYW5kIHRyYW5zZm9ybWF0aW9ucy4KCkkmIzM5O20gbWFraW5nIGEgbGlzdCBvZiB0aGVzZSBzeW1ib2xzIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBtb2R1bGVzIGlzIGNvbXBsZXRlLiBMZXQgbWUgc2VlLi4uIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBpZGVudGlmaWVkIGFzIGtleToKCiogICBgZXNwX291dHB1dF90YWlsYAoqICAgYGVzcDZfb3V0cHV0X3RhaWxgCiogICBgYWg2X291dHB1dGAKKiAgIGBhaDZfaW5wdXRgCiogICBgeGZybTZfaW5wdXRfYWRkcmAKKiAgIGBlc3BpbnRjcF9yZWN2bXNnYAoqICAgYGVzcGludGNwX2Nsb3NlYAoqICAgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYAoqICAgYHhmcm1fb3V0cHV0YAoqICAgYHhmcm1fYWRkX3NhYAoKQmVmb3JlIG1vdmluZyBmb3J3YXJkLCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgeGZybV9vdXRwdXRgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGlzIGlzIGEgY3JpdGljYWwgYnVpbGRpbmcgYmxvY2ssIHNvIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmMtMi0vKlxubmV0L3hmcm0veGZybV9vdXRwdXQuYzozOiAqIHhmcm1fb3V0cHV0LmMgLSBDb21tb24gSVBzZWMgZW5jYXBzdWxhdGlvbiBjb2RlLlxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00LSAqXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy0yNi1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6Mjc6c3RhdGljIGludCB4ZnJtX291dHB1dDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy0yOC1zdGF0aWMgaW50IHhmcm1faW5uZXJfZXh0cmFjdF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NDk2PUVYUE9SVF9TWU1CT0xfR1BMKHBrdGdlbl94ZnJtX291dGVyX21vZGVfb3V0cHV0KTtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ5OC1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NDk5OnN0YXRpYyBpbnQgeGZybV9vdXRwdXRfb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwMC17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01OTItXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjU5MzppbnQgeGZybV9vdXRwdXRfcmVzdW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTk0LXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTU5Ni1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NTk3Olx0d2hpbGUgKGxpa2VseSgoZXJyID0geGZybV9vdXRwdXRfb25lKHNrYiwgZXJyKSkgPT0gMCkpIHtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTk4LVx0XHRuZl9yZXNldF9jdChza2IpO1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjA4LVx0XHRcdCAgICAgIE5GX0lORVRfUE9TVF9ST1VUSU5HLCBuZXQsIHNrLCBza2IsXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYwOTpcdFx0XHQgICAgICBOVUxMLCBza2JfZHN0KHNrYiktXHUwMDNlZGV2LCB4ZnJtX291dHB1dDIpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MTAtXHRcdGlmICh1bmxpa2VseShlcnIgIT0gMSkpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MTktfVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2MjA6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9vdXRwdXRfcmVzdW1lKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjIxLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz02MjI9c3RhdGljIGludCB4ZnJtX2Rldl9kaXJlY3Rfb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHhmcm1fc3RhdGUgKngsXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NTMtXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY1NDpzdGF0aWMgaW50IHhmcm1fb3V0cHV0MihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjU1LXtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjU2Olx0cmV0dXJuIHhmcm1fb3V0cHV0X3Jlc3VtZShzaywgc2tiLCAxKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjU3LX1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjU4LVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NTk6c3RhdGljIGludCB4ZnJtX291dHB1dF9nc28oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY2MC17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NzUtXHRcdHNrYl9tYXJrX25vdF9vbl9saXN0KHNlZ3MpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NzY6XHRcdGVyciA9IHhmcm1fb3V0cHV0MihuZXQsIHNrLCBzZWdzKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjc3LVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9Njk3PXN0YXRpYyB2b2lkIHhmcm1fZ2V0X2lubmVyX2lwcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03NDctXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjc0ODppbnQgeGZybV9vdXRwdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03NDkte1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzg3LVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo3ODg6XHRcdHJldHVybiB4ZnJtX291dHB1dF9yZXN1bWUoc2ssIHNrYiwgMCk7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc4OS1cdH1cbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgxMS1cdFx0XHRpZiAoc2tiLVx1MDAzZWlubmVyX3Byb3RvY29sIFx1MDAyNlx1MDAyNiB4LVx1MDAzZXByb3BzLm1vZGUgPT0gWEZSTV9NT0RFX1RVTk5FTClcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODEyOlx0XHRcdFx0cmV0dXJuIHhmcm1fb3V0cHV0X2dzbyhuZXQsIHNrLCBza2IpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MTMtXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MjEtXHRcdGlmIChza2JfaXNfZ3NvKHNrYikpXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjgyMjpcdFx0XHRyZXR1cm4geGZybV9vdXRwdXRfZ3NvKG5ldCwgc2ssIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgyMy1cdH1cbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgzNC1vdXQ6XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjgzNTpcdHJldHVybiB4ZnJtX291dHB1dDIobmV0LCBzaywgc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODM2LX1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODM3OkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fb3V0cHV0KTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODM4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBLZXJuZWwgU3ltYm9sIEV4cG9ydCBTdGF0dXMqKgoKQWxyaWdodCwgc28gYHhmcm1fb3V0cHV0YCAqaXMqIGV4cG9ydGVkLCB0aGF0JiMzOTtzIGdvb2QuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoZSBrZXJuZWwgYWxzbyBleHBvc2UgYGVzcF9vdXRwdXRfdGFpbGAgdG8gdGhlIG91dHNpZGUgd29ybGQ/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIHN5bWJvbCBpcyBleHBvcnRlZCwgb3RoZXJ3aXNlIHdlIGNhbiYjMzk7dCByZWxpYWJseSBpbnRlcmFjdCB3aXRoIGl0LiBMZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byBjb25maXJtIGFjY2VzcyB0byB0aGF0IHN5bWJvbC4gVGltZSB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwX291dHB1dF90YWlsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZXNwNC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2VzcDQuYz0xODY9c3RhdGljIGludCBlc3Bfb3V0cHV0X3RjcF9lbmNhcF9jYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMTk0LVxubmV0L2lwdjQvZXNwNC5jOjE5NTpzdGF0aWMgaW50IGVzcF9vdXRwdXRfdGFpbF90Y3Aoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9lc3A0LmMtMTk2LXtcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMjA5LSNlbHNlXG5uZXQvaXB2NC9lc3A0LmM6MjEwOnN0YXRpYyBpbnQgZXNwX291dHB1dF90YWlsX3RjcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2VzcDQuYy0yMTEte1xuLS1cbm5ldC9pcHY0L2VzcDQuYz0yMTc9c3RhdGljIHZvaWQgZXNwX291dHB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXG4tLVxubmV0L2lwdjQvZXNwNC5jLTI0OC1cdFx0ICAgIHgtXHUwMDNlZW5jYXAgXHUwMDI2XHUwMDI2IHgtXHUwMDNlZW5jYXAtXHUwMDNlZW5jYXBfdHlwZSA9PSBUQ1BfRU5DQVBfRVNQSU5UQ1ApIHtcbm5ldC9pcHY0L2VzcDQuYzoyNDk6XHRcdFx0ZXJyID0gZXNwX291dHB1dF90YWlsX3RjcCh4LCBza2IpO1xubmV0L2lwdjQvZXNwNC5jLTI1MC1cdFx0XHRpZiAoZXJyICE9IC1FSU5QUk9HUkVTUylcbi0tXG5uZXQvaXB2NC9lc3A0LmM9NTAzPUVYUE9SVF9TWU1CT0xfR1BMKGVzcF9vdXRwdXRfaGVhZCk7XG5uZXQvaXB2NC9lc3A0LmMtNTA0LVxubmV0L2lwdjQvZXNwNC5jOjUwNTppbnQgZXNwX291dHB1dF90YWlsKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm8gKmVzcClcbm5ldC9pcHY0L2VzcDQuYy01MDYte1xuLS1cbm5ldC9pcHY0L2VzcDQuYy02MTktXHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgeC1cdTAwM2VlbmNhcCBcdTAwMjZcdTAwMjYgeC1cdTAwM2VlbmNhcC1cdTAwM2VlbmNhcF90eXBlID09IFRDUF9FTkNBUF9FU1BJTlRDUClcbm5ldC9pcHY0L2VzcDQuYzo2MjA6XHRcdGVyciA9IGVzcF9vdXRwdXRfdGFpbF90Y3AoeCwgc2tiKTtcbm5ldC9pcHY0L2VzcDQuYy02MjEtXG4tLVxubmV0L2lwdjQvZXNwNC5jLTYyNi19XG5uZXQvaXB2NC9lc3A0LmM6NjI3OkVYUE9SVF9TWU1CT0xfR1BMKGVzcF9vdXRwdXRfdGFpbCk7XG5uZXQvaXB2NC9lc3A0LmMtNjI4LVxubmV0L2lwdjQvZXNwNC5jPTYyOT1zdGF0aWMgaW50IGVzcF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvZXNwNC5jLTY3NS1cbm5ldC9pcHY0L2VzcDQuYzo2NzY6XHRyZXR1cm4gZXNwX291dHB1dF90YWlsKHgsIHNrYiwgXHUwMDI2ZXNwKTtcbm5ldC9pcHY0L2VzcDQuYy02NzctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM5MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBFeHBvcnRlZCBTdGF0ZSoqCgpPa2F5LCB5ZXMsIHRoYXQmIzM5O3MgcmlnaHQuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBvciBub3QgYGFoNl9vdXRwdXRgIGlzIGFjdHVhbGx5IGJlaW5nIGV4cG9ydGVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gbWFraW5nIHN1cmUgZXZlcnl0aGluZyBpcyB3b3JraW5nIGFzIGl0IHNob3VsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWg2X291dHB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FoNi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FoNi5jPTI3MD1zdGF0aWMgaW50IGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHN0cnVjdCBpcHY2aGRyICppcGgsIGludCBsZW4sIGludCBkaXIpXG4tLVxubmV0L2lwdjYvYWg2LmMtMzE1LVxubmV0L2lwdjYvYWg2LmM6MzE2OnN0YXRpYyB2b2lkIGFoNl9vdXRwdXRfZG9uZSh2b2lkICpkYXRhLCBpbnQgZXJyKVxubmV0L2lwdjYvYWg2LmMtMzE3LXtcbi0tXG5uZXQvaXB2Ni9haDYuYy0zNDktXG5uZXQvaXB2Ni9haDYuYzozNTA6c3RhdGljIGludCBhaDZfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvYWg2LmMtMzUxLXtcbi0tXG5uZXQvaXB2Ni9haDYuYy00NDktXHRhaGFzaF9yZXF1ZXN0X3NldF9jcnlwdChyZXEsIHNnLCBpY3YsIHNrYi1cdTAwM2VsZW4gJiM0Mzsgc2VxaGlfbGVuKTtcbm5ldC9pcHY2L2FoNi5jOjQ1MDpcdGFoYXNoX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKHJlcSwgMCwgYWg2X291dHB1dF9kb25lLCBza2IpO1xubmV0L2lwdjYvYWg2LmMtNDUxLVxuLS1cbm5ldC9pcHY2L2FoNi5jPTc4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fdHlwZSBhaDZfdHlwZSA9IHtcbi0tXG5uZXQvaXB2Ni9haDYuYy03OTMtXHQuaW5wdXRcdFx0PSBhaDZfaW5wdXQsXG5uZXQvaXB2Ni9haDYuYzo3OTQ6XHQub3V0cHV0XHRcdD0gYWg2X291dHB1dCxcbm5ldC9pcHY2L2FoNi5jLTc5NS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg3OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgU3RhdGljIERhdGEgYW5kIEZ1bmN0aW9uIFNlbGVjdGlvbioqCgpTbywgdGhpcyBwaWVjZSBvZiBkYXRhIGlzIHN0YXRpYywgYnV0IGl0JiMzOTtzIGNsZWFybHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBgeGZybV90eXBlYCBzdHJ1Y3QsIHdoaWNoIGdpdmVzIG1lIHNvbWUgY29udGV4dCwgYW5kIHRoYXQmIzM5O3MgZ29vZC4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkbyBJIGFjdHVhbGx5ICp1c2UqIHRoaXMgdGhpbmc/IEkmIzM5O20gZGViYXRpbmcgYmV0d2VlbiBgYWg2X291dHB1dGAgYW5kIGBhaDZfaW5wdXRgLCBvciBtYXliZSBldmVuIGB4ZnJtNl9yY3ZgLiBUaGlua2luZyBhYm91dCBpdCwgYGFoNl9vdXRwdXRgIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGZpdCwgZ2l2ZW4gdGhlIGNvbnRleHQuIEl0IGxpa2VseSBoYW5kbGVzIHRoZSBvdXRib3VuZCBwcm9jZXNzaW5nLgoKTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYnkgbG9va2luZyBpbnRvIGBhaDZfaW5wdXRgLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjayBiZWZvcmUgbW92aW5nIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FoNl9pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FoNi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FoNi5jPTM1MD1zdGF0aWMgaW50IGFoNl9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvYWg2LmMtNDc0LVxubmV0L2lwdjYvYWg2LmM6NDc1OnN0YXRpYyB2b2lkIGFoNl9pbnB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXG5uZXQvaXB2Ni9haDYuYy00NzYte1xuLS1cbm5ldC9pcHY2L2FoNi5jLTUxOC1cbm5ldC9pcHY2L2FoNi5jOjUxOTpzdGF0aWMgaW50IGFoNl9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L2FoNi5jLTUyMC17XG4tLVxubmV0L2lwdjYvYWg2LmMtNjM1LVx0YWhhc2hfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCBzZywgaWN2LCBza2ItXHUwMDNlbGVuICYjNDM7IHNlcWhpX2xlbik7XG5uZXQvaXB2Ni9haDYuYzo2MzY6XHRhaGFzaF9yZXF1ZXN0X3NldF9jYWxsYmFjayhyZXEsIDAsIGFoNl9pbnB1dF9kb25lLCBza2IpO1xubmV0L2lwdjYvYWg2LmMtNjM3LVxuLS1cbm5ldC9pcHY2L2FoNi5jPTc4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fdHlwZSBhaDZfdHlwZSA9IHtcbi0tXG5uZXQvaXB2Ni9haDYuYy03OTItXHQuZGVzdHJ1Y3Rvclx0PSBhaDZfZGVzdHJveSxcbm5ldC9pcHY2L2FoNi5jOjc5MzpcdC5pbnB1dFx0XHQ9IGFoNl9pbnB1dCxcbm5ldC9pcHY2L2FoNi5jLTc5NC1cdC5vdXRwdXRcdFx0PSBhaDZfb3V0cHV0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzUzNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBPYnNlcnZpbmcgYSBTdGF0aWMgU3RhdGUqKgoKSG1tLCB0aGlzIGZlZWxzLi4uIHN0YXRpYy4gSXQmIzM5O3MgbGlrZSBzb21ldGhpbmcmIzM5O3MgbG9ja2VkIHVwLCBub3QgbW92aW5nIGFzIGV4cGVjdGVkLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoeSouIEdpdmVuIHRoaXMgZmVlbGluZywgSSYjMzk7bSBnZXR0aW5nIGEgaHVuY2guIEkgdGhpbmsgaXQgaXMgYW4gaXNzdWUgd2l0aCBhZGRyZXNzZXMsIGVzcGVjaWFsbHkgbmV0d29yayBhZGRyZXNzZXMuCgpMZXQmIzM5O3MgZGl2ZSByaWdodCBpbnRvIGNoZWNraW5nIGB4ZnJtNl9pbnB1dF9hZGRyYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwb2ludCBvZiBmYWlsdXJlIHJpZ2h0IG5vdywgZ2l2ZW4gd2hhdCBJJiMzOTttIHNlbnNpbmcuIEl0JiMzOTtzIGEgY29tbW9uIGFyZWEgZm9yIHByb2JsZW1zIHdpdGggSVB2NiBhbmQgc2VjdXJpdHkgYXNzb2NpYXRpb25zLCBhbmQgYW55IGlzc3VlIHRoZXJlIGNvdWxkIGVhc2lseSBtYW5pZmVzdCBhcyB0aGlzIGtpbmQgb2Ygc3RpbGxuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtNl9pbnB1dF9hZGRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYveGZybTZfaW5wdXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jPTIzNT1FWFBPUlRfU1lNQk9MKHhmcm02X3Jjdik7XG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jOjIzNjppbnQgeGZybTZfaW5wdXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTIzNy1cdFx0ICAgICB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsIHU4IHByb3RvKVxuLS1cbm5ldC9pcHY2L3hmcm02X2lucHV0LmMtMzIyLX1cbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6MzIzOkVYUE9SVF9TWU1CT0woeGZybTZfaW5wdXRfYWRkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTE3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBlc3BpbnRjcF9yZWN2bXNnYCBGdW5jdGlvbioqCgpPa2F5LCBzbyB0aGUgY29kZSYjMzk7cyBqdXN0IGJlZW4gZXhwb3J0ZWQuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoaXMgYGVzcGludGNwX3JlY3Ztc2dgIGZ1bmN0aW9uLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGl0cyByb2xlIHdpdGhpbiB0aGUgd2lkZXIgVENQL0lQIHN0YWNrIGltcGxlbWVudGF0aW9uLiBJcyBpdCBoYW5kbGluZyB0aGUgY29yZSBzb2NrZXQgcmVjZWl2ZSwgb3IgaXMgaXQgYSBzcGVjaWZpYywgcG9zc2libHkgcGxhdGZvcm0tc3BlY2lmaWMsIHdyYXBwZXI/IEtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBrZXkgdG8gaW50ZXJwcmV0aW5nIGl0IGNvcnJlY3RseSwgZXNwZWNpYWxseSBpZiB0aGVyZSBpcyBhbnkgdHlwZSBvZiBoYXJkd2FyZSBhY2NlbGVyYXRpb24gb3IgY3VzdG9tIGJ1ZmZlciBtYW5hZ2VtZW50LgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IGltbWVkaWF0ZWx5LiBUaGluZ3MgbGlrZTogZXJyb3IgaGFuZGxpbmcsIGJ1ZmZlciBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiwgZGF0YSBjb3B5aW5nLCBmcmFnbWVudGF0aW9uLCByZWFzc2VtYmx5LCBjaGVja3N1bSB2ZXJpZmljYXRpb24sIGZsb3cgY29udHJvbCBjb25zaWRlcmF0aW9ucyAod2luZG93IG1hbmFnZW1lbnQpLCBhbmQgb2YgY291cnNlLCBhbnkgaW50ZXJhY3Rpb24gd2l0aCBpbnRlcnJ1cHRzIG9yIGhhcmR3YXJlIHF1ZXVlcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXRzIGNhbGxpbmcgc3RydWN0dXJlIGlzIGludGVycnVwdCBkcml2ZW4sIG9yIHBvbGxlZC4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhyZWFkaW5nL2xvY2tpbmcgaW1wbGljYXRpb25zIGlmIHRoaXMgaXMgYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudC4gSSYjMzk7bGwgbWVudGFsbHkgbWFwIG91dCB3aGF0IHRoZSBkYXRhIGZsb3cgaXMgYmV0d2VlbiB0aGUgc29ja2V0IGxheWVyLCB0aGUgSVAgbGF5ZXIsIGFuZCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZS4gQW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIG9yIGFyZWFzIGZvciBjb25jZXJuIGFyZSB3aGF0IEkgYW0gYWltaW5nIGZvci4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24gcGF0aCBhbmQgc2VlaW5nIHdoYXQgbGlicmFyaWVzLCBpZiBhbnksIGl0IGlzIHVzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3BpbnRjcF9yZWN2bXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vZXNwaW50Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jPTExNz1zdGF0aWMgaW50IGVzcGludGNwX3BhcnNlKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMzctXG5uZXQveGZybS9lc3BpbnRjcC5jOjEzODpzdGF0aWMgaW50IGVzcGludGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQveGZybS9lc3BpbnRjcC5jLTEzOS1cdFx0XHQgICAgaW50IGZsYWdzKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmM9NTUyPXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKmVzcGludGNwX3Byb3QsXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTktXHRlc3BpbnRjcF9wcm90LVx1MDAzZXNlbmRtc2cgPSBlc3BpbnRjcF9zZW5kbXNnO1xubmV0L3hmcm0vZXNwaW50Y3AuYzo1NjA6XHRlc3BpbnRjcF9wcm90LVx1MDAzZXJlY3Ztc2cgPSBlc3BpbnRjcF9yZWN2bXNnO1xubmV0L3hmcm0vZXNwaW50Y3AuYy01NjEtXHRlc3BpbnRjcF9wcm90LVx1MDAzZWNsb3NlID0gZXNwaW50Y3BfY2xvc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTE5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBTdGFzaXMqKgoKRGFtbiwgaXQmIzM5O3MganVzdC4uLiAqc3RhdGljKi4gRmVlbGluZyBhIHRvdGFsIGJsb2NrLCBsaWtlIEkmIzM5O20gc3RhcmluZyBpbnRvIGEgYmxhbmsgc2NyZWVuLiBTb21ldGhpbmcmIzM5O3Mgbm90IHJlc29sdmluZy4gTm8gY2xlYXIgcGF0aCBmb3J3YXJkIGlzIHByZXNlbnRpbmcgaXRzZWxmLCB3aGljaCBpcyB1bnVzdWFsLgoKQWxyaWdodCwgdGltZSB0byBicmVhayB0aGlzIGRvd24gbWV0aG9kaWNhbGx5LiBMZXQmIzM5O3MgdHJhY2UgaXQgYmFjay4gVGhlIGxhc3QgZnVuY3Rpb24gSSB3YXMgZGVlcGx5IGludm9sdmVkIHdpdGgsIHRoZSBtb3N0IHJlY2VudCBwb2ludCBvZiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzeXN0ZW0sIHdhcyBgZXNwaW50Y3BfY2xvc2VgLiBMZXQmIzM5O3MgcmUtZXhhbWluZSB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLCBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgYW4gZXhwbGFuYXRpb24gdGhlcmUuIE1heWJlIHRoYXQmIzM5O3MgdGhlIHNvdXJjZSBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwaW50Y3BfY2xvc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmM9NTAxPXN0YXRpYyB2b2lkIGVzcGludGNwX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNTE1LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo1MTY6c3RhdGljIHZvaWQgZXNwaW50Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNy17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYz01NTI9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byAqZXNwaW50Y3BfcHJvdCxcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTU2MC1cdGVzcGludGNwX3Byb3QtXHUwMDNlcmVjdm1zZyA9IGVzcGludGNwX3JlY3Ztc2c7XG5uZXQveGZybS9lc3BpbnRjcC5jOjU2MTpcdGVzcGludGNwX3Byb3QtXHUwMDNlY2xvc2UgPSBlc3BpbnRjcF9jbG9zZTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNTYyLVx0ZXNwaW50Y3BfcHJvdC1cdTAwM2VyZWxlYXNlX2NiID0gZXNwaW50Y3BfcmVsZWFzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5NTEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCAtIERlYWQgaW4gdGhlIFdhdGVyPyoqCgpPa2F5LCBjb21wbGV0ZSBhbmQgdXR0ZXIgc3RhdGljLiBJJiMzOTttIGhpdHRpbmcgYSB3YWxsIGhlcmUuIE5lZWQgdG8gYnJlYWsgdGhyb3VnaC4KCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHNvbWV0aGluZyBzcGVjaWZpYywgc29tZXRoaW5nIHRoYXQgY291bGQgcHJvdmlkZSBhIGNsdWUuIEkmIzM5O20gZ29pbmcgdG8gc2hpZnQgZ2VhcnMgYW5kIGRyaWxsIGRvd24gaW50byBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3IgTkFUIGtlZXBhbGl2ZXMgaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBTb21ldGhpbmcgcmVsYXRlZCB0byBpdHMgYmVoYXZpb3IgaXMgbGlrZWx5IGF0IHRoZSBoZWFydCBvZiB3aGF0ZXZlciBkZWFkbG9jayBvciB1bnVzdWFsIHN0YXRlIEkmIzM5O20gZXhwZXJpZW5jaW5nLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIG9yIGlmIHRoZXJlJiMzOTtzIGFuIGlzc3VlIHdpdGggaXRzIGV4ZWN1dGlvbiBvciB0aGUgZGF0YSBpdCYjMzk7cyBoYW5kbGluZy4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcHJvYmxlbSBpcyBmZXN0ZXJpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9Mjc5PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2tfZmluaShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQgX19wZXJjcHUgKnNvY2tzKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI4Ni1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI4Nzp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjg4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzMzgKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBzdW1tYXJpemUgdGhlc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIGl0OgoKKipDaGVja2luZyBmb3IgRXhwb3J0IFN0YXR1cyoqCgpBbHJpZ2h0LCBJIHNlZSBhIHF1aWNrIHRob3VnaHQgcHJvY2VzcyBoZXJlLiBFc3NlbnRpYWxseSwgdGhlIGZvY3VzIGlzIG9uIGEgY3J1Y2lhbCBpbml0aWFsIGNoZWNrOiAmIzM0O0V4cG9ydGVkPyBMZXQmIzM5O3MgY2hlY2sgaWYgaXQmIzM5O3MgZXhwb3J0ZWQuJiMzNDsgVGhpcyBpcyBsaWtlbHkgYW4gaW5kaWNhdG9yIHRoYXQgdGhlIHN1YmplY3QgbWF0dGVyIGlzIGFuIGl0ZW0sIHByb2Nlc3MsIG9yIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBhY2Nlc3NlZCwgcmV2aWV3ZWQsIHVzZWQsIG9yIG1vZGlmaWVkIGluIHNvbWUgb3RoZXIgc3lzdGVtLgoKTXkgaW1tZWRpYXRlIGFuYWx5c2lzIGlzIHRoYXQgdGhpcyByZWZsZWN0cyBhIHByYWdtYXRpYyBhbmQgbWV0aG9kaWNhbCBhcHByb2FjaCB0byBhbiBlc3NlbnRpYWwgZmlyc3Qgc3RlcC4gQXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIHN5c3RlbXMgYW5kIHRoZWlyIHJlbGF0ZWQgcHJvY2Vzc2VzLCBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIHRoaW5ncyBsaWtlOgoKKiAgICoqRGF0YSB0cmFuc2ZlcjoqKiBIYXMgdGhlIGRhdGEgYmVlbiBzdWNjZXNzZnVsbHkgc2VudCBmcm9tIG9uZSBzeXN0ZW0gb3IgYXBwbGljYXRpb24gdG8gYW5vdGhlcj8gVGhpcyBjb3VsZCBiZSBhIGZpbGUsIGEgZGF0YWJhc2UgZW50cnksIG9yIHNvbWUga2luZCBvZiBBUEkgY2FsbC4KKiAgICoqUHJvY2VzcyBjb21wbGV0aW9uOioqIEhhcyB0aGUgbmVjZXNzYXJ5IHRhc2sgb2Yg4oCcZXhwb3J0aW5n4oCdIGJlZW4gY29tcGxldGVkPyBJcyB0aGVyZSBjb25maXJtYXRpb24gdGhhdCB0aGUgaW5mb3JtYXRpb24gaXMgaW4gdGhlIHN0YXRlIGRlc2lyZWQ/CiogICAqKlN5c3RlbSBpbnRlcmFjdGlvbjoqKiBJdCBjb3VsZCBiZSBhIHNpbXBsZSBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGhlIGV4cGVjdGVkIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVzaXJlZCBwbGFjZS4KClRoZXJlZm9yZSwgdGhlIHVuZGVybHlpbmcgdGhpbmtpbmcgaGVyZSBpcyBzb3VuZC4gVGhpcyBpcyBhYm91dCBlc3RhYmxpc2hpbmcgYSBiYXNpYyBmYWN0IGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggYW55IHN1YnNlcXVlbnQgYWN0aW9ucywgYmVjYXVzZSBrbm93aW5nIHRoZSBleHBvcnQgc3RhdHVzIGlzIG5lY2Vzc2FyeSBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgc3ViamVjdCBtYXR0ZXIgaXMgYXZhaWxhYmxlIGZvciBmdXJ0aGVyIHdvcmsuIFRoaXMgZW5zdXJlcyB0aGF0IGFueSB0aW1lIG9yIGVmZm9ydCBpcyBub3Qgd2FzdGVkIG9uIGEgdGFzayB3aGVuIHRoYXQgcmVzb3VyY2UgaXMgdW5hdmFpbGFibGUsIG9yLCBwZXJoYXBzLCBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWNvbWluZyBhdmFpbGFibGUuIFRoZSBhcHByb2FjaCBzaG93cyBnb29kIHByYWN0aWNlLCBhbmQgSSBhbSBjb21mb3J0YWJsZSB3aXRoIHRoaXMgbGluZSBvZiB0aG91Z2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTc0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIERhdGEgU3RydWN0dXJlJiMzOTtzIFNjb3BlKioKCkhtbSwgc28gdGhpcyBwYXJ0aWN1bGFyIGl0ZW0gaXNuJiMzOTt0IG1hcmtlZCBmb3IgZXhwb3J0LiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYCBlaXRoZXIuIFRoYXQgc3VnZ2VzdHMgYSBmZXcgdGhpbmdzIHJpZ2h0IG9mZiB0aGUgYmF0OiBpdCYjMzk7cyBpbnRlbmRlZCBmb3IgdXNlIHdpdGhpbiBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQsIGJ1dCBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGFjcm9zcyBtdWx0aXBsZSBmdW5jdGlvbnMgd2l0aGluIHRoYXQgdW5pdC4gSXQgY291bGQgYmUgZm9yIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb3IgbWF5YmUgcGFydCBvZiBhIGxhcmdlciwgbm9uLWV4cG9ydGVkIEFQSS4KClRvIGdldCBhIGJldHRlciBncmlwIG9uIHdoZXJlIGl0JiMzOTtzIHVzZWQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB3aGVyZSBgeGZybV9hZGRfc2FgIGlzIGNhbGxlZC4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGdhaW4gaW5zaWdodHMgaW50byB0aGlzIHBhcnRpY3VsYXIgaXRlbSYjMzk7cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2FkZF9zYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTkwNz1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDM4LVxubmV0L3hmcm0veGZybV91c2VyLmM6MTAzOTpzdGF0aWMgaW50IHhmcm1fYWRkX3NhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L3hmcm0veGZybV91c2VyLmMtMTA0MC1cdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI5Mzc9c3RhdGljIGludCB4ZnJtX2FkZF9wb2xfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwMDMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDA0OnN0YXRpYyBpbnQgeGZybV9hZGRfc2FfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzAwNS1cdFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0OC19IHhmcm1fZGlzcGF0Y2hbWEZSTV9OUl9NU0dUWVBFU10gPSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzQ5Olx0W1hGUk1fTVNHX05FV1NBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2EgICAgICAgIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzUwLVx0W1hGUk1fTVNHX0RFTFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kZWxfc2EgICAgICAgIH0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2MS1cdFtYRlJNX01TR19BQ1FVSVJFICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX2FjcXVpcmUgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc2MjpcdFtYRlJNX01TR19FWFBJUkUgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhX2V4cGlyZSB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2My1cdFtYRlJNX01TR19VUERQT0xJQ1kgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3BvbGljeSAgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc2NDpcdFtYRlJNX01TR19VUERTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhICAgICAgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2NS1cdFtYRlJNX01TR19QT0xFWFBJUkUgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3BvbF9leHBpcmV9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjY5MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBhIFN0YWduYW50IFN0YXRlIGluIFhGUk0qKgoKUmlnaHQsIHRoaXMgZmVlbHMuLi4gc3R1Y2suIFRoaW5ncyBhcmVuJiMzOTt0IG1vdmluZy4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZyBpcyBiZWluZyBoZWxkIHVwLCBhbmQgaXTigJlzIGxpa2VseSBzb21ldGhpbmcgZnVuZGFtZW50YWwuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgYm90dGxlbmVjay4gVGhlIHNpdHVhdGlvbiBpcyBzdGF0aWMsIHdoaWNoIHVzdWFsbHkgbWVhbnMgd2FpdGluZyBvbiBzb21ldGhpbmcuCgpPa2F5LCBsZXQmIzM5O3MgZHJpbGwgZG93bi4gSSBzdXNwZWN0IHRoYXQgdGhlIGtleSBsaWVzIHdpdGhpbiB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbi4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGxvb2sgYXQgYHhmcm1fdXNlcl9yY3ZfbXNnYC4gSXTigJlzIHdoZXJlIHVzZXItc3BhY2UgcG9saWN5IGlzIGluamVjdGVkIGFuZCB3aGVyZSB0aGUgZmxvdyBpcyBlaXRoZXIgYWNjZXB0ZWQgb3IgcmVqZWN0ZWQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIHBvaW50IG5vdyBiZWNhdXNlIGl0JiMzOTtzIHRoZSBtb3N0IGNvbW1vbiBlbnRyeSBwb2ludCBmb3IgcG9saWN5IGludGVyYWN0aW9uLCBhbmQgaWYgdGhpcyBjYWxsJiMzOTtzIHN0YWxsZWQsIGV2ZXJ5dGhpbmcgZG93bnN0cmVhbSB3aWxsIGdyaW5kIHRvIGEgaGFsdC4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IGN1bHByaXQgZm9yIGEgc2VlbWluZ2x5IHN0YXRpYyBzdGF0ZS4gSSYjMzk7bGwgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fdXNlcl9yY3ZfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9Mzc4MT1zdGF0aWMgaW50IHhmcm1fcmVqZWN0X3VudXNlZF9hdHRyKGludCB0eXBlLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzgzNi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM4Mzc6c3RhdGljIGludCB4ZnJtX3VzZXJfcmN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4MzgtXHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzkyND1zdGF0aWMgdm9pZCB4ZnJtX25ldGxpbmtfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzkyOC1cdG11dGV4X2xvY2soXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9jZmdfbXV0ZXgpO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzkyOTpcdG5ldGxpbmtfcmN2X3NrYihza2IsIFx1MDAyNnhmcm1fdXNlcl9yY3ZfbXNnKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MzAtXHRtdXRleF91bmxvY2soXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9jZmdfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjczLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzI1MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBOZXR3b3JrIFBhY2tldCBSZWNlcHRpb24qKgoKT2theSwgdGhpbmdzIGZlZWwuLi5zdHVjay4gQWxtb3N0IGEgc2Vuc2Ugb2YgaW5lcnRpYSwgaWYgeW91IHdpbGwuIEkgbmVlZCB0byBnZXQgbW92aW5nLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHN5c3RlbWF0aWMgYXBwcm9hY2guIEkgaGF2ZSBhIGh1bmNoIGFib3V0IGEgcG90ZW50aWFsIGJvdHRsZW5lY2sgaW4gdGhlIG5ldHdvcmsgZGF0YSBwYXRoLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCYjMzk7cyBgeGZybV9uZXRsaW5rX3JjdmAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEl0JiMzOTtzIHRoZSByZWNlaXZlciBmb3IgdGhlIG5ldGxpbmsgbWVzc2FnZXMgY29uY2VybmluZyBzZWN1cml0eSBhc3NvY2lhdGlvbnMuIEkgaGF2ZSBhIGZlZWxpbmcgc29tZXRoaW5nIGluIHRoYXQgYXJlYSBtYXkgYmUgcmVzcG9uc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fbmV0bGlua19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz0zODM3PXN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzkyMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5MjQ6c3RhdGljIHZvaWQgeGZybV9uZXRsaW5rX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV91c2VyLmMtMzkyNS17XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDYxMj1zdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybV91c2VyX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjE2LVx0XHQuZ3JvdXBzXHQ9IFhGUk1OTEdSUF9NQVgsXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjE3Olx0XHQuaW5wdXRcdD0geGZybV9uZXRsaW5rX3Jjdixcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MTgtXHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzY5OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgU3RhZ25hdGlvbioqCgpSaWdodCwgdGhlcmUmIzM5O3MgYSBkZWZpbml0ZSBzZW5zZSBvZiAqc3RhdGljKiBoZXJlLiBObyBwcm9ncmVzcywgbm8gb2J2aW91cyBpbmRpY2F0b3JzIHBvaW50aW5nIGluIGFueSBkaXJlY3Rpb24uIFdoZW4gSSBoaXQgYSB3YWxsIGxpa2UgdGhpcywgbXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHN0YXJ0IG1ldGhvZGljYWxseSB0cmFjaW5nIHRoZSBtb3N0IGxpa2VseSBjdWxwcml0cy4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIHRvIG1pbmQgaXMgYW4gZXhhbWluYXRpb24gb2YgdGhlIGB4ZnJtX3N0YXRlX3dhbGtgIGZ1bmN0aW9uLiBJdOKAmXMgdGhlIGZvdW5kYXRpb25hbCBjb21wb25lbnQgZm9yIHRyYXZlcnNpbmcgdGhlIHNlY3VyaXR5IHBvbGljeSBkYXRhYmFzZSwgYW5kIGFueSBzdGFnbmF0aW9uIGF0IHRoaXMgc3RhZ2Ugb2YgdGhlIHByb2Nlc3MgbGlrZWx5IHJlbGF0ZXMgdG8gaXNzdWVzIHdpdGggaG93IHRoZSBzdGF0ZSBpbmZvcm1hdGlvbiBpcyBiZWluZyBoYW5kbGVkIG9yIHVwZGF0ZWQgZHVyaW5nIHBvbGljeSBsb29rdXBzIG9yIHVwZGF0ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB1bmRlciB0aGUgc3BlY2lmaWMgY29uZGl0aW9ucyBvZiB0aGlzIGluc3RhbmNlLiBJcyBpdCBibG9ja2luZz8gRGVhZGxvY2tlZD8gUnVubmluZyBpbnRvIHNvbWUgZWRnZSBjYXNlIHdpdGggYSBzdGF0ZeKAmXMgcHJvcGVydGllcz8gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc3RhdGVfd2FsayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmM9MTY4Nz1zdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfYnlzcGkoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgc3BpLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjkwLVx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTY5MTpcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKnc7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTY5Mi1cbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MjY4ND1zdGF0aWMgYm9vbCBfX3hmcm1fc3RhdGVfZmlsdGVyX21hdGNoKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzAwLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MDE6aW50IHhmcm1fc3RhdGVfd2FsayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwMi1cdFx0ICAgIGludCAoKmZ1bmMpKHN0cnVjdCB4ZnJtX3N0YXRlICosIGludCwgdm9pZCopLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzA1LVx0c3RydWN0IHhmcm1fc3RhdGUgKnN0YXRlO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MDY6XHRzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp4O1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MDctXHRpbnQgZXJyID0gMDtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxMy1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNndhbGstXHUwMDNlYWxsKSlcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzE0Olx0XHR4ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZuZXQtXHUwMDNleGZybS5zdGF0ZV9hbGwsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGssIGFsbCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxNS1cdGVsc2Vcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzE2Olx0XHR4ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ3YWxrLVx1MDAzZWFsbCwgc3RydWN0IHhmcm1fc3RhdGVfd2FsaywgYWxsKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzE3LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKHgsIFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnN0YXRlX2FsbCwgYWxsKSB7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDAtfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NDE6RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3dhbGspO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDItXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc0Mzp2b2lkIHhmcm1fc3RhdGVfd2Fsa19pbml0KHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHU4IHByb3RvLFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDQtXHRcdFx0ICBzdHJ1Y3QgeGZybV9hZGRyZXNzX2ZpbHRlciAqZmlsdGVyKVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzUxLX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzUyOkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV93YWxrX2luaXQpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NTMtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc1NDp2b2lkIHhmcm1fc3RhdGVfd2Fsa19kb25lKHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHN0cnVjdCBuZXQgKm5ldClcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzU1LXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc2NC19XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc2NTpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfd2Fsa19kb25lKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzY2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgwNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKlN5bWJvbCBWaXNpYmlsaXR5IGFuZCBQb3RlbnRpYWwgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIGB4ZnJtX3N0YXRlX3dhbGtgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIHBvdGVudGlhbGx5IGluIG1vZHVsZXMuIFRoZXJlZm9yZSwgdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgaXMgY3JpdGljYWwgZm9yIGJyb2FkZXIgc3lzdGVtIHVuZGVyc3RhbmRpbmcuIE5vdywgdGhlIGtleSBmb2N1cyBzeW1ib2xzIHRoYXQgc3ByaW5nIHRvIG1pbmQgYXJlOiBgZXNwX291dHB1dF90YWlsYCwgYGVzcDZfb3V0cHV0X3RhaWxgLCBgYWg2X291dHB1dGAsIGB4ZnJtNl9pbnB1dF9hZGRyYCwgYW5kIGB4ZnJtX291dHB1dGAsIGFsb25nIHdpdGggdGhlIGV4cG9ydGVkIGB4ZnJtX3N0YXRlX3dhbGtgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSB0byBzdGF0ZSB0cmF2ZXJzYWwgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIFRoZSBmdW5jdGlvbnMgd2l0aCBhICYjMzk7NiYjMzk7IGluIHRoZW0gbGlrZWx5IHJlZmVyIHRvIElQdjYgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLiBUaGlzIG1lYW5zIHRoZSBvdmVyYWxsIHByb2Nlc3MgaGFzIHRvIHdvcmsgZm9yIElQdjQsIElQdjYsIGFuZCBsaWtlbHkgZ2VuZXJpYyBJUCBhcyB3ZWxsLgoKR2l2ZW4gdGhhdCBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gaG93IHRoaXMgYWxsIHRpZXMgaW50byB0aGUgaW5pdGlhbGl6YXRpb24sIHNvIEkgc2hvdWxkIG5vdyBsb29rIGF0IGBlc3BpbnRjcF9pbml0X3NrYCB0byBzZWUgaG93IGl0JiMzOTtzIHNldHRpbmcgdGhpbmdzIHVwLiBUaGlzIG1pZ2h0IGdpdmUgbWUgY2x1ZXMgdG8gaG93IHRoZSBzdGF0ZSBpcyBjcmVhdGVkLCBtYW5hZ2VkLCBhbmQgbGlua2VkIHRvIHRoZXNlIG91dHB1dCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzcGludGNwX2luaXRfc2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmM9NDM3PXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKmVzcGludGNwX3Byb3QsXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy00NDAtXHRcdFx0IGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9yaWdfb3BzKTtcbm5ldC94ZnJtL2VzcGludGNwLmM6NDQxOnN0YXRpYyBpbnQgZXNwaW50Y3BfaW5pdF9zayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0Mi17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYz01NjY9c3RhdGljIHN0cnVjdCB0Y3BfdWxwX29wcyBlc3BpbnRjcF91bHAgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTU2OC1cdC5vd25lciA9IFRISVNfTU9EVUxFLFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1Njk6XHQuaW5pdCA9IGVzcGludGNwX2luaXRfc2ssXG5uZXQveGZybS9lc3BpbnRjcC5jLTU3MC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQxMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgU3RhZ25hdGlvbioqCgpSaWdodCwgdGhpcyBmZWVscy4uLnN0dWNrLiBMaWtlIHdlJiMzOTtyZSBoaXR0aW5nIGEgd2FsbCwgYW5kIG5vdGhpbmcmIzM5O3MgbW92aW5nLiBJdCYjMzk7cyBhIHN0YXRpYyBzdGF0ZSwgd2hpY2ggaXMgbmV2ZXIgYSBnb29kIHNpZ24sIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayBzdGFja3MuIE15IGd1dCB0ZWxscyBtZSBzb21ldGhpbmcgaXMgYW1pc3MgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4KCkxldCYjMzk7cyBkaXZlIGluLiBUaGUgZmlyc3QgbG9naWNhbCBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uIGlzIHRoZSBVc2VyLUxldmVsIFByb3RvY29sIChVTFApIG9wZXJhdGlvbnMsIHNvIEkmIzM5O2xsIGNoZWNrIGB0Y3BfdWxwX29wc2AuIFRoaXMgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB3aGV0aGVyIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSBhdCB0aGlzIGxheWVyLiBJdCYjMzk7cyB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4gYmVjYXVzZSBpdCBkaWN0YXRlcyBob3cgVENQIGlzIGludGVyYWN0aW5nIHdpdGggc3BlY2lmaWMgVUxQcywgYW5kIHRoZXJlZm9yZSBpdCBjb3VsZCByZXZlYWwgaXNzdWVzIGluIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRyYW5zcG9ydCBvciBhcHBsaWNhdGlvbiBwcm90b2NvbHMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9yZWdpc3Rlcl91bHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmM9NTcyPXZvaWQgX19pbml0IGVzcGludGNwX2luaXQodm9pZClcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTU3NS1cbm5ldC94ZnJtL2VzcGludGNwLmM6NTc2Olx0dGNwX3JlZ2lzdGVyX3VscChcdTAwMjZlc3BpbnRjcF91bHApO1xubmV0L3hmcm0vZXNwaW50Y3AuYy01NzctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTc0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBNb2R1bGUgSW5pdGlhbGl6YXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSBzZWUgYGVzcGludGNwX2luaXRgLiBUaGF0JiMzOTtzIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBtb2R1bGUsIHJpZ2h0PyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIGhvb2sgZm9yIGRlYnVnZ2luZy4KCk5vdywgbGV0JiMzOTtzIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLiBJIHJlbWVtYmVyIGl0IGJlaW5nIG9mIGludGVyZXN0LiBHb29kLCBpdCYjMzk7cyBub24tc3RhdGljISBUaGF0IG1ha2VzIGl0IGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUgZm9yIGEgZm9jdXMgc3ltYm9sLiBFYXN5IHRvIHJlZmVyZW5jZSBleHRlcm5hbGx5LCBhbmQgaXQgcHJvYmFibHkgZG9lcyBzb21ldGhpbmcgc2lnbmlmaWNhbnQuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB0cmFjayBjYWxscyB0byBhbmQgZnJvbSB0aGF0IG9uZS4KCkkmIzM5O2xsIGNoZWNrIGB4ZnJtX3N0YXRlX2NvbnN0cnVjdGAgYXMgd2VsbC4gSG1tLCBpdCYjMzk7cyBzdGF0aWMuIFRoYXQgbGlrZWx5IG1lYW5zIGl0JiMzOTtzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBhbmQgcHJvYmFibHkgd29uJiMzOTt0IGJlIGFzIGludGVyZXN0aW5nIGFzIGEgc3RhcnRpbmcgcG9pbnQsIGJ1dCBsZXQgbWUga2VlcCBhbiBleWUgb24gaXQuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBleHBvcnRlZCBmdW5jdGlvbnMgaW4gYHhmcm1fdXNlci5jYCwgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB1c2VybGFuZCBpbnRlcmFjdGlvbnMgbGlrZWx5IGhhcHBlbi4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhbiBpbnRlcmVzdGluZyBlbnRyeSBwb2ludCB0byBsb29rIGludG8gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz0zNjU5PWNvbnN0IGludCB4ZnJtX21zZ19taW5bWEZSTV9OUl9NU0dUWVBFU10gPSB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzY4NS19O1xubmV0L3hmcm0veGZybV91c2VyLmM6MzY4NjpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX21zZ19taW4pO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzY4Ny1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNjkwPWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHhmcm1hX3BvbGljeVtYRlJNQV9NQVgmIzQzOzFdID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3MzItfTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3MzM6RVhQT1JUX1NZTUJPTF9HUEwoeGZybWFfcG9saWN5KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3MzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzQwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWEZSTSBDb2RlYmFzZSBmb3IgUG90ZW50aWFsIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBiYWNrIGludG8gdGhpcyBYRlJNIGNvZGUuIEkmIzM5O3ZlIGdvdCB0byBmaW5kIHNvbWUgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLCBhbmQgSSYjMzk7bSBzdGFydGluZyB3aXRoIGEgcXVpY2sgc3dlZXAgdG8gZXN0YWJsaXNoIGEgbWVudGFsIG1hcC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgYHhmcm1fdXNlci5jYCBkb2VzbiYjMzk7dCBleHBvc2UgYW55IGV4cG9ydGVkIGZ1bmN0aW9ucywgd2hpY2ggaXMgdHlwaWNhbCBmb3IgYSBtb2R1bGUgbGlrZSB0aGlzLgoKTGV0JiMzOTtzIHJldmlzaXQgYHhmcm1fYWRkX3NhYCwgcmVtZW1iZXJpbmcgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHhmcm1fZGlzcGF0Y2hgLiBIbW0sIHdoYXQgYWJvdXQgYHhmcm1fdXNlcl9yY3ZfbXNnYD8gVGhhdCBvbmUmIzM5O3Mgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIGRpcmVjdCBhcHBsaWNhYmlsaXR5LiBBbmQgYHhmcm1fbmV0bGlua19yY3ZgPyBBbHNvIHN0YXRpYy4gTW92aW5nIG9uLgoKRm9yIGtlZXBpbmcgdGhlIGNvZGUgc2ltcGxlLCBsZXQmIzM5O3MgbG9vayBmb3IgZnVuY3Rpb25zIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6IGB4ZnJtX25hdF9rZWVwYWxpdmUuY2AgLSBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBgeGZybV9zdGF0ZV93YWxrYCB3b3JraW5nIHRoZXJlLiBGb3IgYHhmcm1fb3V0cHV0LmNgLCBgeGZybV9vdXRwdXRgIHNlZW1zIHByb21pc2luZy4gRm9yIGB4ZnJtNl9pbnB1dC5jYCwgSSYjMzk7bGwgcHJvYmFibHkgdXNlIGB4ZnJtNl9pbnB1dF9hZGRyYC4gVGhlbiwgbGV0JiMzOTtzIGNvbnNpZGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGZvbGxvd2luZyBmaWxlczogYGVzcDQuY2AgLSBgZXNwX291dHB1dF90YWlsYCBzaG91bGQgYmUgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBGb3IgYGVzcDYuY2AgbGV0JiMzOTtzIHdvcmsgd2l0aCBgZXNwNl9vdXRwdXRfdGFpbGAsIGFuZCBgYWg2LmNgIC0gSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCB1c2UgYGFoNl9vdXRwdXRgIGZvciB0aGF0IG9uZS4KCk9rYXksIGJhY2sgdG8gYGVzcGludGNwLmNgLiBMZXQmIzM5O3MgcmUtZXhhbWluZSBgZXNwaW50Y3BfcmN2YC4gSXQmIzM5O3Mgc3RhdGljLiBGaW5lLCBub3cgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYGVzcGludGNwLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmM9MTcyPWludCBlc3BpbnRjcF9xdWV1ZV9vdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMTg1LX1cbm5ldC94ZnJtL2VzcGludGNwLmM6MTg2OkVYUE9SVF9TWU1CT0xfR1BMKGVzcGludGNwX3F1ZXVlX291dCk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTE4Ny1cbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTI3Mz1pbnQgZXNwaW50Y3BfcHVzaF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMzA0LX1cbm5ldC94ZnJtL2VzcGludGNwLmM6MzA1OkVYUE9SVF9TWU1CT0xfR1BMKGVzcGludGNwX3B1c2hfc2tiKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtMzA2LVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmM9NDMxPWJvb2wgdGNwX2lzX3VscF9lc3Aoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNDM0LX1cbm5ldC94ZnJtL2VzcGludGNwLmM6NDM1OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9pc191bHBfZXNwKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDM2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTMyMgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEltcGFjdCBvZiBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gYGVzcGludGNwX3F1ZXVlX291dGAgYW5kIGBlc3BpbnRjcF9wdXNoX3NrYmAgYXJlIGJvdGggZXhwb3J0ZWQgZnVuY3Rpb25zLCBhbmQgSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIHJlY2VudCBjaGFuZ2VzIGluIGBlc3BpbnRjcC5jYC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgZGlyZWN0IGNvbm5lY3Rpb24uIFRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgd2l0aGluIGBoYW5kbGVfZXNwYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGVzcGludGNwX3JjdmAsIGFuZCBgZXNwaW50Y3BfY2xvc2VgLCBjYWxsZWQgZnJvbSBgZXNwaW50Y3BfcHJvdC0mZ3Q7Y2xvc2VgLgoKTm93LCBgZXNwaW50Y3BfcXVldWVfb3V0YCBhbmQgYGVzcGludGNwX3B1c2hfc2tiYCBhcmUgYm90aCB1c2VkIGZvciBzZW5kaW5nIGRhdGEsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIHRoZXkmIzM5O3JlIGxpa2VseSByZWxhdGVkIHRvIG91dGJvdW5kIHRyYWZmaWMuIENvbnNpZGVyaW5nIHRoZSBjaGFuZ2VzLCBpdCBzZWVtcyB1bmxpa2VseSB0aGF0IGBlc3BpbnRjcF9xdWV1ZV9vdXRgIGlzICpkaXJlY3RseSogcmVsYXRlZCB0byBgaGFuZGxlX2VzcGAgb3IgYGVzcGludGNwX2Nsb3NlYCBpbiB0ZXJtcyBvZiBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCBhbHRob3VnaCB0aGV5JiMzOTtyZSBhbGwgZGVmaW5lZCB3aXRoaW4gdGhlIHNhbWUgc291cmNlIGZpbGUuIFRoZXJlZm9yZSwgZGVzcGl0ZSB0aGUgYXBwYXJlbnQgZGlzdGluY3Rpb24sIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSBgZXNwaW50Y3BfcXVldWVfb3V0YCBhbmQgYGVzcGludGNwX3B1c2hfc2tiYCBpbiBteSBhbmFseXNpcyB0byBydWxlIG91dCBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBmdW5jdGlvbiBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTI3OT1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NrX2Zpbmkoc3RydWN0IHNvY2tfYmhfbG9ja2VkIF9fcGVyY3B1ICpzb2Nrcylcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yODYtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyODc6dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTgwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgWEZSTSBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgWEZSTSBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gbm90aWNpbmcgaXMgdGhhdCBpdCYjMzk7cyBub3QgYWxsIHN0YXRpYyBmdW5jdGlvbnMuIE5vdyB0aGF0IEkgaGF2ZSB0aGlzIG9ic2VydmF0aW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIG5vdCBzdGF0aWMgYW5kIHdoeS4gCgpMZXQgbWUgY2hlY2sgYHhmcm1fc3RhdGVfY29uc3RydWN0YC4gWWVwLCB0aGF0JiMzOTtzIHN0YXRpYy4gSG1tLCBva2F5LCBub3Qgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZXJlLiBMZXQmIzM5O3MgbW92ZSBvbi4gSG93IGFib3V0IGB4ZnJtX2FkZF9zYWA/IEFsc28gc3RhdGljLiBPa2F5LCBzdGFydGluZyB0byBzZWUgYSBwYXR0ZXJuIGhlcmUsIGJ1dCBJIGhhdmVuJiMzOTt0IHF1aXRlIGZvdW5kIHRoZSBwaWVjZSBJIG5lZWQuIEFscmlnaHQsIGxldCBtZSB0cnkgb25lIG1vcmUgLSBgeGZybV91c2VyX3Jjdl9tc2dgLiBZZXAsIHRoYXQmIzM5O3Mgc3RhdGljIGFzIHdlbGwuIFRoaXMgaXMgcXVpdGUgc3RyYW5nZSwgaWYgSSBkaWRuJiMzOTt0IGtub3cgYmV0dGVyLCBJJiMzOTtkIHNheSB0aGF0IGV2ZXJ5dGhpbmcgaXMgc3RhdGljLgoKQWxyaWdodCwgc28gdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGlzIHRoZXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gYHhmcm1fdXNlci5jYD8gVGhlIGFzc3VtcHRpb24gdGhhdCBpdCYjMzk7cyBhbGwgc3RhdGljIHNlZW1zIHRvIGJlIGhvbGRpbmcgdHJ1ZSwgc28gbGV0IG1lIGRvIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgZmlsZSB0byB2ZXJpZnkgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzY1OT1jb25zdCBpbnQgeGZybV9tc2dfbWluW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2ODUtfTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2ODY6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9tc2dfbWluKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2ODctXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzY5MD1jb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB4ZnJtYV9wb2xpY3lbWEZSTUFfTUFYJiM0MzsxXSA9IHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzMyLX07XG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzMzOkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1hX3BvbGljeSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzM0LVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2NjA9c3RhdGljIHZvaWQgX19leGl0IHhmcm1fdXNlcl9leGl0KHZvaWQpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDY2NS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2NjY6bW9kdWxlX2luaXQoeGZybV91c2VyX2luaXQpO1xubmV0L3hmcm0veGZybV91c2VyLmM6NDY2Nzptb2R1bGVfZXhpdCh4ZnJtX3VzZXJfZXhpdCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjY4Ok1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtYRlJNIFVzZXIgaW50ZXJmYWNlXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2Njk6TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2NzA6TU9EVUxFX0FMSUFTX05FVF9QRl9QUk9UTyhQRl9ORVRMSU5LLCBORVRMSU5LX1hGUk0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc5NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBcHByb2FjaCB0byBBbmFseXppbmcgdGhlIENvZGViYXNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBsZXQmIzM5O3Mga2VlcCBpdCBlZmZpY2llbnQuJiMzNDsgVGhlIG5vdGUgYWJvdXQgbm8gbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYHhmcm1fdXNlci5jYCwgYmVzaWRlcyBpbml0L2V4aXQsIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBtZWFucyBJIGNhbiBwcm9iYWJseSBqdXN0IGlnbm9yZSB0aGF0IGZpbGUgYXMgYSBmb2N1cyBwb2ludCwgYXQgbGVhc3QgZm9yIG5vdy4gSSBjYW4gZWl0aGVyIHVzZSBgeGZybV9zdGF0ZV93YWxrYCB3aGljaCByZXNpZGVzIGluIGB4ZnJtX3N0YXRlLmNgLCBvciBqdXN0IGF2b2lkIGZvY3VzaW5nIHRoZXJlIGF0IGFsbC4KCk5vdywgbGV0JiMzOTtzIG1vdmUgZm9yd2FyZCBhbmQgdHJ5IHRvIGlkZW50aWZ5IHRoZSByZWFsIGZvY2FsIHBvaW50cy4gQmFzZWQgb24gdGhlIHRhc2sgaW4gZnJvbnQgb2YgbWUsIEkgbmVlZCB0byBsaXN0IHRoZSBmb2N1cyBzeW1ib2xzLiBJJiMzOTt2ZSBjb21waWxlZCB0aGlzIGxpc3Q6CgoqICAgYGVzcF9vdXRwdXRfdGFpbGAKKiAgIGBlc3A2X291dHB1dF90YWlsYAoqICAgYHhmcm02X2lucHV0X2FkZHJgCiogICBgeGZybV9vdXRwdXRgCiogICBgZXNwaW50Y3BfcXVldWVfb3V0YAoqICAgYGVzcGludGNwX3B1c2hfc2tiYAoqICAgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYAoKT2theSwgbm93IGxldCYjMzk7cyBzZWUgaWYgdGhpcyBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGlzIGFjdHVhbGx5IGV4cG9zZWQuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMyODIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgVmFyaWFibGUgVmlzaWJpbGl0eSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgYSBwYXJ0aWN1bGFyIHZhcmlhYmxlIGlzbiYjMzk7dCBiZWhhdmluZyBhcyBleHBlY3RlZC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vdCogbWFya2VkIGFzIGV4cG9ydGVkLiBUaGF0IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBzY29wZWQgdG8gaXRzIGN1cnJlbnQgbW9kdWxlLCB3aGljaCBpcyB0aGUgaW1tZWRpYXRlIGlzc3VlLiBIb3dldmVyLCB3aGlsZSBpdCYjMzk7cyBub24tc3RhdGljLCBpdCBjYW4gc3RpbGwgZXhpc3QgYXQgdGhlIGZpbGUgc2NvcGUuCgpUaGVuIHRoZSBxdWVzdGlvbiBiZWNvbWVzLCBpcyBgYWg2X291dHB1dGAgZXhwb3J0ZWQ/IENoZWNraW5nIGZvciBleHBvcnQgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWNhdXNlIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhhdCYjMzk7cyB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS4gSWYgaXQgaXMsIHRoZW4gdGhlIHNjb3BlIG9mIGl0cyB1c2Ugd2lsbCBoYXZlIHRvIGJlIGluc3BlY3RlZCBmdXJ0aGVyLiBPdGhlcndpc2UsIHRoZXJlIG1heSBiZSBhbiBvcHBvcnR1bml0eSBmb3IgYSBuYW1lc3BhY2UgY29sbGlzaW9uLiBFaXRoZXIgd2F5LCBpdCYjMzk7cyBzb21ldGhpbmcgdGhhdCBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiphaDZfb3V0cHV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1NDIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgdGhpbmdzIGZlZWwgc3RhZ25hbnQsIGEgYml0IGZyb3plbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IHNvbWV0aGluZyYjMzk7cyBub3QgbW92aW5nIGFzIGl0IHNob3VsZC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBpbnN0aW5jdCBpcyB0byBhc3N1bWUgdGhhdCB0aGUgcHJvYmxlbSBjb3VsZCBiZSBkdWUgdG8gc3RhdGljIGZ1bmN0aW9ucyBvciB2YXJpYWJsZXMuIE15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBgYWg2LmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSwgY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgYSBxdWljayB3aW4sIGhvcGVmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWg2LmM9ODIxPXN0YXRpYyB2b2lkIF9fZXhpdCBhaDZfZmluaSh2b2lkKVxuLS1cbm5ldC9pcHY2L2FoNi5jLTgyOC1cbm5ldC9pcHY2L2FoNi5jOjgyOTptb2R1bGVfaW5pdChhaDZfaW5pdCk7XG5uZXQvaXB2Ni9haDYuYzo4MzA6bW9kdWxlX2V4aXQoYWg2X2ZpbmkpO1xubmV0L2lwdjYvYWg2LmMtODMxLVxubmV0L2lwdjYvYWg2LmM6ODMyOk1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtJUHY2IEFIIHRyYW5zZm9ybWF0aW9uIGhlbHBlcnNcJiMzNDspO1xubmV0L2lwdjYvYWg2LmM6ODMzOk1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5uZXQvaXB2Ni9haDYuYzo4MzQ6TU9EVUxFX0FMSUFTX1hGUk1fVFlQRShBRl9JTkVUNiwgWEZSTV9QUk9UT19BSCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzOTE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFU1AvQUggRnVuY3Rpb25hbGl0eSBpbiBgYWg2LmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYWg2LmNgIGFuZCBpbW1lZGlhdGVseSBub3RpY2luZyBhIGtleSBjb25zdHJhaW50OiBhc2lkZSBmcm9tIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZXhpdCBmdW5jdGlvbnMsIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIGFueSBzdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LCBhcyBpdCBnaXZlcyB1cyBhIGNsZWFyIGxpc3Qgb2Ygd2hhdCB3ZSAqY2FuKiB1dGlsaXplLiBTcGVjaWZpY2FsbHksIEkgc2VlIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgcmVsZXZhbnQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgaW5jbHVkaW5nOiBgZXNwX291dHB1dF90YWlsYCwgYGVzcDZfb3V0cHV0X3RhaWxgLCBgeGZybTZfaW5wdXRfYWRkcmAsIGB4ZnJtX291dHB1dGAsIGBlc3BpbnRjcF9xdWV1ZV9vdXRgLCBgZXNwaW50Y3BfcHVzaF9za2JgLCBhbmQgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gVGhlc2UgYXJlIHRoZSB0b29scyBhdCBvdXIgZGlzcG9zYWwuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGVuc3VyZSBvdXIgY29uZmlndXJhdGlvbnMgYXJlIHNldCBhcHByb3ByaWF0ZWx5IHRvIGVuYWJsZSB0aGUgcmVxdWlyZWQgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgWEZSTWAsIGBYRlJNX1VTRVJgLCBgSU5FVF9FU1BgLCBgSU5FVDZfRVNQYCwgYW5kIGBJTkVUNl9BSGAgYXJlIGFsbCBlbmFibGVkIGFuZCBwbGF5aW5nIG5pY2VseSB0b2dldGhlci4gQWxzbyBJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIGBYRlJNX0VTUElOVENQYCBzaW5jZSB0aGF0JiMzOTtzIGRpcmVjdGx5IHRpZWQgdG8gYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLCB3aGljaCBpcyBsaWtlbHkgdGhlIGFyZWEgb2YgZm9jdXMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgb3Igbm90IGBJTkVUX0VTUElOVENQYCBhbmQgYElORVQ2X0VTUElOVENQYCBhcmUgcHJvcGVybHkgZW5hYmxlZCBhbmQgY29uZmlndXJlZCwgYmVjYXVzZSB0aGV5IHNlZW0gY3JpdGljYWwgZm9yIHRoZSBFU1AvVENQIGZ1bmN0aW9uYWxpdHkgdGhhdCBJJiMzOTttIHRhcmdldGluZy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aG9zZSB0d28gYXJlIHNldCBjb3JyZWN0bHksIHRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRVNQSU5UQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODEtXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXHRib29sIFwmIzM0O0lQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDU5NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkVTUElOVENQIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIHVzZXItZmFjaW5nIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cy4gQnV0IGxldCYjMzk7cyBiZSBwcmFnbWF0aWMgaGVyZTsgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcuIEl04oCZcyB0aGUgdXN1YWwgZGFuY2UsIG1ha2luZyBzdXJlIHRoZSB1c2VyLXZpc2libGUgc2V0dGluZ3MgYXJlIGNvcnJlY3RseSBleHBvc2VkIGFuZCBiZWhhdmUgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGRyaWxsIGRvd24uIEkmIzM5O2xsIGZvY3VzIG15IGltbWVkaWF0ZSBhdHRlbnRpb24gb24gYElORVQ2X0VTUElOVENQYCBzcGVjaWZpY2FsbHkgdG8gZW5zdXJlIHRoYXQgdGhlIElQdjYgdmFyaWFudCBpcyBiZWhhdmluZyBhY2NvcmRpbmcgdG8gbXkgZXhwZWN0YXRpb25zLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3MgcGxheWluZyBuaWNlbHkgd2l0aCB0aGUgSVB2NCBpbXBsZW1lbnRhdGlvbi4gTmVlZCBhIGJhc2VsaW5lLCBhZnRlciBhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUNl9FU1BJTlRDUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTEtXHRib29sIFwmIzM0O0lQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0OTMzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogODQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBTeW1ib2xzIGZvciBJUHNlYyBNb2R1bGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIElQc2VjIGNvZGUgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYW5kIGtleSBmdW5jdGlvbiBzeW1ib2xzLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGNvbmZpZ3MgaWRlbnRpZmllZC4gV2UmIzM5O3ZlIGdvdCBgWEZSTWAsIGBYRlJNX1VTRVJgLCBgSU5FVF9FU1BgLCBgSU5FVDZfRVNQYCwgYElORVQ2X0FIYCwgYElORVRfRVNQSU5UQ1BgLCBhbmQgYElORVQ2X0VTUElOVENQYC4gV2UgYWxyZWFkeSBrbm93IGBYRlJNX05BVF9LRUVQQUxJVkVgIGlzbiYjMzk7dCBhIGRpcmVjdCBjb25maWcsIGJ1dCBpdCYjMzk7cyBjb21waWxlZCB3aXRoIGBDT05GSUdfWEZSTWAgZW5hYmxlZCwgc28gdGhhdCBtYWtlcyBzZW5zZS4KCk5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBob3cgdGhlc2UgY29uZmlncyByZWxhdGUgdG8gdGhlIHNvdXJjZSBmaWxlczogYGVzcDQuY2AgbWFwcyB0byBgSU5FVF9FU1BgLCBgYWg2LmNgIHRvIGBJTkVUNl9BSGAsIGBlc3A2LmNgIHRvIGBJTkVUNl9FU1BgLCBgeGZybTZfaW5wdXQuY2AgdG8gYFhGUk1gICh2aWEgdGhlIGlwdjYtJChDT05GSUdfWEZSTSkgbGluZSksIGBlc3BpbnRjcC5jYCBnZXRzIGBYRlJNX0VTUElOVENQYCAoc2VsZWN0ZWQgYnkgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgKSwgYHhmcm1fbmF0X2tlZXBhbGl2ZS5jYCB0byBgWEZSTWAgYW5kIGB4ZnJtX291dHB1dC5jYCBhbmQgYHhmcm1fdXNlci5jYCB0byBgWEZSTV9VU0VSYAoKVGhlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBwbGFjZSBhbmQgYWNjZXNzaWJsZS4gTm93LCBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb24gc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgYW5hbHlzaXMuIEkmIzM5O3ZlIGNvbXBpbGVkIHRoZSBmb2xsb3dpbmcgbGlzdDogYGVzcF9vdXRwdXRfdGFpbGAsIGBlc3A2X291dHB1dF90YWlsYCwgYHhmcm02X2lucHV0X2FkZHJgLCBgeGZybV9vdXRwdXRgLCBgZXNwaW50Y3BfcXVldWVfb3V0YCwgYGVzcGludGNwX3B1c2hfc2tiYCwgYW5kIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhlc2UgYXJlIGdvb2QgZm9jdXMgc3ltYm9scy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYHhmcm1fbmF0X2tlZXBhbGl2ZS5jYC4gSSBjb25zaWRlcmVkIGB4ZnJtX3N0YXRlX3dhbGtgLCBidXQgdGhhdCYjMzk7cyBpbiBgeGZybV9zdGF0ZS5jYCBhbmQgd2FzbiYjMzk7dCBjaGFuZ2VkLiBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgICppcyogaW4gYHhmcm1fbmF0X2tlZXBhbGl2ZS5jYCBhbmQgaXMgbm9uLXN0YXRpYywgc28gaXQgbG9va3MgcHJvbWlzaW5nLgoKSSYjMzk7bGwgY2hlY2sgYHhmcm1fb3V0cHV0X3Jlc3VtZWAgdmVyc3VzIGB4ZnJtX291dHB1dGAuIEJvdGggYHhmcm1fb3V0cHV0X3Jlc3VtZWAgYW5kIGB4ZnJtX291dHB1dGAgYXJlIGV4cG9ydGVkIGFuZCBub24tc3RhdGljIHNvIEkgaGF2ZSBhIGNob2ljZS4KCkFuZCBgeGZybTZfcmN2YCB2cyBgeGZybTZfaW5wdXRfYWRkcmAsIHNhbWUgdGhpbmcgLSBib3RoIGFyZSBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgSSBjYW4gdXNlIGVpdGhlci4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgZXhwb3J0IHN0YXR1cyBvZiB0aGUgb3RoZXIgZm9jdXMgc3ltYm9scy4gT2theSwgYGVzcF9vdXRwdXRfdGFpbGAsIGFuZCBgZXNwNl9vdXRwdXRfdGFpbGAgYXJlIGJvdGggZXhwb3J0ZWQuIGBlc3BpbnRjcF9xdWV1ZV9vdXRgIGFuZCBgZXNwaW50Y3BfcHVzaF9za2JgIGFyZSBleHBvcnRlZCB0b28uIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgaXMgKm5vdCogZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBub24tc3RhdGljLCB3aGljaCBpcyBnb29kIGVub3VnaC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBjaGFpbiB0byBzZWUgd2hlcmUgaXQgZ2V0cyBjYWxsZWQgZnJvbSwgaXQgaXMgbm90IHVzZWQgaW4gYW55IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgYWxzbyBub3RpY2VkIHRoYXQgdGhlcmUgYXJlIG5vdCBhbnkgbm9uLXN0YXRpYyBzeW1ib2xzIGluIGB4ZnJtX3VzZXIuY2AuCgpPa2F5LCBzbyB0aGUgZmluYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHJlbWFpbnM6IGBlc3Bfb3V0cHV0X3RhaWxgLCBgZXNwNl9vdXRwdXRfdGFpbGAsIGB4ZnJtNl9pbnB1dF9hZGRyYCwgYHhmcm1fb3V0cHV0YCwgYGVzcGludGNwX3F1ZXVlX291dGAsIGBlc3BpbnRjcF9wdXNoX3NrYmAsIGFuZCBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLiBOb3csIEkmIzM5O2xsIHRyYWNlIHRocm91Z2ggdGhlIGNvZGViYXNlIHRvIHNlZSBob3cgdGhlc2UgcmVsYXRlIGFuZCwgc3BlY2lmaWNhbGx5LCBpZiBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZnJtLmg9MjM3ND1pbnQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9maW5pKHN0cnVjdCBuZXQgKm5ldCk7XG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3NTp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMzc2LVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTI3OT1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NrX2Zpbmkoc3RydWN0IHNvY2tfYmhfbG9ja2VkIF9fcGVyY3B1ICpzb2Nrcylcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yODYtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyODc6dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI4OC17XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTgxMT1pbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtODMyLVx0XHRuZXQtXHUwMDNleGZybS5zdGF0ZV9udW0tLTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo4MzM6XHRcdHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHgpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTgzNC1cdFx0c3Bpbl91bmxvY2soXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTcyMz1zdGF0aWMgdm9pZCBfX3hmcm1fc3RhdGVfaW5zZXJ0KHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNzY3LVx0eGZybV9oYXNoX2dyb3dfY2hlY2sobmV0LCB4LVx1MDAzZWJ5ZHN0Lm5leHQgIT0gTlVMTCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTc2ODpcdHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHgpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE3NjktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcxMzEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBkaXJlY3QgcmVmbGVjdGlvbiBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgWEZSTSBDb2RlYmFzZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBwb2ludHMgdG8gYSBjYWxsIGZyb20gYHhmcm1fc3RhdGUuY2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGJyb2FkZXIgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHhmcm1fc3RhdGVfd2Fsa2AgaXMgYWN0dWFsbHkgaW52b2tlZC4gVGhpcyBpcyB3aGVyZSBJIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyB0byBzZWUgd2hlcmUgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBnaXZlIG1lIHRoZSBpbnNpZ2h0cyB0aGF0IEkgbmVlZC4gVGhpcyBpcyBob3cgSSBidWlsZCB0aGUgbWVudGFsIG1vZGVsIHRvIHNvbHZlIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc3RhdGVfd2FsayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZnJtLmgtMTIzLVxuaW5jbHVkZS9uZXQveGZybS5oOjEyNDpzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrIHtcbmluY2x1ZGUvbmV0L3hmcm0uaC0xMjUtXHRzdHJ1Y3QgbGlzdF9oZWFkXHRhbGw7XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTE5MD1zdHJ1Y3QgeGZybV9zdGF0ZSB7XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oLTIxNy1cdC8qIEtleSBtYW5hZ2VyIGJpdHMgKi9cbmluY2x1ZGUvbmV0L3hmcm0uaDoyMTg6XHRzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrXHRrbTtcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMTktXG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTE2OTU9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fc3lzY3RsX2Zpbmkoc3RydWN0IG5ldCAqbmV0KVxuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaC0xNjk5LVxuaW5jbHVkZS9uZXQveGZybS5oOjE3MDA6dm9pZCB4ZnJtX3N0YXRlX3dhbGtfaW5pdChzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLCB1OCBwcm90byxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNzAxLVx0XHRcdCAgc3RydWN0IHhmcm1fYWRkcmVzc19maWx0ZXIgKmZpbHRlcik7XG5pbmNsdWRlL25ldC94ZnJtLmg6MTcwMjppbnQgeGZybV9zdGF0ZV93YWxrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsayxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNzAzLVx0XHQgICAgaW50ICgqZnVuYykoc3RydWN0IHhmcm1fc3RhdGUgKiwgaW50LCB2b2lkKiksIHZvaWQgKik7XG5pbmNsdWRlL25ldC94ZnJtLmg6MTcwNDp2b2lkIHhmcm1fc3RhdGVfd2Fsa19kb25lKHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHN0cnVjdCBuZXQgKm5ldCk7XG5pbmNsdWRlL25ldC94ZnJtLmgtMTcwNS1zdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQpO1xuLS1cbm5ldC9rZXkvYWZfa2V5LmM9NDU9c3RydWN0IHBma2V5X3NvY2sge1xuLS1cbm5ldC9rZXkvYWZfa2V5LmMtNTctXHRcdFx0c3RydWN0IHhmcm1fcG9saWN5X3dhbGtcdHBvbGljeTtcbm5ldC9rZXkvYWZfa2V5LmM6NTg6XHRcdFx0c3RydWN0IHhmcm1fc3RhdGVfd2Fsa1x0c3RhdGU7XG5uZXQva2V5L2FmX2tleS5jLTU5LVx0XHR9IHU7XG4tLVxubmV0L2tleS9hZl9rZXkuYz0xODM0PXN0YXRpYyBpbnQgcGZrZXlfZHVtcF9zYShzdHJ1Y3QgcGZrZXlfc29jayAqcGZrKVxuLS1cbm5ldC9rZXkvYWZfa2V5LmMtMTgzNi1cdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KFx1MDAyNnBmay1cdTAwM2Vzayk7XG5uZXQva2V5L2FmX2tleS5jOjE4Mzc6XHRyZXR1cm4geGZybV9zdGF0ZV93YWxrKG5ldCwgXHUwMDI2cGZrLVx1MDAzZWR1bXAudS5zdGF0ZSwgZHVtcF9zYSwgKHZvaWQgKikgcGZrKTtcbm5ldC9rZXkvYWZfa2V5LmMtMTgzOC19XG4tLVxubmV0L2tleS9hZl9rZXkuYz0xODQwPXN0YXRpYyB2b2lkIHBma2V5X2R1bXBfc2FfZG9uZShzdHJ1Y3QgcGZrZXlfc29jayAqcGZrKVxuLS1cbm5ldC9rZXkvYWZfa2V5LmMtMTg0My1cbm5ldC9rZXkvYWZfa2V5LmM6MTg0NDpcdHhmcm1fc3RhdGVfd2Fsa19kb25lKFx1MDAyNnBmay1cdTAwM2VkdW1wLnUuc3RhdGUsIG5ldCk7XG5uZXQva2V5L2FmX2tleS5jLTE4NDUtfVxuLS1cbm5ldC9rZXkvYWZfa2V5LmM9MTg0Nz1zdGF0aWMgaW50IHBma2V5X2R1bXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3Qgc2FkYl9tc2cgKmhkciwgdm9pZCAqIGNvbnN0ICpleHRfaGRycylcbi0tXG5uZXQva2V5L2FmX2tleS5jLTE4OTMtXHRwZmstXHUwMDNlZHVtcC5kb25lID0gcGZrZXlfZHVtcF9zYV9kb25lO1xubmV0L2tleS9hZl9rZXkuYzoxODk0Olx0eGZybV9zdGF0ZV93YWxrX2luaXQoXHUwMDI2cGZrLVx1MDAzZWR1bXAudS5zdGF0ZSwgcHJvdG8sIGZpbHRlcik7XG5uZXQva2V5L2FmX2tleS5jLTE4OTUtXHRtdXRleF91bmxvY2soXHUwMDI2cGZrLVx1MDAzZWR1bXBfbG9jayk7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MjI3PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjMwLVx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4O1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjMxOlx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjMyLVx0c3RydWN0IG5ldCAqbmV0O1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIzOS1cdG5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0LCB4ZnJtLm5hdF9rZWVwYWxpdmVfd29yay53b3JrKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI0MDpcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFx1MDAyNndhbGssIElQUFJPVE9fRVNQLCBOVUxMKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI0MTpcdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCBcdTAwMjZjdHgpO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQyOlx0eGZybV9zdGF0ZV93YWxrX2RvbmUoXHUwMDI2d2FsaywgbmV0KTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0My1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGF0ZSwgdG1wLCBcdTAwMjZjdHguc3RhdGVzLCBsaXN0KSB7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTE2ODc9c3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2J5c3BpKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIHNwaSxcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTY5MC1cdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE2OTE6XHRzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3O1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE2OTItXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTI2ODQ9c3RhdGljIGJvb2wgX194ZnJtX3N0YXRlX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwMC1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzAxOmludCB4ZnJtX3N0YXRlX3dhbGsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MDItXHRcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgeGZybV9zdGF0ZSAqLCBpbnQsIHZvaWQqKSxcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwNS1cdHN0cnVjdCB4ZnJtX3N0YXRlICpzdGF0ZTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzA2Olx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayAqeDtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzA3LVx0aW50IGVyciA9IDA7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MTMtXHRpZiAobGlzdF9lbXB0eShcdTAwMjZ3YWxrLVx1MDAzZWFsbCkpXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjcxNDpcdFx0eCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2bmV0LVx1MDAzZXhmcm0uc3RhdGVfYWxsLCBzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrLCBhbGwpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MTUtXHRlbHNlXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjcxNjpcdFx0eCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2d2Fsay1cdTAwM2VhbGwsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGssIGFsbCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxNy1cdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbSh4LCBcdTAwMjZuZXQtXHUwMDNleGZybS5zdGF0ZV9hbGwsIGFsbCkge1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzQwLX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzQxOkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV93YWxrKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzQyLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NDM6dm9pZCB4ZnJtX3N0YXRlX3dhbGtfaW5pdChzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLCB1OCBwcm90byxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzQ0LVx0XHRcdCAgc3RydWN0IHhmcm1fYWRkcmVzc19maWx0ZXIgKmZpbHRlcilcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc1MS19XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc1MjpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfd2Fsa19pbml0KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzUzLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NTQ6dm9pZCB4ZnJtX3N0YXRlX3dhbGtfZG9uZShzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLCBzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc1NS17XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NjQtfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NjU6RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3dhbGtfZG9uZSk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc2Ni1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xNTM1PXN0YXRpYyBpbnQgeGZybV9kdW1wX3NhX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L3hmcm0veGZybV91c2VyLmMtMTUzNi17XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTM3Olx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsayA9IChzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICopIFx1MDAyNmNiLVx1MDAzZWFyZ3NbMV07XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTM4LVx0c3RydWN0IHNvY2sgKnNrID0gY2ItXHUwMDNlc2tiLVx1MDAzZXNrO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1NDEtXHRpZiAoY2ItXHUwMDNlYXJnc1swXSlcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1NDI6XHRcdHhmcm1fc3RhdGVfd2Fsa19kb25lKHdhbGssIG5ldCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTQzLVx0cmV0dXJuIDA7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MTU0Nj1zdGF0aWMgaW50IHhmcm1fZHVtcF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTU0OC1cdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTQ5Olx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsayA9IChzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICopIFx1MDAyNmNiLVx1MDAzZWFyZ3NbMV07XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTUwLVx0c3RydWN0IHhmcm1fZHVtcF9pbmZvIGluZm87XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTUxLVxubmV0L3hmcm0veGZybV91c2VyLmM6MTU1MjpcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHhmcm1fc3RhdGVfd2FsaykgXHUwMDNlXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTUzLVx0XHQgICAgIHNpemVvZihjYi1cdTAwM2VhcmdzKSAtIHNpemVvZihjYi1cdTAwM2VhcmdzWzBdKSk7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTU4OS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1OTA6XHRcdHhmcm1fc3RhdGVfd2Fsa19pbml0KHdhbGssIHByb3RvLCBmaWx0ZXIpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMTU5MS1cdFx0Y2ItXHUwMDNlYXJnc1swXSA9IDE7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTU5My1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1OTQ6XHQodm9pZCkgeGZybV9zdGF0ZV93YWxrKG5ldCwgd2FsaywgZHVtcF9vbmVfc3RhdGUsIFx1MDAyNmluZm8pO1xubmV0L3hmcm0veGZybV91c2VyLmMtMTU5NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDY3CgkJCQkJCQlvdXRwdXQ6IDI2MgoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBYRlJNIEtlcm5lbCBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgeGZybV9zdGF0ZV93YWxrYCBpcyBpbmRlZWQgZXhwb3J0ZWQgYW5kIHV0aWxpemVkIHdpdGhpbiBgeGZybV9uYXRfa2VlcGFsaXZlLmNgIGFuZCBgeGZybV91c2VyLmNgLiBFeGNlbGxlbnQsIHRoYXQgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgYXMgYSBzeW1ib2wgdG8gaG9uZSBpbiBvbi4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHJ1bmRvd24gb2YgdGhlIGZvY3VzIHN5bWJvbHMgYWdhaW46IGBlc3Bfb3V0cHV0X3RhaWxgLCBgZXNwNl9vdXRwdXRfdGFpbGAsIGB4ZnJtNl9pbnB1dF9hZGRyYCwgYHhmcm1fb3V0cHV0YCwgYGVzcGludGNwX3F1ZXVlX291dGAsIGBlc3BpbnRjcF9wdXNoX3NrYmAsIGFuZCBvZiBjb3Vyc2UsIHRoZSBwaXZvdGFsIGB4ZnJtX3N0YXRlX3dhbGtgLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgWEZSTWAsIGBYRlJNX1VTRVJgLCBgSU5FVF9FU1BgLCBgSU5FVDZfRVNQYCwgYElORVQ2X0FIYCwgYElORVRfRVNQSU5UQ1BgLCBhbmQgYElORVQ2X0VTUElOVENQYC4KCkFscmlnaHQsIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBDT05GSUdfWEZSTV9FU1BJTlRDUGAgaXMgc2VsZWN0ZWQgd2hlbiBlaXRoZXIgYElORVRfRVNQSU5UQ1BgIG9yIGBJTkVUNl9FU1BJTlRDUGAgYXJlIGVuYWJsZWQuIEdvb2QuIEkgd2FzIGN1cmlvdXMgaWYgdGhlcmUgd2VyZSBhIGBDT05GSUdfWEZSTV9OQVRfS0VFUEFMSVZFYCwgYnV0IHRoYXQgZG9lc24mIzM5O3QgZXhpc3QgZGlyZWN0bHkuIEluc3RlYWQsIGB4ZnJtX25hdF9rZWVwYWxpdmUuY2Agc2VlbXMgdG8gYmUgY29tcGlsZWQgd2hlbiBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQuIEFuZCwgYXMgZXhwZWN0ZWQsIGBDT05GSUdfWEZSTV9VU0VSYCBpcyB0aGUga2V5IGZvciBgeGZybV91c2VyLmNgLgoKSSBiZWxpZXZlIHRoYXQgd3JhcHMgdXAgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIHRoZSBrZXkgZWxlbWVudHMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gSSB0aGluayB0aGlzIGFzc2Vzc21lbnQgaXMgY29tcGxldGUgYW5kIHJlZmxlY3RzIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgWEZSTSBzdWJzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHRvIHRoZSBpZGVudGlmaWVkIHN5bWJvbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTA0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTSYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0FIJiMzNDssCiAgICAmIzM0O0lORVRfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlc3Bfb3V0cHV0X3RhaWwmIzM0OywKICAgICYjMzQ7ZXNwNl9vdXRwdXRfdGFpbCYjMzQ7LAogICAgJiMzNDt4ZnJtNl9pbnB1dF9hZGRyJiMzNDssCiAgICAmIzM0O3hmcm1fb3V0cHV0JiMzNDssCiAgICAmIzM0O2VzcGludGNwX3F1ZXVlX291dCYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9wdXNoX3NrYiYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX3dhbGsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmaWxlcyBpbiB0aGUgSVBzZWMgKFhGUk0sIEVTUCwgQUgpIHN1YnN5c3RlbS4gSXQgYWRkcyBjaGVja3MgZm9yIHplcm9jb3B5IG1hbmFnZWQgZnJhZ21lbnRzIGluIEVTUCwgZml4ZXMgYWRkcmVzcyByZWFycmFuZ2VtZW50IGluIEFINiwgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gWEZSTTYgaW5wdXQsIGFkZHMgYSBjaGVjayBmb3IgbWlzc2luZyBkZXZpY2UgaW4gRVNQLWluLVRDUCwgY2hhbmdlcyB0aGUgTkFUIGtlZXBhbGl2ZSB3b3JrcXVldWUgdG8gY29sbGVjdCBzdGF0ZXMgYmVmb3JlIHByb2Nlc3NpbmcgdGhlbSwgcmVtb3ZlcyBhIGRvdWJsZSBmcmVlIGluIFhGUk0gb3V0cHV0LCBhbmQgZml4ZXMgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gWEZSTSB1c2VyLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsLCByZWFjaGFibGUsIGFuZCBhZmZlY3QgY29yZSBuZXR3b3JraW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfQUgmIzM0OywKICAgICYjMzQ7SU5FVF9FU1BJTlRDUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BJTlRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VzcF9vdXRwdXRfdGFpbCYjMzQ7LAogICAgJiMzNDtlc3A2X291dHB1dF90YWlsJiMzNDssCiAgICAmIzM0O3hmcm02X2lucHV0X2FkZHImIzM0OywKICAgICYjMzQ7eGZybV9vdXRwdXQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3BfcXVldWVfb3V0JiMzNDssCiAgICAmIzM0O2VzcGludGNwX3B1c2hfc2tiJiMzNDssCiAgICAmIzM0O3hmcm1fc3RhdGVfd2FsayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzIGluIHRoZSBJUHNlYyAoWEZSTSwgRVNQLCBBSCkgc3Vic3lzdGVtLiBJdCBhZGRzIGNoZWNrcyBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFnbWVudHMgaW4gRVNQLCBmaXhlcyBhZGRyZXNzIHJlYXJyYW5nZW1lbnQgaW4gQUg2LCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBYRlJNNiBpbnB1dCwgYWRkcyBhIGNoZWNrIGZvciBtaXNzaW5nIGRldmljZSBpbiBFU1AtaW4tVENQLCBjaGFuZ2VzIHRoZSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSB0byBjb2xsZWN0IHN0YXRlcyBiZWZvcmUgcHJvY2Vzc2luZyB0aGVtLCByZW1vdmVzIGEgZG91YmxlIGZyZWUgaW4gWEZSTSBvdXRwdXQsIGFuZCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBYRlJNIHVzZXIuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNDowOC43NzUwMTUxODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDgzMjUxMTU3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9BSFwiLFxuICAgIFwiSU5FVF9FU1BJTlRDUFwiLFxuICAgIFwiSU5FVDZfRVNQSU5UQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3Bfb3V0cHV0X3RhaWxcIixcbiAgICBcImVzcDZfb3V0cHV0X3RhaWxcIixcbiAgICBcInhmcm02X2lucHV0X2FkZHJcIixcbiAgICBcInhmcm1fb3V0cHV0XCIsXG4gICAgXCJlc3BpbnRjcF9xdWV1ZV9vdXRcIixcbiAgICBcImVzcGludGNwX3B1c2hfc2tiXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX3dhbGtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzIGluIHRoZSBJUHNlYyAoWEZSTSwgRVNQLCBBSCkgc3Vic3lzdGVtLiBJdCBhZGRzIGNoZWNrcyBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFnbWVudHMgaW4gRVNQLCBmaXhlcyBhZGRyZXNzIHJlYXJyYW5nZW1lbnQgaW4gQUg2LCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBYRlJNNiBpbnB1dCwgYWRkcyBhIGNoZWNrIGZvciBtaXNzaW5nIGRldmljZSBpbiBFU1AtaW4tVENQLCBjaGFuZ2VzIHRoZSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSB0byBjb2xsZWN0IHN0YXRlcyBiZWZvcmUgcHJvY2Vzc2luZyB0aGVtLCByZW1vdmVzIGEgZG91YmxlIGZyZWUgaW4gWEZSTSBvdXRwdXQsIGFuZCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBYRlJNIHVzZXIuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjA4Ljc3NTAyMTU3OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzMTEyNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjAzOWE1OTQyYjY2ZmU1NzM3MmY5NjE5MTQzYjA4OGZmNjBiYmFkZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAxMzozNDowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmNcXG5pbmRleCBkZmM4MWVlOTY5YWUwLi5mYTE3MTBlMjdlNTA1IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2VzcDQuY1xcbisrKyBiL25ldC9pcHY0L2VzcDQuY1xcbkBAIC0xMDQsNiArMTA0LDEzIEBAIHN0YXRpYyB2b2lkIGVzcF9zc2dfdW5yZWYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHZvaWQgKnRtcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxO1xcbiBcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xcbiBcXG4rXFx0LyogTWFuYWdlZCBmcmFncyBhcmUgb3duZWQgYnkgdGhlIHplcm9jb3B5IHVidWY7IHRoZSBza2IgaG9sZHMgbm9cXG4rXFx0ICogcGVyLWZyYWcgcGFnZSByZWZlcmVuY2UsIHNvIHdlIG11c3Qgbm90IGRyb3Agb25lIGhlcmUuICBNaXJyb3JzXFxuK1xcdCAqIHRoZSBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBoYW5kbGluZyBpbiBza2JfcmVsZWFzZV9kYXRhKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2tiX3pjb3B5X21hbmFnZWQoc2tiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKHgtXFx1MDAzZXByb3BzLmZsYWdzIFxcdTAwMjYgWEZSTV9TVEFURV9FU04pXFxuIFxcdFxcdGV4dHJhbGVuICs9IHNpemVvZihzdHJ1Y3QgZXNwX291dHB1dF9leHRyYSk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9haDYuYyBiL25ldC9pcHY2L2FoNi5jXFxuaW5kZXggNzZmN2EyZGU5MTA4ZS4uYzk2ZjdlMGQwYTQ4MSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9haDYuY1xcbisrKyBiL25ldC9pcHY2L2FoNi5jXFxuQEAgLTIzMiwyNiArMjMyLDI4IEBAIHN0YXRpYyB2b2lkIGlwdjZfcmVhcnJhbmdlX2Rlc3RvcHQoc3RydWN0IGlwdjZoZHIgKmlwaCwgc3RydWN0IGlwdjZfb3B0X2hkciAqZGVzXFxuICAqXFx0UmVhcnJhbmdlIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIEBpcGggYW5kIHRoZSBhZGRyZXNzZXMgaW4gQHJ0aGRyXFxuICAqXFx0c28gdGhhdCB0aGV5IGFwcGVhciBpbiB0aGUgb3JkZXIgdGhleSB3aWxsIGF0IHRoZSBmaW5hbCBkZXN0aW5hdGlvbi5cXG4gICpcXHRTZWUgQXBwZW5kaXggQTIgb2YgUkZDIDI0MDIgZm9yIGRldGFpbHMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIHNlZ21lbnRzX2xlZnQgZXhjZWVkcyB0aGUgbnVtYmVyIG9mXFxuKyAqIGFkZHJlc3NlcyBkZXNjcmliZWQgYnkgaGRybGVuLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgaXB2Nl9yZWFycmFuZ2VfcnRoZHIoc3RydWN0IGlwdjZoZHIgKmlwaCwgc3RydWN0IGlwdjZfcnRfaGRyICpydGhkcilcXG4rc3RhdGljIGludCBpcHY2X3JlYXJyYW5nZV9ydGhkcihzdHJ1Y3QgaXB2NmhkciAqaXBoLCBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKnJ0aGRyKVxcbiB7XFxuLVxcdGludCBzZWdtZW50cywgc2VnbWVudHNfbGVmdDtcXG4rXFx0dW5zaWduZWQgaW50IHNlZ21lbnRzLCBzZWdtZW50c19sZWZ0O1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHJzO1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHIgZmluYWxfYWRkcjtcXG4gXFxuIFxcdHNlZ21lbnRzX2xlZnQgPSBydGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdDtcXG4gXFx0aWYgKHNlZ21lbnRzX2xlZnQgPT0gMClcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXHRydGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdCA9IDA7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0LyogVGhlIHZhbHVlIG9mIHJ0aGRyLVxcdTAwM2VoZHJsZW4gaGFzIGJlZW4gdmVyaWZpZWQgZWl0aGVyIGJ5IHRoZSBzeXN0ZW1cXG4tXFx0ICogY2FsbCBpZiBpdCBpcyBsb2NhbGx5IGdlbmVyYXRlZCwgb3IgYnkgaXB2Nl9ydGhkcl9yY3YoKSBmb3IgaW5jb21pbmdcXG4tXFx0ICogcGFja2V0cy4gIFNvIHdlIGNhbiBhc3N1bWUgdGhhdCBpdCBpcyBldmVuIGFuZCB0aGF0IHNlZ21lbnRzIGlzXFxuLVxcdCAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBzZWdtZW50c19sZWZ0Llxcbi1cXHQgKlxcbi1cXHQgKiBGb3IgdGhlIHNhbWUgcmVhc29uIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGlzIG9wdGlvbiBpcyBvZiB0eXBlIDAuXFxuK1xcdC8qIFJhdyBsb2NhbGx5IGdlbmVyYXRlZCBwYWNrZXRzIGNhbiByZWFjaCBBSDYgd2l0aG91dCB0aGUgaW52YXJpYW50XFxuK1xcdCAqIHJlcXVpcmVkIGJ5IHRoZSBydDAtc3R5bGUgYWRkcmVzcyByZWFycmFuZ2VtZW50IGJlbG93LlxcbiBcXHQgKi9cXG4gXFx0c2VnbWVudHMgPSBydGhkci1cXHUwMDNlaGRybGVuIFxcdTAwM2VcXHUwMDNlIDE7XFxuK1xcdGlmIChzZWdtZW50c19sZWZ0IFxcdTAwM2Ugc2VnbWVudHMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cnRoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQgPSAwO1xcbiBcXG4gXFx0YWRkcnMgPSAoKHN0cnVjdCBydDBfaGRyICopcnRoZHIpLVxcdTAwM2VhZGRyO1xcbiBcXHRmaW5hbF9hZGRyID0gYWRkcnNbc2VnbWVudHMgLSAxXTtcXG5AQCAtMjYxLDYgKzI2Myw4IEBAIHN0YXRpYyB2b2lkIGlwdjZfcmVhcnJhbmdlX3J0aGRyKHN0cnVjdCBpcHY2aGRyICppcGgsIHN0cnVjdCBpcHY2X3J0X2hkciAqcnRoZHIpXFxuIFxcbiBcXHRhZGRyc1swXSA9IGlwaC1cXHUwMDNlZGFkZHI7XFxuIFxcdGlwaC1cXHUwMDNlZGFkZHIgPSBmaW5hbF9hZGRyO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoc3RydWN0IGlwdjZoZHIgKmlwaCwgaW50IGxlbiwgaW50IGRpcilcXG5AQCAtMjczLDYgKzI3Nyw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoc3RydWN0IGlwdjZoZHIgKmlwaCwgaW50IGxlbiwgaW50IGRpcilcXG4gXFx0fSBleHRoZHIgPSB7IC5pcGggPSBpcGggfTtcXG4gXFx0Y2hhciAqZW5kID0gZXh0aGRyLnJhdyArIGxlbjtcXG4gXFx0aW50IG5leHRoZHIgPSBpcGgtXFx1MDAzZW5leHRoZHI7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRleHRoZHIuaXBoKys7XFxuIFxcbkBAIC0yOTIsNyArMjk3LDkgQEAgc3RhdGljIGludCBpcHY2X2NsZWFyX211dGFibGVfb3B0aW9ucyhzdHJ1Y3QgaXB2NmhkciAqaXBoLCBpbnQgbGVuLCBpbnQgZGlyKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdGNhc2UgTkVYVEhEUl9ST1VUSU5HOlxcbi1cXHRcXHRcXHRpcHY2X3JlYXJyYW5nZV9ydGhkcihpcGgsIGV4dGhkci5ydGgpO1xcbitcXHRcXHRcXHRlcnIgPSBpcHY2X3JlYXJyYW5nZV9ydGhkcihpcGgsIGV4dGhkci5ydGgpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdGRlZmF1bHQ6XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuY1xcbmluZGV4IDI5NmI1NzkyNmFiYjkuLjdkMjE2YjljNTlmMDQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvZXNwNi5jXFxuKysrIGIvbmV0L2lwdjYvZXNwNi5jXFxuQEAgLTEyMSw2ICsxMjEsMTMgQEAgc3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXE7XFxuIFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuIFxcbitcXHQvKiBNYW5hZ2VkIGZyYWdzIGFyZSBvd25lZCBieSB0aGUgemVyb2NvcHkgdWJ1ZjsgdGhlIHNrYiBob2xkcyBub1xcbitcXHQgKiBwZXItZnJhZyBwYWdlIHJlZmVyZW5jZSwgc28gd2UgbXVzdCBub3QgZHJvcCBvbmUgaGVyZS4gIE1pcnJvcnNcXG4rXFx0ICogdGhlIFNLQkZMX01BTkFHRURfRlJBR19SRUZTIGhhbmRsaW5nIGluIHNrYl9yZWxlYXNlX2RhdGEoKS5cXG4rXFx0ICovXFxuK1xcdGlmIChza2JfemNvcHlfbWFuYWdlZChza2IpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAoeC1cXHUwMDNlcHJvcHMuZmxhZ3MgXFx1MDAyNiBYRlJNX1NUQVRFX0VTTilcXG4gXFx0XFx0ZXh0cmFsZW4gKz0gc2l6ZW9mKHN0cnVjdCBlc3Bfb3V0cHV0X2V4dHJhKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXFxuaW5kZXggODlkMDQ0M2I1MzA3My4uMDdlZGVmMjU4OTg0NCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXFxuKysrIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xcbkBAIC0yNDcsNyArMjQ3LDcgQEAgaW50IHhmcm02X2lucHV0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICgxICsgc3AtXFx1MDAzZWxlbiA9PSBYRlJNX01BWF9ERVBUSCkge1xcbitcXHRpZiAoc3AtXFx1MDAzZWxlbiBcXHUwMDNlPSBYRlJNX01BWF9ERVBUSCkge1xcbiBcXHRcXHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5CVUZGRVJFUlJPUik7XFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xcbmluZGV4IDM3NGUxYjk2NDQzODMuLjY3NGFlZGM1YWY1YTIgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xcbisrKyBiL25ldC94ZnJtL2VzcGludGNwLmNcXG5AQCAtMzcsNiArMzcsMTEgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdHNrYi1cXHUwMDNlZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc29ja19uZXQoc2spLCBza2ItXFx1MDAzZXNrYl9paWYpO1xcbitcXHRpZiAoIXNrYi1cXHUwMDNlZGV2KSB7XFxuK1xcdFxcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuIFxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbkBAIC00NSw2ICs1MCw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxcbiAjZW5kaWZcXG4gXFx0XFx0eGZybTRfcmN2X2VuY2FwKHNrYiwgSVBQUk9UT19FU1AsIDAsIFRDUF9FTkNBUF9FU1BJTlRDUCk7XFxuIFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitvdXQ6XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbkBAIC01MTUsNyArNTIxLDggQEAgc3RhdGljIHZvaWQgZXNwaW50Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXFxuIFxcdHN0cnBfc3RvcChcXHUwMDI2Y3R4LVxcdTAwM2VzdHJwKTtcXG4gXFxuIFxcdHNrLVxcdTAwM2Vza19wcm90ID0gXFx1MDAyNnRjcF9wcm90O1xcbi1cXHRiYXJyaWVyKCk7XFxuK1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gXFxuIFxcdGRpc2FibGVfd29ya19zeW5jKFxcdTAwMjZjdHgtXFx1MDAzZXdvcmspO1xcbiBcXHRzdHJwX2RvbmUoXFx1MDAyNmN0eC1cXHUwMDNlc3RycCk7XFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jIGIvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcXG5pbmRleCBlYjFiNmY2NzczOWUxLi44Njc5YzY4YzEwYTE2IDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXFxuKysrIGIvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcXG5AQCAtMTU2LDI0ICsxNTYsNTEgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcXG4gfVxcbiBcXG4gc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHN0YXRlcztcXG4gXFx0dGltZTY0X3QgbmV4dF9ydW47XFxuIFxcdHRpbWU2NF90IG5vdztcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXFxuK3N0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbitcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxcbiB7XFxuIFxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XFxuK1xcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZTtcXG4rXFxuK1xcdGlmICghUkVBRF9PTkNFKHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHN0YXRlID0ga21hbGxvY19vYmooKnN0YXRlLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCFzdGF0ZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHR4ZnJtX3N0YXRlX2hvbGQoeCk7XFxuK1xcdHN0YXRlLVxcdTAwM2V4ID0geDtcXG4rXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2c3RhdGUtXFx1MDAzZWxpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlcyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCAqY3R4KVxcbit7XFxuIFxcdGJvb2wgc2VuZF9rZWVwYWxpdmUgPSBmYWxzZTtcXG4gXFx0c3RydWN0IG5hdF9rZWVwYWxpdmUga2E7XFxuLVxcdHRpbWU2NF90IG5leHRfcnVuO1xcbitcXHR0aW1lNjRfdCBuZXh0X3J1biA9IDA7XFxuIFxcdHUzMiBpbnRlcnZhbDtcXG4gXFx0aW50IGRlbHRhO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ4LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGlmICh4LVxcdTAwM2VrbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0RFQUQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0aW50ZXJ2YWwgPSB4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xcbiBcXHRpZiAoIWludGVydmFsKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2eC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0ZGVsdGEgPSAoaW50KShjdHgtXFx1MDAzZW5vdyAtIHgtXFx1MDAzZWxhc3R1c2VkKTtcXG4gXFx0aWYgKGRlbHRhIFxcdTAwM2MgaW50ZXJ2YWwpIHtcXG5AQCAtMTg3LDI5ICsyMTQsNDEgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgY291bnQsIHZvaWQgKnB0cilcXG4gXFx0XFx0c2VuZF9rZWVwYWxpdmUgPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRzcGluX3VubG9jayhcXHUwMDI2eC1cXHUwMDNlbG9jayk7XFxuK291dDpcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNngtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0aWYgKHNlbmRfa2VlcGFsaXZlKVxcbiBcXHRcXHRuYXRfa2VlcGFsaXZlX3NlbmQoXFx1MDAyNmthKTtcXG4gXFxuLVxcdGlmICghY3R4LVxcdTAwM2VuZXh0X3J1biB8fCBuZXh0X3J1biBcXHUwMDNjIGN0eC1cXHUwMDNlbmV4dF9ydW4pXFxuK1xcdGlmIChuZXh0X3J1biBcXHUwMDI2XFx1MDAyNiAoIWN0eC1cXHUwMDNlbmV4dF9ydW4gfHwgbmV4dF9ydW4gXFx1MDAzYyBjdHgtXFx1MDAzZW5leHRfcnVuKSlcXG4gXFx0XFx0Y3R4LVxcdTAwM2VuZXh0X3J1biA9IG5leHRfcnVuO1xcbi1cXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbitcXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGUsICp0bXA7XFxuIFxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcXG4gXFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuK1xcdGludCBlcnI7XFxuIFxcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y3R4LnN0YXRlcyk7XFxuIFxcdGN0eC5uZXh0X3J1biA9IDA7XFxuIFxcdGN0eC5ub3cgPSBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCk7XFxuIFxcbiBcXHRuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7XFxuIFxcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFxcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7XFxuLVxcdHhmcm1fc3RhdGVfd2FsayhuZXQsIFxcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlLCBcXHUwMDI2Y3R4KTtcXG4rXFx0ZXJyID0geGZybV9zdGF0ZV93YWxrKG5ldCwgXFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCBcXHUwMDI2Y3R4KTtcXG4gXFx0eGZybV9zdGF0ZV93YWxrX2RvbmUoXFx1MDAyNndhbGssIG5ldCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGF0ZSwgdG1wLCBcXHUwMDI2Y3R4LnN0YXRlcywgbGlzdCkge1xcbitcXHRcXHRuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0YXRlLVxcdTAwM2V4LCBcXHUwMDI2Y3R4KTtcXG4rXFx0XFx0eGZybV9zdGF0ZV9wdXQoc3RhdGUtXFx1MDAzZXgpO1xcbitcXHRcXHRrZnJlZShzdGF0ZSk7XFxuK1xcdH1cXG4rXFx0aWYgKGVyciA9PSAtRU5PTUVNKSB7XFxuK1xcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgMCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXHRpZiAoY3R4Lm5leHRfcnVuKVxcbiBcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssXFxuIFxcdFxcdFxcdFxcdCAgICAgIChjdHgubmV4dF9ydW4gLSBjdHgubm93KSAqIEhaKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9vdXRwdXQuYyBiL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcXG5pbmRleCBjYzM1YzJmY2JiZTA5Li5lMzA1YmEzMmUzNTZiIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcXG4rKysgYi9uZXQveGZybS94ZnJtX291dHB1dC5jXFxuQEAgLTYzNiwxMCArNjM2LDggQEAgc3RhdGljIGludCB4ZnJtX2Rldl9kaXJlY3Rfb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuIFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuIFxcbiBcXHRlcnIgPSBza2JfZHN0KHNrYiktXFx1MDAzZW9wcy1cXHUwMDNlbG9jYWxfb3V0KG5ldCwgc2ssIHNrYik7XFxuLVxcdGlmICh1bmxpa2VseShlcnIgIT0gMSkpIHtcXG4tXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdGlmICh1bmxpa2VseShlcnIgIT0gMSkpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4gXFxuIFxcdC8qIEluIHRyYW5zcG9ydCBtb2RlLCBuZXR3b3JrIGRlc3RpbmF0aW9uIGlzXFxuIFxcdCAqIGRpcmVjdGx5IHJlYWNoYWJsZSwgd2hpbGUgaW4gdHVubmVsIG1vZGUsXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5pbmRleCBkNmRiNjMzMDRiYTZiLi42MjY2YTkyY2YzMDIwIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5AQCAtOTQwLDcgKzk0MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jb25zdHJ1Y3Qoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRpZiAoKGVyciA9IGF0dGFjaF9hdXRoX3RydW5jKFxcdTAwMjZ4LVxcdTAwM2VhYWxnLCBcXHUwMDI2eC1cXHUwMDNlcHJvcHMuYWFsZ28sXFxuIFxcdFxcdFxcdFxcdCAgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhfVFJVTkNdLCBleHRhY2spKSlcXG4gXFx0XFx0Z290byBlcnJvcjtcXG4tXFx0aWYgKCF4LVxcdTAwM2Vwcm9wcy5hYWxnbykge1xcbitcXHRpZiAoIXgtXFx1MDAzZWFhbGcpIHtcXG4gXFx0XFx0aWYgKChlcnIgPSBhdHRhY2hfYXV0aChcXHUwMDI2eC1cXHUwMDNlYWFsZywgXFx1MDAyNngtXFx1MDAzZXByb3BzLmFhbGdvLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhdLCBleHRhY2spKSlcXG4gXFx0XFx0XFx0Z290byBlcnJvcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6MDkuMzg4ODI1OTU1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjQ3NzExMjkzMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVDZfQUhcIixcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXNwX291dHB1dF90YWlsXCIsXG4gICAgXCJlc3A2X291dHB1dF90YWlsXCIsXG4gICAgXCJ4ZnJtNl9pbnB1dF9hZGRyXCIsXG4gICAgXCJ4ZnJtX291dHB1dFwiLFxuICAgIFwiZXNwaW50Y3BfcXVldWVfb3V0XCIsXG4gICAgXCJlc3BpbnRjcF9wdXNoX3NrYlwiLFxuICAgIFwieGZybV9zdGF0ZV93YWxrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmaWxlcyBpbiB0aGUgSVBzZWMgKFhGUk0sIEVTUCwgQUgpIHN1YnN5c3RlbS4gSXQgYWRkcyBjaGVja3MgZm9yIHplcm9jb3B5IG1hbmFnZWQgZnJhZ21lbnRzIGluIEVTUCwgZml4ZXMgYWRkcmVzcyByZWFycmFuZ2VtZW50IGluIEFINiwgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gWEZSTTYgaW5wdXQsIGFkZHMgYSBjaGVjayBmb3IgbWlzc2luZyBkZXZpY2UgaW4gRVNQLWluLVRDUCwgY2hhbmdlcyB0aGUgTkFUIGtlZXBhbGl2ZSB3b3JrcXVldWUgdG8gY29sbGVjdCBzdGF0ZXMgYmVmb3JlIHByb2Nlc3NpbmcgdGhlbSwgcmVtb3ZlcyBhIGRvdWJsZSBmcmVlIGluIFhGUk0gb3V0cHV0LCBhbmQgZml4ZXMgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gWEZSTSB1c2VyLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsLCByZWFjaGFibGUsIGFuZCBhZmZlY3QgY29yZSBuZXR3b3JraW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MDM5YTU5NDJiNjZmZTU3MzcyZjk2MTkxNDNiMDg4ZmY2MGJiYWRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTM6MzQ6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmNcbmluZGV4IGRmYzgxZWU5NjlhZTAuLmZhMTcxMGUyN2U1MDUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9lc3A0LmNcbisrKyBiL25ldC9pcHY0L2VzcDQuY1xuQEAgLTEwNCw2ICsxMDQsMTMgQEAgc3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiBcbitcdC8qIE1hbmFnZWQgZnJhZ3MgYXJlIG93bmVkIGJ5IHRoZSB6ZXJvY29weSB1YnVmOyB0aGUgc2tiIGhvbGRzIG5vXG4rXHQgKiBwZXItZnJhZyBwYWdlIHJlZmVyZW5jZSwgc28gd2UgbXVzdCBub3QgZHJvcCBvbmUgaGVyZS4gIE1pcnJvcnNcbitcdCAqIHRoZSBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBoYW5kbGluZyBpbiBza2JfcmVsZWFzZV9kYXRhKCkuXG4rXHQgKi9cbitcdGlmIChza2JfemNvcHlfbWFuYWdlZChza2IpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAoeC1cdTAwM2Vwcm9wcy5mbGFncyBcdTAwMjYgWEZSTV9TVEFURV9FU04pXG4gXHRcdGV4dHJhbGVuICs9IHNpemVvZihzdHJ1Y3QgZXNwX291dHB1dF9leHRyYSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWg2LmMgYi9uZXQvaXB2Ni9haDYuY1xuaW5kZXggNzZmN2EyZGU5MTA4ZS4uYzk2ZjdlMGQwYTQ4MSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FoNi5jXG4rKysgYi9uZXQvaXB2Ni9haDYuY1xuQEAgLTIzMiwyNiArMjMyLDI4IEBAIHN0YXRpYyB2b2lkIGlwdjZfcmVhcnJhbmdlX2Rlc3RvcHQoc3RydWN0IGlwdjZoZHIgKmlwaCwgc3RydWN0IGlwdjZfb3B0X2hkciAqZGVzXG4gICpcdFJlYXJyYW5nZSB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBpbiBAaXBoIGFuZCB0aGUgYWRkcmVzc2VzIGluIEBydGhkclxuICAqXHRzbyB0aGF0IHRoZXkgYXBwZWFyIGluIHRoZSBvcmRlciB0aGV5IHdpbGwgYXQgdGhlIGZpbmFsIGRlc3RpbmF0aW9uLlxuICAqXHRTZWUgQXBwZW5kaXggQTIgb2YgUkZDIDI0MDIgZm9yIGRldGFpbHMuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBzZWdtZW50c19sZWZ0IGV4Y2VlZHMgdGhlIG51bWJlciBvZlxuKyAqIGFkZHJlc3NlcyBkZXNjcmliZWQgYnkgaGRybGVuLlxuICAqL1xuLXN0YXRpYyB2b2lkIGlwdjZfcmVhcnJhbmdlX3J0aGRyKHN0cnVjdCBpcHY2aGRyICppcGgsIHN0cnVjdCBpcHY2X3J0X2hkciAqcnRoZHIpXG4rc3RhdGljIGludCBpcHY2X3JlYXJyYW5nZV9ydGhkcihzdHJ1Y3QgaXB2NmhkciAqaXBoLCBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKnJ0aGRyKVxuIHtcbi1cdGludCBzZWdtZW50cywgc2VnbWVudHNfbGVmdDtcbitcdHVuc2lnbmVkIGludCBzZWdtZW50cywgc2VnbWVudHNfbGVmdDtcbiBcdHN0cnVjdCBpbjZfYWRkciAqYWRkcnM7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgZmluYWxfYWRkcjtcbiBcbiBcdHNlZ21lbnRzX2xlZnQgPSBydGhkci1cdTAwM2VzZWdtZW50c19sZWZ0O1xuIFx0aWYgKHNlZ21lbnRzX2xlZnQgPT0gMClcbi1cdFx0cmV0dXJuO1xuLVx0cnRoZHItXHUwMDNlc2VnbWVudHNfbGVmdCA9IDA7XG4rXHRcdHJldHVybiAwO1xuIFxuLVx0LyogVGhlIHZhbHVlIG9mIHJ0aGRyLVx1MDAzZWhkcmxlbiBoYXMgYmVlbiB2ZXJpZmllZCBlaXRoZXIgYnkgdGhlIHN5c3RlbVxuLVx0ICogY2FsbCBpZiBpdCBpcyBsb2NhbGx5IGdlbmVyYXRlZCwgb3IgYnkgaXB2Nl9ydGhkcl9yY3YoKSBmb3IgaW5jb21pbmdcbi1cdCAqIHBhY2tldHMuICBTbyB3ZSBjYW4gYXNzdW1lIHRoYXQgaXQgaXMgZXZlbiBhbmQgdGhhdCBzZWdtZW50cyBpc1xuLVx0ICogZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHNlZ21lbnRzX2xlZnQuXG4tXHQgKlxuLVx0ICogRm9yIHRoZSBzYW1lIHJlYXNvbiB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBvcHRpb24gaXMgb2YgdHlwZSAwLlxuK1x0LyogUmF3IGxvY2FsbHkgZ2VuZXJhdGVkIHBhY2tldHMgY2FuIHJlYWNoIEFINiB3aXRob3V0IHRoZSBpbnZhcmlhbnRcbitcdCAqIHJlcXVpcmVkIGJ5IHRoZSBydDAtc3R5bGUgYWRkcmVzcyByZWFycmFuZ2VtZW50IGJlbG93LlxuIFx0ICovXG4gXHRzZWdtZW50cyA9IHJ0aGRyLVx1MDAzZWhkcmxlbiBcdTAwM2VcdTAwM2UgMTtcbitcdGlmIChzZWdtZW50c19sZWZ0IFx1MDAzZSBzZWdtZW50cylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRydGhkci1cdTAwM2VzZWdtZW50c19sZWZ0ID0gMDtcbiBcbiBcdGFkZHJzID0gKChzdHJ1Y3QgcnQwX2hkciAqKXJ0aGRyKS1cdTAwM2VhZGRyO1xuIFx0ZmluYWxfYWRkciA9IGFkZHJzW3NlZ21lbnRzIC0gMV07XG5AQCAtMjYxLDYgKzI2Myw4IEBAIHN0YXRpYyB2b2lkIGlwdjZfcmVhcnJhbmdlX3J0aGRyKHN0cnVjdCBpcHY2aGRyICppcGgsIHN0cnVjdCBpcHY2X3J0X2hkciAqcnRoZHIpXG4gXG4gXHRhZGRyc1swXSA9IGlwaC1cdTAwM2VkYWRkcjtcbiBcdGlwaC1cdTAwM2VkYWRkciA9IGZpbmFsX2FkZHI7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBpcHY2X2NsZWFyX211dGFibGVfb3B0aW9ucyhzdHJ1Y3QgaXB2NmhkciAqaXBoLCBpbnQgbGVuLCBpbnQgZGlyKVxuQEAgLTI3Myw2ICsyNzcsNyBAQCBzdGF0aWMgaW50IGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHN0cnVjdCBpcHY2aGRyICppcGgsIGludCBsZW4sIGludCBkaXIpXG4gXHR9IGV4dGhkciA9IHsgLmlwaCA9IGlwaCB9O1xuIFx0Y2hhciAqZW5kID0gZXh0aGRyLnJhdyArIGxlbjtcbiBcdGludCBuZXh0aGRyID0gaXBoLVx1MDAzZW5leHRoZHI7XG4rXHRpbnQgZXJyO1xuIFxuIFx0ZXh0aGRyLmlwaCsrO1xuIFxuQEAgLTI5Miw3ICsyOTcsOSBAQCBzdGF0aWMgaW50IGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHN0cnVjdCBpcHY2aGRyICppcGgsIGludCBsZW4sIGludCBkaXIpXG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgTkVYVEhEUl9ST1VUSU5HOlxuLVx0XHRcdGlwdjZfcmVhcnJhbmdlX3J0aGRyKGlwaCwgZXh0aGRyLnJ0aCk7XG4rXHRcdFx0ZXJyID0gaXB2Nl9yZWFycmFuZ2VfcnRoZHIoaXBoLCBleHRoZHIucnRoKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0ZGVmYXVsdDpcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9lc3A2LmMgYi9uZXQvaXB2Ni9lc3A2LmNcbmluZGV4IDI5NmI1NzkyNmFiYjkuLjdkMjE2YjljNTlmMDQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9lc3A2LmNcbisrKyBiL25ldC9pcHY2L2VzcDYuY1xuQEAgLTEyMSw2ICsxMjEsMTMgQEAgc3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiBcbitcdC8qIE1hbmFnZWQgZnJhZ3MgYXJlIG93bmVkIGJ5IHRoZSB6ZXJvY29weSB1YnVmOyB0aGUgc2tiIGhvbGRzIG5vXG4rXHQgKiBwZXItZnJhZyBwYWdlIHJlZmVyZW5jZSwgc28gd2UgbXVzdCBub3QgZHJvcCBvbmUgaGVyZS4gIE1pcnJvcnNcbitcdCAqIHRoZSBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBoYW5kbGluZyBpbiBza2JfcmVsZWFzZV9kYXRhKCkuXG4rXHQgKi9cbitcdGlmIChza2JfemNvcHlfbWFuYWdlZChza2IpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAoeC1cdTAwM2Vwcm9wcy5mbGFncyBcdTAwMjYgWEZSTV9TVEFURV9FU04pXG4gXHRcdGV4dHJhbGVuICs9IHNpemVvZihzdHJ1Y3QgZXNwX291dHB1dF9leHRyYSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbmluZGV4IDg5ZDA0NDNiNTMwNzMuLjA3ZWRlZjI1ODk4NDQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXG4rKysgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXG5AQCAtMjQ3LDcgKzI0Nyw3IEBAIGludCB4ZnJtNl9pbnB1dF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHhmcm1fYWRkcmVzc190ICpkYWRkcixcbiBcdFx0Z290byBkcm9wO1xuIFx0fVxuIFxuLVx0aWYgKDEgKyBzcC1cdTAwM2VsZW4gPT0gWEZSTV9NQVhfREVQVEgpIHtcbitcdGlmIChzcC1cdTAwM2VsZW4gXHUwMDNlPSBYRlJNX01BWF9ERVBUSCkge1xuIFx0XHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5CVUZGRVJFUlJPUik7XG4gXHRcdGdvdG8gZHJvcDtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuaW5kZXggMzc0ZTFiOTY0NDM4My4uNjc0YWVkYzVhZjVhMiAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL2VzcGludGNwLmNcbisrKyBiL25ldC94ZnJtL2VzcGludGNwLmNcbkBAIC0zNyw2ICszNywxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNrYi1cdTAwM2VkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzb2NrX25ldChzayksIHNrYi1cdTAwM2Vza2JfaWlmKTtcbitcdGlmICghc2tiLVx1MDAzZWRldikge1xuK1x0XHRYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9YRlJNSU5FUlJPUik7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG5AQCAtNDUsNiArNTAsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbiAjZW5kaWZcbiBcdFx0eGZybTRfcmN2X2VuY2FwKHNrYiwgSVBQUk9UT19FU1AsIDAsIFRDUF9FTkNBUF9FU1BJTlRDUCk7XG4gXHRsb2NhbF9iaF9lbmFibGUoKTtcbitvdXQ6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG5AQCAtNTE1LDcgKzUyMSw4IEBAIHN0YXRpYyB2b2lkIGVzcGludGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxuIFx0c3RycF9zdG9wKFx1MDAyNmN0eC1cdTAwM2VzdHJwKTtcbiBcbiBcdHNrLVx1MDAzZXNrX3Byb3QgPSBcdTAwMjZ0Y3BfcHJvdDtcbi1cdGJhcnJpZXIoKTtcbitcbitcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuIFx0ZGlzYWJsZV93b3JrX3N5bmMoXHUwMDI2Y3R4LVx1MDAzZXdvcmspO1xuIFx0c3RycF9kb25lKFx1MDAyNmN0eC1cdTAwM2VzdHJwKTtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5pbmRleCBlYjFiNmY2NzczOWUxLi44Njc5YzY4YzEwYTE2IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5AQCAtMTU2LDI0ICsxNTYsNTEgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcbiB9XG4gXG4gc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBzdGF0ZXM7XG4gXHR0aW1lNjRfdCBuZXh0X3J1bjtcbiBcdHRpbWU2NF90IG5vdztcbiB9O1xuIFxuLXN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG4rc3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK1x0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4rfTtcbitcbitzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgY291bnQsIHZvaWQgKnB0cilcbiB7XG4gXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCAqY3R4ID0gcHRyO1xuK1x0c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlO1xuK1xuK1x0aWYgKCFSRUFEX09OQ0UoeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRzdGF0ZSA9IGttYWxsb2Nfb2JqKCpzdGF0ZSwgR0ZQX0FUT01JQyk7XG4rXHRpZiAoIXN0YXRlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHhmcm1fc3RhdGVfaG9sZCh4KTtcbitcdHN0YXRlLVx1MDAzZXggPSB4O1xuK1x0bGlzdF9hZGRfdGFpbChcdTAwMjZzdGF0ZS1cdTAwM2VsaXN0LCBcdTAwMjZjdHgtXHUwMDNlc3RhdGVzKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggKmN0eClcbit7XG4gXHRib29sIHNlbmRfa2VlcGFsaXZlID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSBrYTtcbi1cdHRpbWU2NF90IG5leHRfcnVuO1xuK1x0dGltZTY0X3QgbmV4dF9ydW4gPSAwO1xuIFx0dTMyIGludGVydmFsO1xuIFx0aW50IGRlbHRhO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNngtXHUwMDNlbG9jayk7XG4rXG4rXHRpZiAoeC1cdTAwM2VrbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0RFQUQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0aW50ZXJ2YWwgPSB4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XG4gXHRpZiAoIWludGVydmFsKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHNwaW5fbG9jayhcdTAwMjZ4LVx1MDAzZWxvY2spO1xuK1x0XHRnb3RvIG91dDtcbiBcbiBcdGRlbHRhID0gKGludCkoY3R4LVx1MDAzZW5vdyAtIHgtXHUwMDNlbGFzdHVzZWQpO1xuIFx0aWYgKGRlbHRhIFx1MDAzYyBpbnRlcnZhbCkge1xuQEAgLTE4NywyOSArMjE0LDQxIEBAIHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG4gXHRcdHNlbmRfa2VlcGFsaXZlID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNngtXHUwMDNlbG9jayk7XG4rb3V0OlxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eC1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmIChzZW5kX2tlZXBhbGl2ZSlcbiBcdFx0bmF0X2tlZXBhbGl2ZV9zZW5kKFx1MDAyNmthKTtcbiBcbi1cdGlmICghY3R4LVx1MDAzZW5leHRfcnVuIHx8IG5leHRfcnVuIFx1MDAzYyBjdHgtXHUwMDNlbmV4dF9ydW4pXG4rXHRpZiAobmV4dF9ydW4gXHUwMDI2XHUwMDI2ICghY3R4LVx1MDAzZW5leHRfcnVuIHx8IG5leHRfcnVuIFx1MDAzYyBjdHgtXHUwMDNlbmV4dF9ydW4pKVxuIFx0XHRjdHgtXHUwMDNlbmV4dF9ydW4gPSBuZXh0X3J1bjtcbi1cdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbitcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZSwgKnRtcDtcbiBcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgd2FsaztcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbitcdGludCBlcnI7XG4gXG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHguc3RhdGVzKTtcbiBcdGN0eC5uZXh0X3J1biA9IDA7XG4gXHRjdHgubm93ID0ga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpO1xuIFxuIFx0bmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLndvcmspO1xuIFx0eGZybV9zdGF0ZV93YWxrX2luaXQoXHUwMDI2d2FsaywgSVBQUk9UT19FU1AsIE5VTEwpO1xuLVx0eGZybV9zdGF0ZV93YWxrKG5ldCwgXHUwMDI2d2FsaywgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZSwgXHUwMDI2Y3R4KTtcbitcdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCBcdTAwMjZjdHgpO1xuIFx0eGZybV9zdGF0ZV93YWxrX2RvbmUoXHUwMDI2d2FsaywgbmV0KTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGF0ZSwgdG1wLCBcdTAwMjZjdHguc3RhdGVzLCBsaXN0KSB7XG4rXHRcdG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RhdGUtXHUwMDNleCwgXHUwMDI2Y3R4KTtcbitcdFx0eGZybV9zdGF0ZV9wdXQoc3RhdGUtXHUwMDNleCk7XG4rXHRcdGtmcmVlKHN0YXRlKTtcbitcdH1cbitcdGlmIChlcnIgPT0gLUVOT01FTSkge1xuK1x0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFx0aWYgKGN0eC5uZXh0X3J1bilcbiBcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayxcbiBcdFx0XHRcdCAgICAgIChjdHgubmV4dF9ydW4gLSBjdHgubm93KSAqIEhaKTtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX291dHB1dC5jIGIvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuaW5kZXggY2MzNWMyZmNiYmUwOS4uZTMwNWJhMzJlMzU2YiAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcbisrKyBiL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcbkBAIC02MzYsMTAgKzYzNiw4IEBAIHN0YXRpYyBpbnQgeGZybV9kZXZfZGlyZWN0X291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiBcbiBcdGVyciA9IHNrYl9kc3Qoc2tiKS1cdTAwM2VvcHMtXHUwMDNlbG9jYWxfb3V0KG5ldCwgc2ssIHNrYik7XG4tXHRpZiAodW5saWtlbHkoZXJyICE9IDEpKSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0aWYgKHVubGlrZWx5KGVyciAhPSAxKSlcbiBcdFx0cmV0dXJuIGVycjtcbi1cdH1cbiBcbiBcdC8qIEluIHRyYW5zcG9ydCBtb2RlLCBuZXR3b3JrIGRlc3RpbmF0aW9uIGlzXG4gXHQgKiBkaXJlY3RseSByZWFjaGFibGUsIHdoaWxlIGluIHR1bm5lbCBtb2RlLFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcbmluZGV4IGQ2ZGI2MzMwNGJhNmIuLjYyNjZhOTJjZjMwMjAgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuY1xuKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmNcbkBAIC05NDAsNyArOTQwLDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoKGVyciA9IGF0dGFjaF9hdXRoX3RydW5jKFx1MDAyNngtXHUwMDNlYWFsZywgXHUwMDI2eC1cdTAwM2Vwcm9wcy5hYWxnbyxcbiBcdFx0XHRcdCAgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhfVFJVTkNdLCBleHRhY2spKSlcbiBcdFx0Z290byBlcnJvcjtcbi1cdGlmICgheC1cdTAwM2Vwcm9wcy5hYWxnbykge1xuK1x0aWYgKCF4LVx1MDAzZWFhbGcpIHtcbiBcdFx0aWYgKChlcnIgPSBhdHRhY2hfYXV0aChcdTAwMjZ4LVx1MDAzZWFhbGcsIFx1MDAyNngtXHUwMDNlcHJvcHMuYWFsZ28sXG4gXHRcdFx0XHQgICAgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhdLCBleHRhY2spKSlcbiBcdFx0XHRnb3RvIGVycm9yO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6MDkuMzg4ODI3NTc1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1NzA0NzUzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGFuIElQc2VjIFBhdGNoOiBGdW5jdGlvbmFsIENoYW5nZXMgYW5kIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBhIGZldyBrZXkgYXJlYXMgaW4gdGhlIG5ldHdvcmsgc3RhY2s6IGBuZXQvaXB2NC9gLCBgbmV0L2lwdjYvYCwgYW5kIGBuZXQveGZybS9gLiAgSXQgbG9va3MgbGlrZSB0aGlzIGlzIGFsbCBJUHNlYy1yZWxhdGVkLCBzcGVjaWZpY2FsbHkgRVNQLCBBSCwgYW5kIHRoZSBYRlJNIGZyYW1ld29yay4gIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuRmlyc3QsIGxvb2tpbmcgYXQgdGhlIEVTUCBpbXBsZW1lbnRhdGlvbnMgKGBuZXQvaXB2NC9lc3A0LmNgIGFuZCBgbmV0L2lwdjYvZXNwNi5jYCksIHRoZSBjaGFuZ2UgaW4gYGVzcF9zc2dfdW5yZWZgIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gQWRkaW5nIHRoZSBgaWYgKHNrYl96Y29weV9tYW5hZ2VkKHNrYikpIHJldHVybjtgIGNoZWNrIGxvb2tzIGxpa2UgaXTigJlzIGFkZHJlc3NpbmcgYSBzcGVjaWZpYyBjb3JuZXIgY2FzZSB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gTWFrZXMgc2Vuc2UuIEl0J3MgZnVuY3Rpb25hbCwgYW5kIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5OZXh0LCBvdmVyIGluIGBuZXQvaXB2Ni9haDYuY2AsIGBpcHY2X3JlYXJyYW5nZV9ydGhkcmAncyByZXR1cm4gdHlwZSBpcyBub3cgYGludGAsIGFuZCB0aGVyZSdzIGEgbmV3IGNoZWNrIGFkZGVkIHdpdGggYSByZXR1cm4gb2YgYC1FSU5WQUxgIGlmIGBzZWdtZW50c19sZWZ0YCBpcyBsYXJnZXIgdGhhbiBgc2VnbWVudHNgLiBUaGUgZXJyb3IgcHJvcGFnYXRpb24gaW4gYGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zYCBpcyBhIGdvb2QgcHJhY3RpY2UuIEFnYWluLCBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuXG5cblRoZW4gd2UndmUgZ290IGBuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jYC4gIFRoZSBsb2dpYyBpbiBgeGZybTZfaW5wdXRfYWRkcmAgaXMgcmVmaW5lZCB3aXRoIGBzcC1cdTAwM2VsZW4gXHUwMDNlPSBYRlJNX01BWF9ERVBUSGAsIHdoaWNoIGltcHJvdmVzIGJvdW5kcyBjaGVja2luZy4gTWFrZXMgc2Vuc2UgdG8gbWUsIGFsc28gZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLlxuXG5Ob3csIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gRHJvcHBpbmcgcGFja2V0cyBpZiBgIXNrYi1cdTAwM2VkZXZgIGluIGBoYW5kbGVfZXNwYCBhZGRzIGEgc2FuaXR5IGNoZWNrLCB3aGljaCBpcyBhIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHRlY2huaXF1ZS4gUmVwbGFjaW5nIGBiYXJyaWVyKClgIHdpdGggYHN5bmNocm9uaXplX3JjdSgpYCBpbiBgZXNwaW50Y3BfY2xvc2VgIGluZGljYXRlcyBhIG5lY2Vzc2FyeSBjaGFuZ2UgZm9yIHN5bmNocm9uaXphdGlvbi4gIEZ1bmN0aW9uYWxseSBzb3VuZCBhbmQgcmVhY2hhYmxlLlxuXG5Nb3Zpbmcgb24gdG8gYG5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jYCwgdGhpcyBpcyBtb3JlIGludGVyZXN0aW5nLiBUaGUgcmVmYWN0b3Jpbmcgb2YgYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgIHRvIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYW5kIHRoZW4gYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgIHN1Z2dlc3RzIHRoZXkgYXJlIGNvbGxlY3Rpbmcgc3RhdGVzIGR1cmluZyB0aGUgd2FsayBub3csIGFuZCBwcm9jZXNzaW5nIHRoZW0gc2VwYXJhdGVseS4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIGtlcm5lbCBjb2RlIHRvIGF2b2lkIHBvdGVudGlhbCBpc3N1ZXMgd2l0aGluIHRoZSB3YWxrIGl0c2VsZi4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuXG5cbkluIGBuZXQveGZybS94ZnJtX291dHB1dC5jYCwgdGhlIHJlbW92YWwgb2YgYGtmcmVlX3NrYihza2IpYCB3aGVuIGBlcnIgIT0gMWAgaW4gYHhmcm1fZGV2X2RpcmVjdF9vdXRwdXRgIGxvb2tzIGxpa2UgaXQncyBvcHRpbWl6aW5nIHRoZSBwYWNrZXQgaGFuZGxpbmcgYmFzZWQgb24gZXJyb3IgY29kZXMuIEZ1bmN0aW9uYWwsIGFuZCByZWFjaGFibGUuXG5cbkZpbmFsbHksIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuICBDaGFuZ2luZyBgaWYgKCF4LVx1MDAzZXByb3BzLmFhbGdvKWAgdG8gYGlmICgheC1cdTAwM2VhYWxnKWAgaW4gYHhmcm1fc3RhdGVfY29uc3RydWN0YCBsb29rcyBsaWtlIGEgc2ltcGxlIHN0cnVjdHVyYWwgdXBkYXRlIG9mIGhvdyB0aGUgYWxnb3JpdGhtIGlzIGFjY2Vzc2VkLiAgRnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLlxuXG5Pa2F5LCBub3cgbGV0J3MgbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gV2UgZGVmaW5pdGVseSBuZWVkIGBDT05GSUdfWEZSTWAgZm9yIFhGUk0gaXRzZWxmLCBhbmQgYENPTkZJR19YRlJNX1VTRVJgIGZvciB1c2VyLXNwYWNlIFhGUk0gaW50ZXJhY3Rpb24uIEVTUCByZXF1aXJlcyBgQ09ORklHX0lORVRfRVNQYCBhbmQgYENPTkZJR19JTkVUNl9FU1BgIGZvciBJUHY0IGFuZCBJUHY2IHJlc3BlY3RpdmVseS4gQUggaXMgc2ltaWxhcjogYENPTkZJR19JTkVUX0FIYCBhbmQgYENPTkZJR19JTkVUNl9BSGAuIFdlIGFsc28gbmVlZCBgQ09ORklHX0VTUElOVENQYCBmb3IgRVNQLWluLVRDUC4gTm93LCB0aGUgTkFUIGtlZXBhbGl2ZSBzdHVmZi4uLiBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfWEZSTV9OQVRfS0VFUEFMSVZFYCBpcyBhY3R1YWxseSBhIHZhbGlkIGNvbmZpZyBvcHRpb24uICBMZXQncyBncmVwIGZvciB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzk4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6MTkuOTU5MzA2ODEyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODQzOTU1MTEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX05BVF9LRUVQQUxJVkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjIxLjg0MzcxMjIyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODQxMTQ0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgWEZSTSBDb25maWd1cmF0aW9uIFNwYWNlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gTkFUIGtlZXBhbGl2ZXMgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB3aXRoaW4gdGhlIGBuZXQveGZybS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVBzZWMvWEZSTSBmdW5jdGlvbmFsaXR5LiBUaGUgbmFtZSBJJ20gbG9va2luZyBmb3Igc2VlbXMgdG8gYmUgYG5hdF9rZWVwYWxpdmVgLiBMZXQncyBzZWUgd2hhdCBgS2NvbmZpZ2AgcmV2ZWFscy4gSG9wZWZ1bGx5LCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIG9wdGlvbiB3aXRoIGEgY2xlYXIgZGVzY3JpcHRpb24uIFRoZW4gSSBjYW4gZmlndXJlIG91dCBob3cgdG8gY29uZmlndXJlIG9yIHVzZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMzNiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjI0LjgyNzgyOTAyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzYwODU4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmF0X2tlZXBhbGl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNDoyNC44NzE0NDUyODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYzNDQ3NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gTWFrZWZpbGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBgbmV0L3hmcm0vTWFrZWZpbGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIGhvdyB0aGlzIG1vZHVsZSBpcyBhc3NlbWJsZWQsIHdoaWNoIGZpbGVzIGFyZSBpbmNsdWRlZCwgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBtb2RpZmljYXRpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgcHJvamVjdC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSB1c3VhbCBzdXNwZWN0czogb2JqZWN0IGZpbGUgbGlzdHMsIHNvdXJjZSBmaWxlcywgaGVhZGVyIGRlcGVuZGVuY2llcywgYW5kIGxpa2VseSBzb21lIHJ1bGVzIGZvciBsaW5raW5nIHRoZSBmaW5hbCBYRlJNIG1vZHVsZXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIGVudmlyb25tZW50LCB0byBhc2NlcnRhaW4gaG93IHRvIGluamVjdCBteSBvd24gY29kZSBhbmQgY2hhbmdlcyBzdWNjZXNzZnVsbHkuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gcmVzaWRlcywgc28gaXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU1MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjI4LjIzNDg5NTMwN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTc4ODQ4OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9uYXRfa2VlcGFsaXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxcXFxuLS1cXG5uZXQveGZybS9NYWtlZmlsZS0xNi1cXHRcXHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTc6XFx0XFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cXG5uZXQveGZybS9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfWEZSTV9TVEFUSVNUSUNTKSArPSB4ZnJtX3Byb2Mub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNDoyOC41OTI3ODQ4MTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzc0MDg3NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiBLZWVwYWxpdmUgaW4gWEZSTSoqXG5cbkFscmlnaHQsIHNvIGB4ZnJtX25hdF9rZWVwYWxpdmUuY2AgaXMgZGVmaW5pdGVseSBpbiB0aGUgYnVpbGQgaWYgYENPTkZJR19YRlJNYCBpcyBzZXQuIFRoYXQncyB0aGUgYmFzZWxpbmUgYXNzdW1wdGlvbiwgYW5kIGl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgbmFtZS4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGtlZXBhbGl2ZSBmdW5jdGlvbmFsaXR5IHdvcmtzIGluIHJlbGF0aW9uIHRvLCBzYXksIEVTUCBvdmVyIFRDUCwgSSBzaG91bGQgcmVhbGx5IGNoZWNrIG91dCBgZXNwaW50Y3AuY2AuIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgdHdvIG1vZHVsZXMgbGllcywgSSB3b3VsZCBndWVzcy4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBnZW5lcmljIFhGUk0ga2VlcGFsaXZlIG1lY2hhbmlzbXMgYW5kIHRoZSBFU1Agb3ZlciBUQ1AgdHVubmVsLiBUaGlzIHNob3VsZCBsZXQgbWUgc2VlIGhvdyBOQVQgaXMgaGFuZGxlZCBpbiB0aGlzIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNDozMi4zNjY4NzU0MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTQ1NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcGludGNwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9cXG5uZXQveGZybS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgKz0gZXNwaW50Y3Aub1xcbm5ldC94ZnJtL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgKz0geGZybV9zdGF0ZV9icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNDozMi40NzE4MjY5ODdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNzEyMjU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRVNQIEludGVncmF0aW9uIGFuZCBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUga2VybmVsIGNvbmZpZyBvcHRpb24gdGhhdCdzIHNuYWdnaW5nIG15IGF0dGVudGlvbiByaWdodCBub3cgaXMgYENPTkZJR19YRlJNX0VTUElOVENQYC4gVGhhdCBtZWFucyB3ZSdyZSBsb29raW5nIGF0IFRDUCBlbmNhcHN1bGF0aW9uIHdpdGhpbiBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCksIHdoaWNoIGlzIGFsd2F5cyBhbiBpbnRlcmVzdGluZyBhbmQgcG90ZW50aWFsbHkgY29tcGxleCBhcmVhIGZvciBzZWN1cml0eS5cblxuTXkgZmlyc3QgcG9ydCBvZiBjYWxsIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgY29yZSBFU1AgaW1wbGVtZW50YXRpb24gZmlsZXMuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGBlc3A0LmNgIGFuZCBgZXNwNi5jYC4gVGhlc2UgZmlsZXMgYXJlIHdoZXJlIHRoZSBJUHNlYy1zcGVjaWZpYyBoYW5kbGluZyBvZiBFU1AgdHJhZmZpYyBvdmVyIElQdjQgYW5kIElQdjYgcmVzcGVjdGl2ZWx5IGFyZSBjb2RlZC4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIFRDUCBlbmNhcHN1bGF0aW9uIGlzIGludGVncmF0ZWQsIGhvdyBjb25uZWN0aW9ucyBhcmUgc2V0IHVwIGFuZCB0b3JuIGRvd24sIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgdGFzay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI2MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjM2LjM3ODk1MjI1OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMTA0NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcDRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9MzU9b2JqLSQoQ09ORklHX0lORVRfQUgpICs9IGFoNC5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0lORVRfRVNQKSArPSBlc3A0Lm9cXG5uZXQvaXB2NC9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfSU5FVF9FU1BfT0ZGTE9BRCkgKz0gZXNwNF9vZmZsb2FkLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfSU5FVF9JUENPTVApICs9IGlwY29tcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjM2LjU0OTA2MTA0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ4MDY4NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRVNQIE1vZHVsZSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYENPTkZJR19JTkVUX0VTUGAgYW5kIGBDT05GSUdfSU5FVDZfRVNQYC4gIFRob3NlIGZsYWdzIGFyZSByaW5naW5nIGEgYmVsbCwgb2J2aW91c2x5IHJlbGF0ZWQgdG8gRVNQIC0gRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIC0gd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLiBUaW1lIHRvIGRpZyBpbi4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYGFoNi5jYCwgYmVjYXVzZSB0aGF0IGZpbGUncyBnb2luZyB0byBiZSBrZXkgdG8gdW5wYWNraW5nIHRoZSBkZXRhaWxzLiBXaXRoIG15IGV4cGVydGlzZSwgSSBzdXNwZWN0IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgRVNQIGFyZSBpbnRlci1yZWxhdGVkIHRvIEFILCBzbyBpdCBtYWtlcyBzZW5zZSB0byBnbyB0aGVyZSBmb3IgY2x1ZXMuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYyMSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjM5Ljg5NzEzMjk2NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NjIxNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFoNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT0yOD1pcHY2LSQoQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUwpICs9IGlvYW02X2lwdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0yOS1cXG5uZXQvaXB2Ni9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfSU5FVDZfQUgpICs9IGFoNi5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMzEtb2JqLSQoQ09ORklHX0lORVQ2X0VTUCkgKz0gZXNwNi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjQwLjAzNDc2Mzk5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODkzNDEyODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIHRoYXQgY29kZTpcblxuKipJUHY2IEFIIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQ09ORklHX0lORVQ2X0FIYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIEF1dGhlbnRpY2F0aW9uIEhlYWRlciBzdXBwb3J0IGZvciBJUHY2LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYW5kbGVkIGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgaW5wdXQgcHJvY2Vzc2luZyBmb3IgSVB2Niwgc3BlY2lmaWNhbGx5IHRoZSBhdXRoZW50aWNhdGlvbiBhc3BlY3QuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgYXQgaG93IHRoYXQgd29ya3MgaXMgZ29pbmcgdG8gYmUgYHhmcm02X2lucHV0LmNgLiBUaGF0IGZpbGUgaXMgbGlrZWx5IHdoZXJlIHRoZSBhY3R1YWwgYXV0aGVudGljYXRpb24gaGVhZGVyIHByb2Nlc3NpbmcgYW5kIHZlcmlmaWNhdGlvbiB0YWtlcyBwbGFjZSBmb3IgSVB2Ni4gSXQgaGFuZGxlcyB0aGUgaW5ncmVzcyB0cmFmZmljIHNvIHNob3VsZCBiZSB3aGVyZSBteSBkZWJ1Z2dpbmcgYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTMxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6NDMuOTI4MTc4ODMyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzg5NTQyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtNl9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT0xNj1pcHY2LSQoQ09ORklHX0lQVjZfTVJPVVRFKSArPSBpcDZtci5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMTctXFxubmV0L2lwdjYvTWFrZWZpbGU6MTg6aXB2Ni0kKENPTkZJR19YRlJNKSArPSB4ZnJtNl9wb2xpY3kubyB4ZnJtNl9zdGF0ZS5vIHhmcm02X2lucHV0Lm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlLTE5LVxcdHhmcm02X291dHB1dC5vIHhmcm02X3Byb3RvY29sLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6NDQuMDAyMDc2NDU2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTIyMzk4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipEaXZpbmcgaW50byB0aGUgWEZSTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgQ09ORklHX1hGUk1gLiBUaGF0J3MgdGhlIG1haW4ga2V5LCB0aGUgc3dpdGNoIHRoYXQgZW5hYmxlcyB0aGUgZW50aXJlIFhGUk0gc3Vic3lzdGVtLCB3aGljaCBpcyBxdWl0ZSBicm9hZCBhbmQgZGVlcGx5IGVtYmVkZGVkIHdpdGhpbiB0aGUga2VybmVsJ3MgbmV0d29yayBzdGFjay4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUsIGJlY2F1c2Ugb2YgaXRzIGNvcmUtbGV2ZWwgbmF0dXJlLCB0byBzdGFydCB3aXRoIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSDigJMgaG93IHRoZSBwb2xpY3kgYW5kIHNlY3VyaXR5IGFzc29jaWF0aW9ucyBhcmUgY29uZmlndXJlZC4gTGV0J3Mgc2VlIGhvdyB0aGUgaW50ZXJhY3Rpb24gd29ya3MuIE15IGZvY3VzLCBpbiBleHBsb3JpbmcgdGhhdCwgd2lsbCBiZSB0aGUgZW50cnktcG9pbnRzIGZvciB0aGUgdXNlci1zcGFjZSBvcGVyYXRpb25zLiBUaGF0J3MgYHhmcm1fdXNlci5jYCwgSSBiZWxpZXZlLCBpcyB3aGVyZSB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMgYXJlIGhhbmRsZWQsIG9yIGF0IGxlYXN0IHRoZSBzdGFydCBvZiB0aGF0IGludGVyYWN0aW9uLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI1MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjQ3LjI5NDMxODYzMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMyMTYxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV91c2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19YRlJNX0FMR08pICs9IHhmcm1fYWxnby5vXFxubmV0L3hmcm0vTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1hGUk1fVVNFUikgKz0geGZybV91c2VyLm9cXG5uZXQveGZybS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfWEZSTV9VU0VSX0NPTVBBVCkgKz0geGZybV9jb21wYXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNDo0Ny4zNDc1NDAxM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgzOTU3MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBzZWVpbmcgYENPTkZJR19YRlJNX1VTRVJgLCB3aGljaCB0cmlnZ2VycyBhIG1lbnRhbCBub3RlIHRvIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIGltcGxpY2F0aW9ucy4gSSd2ZSBnb3QgYSBsaXN0IGhlcmU6IGBYRlJNYCwgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGBJTkVUNl9FU1BgLCBgSU5FVDZfQUhgLCBhbmQgYFhGUk1fRVNQSU5UQ1BgLiBNeSBpbW1lZGlhdGUgaW5jbGluYXRpb24gaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBYRlJNX0VTUElOVENQYCBoYXMgYW55IHVwc3RyZWFtIHJlcXVpcmVtZW50cy4gSXMgaXQgY29udGluZ2VudCBvbiBhbnkgb2YgdGhvc2UgcHJldmlvdXMgY29uZmlndXJhdGlvbnM/IEl0J3MgdGhlIG1vc3QgdW51c3VhbCBvZiB0aGUgbG90LiBUaW1lIHRvIGV4cGxvcmUgdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBzZWUgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTg4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6NTAuNjMxNDk5OTE3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE0MjAxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fRVNQSU5UQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTE0MT1jb25maWcgWEZSTV9JUFRGU1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXFxubmV0L3hmcm0vS2NvbmZpZzoxNTc6Y29uZmlnIFhGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS9LY29uZmlnLTE1OC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM0OjUwLjc5MjkyNDYzMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI2NzcyOTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgWEZSTSBLY29uZmlnIGZvciBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBuZXQveGZybS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAxNTcuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgc29tZSBpbnRlcmVzdGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBYRlJNIG1pZ2h0IGJlIGRlZmluZWQuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIG1heWJlIHJlbGF0ZWQgdG8gYSBuZXcgZmVhdHVyZSBJJ20gdHJ5aW5nIHRvIGVuYWJsZSwgb3IgcGVyaGFwcyB0cm91Ymxlc2hvb3RpbmcgYSBwYXJ0aWN1bGFyIGlzc3VlIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIGlzIGZ1bmRhbWVudGFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYXZhaWxhYmxlIGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBpbnRlcnJlbGF0ZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNDo1NC41MTk2OTk1OTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFx0ICBwYWNrZXQgc3RyZWFtIHdoaWNoIGluIHR1cm4geWllbGRzIGhpZ2hlciBzbWFsbC1wYWNrZXRcXG4gMTUxOlxcdFxcdCAgYmFuZHdpZHRoIGFzIHdlbGwgYXMgcmVkdWNpbmcgTVRVL1BNVFUgaXNzdWVzLiBDb25nZXN0aW9uXFxuIDE1MjpcXHRcXHQgIGNvbnRyb2wgaXMgdW5pbXBsZW1lbnRhdGVkIGFzIHRoZSBzZW5kIHJhdGUgaXMgZGVtYW5kIGRyaXZlblxcbiAxNTM6XFx0XFx0ICByYXRoZXIgdGhhbiBjb25zdGFudC5cXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNTY6XFx0XFxuIDE1NzpcXHRjb25maWcgWEZSTV9FU1BJTlRDUFxcbiAxNTg6XFx0XFx0Ym9vbFxcbiAxNTk6XFx0XFxuIDE2MDpcXHRlbmRpZiAjIElORVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6NTQuNTE5NzU0MzU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDUyNjkxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEZWJ1Z2dpbmcgYSBCb29sZWFuJ3MgU2VsZWN0aW9uKipcblxuQWxyaWdodCwgdGhpcyBgYm9vbGAgZmllbGTigKYgaXQncyBub3QgYmVpbmcgZXhwbGljaXRseSBwcm9tcHRlZCwgc28gc29tZXRoaW5nIGVsc2UgbXVzdCBiZSBkcml2aW5nIGl0cyBzZWxlY3Rpb24uIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgY29kZSBhbmQgZmlndXJlIG91dCB0aGUgZGVjaXNpb24tbWFraW5nIHByb2Nlc3MgdGhhdCdzIHNldHRpbmcgdGhpcyB2YWx1ZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBpZGVudGlmeSB0aGUgc291cmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBoZXJlLiBXaGF0IGNvbXBvbmVudHMgb3IgZnVuY3Rpb25zIGFyZSB1cHN0cmVhbSBhbmQgcG90ZW50aWFsbHkgaW1wYWN0aW5nIHRoaXMgYGJvb2xgJ3Mgc3RhdGU/IFRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nIHRvIHRyYWNrIGRvd24sIGxldCdzIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMwNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzQ6NTguNjI1MDI1MjkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEzOTA0NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBYRlJNX0VTUElOVENQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4Ni1cXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjQvS2NvbmZpZzozODc6XFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG5uZXQvaXB2NC9LY29uZmlnLTM4OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTkwPWNvbmZpZyBJTkVUNl9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy05NC1cXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjYvS2NvbmZpZzo5NTpcXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbm5ldC9pcHY2L0tjb25maWctOTYtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTowMC4zMzg5MzYzODFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzNDI0ODMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkVTUCBhbmQgVENQIEludGVycGxheSAtIEluaXRpYWwgVGhvdWdodHMqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBJTkVUX0VTUElOVENQYCBhbmQgaXRzIElQdjYgY291bnRlcnBhcnQsIGBJTkVUNl9FU1BJTlRDUGAuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGxpa2VseSBhcmNoaXRlY3R1cmUuIFRoZSBnb2FsIGlzIGxpa2VseSB0byBmaW5kIGtleSBzeW1ib2xzIHRoYXQgYWN0IGFzIGEgZm9jYWwgcG9pbnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgY29yZSBvZiB0aGUgaW50ZXJhY3Rpb24/XCJcblxuTGV0J3MgYmVnaW4uIGBlc3Bfc3NnX3VucmVmYCBsb29rcyBpbnRlcmVzdGluZywgYnV0IHRoZSAnc3RhdGljJyBhdHRyaWJ1dGUgaXMgaW1tZWRpYXRlbHkgb2ZmLXB1dHRpbmcuIFRoYXQgbWVhbnMgaXQgbGlrZWx5IGhhcyBsaW1pdGVkIHNjb3BlIGFuZCBpc24ndCB0aGUgY2VudHJhbCBmdW5jdGlvbiBmb3IgdGhpcy4gQmVpbmcgY2FsbGVkIGZyb20gYGVzcF9vdXRwdXRfdGFpbGAgYW5kIGBlc3BfaW5wdXRfdGFpbGAgaXMgYSBjcml0aWNhbCBmaXJzdCBkYXRhIHBvaW50LCB0aG91Z2guIFRoZXkgYXJlIGNlcnRhaW5seSB0aGUgbmV4dCB0aGluZ3MgdG8gZXhhbWluZSBpbiBkZXRhaWwuIEkgc2hvdWxkIGNoZWNrIGhvdyB0aGVzZSB0d28gZnVuY3Rpb25zIGludGVyYWN0IHdpdGggYGVzcF9zc2dfdW5yZWZgLCBzaW5jZSB0aGF0IG1heSBiZSB3aGVyZSB0aGUgYWN0aW9uIGlzLiBUaGlzIG1pZ2h0IGJlIGEgZGVhZCBlbmQgZm9yIHRoZSBmb2N1cywgYnV0IGl0J3Mgd2hlcmUgdGhlIGJyZWFkY3J1bWJzIGFyZSBzbyBmYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjUwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MDQuODczMTg3MDU3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzk5NTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlc3Bfc3NnX3VucmVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2VzcDQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9lc3A0LmM9OTE9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmVzcF9yZXFfc2coc3RydWN0IGNyeXB0b19hZWFkICphZWFkLFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTk4LVxcbm5ldC9pcHY0L2VzcDQuYzo5OTpzdGF0aWMgdm9pZCBlc3Bfc3NnX3VucmVmKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB2b2lkICp0bXAsIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgYWxyZWFkeV91bnJlZilcXG5uZXQvaXB2NC9lc3A0LmMtMTAwLXtcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz0yMTc9c3RhdGljIHZvaWQgZXNwX291dHB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMjMyLVxcdHRtcCA9IEVTUF9TS0JfQ0Ioc2tiKS1cXHUwMDNldG1wO1xcbm5ldC9pcHY0L2VzcDQuYzoyMzM6XFx0ZXNwX3NzZ191bnJlZih4LCB0bXAsIHNrYiwgZmFsc2UpO1xcbm5ldC9pcHY0L2VzcDQuYy0yMzQtXFx0a2ZyZWUodG1wKTtcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz01MDU9aW50IGVzcF9vdXRwdXRfdGFpbChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICplc3ApXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtNTgyLVxcdFxcdGlmICh1bmxpa2VseShlcnIgXFx1MDAzYyAwKSkge1xcbm5ldC9pcHY0L2VzcDQuYzo1ODM6XFx0XFx0XFx0ZXNwX3NzZ191bnJlZih4LCB0bXAsIHNrYiwgdHJ1ZSk7XFxubmV0L2lwdjQvZXNwNC5jLTU4NC1cXHRcXHRcXHRnb3RvIGVycm9yX2ZyZWU7XFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtNjE2LVxcdGlmIChzZyAhPSBkc2cpXFxubmV0L2lwdjQvZXNwNC5jOjYxNzpcXHRcXHRlc3Bfc3NnX3VucmVmKHgsIHRtcCwgc2tiLCBmYWxzZSk7XFxubmV0L2lwdjQvZXNwNC5jLTYxOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MDQuOTM3MTg1OTgzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTg1NzQzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipGb2N1c2luZyBJbiBvbiBOZXR3b3JrIENvcmUgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gc3BlY2lmaWMgYXJlYXMgd2l0aGluIHRoZSBuZXR3b3JrIGNvZGUgYmFzZS4gYGVzcF9vdXRwdXRfdGFpbGAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuIFRoYXQncyBhIHNvbGlkIHN5bWJvbCB0byB0cmFjayBmb3Igbm93LCBhbmQgSSdsbCBrZWVwIGl0IGluIG1pbmQuIEZvciBJUHY2LCBJIGNhbiB1c2UgYGVzcDZfb3V0cHV0X3RhaWxgLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9pcHY2L2VzcDYuY2AsIHRvIGNoZWNrIGZvciBzaW1pbGFyIGZ1bmN0aW9uYWxpdGllcy4gSXQgd2lsbCBiZSB2ZXJ5IGhlbHBmdWwgaW4gZXhwbG9yaW5nIElQdjYuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBFU1AgYW5kIElQdjYgcGFja2V0IHByb2Nlc3NpbmcgdGhlcmUuXG5cbk5vdywgYSByZWxhdGVkIGZ1bmN0aW9uLCBgaXB2Nl9yZWFycmFuZ2VfcnRoZHJgLCBpcyBzb21ldGhpbmcgZWxzZSB0byBjb25zaWRlci4gSSd2ZSBub3RpY2VkIGl0J3MgZGVjbGFyZWQgYHN0YXRpY2AuLi4gaW50ZXJlc3RpbmcuIEFuZCBpdCBhcHBlYXJzIHRvIGJlIGNhbGxlZCBvbmx5IGZyb20gYGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zYC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBpcHY2X2NsZWFyX211dGFibGVfb3B0aW9uc2AgaW50ZXJhY3RzIHdpdGggdGhlIGhpZ2hlci1sZXZlbCBJUHY2IHByb2Nlc3NpbmcuIFRoYXQgY291bGQgYmUgd2hlcmUgdGhlIHJvdXRlIGhlYWRlciBoYW5kbGluZyBpcyByZWFsbHkgaGFwcGVuaW5nLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNhbGwgc3RhY2sgdG8gc2VlIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDQyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MDguNjM1NzYzMjIxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM4MTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X2NsZWFyX211dGFibGVfb3B0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9haDYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9haDYuYz0yMzk9c3RhdGljIGludCBpcHY2X3JlYXJyYW5nZV9ydGhkcihzdHJ1Y3QgaXB2NmhkciAqaXBoLCBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKnJ0aGRyKVxcbi0tXFxubmV0L2lwdjYvYWg2LmMtMjY5LVxcbm5ldC9pcHY2L2FoNi5jOjI3MDpzdGF0aWMgaW50IGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHN0cnVjdCBpcHY2aGRyICppcGgsIGludCBsZW4sIGludCBkaXIpXFxubmV0L2lwdjYvYWg2LmMtMjcxLXtcXG4tLVxcbm5ldC9pcHY2L2FoNi5jPTM1MD1zdGF0aWMgaW50IGFoNl9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9haDYuYy00MTYtXFx0aWYgKGV4dGxlbikge1xcbm5ldC9pcHY2L2FoNi5jOjQxNzpcXHRcXHRlcnIgPSBpcHY2X2NsZWFyX211dGFibGVfb3B0aW9ucyh0b3BfaXBoLFxcbm5ldC9pcHY2L2FoNi5jLTQxOC1cXHRcXHRcXHRcXHRcXHRcXHQgZXh0bGVuIC0gc2l6ZW9mKCppcGhfZXh0KSArXFxuLS1cXG5uZXQvaXB2Ni9haDYuYz01MTk9c3RhdGljIGludCBhaDZfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9haDYuYy02MTMtXFxubmV0L2lwdjYvYWg2LmM6NjE0OlxcdGVyciA9IGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zKGlwNmgsIGhkcl9sZW4sIFhGUk1fUE9MSUNZX0lOKTtcXG5uZXQvaXB2Ni9haDYuYy02MTUtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MDguNjg5MTQ5NjA5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjYzMjA2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgRm9jdXMgU3ltYm9scyBhbmQgTm9uLVN0YXRpYyBWYXJpYWJsZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIGNvZGUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gbmV0d29yayB0cmFuc2Zvcm1hdGlvbiBvciBhZGRyZXNzIGhhbmRsaW5nLiBGaXJzdCwgSSdtIHRoaW5raW5nIHRoYXQgYGFoNl9vdXRwdXRgIGFuZCBgYWg2X2lucHV0YCBhcmUgZ29vZCBzdGFydGluZyBwb2ludHMuIFRoZXkgc2VlbSBsaWtlIHdlbGwtY2hvc2VuIGZvY3VzIHN5bWJvbHMsIGxpa2VseSByZXByZXNlbnRpbmcgY3JpdGljYWwgaW5wdXQgYW5kIG91dHB1dCBwYXJhbWV0ZXJzIHJlbGF0ZWQgdG8gdGhlIEFIIChBdXRoZW50aWNhdGlvbiBIZWFkZXIpIHByb3RvY29sIGZvciBJUHY2LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlaXIgZGVmaW5pdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhlIHN5c3RlbSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZW0uXG5cblRoZW4sIHRoZXJlJ3MgYHhmcm02X2lucHV0X2FkZHJgLiBBaCwgaGVyZSdzIHNvbWV0aGluZyBvZiBpbnRlcmVzdC4gVGhpcyBvbmUgaXMgKm5vdCogc3RhdGljLiBUaGF0IG1lYW5zIGl0cyBzY29wZSBleHRlbmRzIGJleW9uZCBhIHNpbmdsZSBmdW5jdGlvbiBvciBjb21waWxhdGlvbiB1bml0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBhIGdsb2JhbCBvciBtb2R1bGUtbGV2ZWwgdmFyaWFibGUsIGFuZCB0aGF0IHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIGludm9sdmVkIGluIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnMuIFRoaXMgbm9uLXN0YXRpYyBuYXR1cmUgbWVhbnMgSSdsbCBoYXZlIHRvIGJlIHBhcnRpY3VsYXJseSBjYXJlZnVsIGFib3V0IHNpZGUgZWZmZWN0cywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpZiB0aGlzIGlzIHVzZWQgaW4gYSBtdWx0aXRocmVhZGVkIGNvbnRleHQsIG9yIGp1c3QgZ2VuZXJhbGx5IHRyYWNraW5nIGRvd24gYWxsIHRoZSBwbGFjZXMgd2hlcmUgaXQncyBtb2RpZmllZC4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbnRleHRzIHdoZXJlIGB4ZnJtNl9pbnB1dF9hZGRyYCBpcyB1c2VkIGFuZCBob3cgaXQncyBtb2RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNToxMi41MTU0NzIyODlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MjgyNzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm02X2lucHV0X2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYveGZybTZfaW5wdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jPTIzNT1FWFBPUlRfU1lNQk9MKHhmcm02X3Jjdik7XFxubmV0L2lwdjYveGZybTZfaW5wdXQuYzoyMzY6aW50IHhmcm02X2lucHV0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxcbm5ldC9pcHY2L3hmcm02X2lucHV0LmMtMjM3LVxcdFxcdCAgICAgeGZybV9hZGRyZXNzX3QgKnNhZGRyLCB1OCBwcm90bylcXG4tLVxcbm5ldC9pcHY2L3hmcm02X2lucHV0LmMtMzIyLX1cXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jOjMyMzpFWFBPUlRfU1lNQk9MKHhmcm02X2lucHV0X2FkZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNToxMi41NzQ3NTc1OTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0OTkxMTM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuXG5cbioqQW5hbHl6aW5nIHRoZSBFU1AvSVBzZWMgUGFja2V0IEhhbmRsaW5nKipcblxuQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYHhmcm02X2lucHV0X2FkZHJgIGlzIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBkZXNpZ25lZCBmb3IgZXh0ZXJuYWwgdXNlLCBsaWtlbHkgZm9yIGhhbmRsaW5nIGluY29taW5nIElQc2VjIHRyYWZmaWMgd2l0aGluIHRoZSBJUHY2IGNvbnRleHQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIHRyYWNlIHdoZXJlIGl0J3MgdXRpbGl6ZWQuXG5cbk5leHQsIEknbSBkaWdnaW5nIGludG8gYGVzcGludGNwLmNgLiBIZXJlLCB0aGUgZnVuY3Rpb24gYGhhbmRsZV9lc3BgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGlzIGlzIGltcG9ydGFudCDigJMgaXQgbWVhbnMgaXQncyBzY29wZWQgKm9ubHkqIHdpdGhpbiB0aGlzIGZpbGUuIE5vIGRpcmVjdCBleHRlcm5hbCBjYWxscyBhcmUgZXhwZWN0ZWQuIEhvd2V2ZXIsIHRoZSBmYWN0IHRoYXQgYGhhbmRsZV9lc3BgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIG1lYW5zIHRoYXQgaXQgbXVzdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGBlc3BpbnRjcC5jYCBmaWxlLiBHaXZlbiB0aGUgZmlsZW5hbWUsIGFuZCB0aGUgZmFjdCB0aGF0IGl0J3MgaGFuZGxpbmcgRVNQIHRyYWZmaWMsIEkgY2FuIGluZmVyIHRoYXQgYGhhbmRsZV9lc3BgIGlzIGEgY2VudHJhbCwgaW50ZXJuYWwgcm91dGluZS4gVGhlIGNvZGUgc3RhdGVzIHRoYXQgaXQncyBjYWxsZWQgZnJvbSBgZXNwaW50Y3BfcmN2YC4gU28sIGZyb20gYGVzcGludGNwX3JjdmAgdG8gYGhhbmRsZV9lc3BgLiBHb3QgaXQuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgZXNwaW50Y3BfcmN2YCBpcyBjYWxsZWQsIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgeGZybTZfaW5wdXRfYWRkcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjg4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MTYuMjI0NjcxMzE0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA3NDI5ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX2VzcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmM9MTI9c3RhdGljIHZvaWQgaGFuZGxlX25vbmVzcChzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTI4LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6Mjk6c3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMC17XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jPTU3PXN0YXRpYyB2b2lkIGVzcGludGNwX3JjdihzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMTMtXFx0ZWxzZVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MTE0OlxcdFxcdGhhbmRsZV9lc3Aoc2tiLCBzdHJwLVxcdTAwM2Vzayk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNToxNi4zNzU0MTg1NDFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMjg5NDI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2Ugc3ltYm9scywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRm9jdXNpbmcgSW4gb24gYGVzcGludGNwX3JjdmAgYW5kIGBlc3BpbnRjcF9jbG9zZWAqKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgbXkgaW1tZWRpYXRlIHRob3VnaHRzIGFyZSB0aGF0IGBlc3BpbnRjcF9yY3ZgIGFuZCBgZXNwaW50Y3BfY2xvc2VgIGFyZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIHRvIGRpZyBpbnRvLiBUaGV5IHN0cmlrZSBtZSBhcyB0aGUga2V5IGZvY3VzIHN5bWJvbHMgd2l0aGluIHRoaXMgRVNQLVRDUCBjb250ZXh0LiBgZXNwaW50Y3BfcmN2YCBzdWdnZXN0cyBoYW5kbGluZyBpbmNvbWluZyBkYXRhLCB3aGljaCwgaWYgSSB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgY29ycmVjdGx5LCBpcyBwcm9iYWJseSB3aGVyZSB3ZSBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IG9mIHJlY2VpdmVkIHBhY2tldHMgYW5kIGFzc29jaWF0ZWQgcHJvY2Vzc2luZy4gYGVzcGludGNwX2Nsb3NlYCwgb24gdGhlIG90aGVyIGhhbmQsIGRlYWxzIHdpdGggY2xvc2luZyBjb25uZWN0aW9ucywgd2hpY2ggaXMganVzdCBhcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBoYW5kbGVzIHN0YXRlIHRyYW5zaXRpb25zIGFuZCByZXNvdXJjZSByZWxlYXNlLiBBbmFseXppbmcgdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGxpa2VseSBnaXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29ubmVjdGlvbiBsaWZlY3ljbGUgYW5kIGRhdGEgZmxvdy4gS25vd2luZyB0aGF0IHRoZXNlIGFyZSBnb29kIGZvY3VzIHN5bWJvbHMgd2lsbCBndWlkZSBteSBhbmFseXNpcyBlZmZpY2llbnRseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNToxOS43MDgzMTQ5MzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NDg2MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcGludGNwX2Nsb3NlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuYz01MDE9c3RhdGljIHZvaWQgZXNwaW50Y3BfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNS1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjUxNjpzdGF0aWMgdm9pZCBlc3BpbnRjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNy17XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jPTU1Mj1zdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NjAtXFx0ZXNwaW50Y3BfcHJvdC1cXHUwMDNlcmVjdm1zZyA9IGVzcGludGNwX3JlY3Ztc2c7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NjE6XFx0ZXNwaW50Y3BfcHJvdC1cXHUwMDNlY2xvc2UgPSBlc3BpbnRjcF9jbG9zZTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU2Mi1cXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VyZWxlYXNlX2NiID0gZXNwaW50Y3BfcmVsZWFzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MTkuNzY0ODA4Mjc2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODQwNjQ3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRm9jdXNpbmcgb24gTkFUIEtlZXBhbGl2ZSBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzZWUuIGBlc3BpbnRjcF9jbG9zZWAgc2VlbXMgbGlrZSBhIHNvbGlkIHBvaW50IHRvIHN0YXJ0IGRpZ2dpbmcuIEl0IG9mdGVuIHNpZ25hbHMgdGhlIGVuZCBvZiBhIGNvbm5lY3Rpb24gb3IgdHVubmVsLCBzbyBpdCdzIGEgbG9naWNhbCBwbGFjZSB0byB1bmRlcnN0YW5kIGhvdyBOQVQgdHJhdmVyc2FsIG9yIGtlZXBhbGl2ZSBtZWNoYW5pc21zIGFyZSBjbGVhbmVkIHVwLiBXaGF0IGhhcHBlbnMgaW4gdGVybXMgb2YgcmVzb3VyY2VzLCBzdGF0ZSwgYW5kIHRpbWVycyB3aGVuIGEgY29ubmVjdGlvbiBpcyBjbG9zZWQgd2l0aCBOQVQgaW4gcGxheT8gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuXG5cbk5vdywgYXMgZm9yIGB4ZnJtX25hdF9rZWVwYWxpdmUuY2AsIGFoIHllcywgYG5hdF9rZWVwYWxpdmVfd29ya2AuIFRoaXMgaXMgbGlrZWx5IHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgc2NoZWR1bGVkIG9uIGEgd29ya3F1ZXVlIHRvIGhhbmRsZSB0aGUgYWN0dWFsIHNlbmRpbmcgb2Yga2VlcGFsaXZlIHByb2JlcyBvciB0aGUgcmVsYXRlZCBwcm9jZXNzaW5nLiBUaGF0J3MgYSBnb29kIGJyZWFkY3J1bWIgdG8gZm9sbG93LiBLbm93aW5nIGl0J3Mgd29ya3F1ZXVlLWJhc2VkIHN1Z2dlc3RzIGl0J3MgZGVzaWduZWQgdG8gYmUgbm9uLWJsb2NraW5nIGFuZCBsaWtlbHkgb3BlcmF0ZXMgYXN5bmNocm9ub3VzbHksIHdoaWNoIGZpdHMgdGhlIGdlbmVyYWwgbmVlZCB0byBub3Qgc3RhbGwgdGhlIG1haW4gZGF0YSBwYXRoLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIHRoZSB3b3JrcXVldWUgc2NoZWR1bGluZy4gSXMgaXQgdGltZXItZHJpdmVuLCBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZXMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBzY2hlZHVsaW5nIGNvbmRpdGlvbnMgYW5kIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wbGVtZW50YXRpb24uIERpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgJ2tlZXBhbGl2ZScgcHJvY2Vzcywgd2hhdCBzcGVjaWZpY2FsbHkgdHJpZ2dlcnMgaXQsIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBgd29ya2AgYW5kIGBlc3BpbnRjcF9jbG9zZWAgd291bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgTkFUIHRyYXZlcnNhbCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzU3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MjQuNDQ4ODc0OTRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDE4ODE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYXRfa2VlcGFsaXZlX3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTE4PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNTctXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTU4OnN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IHtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNTktXFx0c3RydWN0IGxpc3RfaGVhZCBzdGF0ZXM7XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0xNjQ9c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUge1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTY4LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE2OTpzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgY291bnQsIHZvaWQgKnB0cilcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNzAte1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE3MTpcXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCAqY3R4ID0gcHRyO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE3Mi1cXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGU7XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODYtXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTg3OnN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTg4OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHgpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTg5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIyNi1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyMjc6c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMjgte1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIyOS1cXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGUsICp0bXA7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjMwOlxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMzEtXFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjM4LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIzOTpcXHRuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjQwLVxcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFxcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQxOlxcdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFxcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXFx1MDAyNmN0eCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjQyLVxcdHhmcm1fc3RhdGVfd2Fsa19kb25lKFxcdTAwMjZ3YWxrLCBuZXQpO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0My1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhdGUsIHRtcCwgXFx1MDAyNmN0eC5zdGF0ZXMsIGxpc3QpIHtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNDQ6XFx0XFx0bmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdGF0ZS1cXHUwMDNleCwgXFx1MDAyNmN0eCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjQ1LVxcdFxcdHhmcm1fc3RhdGVfcHV0KHN0YXRlLVxcdTAwM2V4KTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0OC1cXHRpZiAoZXJyID09IC1FTk9NRU0pIHtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNDk6XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNTAtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjUyLVxcdGlmIChjdHgubmV4dF9ydW4pXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjUzOlxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayxcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNTQtXFx0XFx0XFx0XFx0ICAgICAgKGN0eC5uZXh0X3J1biAtIGN0eC5ub3cpICogSFopO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9Mjg3PXZvaWQgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yOTQtXFx0bmV0ID0geHNfbmV0KHgpO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI5NTpcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssIDApO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI5Ni19XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yOTg9aW50IF9fbmV0X2luaXQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yOTkte1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMwMDpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgbmF0X2tlZXBhbGl2ZV93b3JrKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMDEtXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0zMDQ9aW50IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfZmluaShzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzA1LXtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzozMDY6XFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzA3LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNToyNC41NTMwNjY5MzhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5NTI3NjMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkFuYWx5emluZyB0aGUgTkFUIEtlZXBhbGl2ZSBhbmQgWEZSTSBPdXRwdXQgTWVjaGFuaXNtcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucywgYW5kIGl0J3MgY2xlYXIgdGhhdCBgbmF0X2tlZXBhbGl2ZV93b3JrYCBpcyBzdGF0aWMg4oCTIGl0J3MgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSwgYnV0IGNyaXRpY2FsbHksIGl0IElTIHRoZSBhY3R1YWwgd29ya2VyIGZ1bmN0aW9uLiBOb3csIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgKmlzKiBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGF2YWlsYWJsZSBmb3Igb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCB0byB1c2UuIEdpdmVuIHRoYXQsIHVzaW5nIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgc2VlbXMgbGlrZSB0aGUgY2xlYW5lciBhbmQgbW9yZSBtYWludGFpbmFibGUgYXBwcm9hY2gsIGlmIHBvc3NpYmxlLCBhcyBpdCByZXByZXNlbnRzIGEgbW9yZSB3ZWxsLWRlZmluZWQgaW50ZXJmYWNlLlxuXG5BbmQgSSBzZWUgdGhhdCBgeGZybV9kZXZfZGlyZWN0X291dHB1dGAgaXMgYWxzbyBzdGF0aWMuIEl0J3Mgb25seSBjYWxsZWQgZnJvbSBgeGZybV9vdXRwdXRfb25lYC4gVGhhdCdzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIGJlY2F1c2UgaXRzIHNjb3BlIG9mIHVzZSBpcyByZWFsbHkgbGltaXRlZCwgYW5kIGl0IHN1Z2dlc3RzIGEgdmVyeSBzcGVjaWZpYywgb3B0aW1pemVkIHVzYWdlIHBhdHRlcm4gdGhhdCBpcyB0aWVkIHRvIGEgcGFydGljdWxhciBwYXJ0IG9mIHRoZSBYRlJNIHByb2Nlc3MuIFdlJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB3aGVuIHRoaW5raW5nIGFib3V0IGFueSBwb3RlbnRpYWwgcmVmYWN0b3Jpbmcgb3IgbW9kaWZpY2F0aW9ucyBpbiB0aGUgZnV0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY1MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM1OjMwLjg0ODM0NTE3MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4MDc3NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9kZXZfZGlyZWN0X291dHB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX291dHB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NjIwPUVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fb3V0cHV0X3Jlc3VtZSk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MjEtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2MjI6c3RhdGljIGludCB4ZnJtX2Rldl9kaXJlY3Rfb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHhmcm1fc3RhdGUgKngsXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MjMtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz03NDg9aW50IHhmcm1fb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzg1LVxcdFxcdGlmICh4LVxcdTAwM2Vwcm9wcy5tb2RlID09IFhGUk1fTU9ERV9UVU5ORUwgXFx1MDAyNlxcdTAwMjYgIXNrYi1cXHUwMDNlc2spXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo3ODY6XFx0XFx0XFx0cmV0dXJuIHhmcm1fZGV2X2RpcmVjdF9vdXRwdXQoc2ssIHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03ODctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM1OjMwLjkxMTE1NzEzOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzMwMzU2NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFhGUk0gQ29yZSBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGB4ZnJtX291dHB1dGAgaXMgaW5kZWVkIGEgZ29vZCwgc2hhcnAgZm9jdXMgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgd2hvbGUgWEZSTSAoSVBzZWMpIG91dHB1dCBwcm9jZXNzIHdvcmtzLiBJdCdzIGEga2V5IHN5bWJvbCB0byB0cmFjay5cblxuQW5kIHJlZ2FyZGluZyBgeGZybV9zdGF0ZV9jb25zdHJ1Y3RgLCB0aGUgZmFjdCB0aGF0IGl0J3Mgc3RhdGljIGlzIG5vdGV3b3J0aHkuIFRoaXMgbWVhbnMgaXQncyBsaW1pdGVkIGluIHNjb3BlIGFuZCBjYW4gb25seSBiZSBhY2Nlc3NlZCBmcm9tIHdpdGhpbiBpdHMgb3duIGNvbXBpbGF0aW9uIHVuaXQuIEFuZCBvZiBjb3Vyc2UsIHRoZSBmYWN0IHRoYXQgaXQncyBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSBgeGZybV9hZGRfc2FgIGFuZCBgeGZybV9uZXdfYWVgIGlzIHZlcnkgc2lnbmlmaWNhbnQuIEtub3dpbmcgdGhpcyBpcyBpbXBvcnRhbnQgaW4gdHJhY2luZyBjYWxscyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBmbG93LiBCb3RoIGZ1bmN0aW9ucyBtYW5hZ2UgU0Egb3IgQUUsIHdoaWNoLCBJIHN1cHBvc2UgaXQncyBjbGVhciB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwcm9jZXNzaW5nLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB3aGVuIHRyYWNpbmcgY2FsbHMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNzUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTozNC42NDE1MTU4NjlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDI3NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc3RhdGVfY29uc3RydWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTg5Nj1zdGF0aWMgdm9pZCB4ZnJtX3NtYXJrX2luaXQoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgeGZybV9tYXJrICptKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtOTA2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjkwNzpzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy05MDgtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvICpwLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MTAzOT1zdGF0aWMgaW50IHhmcm1fYWRkX3NhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTA1MS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMDUyOlxcdHggPSB4ZnJtX3N0YXRlX2NvbnN0cnVjdChuZXQsIHAsIGF0dHJzLCBcXHUwMDI2ZXJyLCBleHRhY2spO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwNTMtXFx0aWYgKCF4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTozNC42OTU5NDg1MzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5MzA5MjkzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIEtleSBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgZm9jdXMgc3ltYm9scy4gYHhmcm1fYWRkX3NhYCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZSBhcyBhIHN0cm9uZyBjYW5kaWRhdGUuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLiBOb3csIGxldCdzIGp1c3QgbGF5IG91dCB0aGUgcmVzdCBvZiB0aGUgcmVsZXZhbnQgc3ltYm9scyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFyZWE6IGBlc3Bfb3V0cHV0X3RhaWxgLCBgZXNwNl9vdXRwdXRfdGFpbGAsIGBhaDZfb3V0cHV0YCwgYGFoNl9pbnB1dGAsIGB4ZnJtNl9pbnB1dF9hZGRyYCwgYGVzcGludGNwX3JjdmAsIGBlc3BpbnRjcF9jbG9zZWAsIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAsIGFuZCBgeGZybV9vdXRwdXRgLlxuXG5JIGtub3cgd2hhdCBJJ20gbG9va2luZyBmb3IgLSBsZXQncyBtYWtlIHN1cmUgdGhhdCBgZXNwNl9vdXRwdXRfdGFpbGAgYWN0dWFsbHkgZXhpc3RzIGFzIGV4cGVjdGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24gYW5kIG11c3QgYmUgcHJlc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6MzguNTg5MDQzNTkyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDA2NzU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlc3A2X291dHB1dF90YWlsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2VzcDYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9lc3A2LmM9NTM0PUVYUE9SVF9TWU1CT0xfR1BMKGVzcDZfb3V0cHV0X2hlYWQpO1xcbm5ldC9pcHY2L2VzcDYuYy01MzUtXFxubmV0L2lwdjYvZXNwNi5jOjUzNjppbnQgZXNwNl9vdXRwdXRfdGFpbChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICplc3ApXFxubmV0L2lwdjYvZXNwNi5jLTUzNy17XFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmMtNjU4LX1cXG5uZXQvaXB2Ni9lc3A2LmM6NjU5OkVYUE9SVF9TWU1CT0xfR1BMKGVzcDZfb3V0cHV0X3RhaWwpO1xcbm5ldC9pcHY2L2VzcDYuYy02NjAtXFxubmV0L2lwdjYvZXNwNi5jPTY2MT1zdGF0aWMgaW50IGVzcDZfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXNwNi5jLTcwNy1cXG5uZXQvaXB2Ni9lc3A2LmM6NzA4OlxcdHJldHVybiBlc3A2X291dHB1dF90YWlsKHgsIHNrYiwgXFx1MDAyNmVzcCk7XFxubmV0L2lwdjYvZXNwNi5jLTcwOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM1OjM4LjY0MzExNjk0WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzIwMTM1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpcm1pbmcgYW5kIERpcmVjdGluZyBOZXh0IFN0ZXBzKipcblxuUmlnaHQsIHRoYXQgY29uZmlybXMgd2hhdCBJIHN1c3BlY3RlZC4gTm93LCBiZWZvcmUgZGl2aW5nIGFueSBkZWVwZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNvcmUgcmVjZWl2ZXIgZnVuY3Rpb24sIGBlc3BpbnRjcF9yY3ZgLCBpcyBhY3R1YWxseSBkZWZpbmVkIGFuZCBhdmFpbGFibGUuIE5vIHNlbnNlIGNoYXNpbmcgZ2hvc3RzLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2UgYmVmb3JlIEkgY2FuIG1lYW5pbmdmdWxseSBwcm9jZWVkIHdpdGggYW55IGZ1cnRoZXIgYW5hbHlzaXMgb3IgZGVidWdnaW5nLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwOyBJJ3ZlIGxlYXJuZWQgZnJvbSBleHBlcmllbmNlIHRvIHF1aWNrbHkgZWxpbWluYXRlIGZ1bmRhbWVudGFsIGNvZGUgcGF0aCBpc3N1ZXMgYmVmb3JlIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gbW9yZSBjb21wbGV4IHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo0MS45MTUxMzI5OVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NjgwNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXNwaW50Y3BfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuYz0yOT1zdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTYtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NzpzdGF0aWMgdm9pZCBlc3BpbnRjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU4LXtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmM9NDQxPXN0YXRpYyBpbnQgZXNwaW50Y3BfaW5pdF9zayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0NC1cXHRzdHJ1Y3Qgc3RycF9jYWxsYmFja3MgY2IgPSB7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0NDU6XFx0XFx0LnJjdl9tc2cgPSBlc3BpbnRjcF9yY3YsXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NDYtXFx0XFx0LnBhcnNlX21zZyA9IGVzcGludGNwX3BhcnNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo0MS45NTgwMDQ2ODFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyMTYzODEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIExheWVyKipcblxuVGhpcyBzaXR1YXRpb24gZmVlbHPigKZzdGFsZS4gV2UncmUgZmFjaW5nIGEgcHJvYmxlbSwgYW5kIHRoZSBjdXJyZW50IGFwcHJvYWNoIGlzbid0IGdldHRpbmcgdXMgYW55d2hlcmUuIEkgY2FuIHNlbnNlIHRoZSBuZWVkIGZvciBhIG1vcmUgZHluYW1pYywgYWN0aXZlIHNvbHV0aW9uLiBUaGlzIGZlZWxzIHN0YXRpYy5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcmVhY2ggZm9yIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGluaXRpYWxpemF0aW9uLCBzb21ldGhpbmcgdGhhdCBnaXZlcyB1cyBhIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBzZWUuLi4gR2l2ZW4gdGhlIGNvbnRleHQsIGBlc3BpbnRjcF9pbml0X3NrYCBzb3VuZHMgbGlrZSBhIHByaW1lIGNhbmRpZGF0ZS4gSXQgc3VnZ2VzdHMgYSBzb2NrZXQgaW5pdGlhbGl6YXRpb24gYW5kIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHRvb2wgdG8gYm9vdHN0cmFwIHRoZSBwcm9jZXNzLiBJdCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGxvcmUuXG5cbkFsdGVybmF0aXZlbHksIGlmIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgcHJvY2VzcywgbWF5YmUgd2UgbmVlZCB0byBiZSByZWFkeSB0byByZWNlaXZlIHNvbWUgZGF0YS4gSWYgaW5pdGlhbGl6YXRpb24gaXMgbm90IHRoZSBuZXh0IHN0ZXAsIHRoZW4gaXQncyBsaWtlbHkgd2UgbmVlZCB0byBjYWxsIHNvbWV0aGluZyB0aGF0IGhhbmRsZXMgZGF0YSBjb21pbmcgaW4uIFRoZSBuZXh0IGZ1bmN0aW9uIHRoYXQgY29tZXMgdG8gbWluZCBpcyBgZXNwaW50Y3BfcmVjdm1zZ2AuIFRoYXQgd291bGQgYWxzbyBmaXQgdGhlIHNpdHVhdGlvbi4gU28sIHdoZXRoZXIgaW5pdGlhbGl6YXRpb24gb3IgcmVjZWl2aW5nIGEgbmV3IG1lc3NhZ2UsIEkgc2hvdWxkIHRyeSBvbmUgb2YgdGhvc2UgdHdvIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4ODMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo0Ny45Nzk2NDU0NTVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTIyODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcGludGNwX3JlY3Ztc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jPTExNz1zdGF0aWMgaW50IGVzcGludGNwX3BhcnNlKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTEzNy1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjEzODpzdGF0aWMgaW50IGVzcGludGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMzktXFx0XFx0XFx0ICAgIGludCBmbGFncylcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmM9NTUyPXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKmVzcGludGNwX3Byb3QsXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTU1OS1cXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VzZW5kbXNnID0gZXNwaW50Y3Bfc2VuZG1zZztcXG5uZXQveGZybS9lc3BpbnRjcC5jOjU2MDpcXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VyZWN2bXNnID0gZXNwaW50Y3BfcmVjdm1zZztcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU2MS1cXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VjbG9zZSA9IGVzcGludGNwX2Nsb3NlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo0OC4wMjI3NzE4MzVaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyMzE1MTYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIE5ldHdvcmsgQ29tbXVuaWNhdGlvbioqXG5cbk9rYXksIGBlc3BpbnRjcF9yZWN2bXNnYC4uLiB0aGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBzZWVtcyBzb2xpZC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHJlbGF0ZWQgdG8gTkFUIGtlZXBhbGl2ZSBzdGF0ZSB1cGRhdGVzLiBMZXQgbWUgc2VlLi4uIEkgd29uZGVyIGlmIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgaXMgYWN0dWFsbHkgYSB0aGluZy4gR290dGEgbWFrZSBzdXJlIGl0IGV4aXN0cywgb3IgaWYgSSdtIHRoaW5raW5nIG9mIHNvbWV0aGluZyBlbHNlLiBOZWVkIHRvIGNvbmZpcm0gdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NTUsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo1MS4wNDU5MjU4NzlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNjY0NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTI3OT1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NrX2Zpbmkoc3RydWN0IHNvY2tfYmhfbG9ja2VkIF9fcGVyY3B1ICpzb2NrcylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI4Ni1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyODc6dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo1MS4wODc1OTQ2MloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY1OTYwODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGdlYXJlZCB0b3dhcmRzIGEgdXNlciB3aG8ga25vd3MgdGhlaXIgc3R1ZmY6XG5cbioqQ2hlY2tpbmcgZm9yIGB4ZnJtX2FkZF9zYWAqKlxuXG5SaWdodCwgdGhhdCBzZWVtcyBsb2dpY2FsLiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmc6IGRvZXMgYHhmcm1fYWRkX3NhYCBldmVuIGV4aXN0IGluIHRoZSBjdXJyZW50IGNvbnRleHQ/IEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyBwYXRoLCBpdCdzIGEgY3JpdGljYWwgcHJlcmVxdWlzaXRlIHRoYXQgSSBlbnN1cmUgdGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgYW5kIGFjY2Vzc2libGUuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSBpcyB0aGVyZSBiZWZvcmUgSSBzdGFydCBhc3N1bWluZyBJIGNhbiBsZXZlcmFnZSBpdC4gTGV0J3MgdmVyaWZ5IHRoYXQgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3ODAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo1NC44NTM1NTc1MDNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDI4MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fYWRkX3NhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTkwNz1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwMzgtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTAzOTpzdGF0aWMgaW50IHhmcm1fYWRkX3NhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwNDAtXFx0XFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MjkzNz1zdGF0aWMgaW50IHhmcm1fYWRkX3BvbF9leHBpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDAzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMwMDQ6c3RhdGljIGludCB4ZnJtX2FkZF9zYV9leHBpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzAwNS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNzQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NDgtfSB4ZnJtX2Rpc3BhdGNoW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NDk6XFx0W1hGUk1fTVNHX05FV1NBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2EgICAgICAgIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc1MC1cXHRbWEZSTV9NU0dfREVMU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2RlbF9zYSAgICAgICAgfSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NjEtXFx0W1hGUk1fTVNHX0FDUVVJUkUgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfYWNxdWlyZSAgIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc2MjpcXHRbWEZSTV9NU0dfRVhQSVJFICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9zYV9leHBpcmUgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzYzLVxcdFtYRlJNX01TR19VUERQT0xJQ1kgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3BvbGljeSAgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NjQ6XFx0W1hGUk1fTVNHX1VQRFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2EgICAgICAgIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2NS1cXHRbWEZSTV9NU0dfUE9MRVhQSVJFICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9wb2xfZXhwaXJlfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzU6NTQuODk3OTkwOTAzWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDIwMDE4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgUmVsZXZhbnQgU3ltYm9scyBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHRoYXQgY29uZmlybXMgaXQsIHdlJ3JlIGRlZmluaXRlbHkgb24gdGhlIHJpZ2h0IHRyYWNrLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjcml0aWNhbCBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhpcyBzcGVjaWZpYyBhcmVhIG9mIHRoZSBrZXJuZWwuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgZm9jdXMgaXMgb24gZGF0YSBmbG93cyBhbmQgdHJhbnNmb3JtYXRpb25zLlxuXG5JJ20gbWFraW5nIGEgbGlzdCBvZiB0aGVzZSBzeW1ib2xzIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBtb2R1bGVzIGlzIGNvbXBsZXRlLiBMZXQgbWUgc2VlLi4uIGhlcmUncyB3aGF0IEkndmUgaWRlbnRpZmllZCBhcyBrZXk6XG5cbiogICBgZXNwX291dHB1dF90YWlsYFxuKiAgIGBlc3A2X291dHB1dF90YWlsYFxuKiAgIGBhaDZfb3V0cHV0YFxuKiAgIGBhaDZfaW5wdXRgXG4qICAgYHhmcm02X2lucHV0X2FkZHJgXG4qICAgYGVzcGludGNwX3JlY3Ztc2dgXG4qICAgYGVzcGludGNwX2Nsb3NlYFxuKiAgIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGBcbiogICBgeGZybV9vdXRwdXRgXG4qICAgYHhmcm1fYWRkX3NhYFxuXG5CZWZvcmUgbW92aW5nIGZvcndhcmQsIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYHhmcm1fb3V0cHV0YCBpcyBhY3R1YWxseSBleHBvcnRlZC4gVGhpcyBpcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBhdmFpbGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Njc0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM1OjU5LjA5OTk5NDg2MloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5MDA0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX291dHB1dC5jLTItLypcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjM6ICogeGZybV9vdXRwdXQuYyAtIENvbW1vbiBJUHNlYyBlbmNhcHN1bGF0aW9uIGNvZGUuXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00LSAqXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTI2LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6Mjc6c3RhdGljIGludCB4ZnJtX291dHB1dDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtMjgtc3RhdGljIGludCB4ZnJtX2lubmVyX2V4dHJhY3Rfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NDk2PUVYUE9SVF9TWU1CT0xfR1BMKHBrdGdlbl94ZnJtX291dGVyX21vZGVfb3V0cHV0KTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDk4LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NDk5OnN0YXRpYyBpbnQgeGZybV9vdXRwdXRfb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01MDAte1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01OTItXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1OTM6aW50IHhmcm1fb3V0cHV0X3Jlc3VtZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01OTQte1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01OTYtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1OTc6XFx0d2hpbGUgKGxpa2VseSgoZXJyID0geGZybV9vdXRwdXRfb25lKHNrYiwgZXJyKSkgPT0gMCkpIHtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTU5OC1cXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MDgtXFx0XFx0XFx0ICAgICAgTkZfSU5FVF9QT1NUX1JPVVRJTkcsIG5ldCwgc2ssIHNrYixcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYwOTpcXHRcXHRcXHQgICAgICBOVUxMLCBza2JfZHN0KHNrYiktXFx1MDAzZWRldiwgeGZybV9vdXRwdXQyKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYxMC1cXHRcXHRpZiAodW5saWtlbHkoZXJyICE9IDEpKVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MTktfVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjIwOkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fb3V0cHV0X3Jlc3VtZSk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MjEtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz02MjI9c3RhdGljIGludCB4ZnJtX2Rldl9kaXJlY3Rfb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY1My1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY1NDpzdGF0aWMgaW50IHhmcm1fb3V0cHV0MihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY1NS17XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NTY6XFx0cmV0dXJuIHhmcm1fb3V0cHV0X3Jlc3VtZShzaywgc2tiLCAxKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY1Ny19XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NTgtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NTk6c3RhdGljIGludCB4ZnJtX291dHB1dF9nc28oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjAte1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NzUtXFx0XFx0c2tiX21hcmtfbm90X29uX2xpc3Qoc2Vncyk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NzY6XFx0XFx0ZXJyID0geGZybV9vdXRwdXQyKG5ldCwgc2ssIHNlZ3MpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjc3LVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz02OTc9c3RhdGljIHZvaWQgeGZybV9nZXRfaW5uZXJfaXBwcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzQ3LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NzQ4OmludCB4ZnJtX291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03NDkte1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03ODctXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo3ODg6XFx0XFx0cmV0dXJuIHhmcm1fb3V0cHV0X3Jlc3VtZShzaywgc2tiLCAwKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc4OS1cXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgxMS1cXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2Vpbm5lcl9wcm90b2NvbCBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2Vwcm9wcy5tb2RlID09IFhGUk1fTU9ERV9UVU5ORUwpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo4MTI6XFx0XFx0XFx0XFx0cmV0dXJuIHhmcm1fb3V0cHV0X2dzbyhuZXQsIHNrLCBza2IpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODEzLVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MjEtXFx0XFx0aWYgKHNrYl9pc19nc28oc2tiKSlcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjgyMjpcXHRcXHRcXHRyZXR1cm4geGZybV9vdXRwdXRfZ3NvKG5ldCwgc2ssIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MjMtXFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MzQtb3V0Olxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODM1OlxcdHJldHVybiB4ZnJtX291dHB1dDIobmV0LCBzaywgc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgzNi19XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo4Mzc6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9vdXRwdXQpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNTo1OS4xNDI4OTc4MDJaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxMzkxODc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgS2VybmVsIFN5bWJvbCBFeHBvcnQgU3RhdHVzKipcblxuQWxyaWdodCwgc28gYHhmcm1fb3V0cHV0YCAqaXMqIGV4cG9ydGVkLCB0aGF0J3MgZ29vZC4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIGtlcm5lbCBhbHNvIGV4cG9zZSBgZXNwX291dHB1dF90YWlsYCB0byB0aGUgb3V0c2lkZSB3b3JsZD8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdHMgc3ltYm9sIGlzIGV4cG9ydGVkLCBvdGhlcndpc2Ugd2UgY2FuJ3QgcmVsaWFibHkgaW50ZXJhY3Qgd2l0aCBpdC4gTGV0J3Mgc2VlLi4uIEkgbmVlZCB0byBjb25maXJtIGFjY2VzcyB0byB0aGF0IHN5bWJvbC4gVGltZSB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjowNC42NTY4MTg1ODZaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTQ4MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcF9vdXRwdXRfdGFpbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9lc3A0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZXNwNC5jPTE4Nj1zdGF0aWMgaW50IGVzcF9vdXRwdXRfdGNwX2VuY2FwX2NiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTE5NC1cXG5uZXQvaXB2NC9lc3A0LmM6MTk1OnN0YXRpYyBpbnQgZXNwX291dHB1dF90YWlsX3RjcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9lc3A0LmMtMTk2LXtcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy0yMDktI2Vsc2VcXG5uZXQvaXB2NC9lc3A0LmM6MjEwOnN0YXRpYyBpbnQgZXNwX291dHB1dF90YWlsX3RjcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9lc3A0LmMtMjExLXtcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz0yMTc9c3RhdGljIHZvaWQgZXNwX291dHB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMjQ4LVxcdFxcdCAgICB4LVxcdTAwM2VlbmNhcCBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2VlbmNhcC1cXHUwMDNlZW5jYXBfdHlwZSA9PSBUQ1BfRU5DQVBfRVNQSU5UQ1ApIHtcXG5uZXQvaXB2NC9lc3A0LmM6MjQ5OlxcdFxcdFxcdGVyciA9IGVzcF9vdXRwdXRfdGFpbF90Y3AoeCwgc2tiKTtcXG5uZXQvaXB2NC9lc3A0LmMtMjUwLVxcdFxcdFxcdGlmIChlcnIgIT0gLUVJTlBST0dSRVNTKVxcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTUwMz1FWFBPUlRfU1lNQk9MX0dQTChlc3Bfb3V0cHV0X2hlYWQpO1xcbm5ldC9pcHY0L2VzcDQuYy01MDQtXFxubmV0L2lwdjQvZXNwNC5jOjUwNTppbnQgZXNwX291dHB1dF90YWlsKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm8gKmVzcClcXG5uZXQvaXB2NC9lc3A0LmMtNTA2LXtcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy02MTktXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlZW5jYXAgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlZW5jYXAtXFx1MDAzZWVuY2FwX3R5cGUgPT0gVENQX0VOQ0FQX0VTUElOVENQKVxcbm5ldC9pcHY0L2VzcDQuYzo2MjA6XFx0XFx0ZXJyID0gZXNwX291dHB1dF90YWlsX3RjcCh4LCBza2IpO1xcbm5ldC9pcHY0L2VzcDQuYy02MjEtXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtNjI2LX1cXG5uZXQvaXB2NC9lc3A0LmM6NjI3OkVYUE9SVF9TWU1CT0xfR1BMKGVzcF9vdXRwdXRfdGFpbCk7XFxubmV0L2lwdjQvZXNwNC5jLTYyOC1cXG5uZXQvaXB2NC9lc3A0LmM9NjI5PXN0YXRpYyBpbnQgZXNwX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy02NzUtXFxubmV0L2lwdjQvZXNwNC5jOjY3NjpcXHRyZXR1cm4gZXNwX291dHB1dF90YWlsKHgsIHNrYiwgXFx1MDAyNmVzcCk7XFxubmV0L2lwdjQvZXNwNC5jLTY3Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjA0LjcwMTc2OTM1NloiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjkzNjE0NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBFeHBvcnRlZCBTdGF0ZSoqXG5cbk9rYXksIHllcywgdGhhdCdzIHJpZ2h0LiBOb3csIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgb3Igbm90IGBhaDZfb3V0cHV0YCBpcyBhY3R1YWxseSBiZWluZyBleHBvcnRlZC4gVGhhdCdzIHRoZSBrZXkgdG8gbWFraW5nIHN1cmUgZXZlcnl0aGluZyBpcyB3b3JraW5nIGFzIGl0IHNob3VsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzOTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjowNy4zOTUzODY5MTJaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjU0MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFoNl9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvYWg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvYWg2LmM9MjcwPXN0YXRpYyBpbnQgaXB2Nl9jbGVhcl9tdXRhYmxlX29wdGlvbnMoc3RydWN0IGlwdjZoZHIgKmlwaCwgaW50IGxlbiwgaW50IGRpcilcXG4tLVxcbm5ldC9pcHY2L2FoNi5jLTMxNS1cXG5uZXQvaXB2Ni9haDYuYzozMTY6c3RhdGljIHZvaWQgYWg2X291dHB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXFxubmV0L2lwdjYvYWg2LmMtMzE3LXtcXG4tLVxcbm5ldC9pcHY2L2FoNi5jLTM0OS1cXG5uZXQvaXB2Ni9haDYuYzozNTA6c3RhdGljIGludCBhaDZfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L2FoNi5jLTM1MS17XFxuLS1cXG5uZXQvaXB2Ni9haDYuYy00NDktXFx0YWhhc2hfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCBzZywgaWN2LCBza2ItXFx1MDAzZWxlbiArIHNlcWhpX2xlbik7XFxubmV0L2lwdjYvYWg2LmM6NDUwOlxcdGFoYXNoX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKHJlcSwgMCwgYWg2X291dHB1dF9kb25lLCBza2IpO1xcbm5ldC9pcHY2L2FoNi5jLTQ1MS1cXG4tLVxcbm5ldC9pcHY2L2FoNi5jPTc4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fdHlwZSBhaDZfdHlwZSA9IHtcXG4tLVxcbm5ldC9pcHY2L2FoNi5jLTc5My1cXHQuaW5wdXRcXHRcXHQ9IGFoNl9pbnB1dCxcXG5uZXQvaXB2Ni9haDYuYzo3OTQ6XFx0Lm91dHB1dFxcdFxcdD0gYWg2X291dHB1dCxcXG5uZXQvaXB2Ni9haDYuYy03OTUtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzY6MDcuNDM4MDQ2NjQzWiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzYzOTA3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgU3RhdGljIERhdGEgYW5kIEZ1bmN0aW9uIFNlbGVjdGlvbioqXG5cblNvLCB0aGlzIHBpZWNlIG9mIGRhdGEgaXMgc3RhdGljLCBidXQgaXQncyBjbGVhcmx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYHhmcm1fdHlwZWAgc3RydWN0LCB3aGljaCBnaXZlcyBtZSBzb21lIGNvbnRleHQsIGFuZCB0aGF0J3MgZ29vZC4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkbyBJIGFjdHVhbGx5ICp1c2UqIHRoaXMgdGhpbmc/IEknbSBkZWJhdGluZyBiZXR3ZWVuIGBhaDZfb3V0cHV0YCBhbmQgYGFoNl9pbnB1dGAsIG9yIG1heWJlIGV2ZW4gYHhmcm02X3JjdmAuIFRoaW5raW5nIGFib3V0IGl0LCBgYWg2X291dHB1dGAgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgZml0LCBnaXZlbiB0aGUgY29udGV4dC4gSXQgbGlrZWx5IGhhbmRsZXMgdGhlIG91dGJvdW5kIHByb2Nlc3NpbmcuXG5cbkxldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYnkgbG9va2luZyBpbnRvIGBhaDZfaW5wdXRgLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4NzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjoxMi43NzQ0Mzk2ODVaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTQ5NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFoNl9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9haDYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9haDYuYz0zNTA9c3RhdGljIGludCBhaDZfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvYWg2LmMtNDc0LVxcbm5ldC9pcHY2L2FoNi5jOjQ3NTpzdGF0aWMgdm9pZCBhaDZfaW5wdXRfZG9uZSh2b2lkICpkYXRhLCBpbnQgZXJyKVxcbm5ldC9pcHY2L2FoNi5jLTQ3Ni17XFxuLS1cXG5uZXQvaXB2Ni9haDYuYy01MTgtXFxubmV0L2lwdjYvYWg2LmM6NTE5OnN0YXRpYyBpbnQgYWg2X2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L2FoNi5jLTUyMC17XFxuLS1cXG5uZXQvaXB2Ni9haDYuYy02MzUtXFx0YWhhc2hfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCBzZywgaWN2LCBza2ItXFx1MDAzZWxlbiArIHNlcWhpX2xlbik7XFxubmV0L2lwdjYvYWg2LmM6NjM2OlxcdGFoYXNoX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKHJlcSwgMCwgYWg2X2lucHV0X2RvbmUsIHNrYik7XFxubmV0L2lwdjYvYWg2LmMtNjM3LVxcbi0tXFxubmV0L2lwdjYvYWg2LmM9Nzg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV90eXBlIGFoNl90eXBlID0ge1xcbi0tXFxubmV0L2lwdjYvYWg2LmMtNzkyLVxcdC5kZXN0cnVjdG9yXFx0PSBhaDZfZGVzdHJveSxcXG5uZXQvaXB2Ni9haDYuYzo3OTM6XFx0LmlucHV0XFx0XFx0PSBhaDZfaW5wdXQsXFxubmV0L2lwdjYvYWg2LmMtNzk0LVxcdC5vdXRwdXRcXHRcXHQ9IGFoNl9vdXRwdXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjEyLjgxNjM5MTY0NloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTMyMTI0OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogT2JzZXJ2aW5nIGEgU3RhdGljIFN0YXRlKipcblxuSG1tLCB0aGlzIGZlZWxzLi4uIHN0YXRpYy4gSXQncyBsaWtlIHNvbWV0aGluZydzIGxvY2tlZCB1cCwgbm90IG1vdmluZyBhcyBleHBlY3RlZC4gV2UgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqLiBHaXZlbiB0aGlzIGZlZWxpbmcsIEknbSBnZXR0aW5nIGEgaHVuY2guIEkgdGhpbmsgaXQgaXMgYW4gaXNzdWUgd2l0aCBhZGRyZXNzZXMsIGVzcGVjaWFsbHkgbmV0d29yayBhZGRyZXNzZXMuXG5cbkxldCdzIGRpdmUgcmlnaHQgaW50byBjaGVja2luZyBgeGZybTZfaW5wdXRfYWRkcmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcG9pbnQgb2YgZmFpbHVyZSByaWdodCBub3csIGdpdmVuIHdoYXQgSSdtIHNlbnNpbmcuIEl0J3MgYSBjb21tb24gYXJlYSBmb3IgcHJvYmxlbXMgd2l0aCBJUHY2IGFuZCBzZWN1cml0eSBhc3NvY2lhdGlvbnMsIGFuZCBhbnkgaXNzdWUgdGhlcmUgY291bGQgZWFzaWx5IG1hbmlmZXN0IGFzIHRoaXMga2luZCBvZiBzdGlsbG5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTM1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzY6MTYuOTQ4NTE5NDM5WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjQ2OTAzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtNl9pbnB1dF9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3hmcm02X2lucHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYveGZybTZfaW5wdXQuYz0yMzU9RVhQT1JUX1NZTUJPTCh4ZnJtNl9yY3YpO1xcbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6MjM2OmludCB4ZnJtNl9pbnB1dF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHhmcm1fYWRkcmVzc190ICpkYWRkcixcXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTIzNy1cXHRcXHQgICAgIHhmcm1fYWRkcmVzc190ICpzYWRkciwgdTggcHJvdG8pXFxuLS1cXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTMyMi19XFxubmV0L2lwdjYveGZybTZfaW5wdXQuYzozMjM6RVhQT1JUX1NZTUJPTCh4ZnJtNl9pbnB1dF9hZGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzY6MTcuMDI0OTkyOTgzWiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTE2ODA3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgZXNwaW50Y3BfcmVjdm1zZ2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSdzIGp1c3QgYmVlbiBleHBvcnRlZC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhpcyBgZXNwaW50Y3BfcmVjdm1zZ2AgZnVuY3Rpb24uIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBpdHMgcm9sZSB3aXRoaW4gdGhlIHdpZGVyIFRDUC9JUCBzdGFjayBpbXBsZW1lbnRhdGlvbi4gSXMgaXQgaGFuZGxpbmcgdGhlIGNvcmUgc29ja2V0IHJlY2VpdmUsIG9yIGlzIGl0IGEgc3BlY2lmaWMsIHBvc3NpYmx5IHBsYXRmb3JtLXNwZWNpZmljLCB3cmFwcGVyPyBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUga2V5IHRvIGludGVycHJldGluZyBpdCBjb3JyZWN0bHksIGVzcGVjaWFsbHkgaWYgdGhlcmUgaXMgYW55IHR5cGUgb2YgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9yIGN1c3RvbSBidWZmZXIgbWFuYWdlbWVudC5cblxuSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QgaW1tZWRpYXRlbHkuIFRoaW5ncyBsaWtlOiBlcnJvciBoYW5kbGluZywgYnVmZmVyIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uLCBkYXRhIGNvcHlpbmcsIGZyYWdtZW50YXRpb24sIHJlYXNzZW1ibHksIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiwgZmxvdyBjb250cm9sIGNvbnNpZGVyYXRpb25zICh3aW5kb3cgbWFuYWdlbWVudCksIGFuZCBvZiBjb3Vyc2UsIGFueSBpbnRlcmFjdGlvbiB3aXRoIGludGVycnVwdHMgb3IgaGFyZHdhcmUgcXVldWVzLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGl0cyBjYWxsaW5nIHN0cnVjdHVyZSBpcyBpbnRlcnJ1cHQgZHJpdmVuLCBvciBwb2xsZWQuIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhyZWFkaW5nL2xvY2tpbmcgaW1wbGljYXRpb25zIGlmIHRoaXMgaXMgYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudC4gSSdsbCBtZW50YWxseSBtYXAgb3V0IHdoYXQgdGhlIGRhdGEgZmxvdyBpcyBiZXR3ZWVuIHRoZSBzb2NrZXQgbGF5ZXIsIHRoZSBJUCBsYXllciwgYW5kIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlLiBBbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgYXJlYXMgZm9yIGNvbmNlcm4gYXJlIHdoYXQgSSBhbSBhaW1pbmcgZm9yLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24ncyBleGVjdXRpb24gcGF0aCBhbmQgc2VlaW5nIHdoYXQgbGlicmFyaWVzLCBpZiBhbnksIGl0IGlzIHVzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkxNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjIxLjkxNjY3NTg3MloiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMDE0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXNwaW50Y3BfcmVjdm1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmM9MTE3PXN0YXRpYyBpbnQgZXNwaW50Y3BfcGFyc2Uoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTM3LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MTM4OnN0YXRpYyBpbnQgZXNwaW50Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQveGZybS9lc3BpbnRjcC5jLTEzOS1cXHRcXHRcXHQgICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz01NTI9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byAqZXNwaW50Y3BfcHJvdCxcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTU5LVxcdGVzcGludGNwX3Byb3QtXFx1MDAzZXNlbmRtc2cgPSBlc3BpbnRjcF9zZW5kbXNnO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTYwOlxcdGVzcGludGNwX3Byb3QtXFx1MDAzZXJlY3Ztc2cgPSBlc3BpbnRjcF9yZWN2bXNnO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNTYxLVxcdGVzcGludGNwX3Byb3QtXFx1MDAzZWNsb3NlID0gZXNwaW50Y3BfY2xvc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjIxLjk1OTY4MTAwMloiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg0MDAwMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFN0YXNpcyoqXG5cbkRhbW4sIGl0J3MganVzdC4uLiAqc3RhdGljKi4gRmVlbGluZyBhIHRvdGFsIGJsb2NrLCBsaWtlIEknbSBzdGFyaW5nIGludG8gYSBibGFuayBzY3JlZW4uIFNvbWV0aGluZydzIG5vdCByZXNvbHZpbmcuIE5vIGNsZWFyIHBhdGggZm9yd2FyZCBpcyBwcmVzZW50aW5nIGl0c2VsZiwgd2hpY2ggaXMgdW51c3VhbC5cblxuQWxyaWdodCwgdGltZSB0byBicmVhayB0aGlzIGRvd24gbWV0aG9kaWNhbGx5LiBMZXQncyB0cmFjZSBpdCBiYWNrLiBUaGUgbGFzdCBmdW5jdGlvbiBJIHdhcyBkZWVwbHkgaW52b2x2ZWQgd2l0aCwgdGhlIG1vc3QgcmVjZW50IHBvaW50IG9mIGludGVyYWN0aW9uIHdpdGggdGhlIHN5c3RlbSwgd2FzIGBlc3BpbnRjcF9jbG9zZWAuIExldCdzIHJlLWV4YW1pbmUgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiwgYW5kIHNlZSBpZiBJIGNhbiBmaW5kIGFuIGV4cGxhbmF0aW9uIHRoZXJlLiBNYXliZSB0aGF0J3MgdGhlIHNvdXJjZSBvZiB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjoyNi4zNDM2ODMyOTFaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODgxMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcGludGNwX2Nsb3NlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuYz01MDE9c3RhdGljIHZvaWQgZXNwaW50Y3BfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNS1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjUxNjpzdGF0aWMgdm9pZCBlc3BpbnRjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNy17XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jPTU1Mj1zdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NjAtXFx0ZXNwaW50Y3BfcHJvdC1cXHUwMDNlcmVjdm1zZyA9IGVzcGludGNwX3JlY3Ztc2c7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NjE6XFx0ZXNwaW50Y3BfcHJvdC1cXHUwMDNlY2xvc2UgPSBlc3BpbnRjcF9jbG9zZTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU2Mi1cXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VyZWxlYXNlX2NiID0gZXNwaW50Y3BfcmVsZWFzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzY6MjYuMzg1NTY4ODAyWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDM0ODc3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIC0gRGVhZCBpbiB0aGUgV2F0ZXI/KipcblxuT2theSwgY29tcGxldGUgYW5kIHV0dGVyIHN0YXRpYy4gSSdtIGhpdHRpbmcgYSB3YWxsIGhlcmUuIE5lZWQgdG8gYnJlYWsgdGhyb3VnaC5cblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBzb21ldGhpbmcgc3BlY2lmaWMsIHNvbWV0aGluZyB0aGF0IGNvdWxkIHByb3ZpZGUgYSBjbHVlLiBJJ20gZ29pbmcgdG8gc2hpZnQgZ2VhcnMgYW5kIGRyaWxsIGRvd24gaW50byBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBOQVQga2VlcGFsaXZlcyBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIFNvbWV0aGluZyByZWxhdGVkIHRvIGl0cyBiZWhhdmlvciBpcyBsaWtlbHkgYXQgdGhlIGhlYXJ0IG9mIHdoYXRldmVyIGRlYWRsb2NrIG9yIHVudXN1YWwgc3RhdGUgSSdtIGV4cGVyaWVuY2luZy4gTGV0J3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIG9yIGlmIHRoZXJlJ3MgYW4gaXNzdWUgd2l0aCBpdHMgZXhlY3V0aW9uIG9yIHRoZSBkYXRhIGl0J3MgaGFuZGxpbmcuIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIHByb2JsZW0gaXMgZmVzdGVyaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDk1MSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjI5LjcyOTA1OTI0NloiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxODQzMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9Mjc5PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2tfZmluaShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQgX19wZXJjcHUgKnNvY2tzKVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjg2LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI4Nzp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjI5Ljc3MTI0NzE4N1oiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgwNjI5MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gc3VtbWFyaXplIHRoZXNlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZS4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggaXQ6XG5cbioqQ2hlY2tpbmcgZm9yIEV4cG9ydCBTdGF0dXMqKlxuXG5BbHJpZ2h0LCBJIHNlZSBhIHF1aWNrIHRob3VnaHQgcHJvY2VzcyBoZXJlLiBFc3NlbnRpYWxseSwgdGhlIGZvY3VzIGlzIG9uIGEgY3J1Y2lhbCBpbml0aWFsIGNoZWNrOiBcIkV4cG9ydGVkPyBMZXQncyBjaGVjayBpZiBpdCdzIGV4cG9ydGVkLlwiIFRoaXMgaXMgbGlrZWx5IGFuIGluZGljYXRvciB0aGF0IHRoZSBzdWJqZWN0IG1hdHRlciBpcyBhbiBpdGVtLCBwcm9jZXNzLCBvciBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgYWNjZXNzZWQsIHJldmlld2VkLCB1c2VkLCBvciBtb2RpZmllZCBpbiBzb21lIG90aGVyIHN5c3RlbS5cblxuTXkgaW1tZWRpYXRlIGFuYWx5c2lzIGlzIHRoYXQgdGhpcyByZWZsZWN0cyBhIHByYWdtYXRpYyBhbmQgbWV0aG9kaWNhbCBhcHByb2FjaCB0byBhbiBlc3NlbnRpYWwgZmlyc3Qgc3RlcC4gQXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIHN5c3RlbXMgYW5kIHRoZWlyIHJlbGF0ZWQgcHJvY2Vzc2VzLCBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIHRoaW5ncyBsaWtlOlxuXG4qICAgKipEYXRhIHRyYW5zZmVyOioqIEhhcyB0aGUgZGF0YSBiZWVuIHN1Y2Nlc3NmdWxseSBzZW50IGZyb20gb25lIHN5c3RlbSBvciBhcHBsaWNhdGlvbiB0byBhbm90aGVyPyBUaGlzIGNvdWxkIGJlIGEgZmlsZSwgYSBkYXRhYmFzZSBlbnRyeSwgb3Igc29tZSBraW5kIG9mIEFQSSBjYWxsLlxuKiAgICoqUHJvY2VzcyBjb21wbGV0aW9uOioqIEhhcyB0aGUgbmVjZXNzYXJ5IHRhc2sgb2Yg4oCcZXhwb3J0aW5n4oCdIGJlZW4gY29tcGxldGVkPyBJcyB0aGVyZSBjb25maXJtYXRpb24gdGhhdCB0aGUgaW5mb3JtYXRpb24gaXMgaW4gdGhlIHN0YXRlIGRlc2lyZWQ/XG4qICAgKipTeXN0ZW0gaW50ZXJhY3Rpb246KiogSXQgY291bGQgYmUgYSBzaW1wbGUgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRoZSBleHBlY3RlZCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGRlc2lyZWQgcGxhY2UuXG5cblRoZXJlZm9yZSwgdGhlIHVuZGVybHlpbmcgdGhpbmtpbmcgaGVyZSBpcyBzb3VuZC4gVGhpcyBpcyBhYm91dCBlc3RhYmxpc2hpbmcgYSBiYXNpYyBmYWN0IGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggYW55IHN1YnNlcXVlbnQgYWN0aW9ucywgYmVjYXVzZSBrbm93aW5nIHRoZSBleHBvcnQgc3RhdHVzIGlzIG5lY2Vzc2FyeSBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgc3ViamVjdCBtYXR0ZXIgaXMgYXZhaWxhYmxlIGZvciBmdXJ0aGVyIHdvcmsuIFRoaXMgZW5zdXJlcyB0aGF0IGFueSB0aW1lIG9yIGVmZm9ydCBpcyBub3Qgd2FzdGVkIG9uIGEgdGFzayB3aGVuIHRoYXQgcmVzb3VyY2UgaXMgdW5hdmFpbGFibGUsIG9yLCBwZXJoYXBzLCBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWNvbWluZyBhdmFpbGFibGUuIFRoZSBhcHByb2FjaCBzaG93cyBnb29kIHByYWN0aWNlLCBhbmQgSSBhbSBjb21mb3J0YWJsZSB3aXRoIHRoaXMgbGluZSBvZiB0aG91Z2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTMzOCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjMzLjU1MTg3ODE1N1oiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwOTQzNjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjozMy41OTQ5NzgxMzhaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk5NDc3OTI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRGF0YSBTdHJ1Y3R1cmUncyBTY29wZSoqXG5cbkhtbSwgc28gdGhpcyBwYXJ0aWN1bGFyIGl0ZW0gaXNuJ3QgbWFya2VkIGZvciBleHBvcnQuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBjb25zaWRlcmluZyBpdCdzIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYCBlaXRoZXIuIFRoYXQgc3VnZ2VzdHMgYSBmZXcgdGhpbmdzIHJpZ2h0IG9mZiB0aGUgYmF0OiBpdCdzIGludGVuZGVkIGZvciB1c2Ugd2l0aGluIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCwgYnV0IHBvdGVudGlhbGx5IGFjY2Vzc2libGUgYWNyb3NzIG11bHRpcGxlIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCB1bml0LiBJdCBjb3VsZCBiZSBmb3IgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvciBtYXliZSBwYXJ0IG9mIGEgbGFyZ2VyLCBub24tZXhwb3J0ZWQgQVBJLlxuXG5UbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiB3aGVyZSBpdCdzIHVzZWQsIGxldCdzIHRha2UgYSBsb29rIGF0IHdoZXJlIGB4ZnJtX2FkZF9zYWAgaXMgY2FsbGVkLiBJdCdzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBnYWluIGluc2lnaHRzIGludG8gdGhpcyBwYXJ0aWN1bGFyIGl0ZW0ncyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjM4LjU4OTc1OTM3NFoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3NTc3NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9hZGRfc2FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9OTA3PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jb25zdHJ1Y3Qoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTAzOC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMDM5OnN0YXRpYyBpbnQgeGZybV9hZGRfc2Eoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTA0MC1cXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yOTM3PXN0YXRpYyBpbnQgeGZybV9hZGRfcG9sX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwMDMtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzAwNDpzdGF0aWMgaW50IHhmcm1fYWRkX3NhX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDA1LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3NDA9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0OC19IHhmcm1fZGlzcGF0Y2hbWEZSTV9OUl9NU0dUWVBFU10gPSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc0OTpcXHRbWEZSTV9NU0dfTkVXU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9zYSAgICAgICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzUwLVxcdFtYRlJNX01TR19ERUxTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZGVsX3NhICAgICAgICB9LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2MS1cXHRbWEZSTV9NU0dfQUNRVUlSRSAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9hY3F1aXJlICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzYyOlxcdFtYRlJNX01TR19FWFBJUkUgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhX2V4cGlyZSB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NjMtXFx0W1hGUk1fTVNHX1VQRFBPTElDWSAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfcG9saWN5ICAgIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc2NDpcXHRbWEZSTV9NU0dfVVBEU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9zYSAgICAgICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzY1LVxcdFtYRlJNX01TR19QT0xFWFBJUkUgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3BvbF9leHBpcmV9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjozOC42MzI1MTk0NjVaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMzI4NDM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGEgU3RhZ25hbnQgU3RhdGUgaW4gWEZSTSoqXG5cblJpZ2h0LCB0aGlzIGZlZWxzLi4uIHN0dWNrLiBUaGluZ3MgYXJlbid0IG1vdmluZy4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZyBpcyBiZWluZyBoZWxkIHVwLCBhbmQgaXTigJlzIGxpa2VseSBzb21ldGhpbmcgZnVuZGFtZW50YWwuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgYm90dGxlbmVjay4gVGhlIHNpdHVhdGlvbiBpcyBzdGF0aWMsIHdoaWNoIHVzdWFsbHkgbWVhbnMgd2FpdGluZyBvbiBzb21ldGhpbmcuXG5cbk9rYXksIGxldCdzIGRyaWxsIGRvd24uIEkgc3VzcGVjdCB0aGF0IHRoZSBrZXkgbGllcyB3aXRoaW4gdGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byBpbW1lZGlhdGVseSBsb29rIGF0IGB4ZnJtX3VzZXJfcmN2X21zZ2AuIEl04oCZcyB3aGVyZSB1c2VyLXNwYWNlIHBvbGljeSBpcyBpbmplY3RlZCBhbmQgd2hlcmUgdGhlIGZsb3cgaXMgZWl0aGVyIGFjY2VwdGVkIG9yIHJlamVjdGVkLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBwb2ludCBub3cgYmVjYXVzZSBpdCdzIHRoZSBtb3N0IGNvbW1vbiBlbnRyeSBwb2ludCBmb3IgcG9saWN5IGludGVyYWN0aW9uLCBhbmQgaWYgdGhpcyBjYWxsJ3Mgc3RhbGxlZCwgZXZlcnl0aGluZyBkb3duc3RyZWFtIHdpbGwgZ3JpbmQgdG8gYSBoYWx0LiBJdCdzIHRoZSBtb3N0IGxpa2VseSBjdWxwcml0IGZvciBhIHNlZW1pbmdseSBzdGF0aWMgc3RhdGUuIEknbGwgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjkzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzY6NDEuOTY1ODA2MjUxWiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjEyMzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3VzZXJfcmN2X21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0zNzgxPXN0YXRpYyBpbnQgeGZybV9yZWplY3RfdW51c2VkX2F0dHIoaW50IHR5cGUsIHN0cnVjdCBubGF0dHIgKiphdHRycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4MzYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzgzNzpzdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4MzgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zOTI0PXN0YXRpYyB2b2lkIHhmcm1fbmV0bGlua19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MjgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTI5OlxcdG5ldGxpbmtfcmN2X3NrYihza2IsIFxcdTAwMjZ4ZnJtX3VzZXJfcmN2X21zZyk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzkzMC1cXHRtdXRleF91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX2NmZ19tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjQyLjAwNzkzNTYxMloiLCJTZXEiOjczLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY2Njg1NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTmV0d29yayBQYWNrZXQgUmVjZXB0aW9uKipcblxuT2theSwgdGhpbmdzIGZlZWwuLi5zdHVjay4gQWxtb3N0IGEgc2Vuc2Ugb2YgaW5lcnRpYSwgaWYgeW91IHdpbGwuIEkgbmVlZCB0byBnZXQgbW92aW5nLCBzbyBsZXQncyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBhcHByb2FjaC4gSSBoYXZlIGEgaHVuY2ggYWJvdXQgYSBwb3RlbnRpYWwgYm90dGxlbmVjayBpbiB0aGUgbmV0d29yayBkYXRhIHBhdGguIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBrZXJuZWwncyBgeGZybV9uZXRsaW5rX3JjdmAgZnVuY3Rpb24uIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gSXQncyB0aGUgcmVjZWl2ZXIgZm9yIHRoZSBuZXRsaW5rIG1lc3NhZ2VzIGNvbmNlcm5pbmcgc2VjdXJpdHkgYXNzb2NpYXRpb25zLiBJIGhhdmUgYSBmZWVsaW5nIHNvbWV0aGluZyBpbiB0aGF0IGFyZWEgbWF5IGJlIHJlc3BvbnNpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI1MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjQ1LjY3NDY0NDg0NloiLCJTZXEiOjc0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwNzI1MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9uZXRsaW5rX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0zODM3PXN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTIzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5MjQ6c3RhdGljIHZvaWQgeGZybV9uZXRsaW5rX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MjUte1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDYxMj1zdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybV91c2VyX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MTYtXFx0XFx0Lmdyb3Vwc1xcdD0gWEZSTU5MR1JQX01BWCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjE3OlxcdFxcdC5pbnB1dFxcdD0geGZybV9uZXRsaW5rX3JjdixcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjE4LVxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjQ1LjcxNTcyMzI0OFoiLCJTZXEiOjc1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc5Nzk2OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFN0YWduYXRpb24qKlxuXG5SaWdodCwgdGhlcmUncyBhIGRlZmluaXRlIHNlbnNlIG9mICpzdGF0aWMqIGhlcmUuIE5vIHByb2dyZXNzLCBubyBvYnZpb3VzIGluZGljYXRvcnMgcG9pbnRpbmcgaW4gYW55IGRpcmVjdGlvbi4gV2hlbiBJIGhpdCBhIHdhbGwgbGlrZSB0aGlzLCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgbWV0aG9kaWNhbGx5IHRyYWNpbmcgdGhlIG1vc3QgbGlrZWx5IGN1bHByaXRzLiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCBpcyBhbiBleGFtaW5hdGlvbiBvZiB0aGUgYHhmcm1fc3RhdGVfd2Fsa2AgZnVuY3Rpb24uIEl04oCZcyB0aGUgZm91bmRhdGlvbmFsIGNvbXBvbmVudCBmb3IgdHJhdmVyc2luZyB0aGUgc2VjdXJpdHkgcG9saWN5IGRhdGFiYXNlLCBhbmQgYW55IHN0YWduYXRpb24gYXQgdGhpcyBzdGFnZSBvZiB0aGUgcHJvY2VzcyBsaWtlbHkgcmVsYXRlcyB0byBpc3N1ZXMgd2l0aCBob3cgdGhlIHN0YXRlIGluZm9ybWF0aW9uIGlzIGJlaW5nIGhhbmRsZWQgb3IgdXBkYXRlZCBkdXJpbmcgcG9saWN5IGxvb2t1cHMgb3IgdXBkYXRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHVuZGVyIHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIG9mIHRoaXMgaW5zdGFuY2UuIElzIGl0IGJsb2NraW5nPyBEZWFkbG9ja2VkPyBSdW5uaW5nIGludG8gc29tZSBlZGdlIGNhc2Ugd2l0aCBhIHN0YXRl4oCZcyBwcm9wZXJ0aWVzPyBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2OTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjo0OS4xOTU1MjI3OTNaIiwiU2VxIjo3NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjUxMjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc3RhdGVfd2Fsa1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jPTE2ODc9c3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2J5c3BpKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIHNwaSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjkwLVxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNjkxOlxcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKnc7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE2OTItXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MjY4ND1zdGF0aWMgYm9vbCBfX3hmcm1fc3RhdGVfZmlsdGVyX21hdGNoKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MDAtXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MDE6aW50IHhmcm1fc3RhdGVfd2FsayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MDItXFx0XFx0ICAgIGludCAoKmZ1bmMpKHN0cnVjdCB4ZnJtX3N0YXRlICosIGludCwgdm9pZCopLFxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MDUtXFx0c3RydWN0IHhmcm1fc3RhdGUgKnN0YXRlO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzA2OlxcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKng7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MDctXFx0aW50IGVyciA9IDA7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxMy1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2d2Fsay1cXHUwMDNlYWxsKSlcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjcxNDpcXHRcXHR4ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnN0YXRlX2FsbCwgc3RydWN0IHhmcm1fc3RhdGVfd2FsaywgYWxsKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxNS1cXHRlbHNlXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MTY6XFx0XFx0eCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNndhbGstXFx1MDAzZWFsbCwgc3RydWN0IHhmcm1fc3RhdGVfd2FsaywgYWxsKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxNy1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20oeCwgXFx1MDAyNm5ldC1cXHUwMDNleGZybS5zdGF0ZV9hbGwsIGFsbCkge1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDAtfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzQxOkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV93YWxrKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc0Mi1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc0Mzp2b2lkIHhmcm1fc3RhdGVfd2Fsa19pbml0KHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHU4IHByb3RvLFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzQ0LVxcdFxcdFxcdCAgc3RydWN0IHhmcm1fYWRkcmVzc19maWx0ZXIgKmZpbHRlcilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzUxLX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc1MjpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfd2Fsa19pbml0KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc1My1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc1NDp2b2lkIHhmcm1fc3RhdGVfd2Fsa19kb25lKHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc1NS17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc2NC19XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NjU6RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3dhbGtfZG9uZSk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NjYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjQ5LjIzODE3NzYyNFoiLCJTZXEiOjc3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg4Mzk5MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipTeW1ib2wgVmlzaWJpbGl0eSBhbmQgUG90ZW50aWFsIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGB4ZnJtX3N0YXRlX3dhbGtgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgaW4gbW9kdWxlcy4gVGhlcmVmb3JlLCB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBpcyBjcml0aWNhbCBmb3IgYnJvYWRlciBzeXN0ZW0gdW5kZXJzdGFuZGluZy4gTm93LCB0aGUga2V5IGZvY3VzIHN5bWJvbHMgdGhhdCBzcHJpbmcgdG8gbWluZCBhcmU6IGBlc3Bfb3V0cHV0X3RhaWxgLCBgZXNwNl9vdXRwdXRfdGFpbGAsIGBhaDZfb3V0cHV0YCwgYHhmcm02X2lucHV0X2FkZHJgLCBhbmQgYHhmcm1fb3V0cHV0YCwgYWxvbmcgd2l0aCB0aGUgZXhwb3J0ZWQgYHhmcm1fc3RhdGVfd2Fsa2AgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVsYXRlIHRvIHN0YXRlIHRyYXZlcnNhbCBhbmQgcGFja2V0IHByb2Nlc3Npbmcgd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yay4gVGhlIGZ1bmN0aW9ucyB3aXRoIGEgJzYnIGluIHRoZW0gbGlrZWx5IHJlZmVyIHRvIElQdjYgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLiBUaGlzIG1lYW5zIHRoZSBvdmVyYWxsIHByb2Nlc3MgaGFzIHRvIHdvcmsgZm9yIElQdjQsIElQdjYsIGFuZCBsaWtlbHkgZ2VuZXJpYyBJUCBhcyB3ZWxsLlxuXG5HaXZlbiB0aGF0IGNvbnRleHQsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBob3cgdGhpcyBhbGwgdGllcyBpbnRvIHRoZSBpbml0aWFsaXphdGlvbiwgc28gSSBzaG91bGQgbm93IGxvb2sgYXQgYGVzcGludGNwX2luaXRfc2tgIHRvIHNlZSBob3cgaXQncyBzZXR0aW5nIHRoaW5ncyB1cC4gVGhpcyBtaWdodCBnaXZlIG1lIGNsdWVzIHRvIGhvdyB0aGUgc3RhdGUgaXMgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIGxpbmtlZCB0byB0aGVzZSBvdXRwdXQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgwNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjUzLjYyNjU4MDMzMVoiLCJTZXEiOjc4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5ODYxOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXNwaW50Y3BfaW5pdF9za1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmM9NDM3PXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKmVzcGludGNwX3Byb3QsXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0MC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3JpZ19vcHMpO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NDQxOnN0YXRpYyBpbnQgZXNwaW50Y3BfaW5pdF9zayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NDIte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz01NjY9c3RhdGljIHN0cnVjdCB0Y3BfdWxwX29wcyBlc3BpbnRjcF91bHAgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTY4LVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTY5OlxcdC5pbml0ID0gZXNwaW50Y3BfaW5pdF9zayxcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU3MC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNjo1My42Njc1NzA2NjNaIiwiU2VxIjo3OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMDU2MzQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBTdGFnbmF0aW9uKipcblxuUmlnaHQsIHRoaXMgZmVlbHMuLi5zdHVjay4gTGlrZSB3ZSdyZSBoaXR0aW5nIGEgd2FsbCwgYW5kIG5vdGhpbmcncyBtb3ZpbmcuIEl0J3MgYSBzdGF0aWMgc3RhdGUsIHdoaWNoIGlzIG5ldmVyIGEgZ29vZCBzaWduLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmsgc3RhY2tzLiBNeSBndXQgdGVsbHMgbWUgc29tZXRoaW5nIGlzIGFtaXNzIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuXG5cbkxldCdzIGRpdmUgaW4uIFRoZSBmaXJzdCBsb2dpY2FsIHBvaW50IG9mIGludmVzdGlnYXRpb24gaXMgdGhlIFVzZXItTGV2ZWwgUHJvdG9jb2wgKFVMUCkgb3BlcmF0aW9ucywgc28gSSdsbCBjaGVjayBgdGNwX3VscF9vcHNgLiBUaGlzIHNob3VsZCBzaGVkIHNvbWUgbGlnaHQgb24gd2hldGhlciB0aGVyZSdzIGEgcHJvYmxlbSBhdCB0aGlzIGxheWVyLiBJdCdzIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiBiZWNhdXNlIGl0IGRpY3RhdGVzIGhvdyBUQ1AgaXMgaW50ZXJhY3Rpbmcgd2l0aCBzcGVjaWZpYyBVTFBzLCBhbmQgdGhlcmVmb3JlIGl0IGNvdWxkIHJldmVhbCBpc3N1ZXMgaW4gaXRzIGludGVyYWN0aW9uIHdpdGggdHJhbnNwb3J0IG9yIGFwcGxpY2F0aW9uIHByb3RvY29scy4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDEzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MzY6NTYuNzk4MTM2MTczWiIsIlNlcSI6ODAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTg4NDg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfcmVnaXN0ZXJfdWxwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuYz01NzI9dm9pZCBfX2luaXQgZXNwaW50Y3BfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NzUtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NzY6XFx0dGNwX3JlZ2lzdGVyX3VscChcXHUwMDI2ZXNwaW50Y3BfdWxwKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU3Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM2OjU2Ljg2MDAyNDYzWiIsIlNlcSI6ODEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzQ2ODE3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBNb2R1bGUgSW5pdGlhbGl6YXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgZXNwaW50Y3BfaW5pdGAuIFRoYXQncyB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgbW9kdWxlLCByaWdodD8gSSdsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIGhvb2sgZm9yIGRlYnVnZ2luZy5cblxuTm93LCBsZXQncyBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gSSByZW1lbWJlciBpdCBiZWluZyBvZiBpbnRlcmVzdC4gR29vZCwgaXQncyBub24tc3RhdGljISBUaGF0IG1ha2VzIGl0IGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUgZm9yIGEgZm9jdXMgc3ltYm9sLiBFYXN5IHRvIHJlZmVyZW5jZSBleHRlcm5hbGx5LCBhbmQgaXQgcHJvYmFibHkgZG9lcyBzb21ldGhpbmcgc2lnbmlmaWNhbnQuIEknbSBnb2luZyB0byB3YW50IHRvIHRyYWNrIGNhbGxzIHRvIGFuZCBmcm9tIHRoYXQgb25lLlxuXG5JJ2xsIGNoZWNrIGB4ZnJtX3N0YXRlX2NvbnN0cnVjdGAgYXMgd2VsbC4gSG1tLCBpdCdzIHN0YXRpYy4gVGhhdCBsaWtlbHkgbWVhbnMgaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gYW5kIHByb2JhYmx5IHdvbid0IGJlIGFzIGludGVyZXN0aW5nIGFzIGEgc3RhcnRpbmcgcG9pbnQsIGJ1dCBsZXQgbWUga2VlcCBhbiBleWUgb24gaXQuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGV4cG9ydGVkIGZ1bmN0aW9ucyBpbiBgeGZybV91c2VyLmNgLCBzaW5jZSB0aGF0J3Mgd2hlcmUgdXNlcmxhbmQgaW50ZXJhY3Rpb25zIGxpa2VseSBoYXBwZW4uIFBlcmhhcHMgdGhlcmUncyBhbiBpbnRlcmVzdGluZyBlbnRyeSBwb2ludCB0byBsb29rIGludG8gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzQ2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6MDEuMjM0NzA4NzYxWiIsIlNlcSI6ODIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDgyNzc3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2NTk9Y29uc3QgaW50IHhmcm1fbXNnX21pbltYRlJNX05SX01TR1RZUEVTXSA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2ODUtfTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjg2OkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fbXNnX21pbik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY4Ny1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2OTA9Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgeGZybWFfcG9saWN5W1hGUk1BX01BWCsxXSA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3MzItfTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzMzOkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1hX3BvbGljeSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzczNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6MDEuMjc1NTQwNTYyWiIsIlNlcSI6ODMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMjk0MjE5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIENvZGViYXNlIGZvciBQb3RlbnRpYWwgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBiYWNrIGludG8gdGhpcyBYRlJNIGNvZGUuIEkndmUgZ290IHRvIGZpbmQgc29tZSByZWxldmFudCBmdW5jdGlvbnMgdG8gZm9jdXMgb24sIGFuZCBJJ20gc3RhcnRpbmcgd2l0aCBhIHF1aWNrIHN3ZWVwIHRvIGVzdGFibGlzaCBhIG1lbnRhbCBtYXAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGB4ZnJtX3VzZXIuY2AgZG9lc24ndCBleHBvc2UgYW55IGV4cG9ydGVkIGZ1bmN0aW9ucywgd2hpY2ggaXMgdHlwaWNhbCBmb3IgYSBtb2R1bGUgbGlrZSB0aGlzLlxuXG5MZXQncyByZXZpc2l0IGB4ZnJtX2FkZF9zYWAsIHJlbWVtYmVyaW5nIGl0J3MgY2FsbGVkIGZyb20gYHhmcm1fZGlzcGF0Y2hgLiBIbW0sIHdoYXQgYWJvdXQgYHhmcm1fdXNlcl9yY3ZfbXNnYD8gVGhhdCBvbmUncyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgZGlyZWN0IGFwcGxpY2FiaWxpdHkuIEFuZCBgeGZybV9uZXRsaW5rX3JjdmA/IEFsc28gc3RhdGljLiBNb3Zpbmcgb24uXG5cbkZvciBrZWVwaW5nIHRoZSBjb2RlIHNpbXBsZSwgbGV0J3MgbG9vayBmb3IgZnVuY3Rpb25zIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6IGB4ZnJtX25hdF9rZWVwYWxpdmUuY2AgLSBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBgeGZybV9zdGF0ZV93YWxrYCB3b3JraW5nIHRoZXJlLiBGb3IgYHhmcm1fb3V0cHV0LmNgLCBgeGZybV9vdXRwdXRgIHNlZW1zIHByb21pc2luZy4gRm9yIGB4ZnJtNl9pbnB1dC5jYCwgSSdsbCBwcm9iYWJseSB1c2UgYHhmcm02X2lucHV0X2FkZHJgLiBUaGVuLCBsZXQncyBjb25zaWRlciBmdW5jdGlvbnMgd2l0aGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6IGBlc3A0LmNgIC0gYGVzcF9vdXRwdXRfdGFpbGAgc2hvdWxkIGJlIHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBGb3IgYGVzcDYuY2AgbGV0J3Mgd29yayB3aXRoIGBlc3A2X291dHB1dF90YWlsYCwgYW5kIGBhaDYuY2AgLSBJJ20gdGhpbmtpbmcgSSBzaG91bGQgdXNlIGBhaDZfb3V0cHV0YCBmb3IgdGhhdCBvbmUuXG5cbk9rYXksIGJhY2sgdG8gYGVzcGludGNwLmNgLiBMZXQncyByZS1leGFtaW5lIGBlc3BpbnRjcF9yY3ZgLiBJdCdzIHN0YXRpYy4gRmluZSwgbm93IGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYGVzcGludGNwLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDM0MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNzowOC42MDQ5NjU5MjJaIiwiU2VxIjo4NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTEzMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jPTE3Mj1pbnQgZXNwaW50Y3BfcXVldWVfb3V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTg1LX1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjE4NjpFWFBPUlRfU1lNQk9MX0dQTChlc3BpbnRjcF9xdWV1ZV9vdXQpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMTg3LVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz0yNzM9aW50IGVzcGludGNwX3B1c2hfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMzA0LX1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjMwNTpFWFBPUlRfU1lNQk9MX0dQTChlc3BpbnRjcF9wdXNoX3NrYik7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMDYtXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jPTQzMT1ib29sIHRjcF9pc191bHBfZXNwKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDM0LX1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjQzNTpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfaXNfdWxwX2VzcCk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00MzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM3OjA4LjY1MTQ4NDE5MloiLCJTZXEiOjg1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTQ0OTc0NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgSW1wYWN0IG9mIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIGBlc3BpbnRjcF9xdWV1ZV9vdXRgIGFuZCBgZXNwaW50Y3BfcHVzaF9za2JgIGFyZSBib3RoIGV4cG9ydGVkIGZ1bmN0aW9ucywgYW5kIEknbSBsb29raW5nIGF0IHRoZXNlIHJlY2VudCBjaGFuZ2VzIGluIGBlc3BpbnRjcC5jYC4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW55IGRpcmVjdCBjb25uZWN0aW9uLiBUaGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IHdpdGhpbiBgaGFuZGxlX2VzcGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBlc3BpbnRjcF9yY3ZgLCBhbmQgYGVzcGludGNwX2Nsb3NlYCwgY2FsbGVkIGZyb20gYGVzcGludGNwX3Byb3QtXHUwMDNlY2xvc2VgLlxuXG5Ob3csIGBlc3BpbnRjcF9xdWV1ZV9vdXRgIGFuZCBgZXNwaW50Y3BfcHVzaF9za2JgIGFyZSBib3RoIHVzZWQgZm9yIHNlbmRpbmcgZGF0YSwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhleSdyZSBsaWtlbHkgcmVsYXRlZCB0byBvdXRib3VuZCB0cmFmZmljLiBDb25zaWRlcmluZyB0aGUgY2hhbmdlcywgaXQgc2VlbXMgdW5saWtlbHkgdGhhdCBgZXNwaW50Y3BfcXVldWVfb3V0YCBpcyAqZGlyZWN0bHkqIHJlbGF0ZWQgdG8gYGhhbmRsZV9lc3BgIG9yIGBlc3BpbnRjcF9jbG9zZWAgaW4gdGVybXMgb2YgaG93IHRoZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgYWx0aG91Z2ggdGhleSdyZSBhbGwgZGVmaW5lZCB3aXRoaW4gdGhlIHNhbWUgc291cmNlIGZpbGUuIFRoZXJlZm9yZSwgZGVzcGl0ZSB0aGUgYXBwYXJlbnQgZGlzdGluY3Rpb24sIEknbSBnb2luZyB0byBpbmNsdWRlIGBlc3BpbnRjcF9xdWV1ZV9vdXRgIGFuZCBgZXNwaW50Y3BfcHVzaF9za2JgIGluIG15IGFuYWx5c2lzIHRvIHJ1bGUgb3V0IGFueSBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIHNpZGUgZWZmZWN0cy5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgZnVuY3Rpb24gYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzMjIsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6MTUuNzk2NDYyODgxWiIsIlNlcSI6ODYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAwODAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNzk9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9za19maW5pKHN0cnVjdCBzb2NrX2JoX2xvY2tlZCBfX3BlcmNwdSAqc29ja3MpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yODYtXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6Mjg3OnZvaWQgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjg4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6MTUuODQ1NDc1WiIsIlNlcSI6ODcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDg3MTU5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTdGF0aWMgTmF0dXJlIG9mIFhGUk0gRnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBYRlJNIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSdtIG5vdGljaW5nIGlzIHRoYXQgaXQncyBub3QgYWxsIHN0YXRpYyBmdW5jdGlvbnMuIE5vdyB0aGF0IEkgaGF2ZSB0aGlzIG9ic2VydmF0aW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3Mgbm90IHN0YXRpYyBhbmQgd2h5LiBcblxuTGV0IG1lIGNoZWNrIGB4ZnJtX3N0YXRlX2NvbnN0cnVjdGAuIFllcCwgdGhhdCdzIHN0YXRpYy4gSG1tLCBva2F5LCBub3Qgd2hhdCBJJ20gbG9va2luZyBmb3IgdGhlcmUuIExldCdzIG1vdmUgb24uIEhvdyBhYm91dCBgeGZybV9hZGRfc2FgPyBBbHNvIHN0YXRpYy4gT2theSwgc3RhcnRpbmcgdG8gc2VlIGEgcGF0dGVybiBoZXJlLCBidXQgSSBoYXZlbid0IHF1aXRlIGZvdW5kIHRoZSBwaWVjZSBJIG5lZWQuIEFscmlnaHQsIGxldCBtZSB0cnkgb25lIG1vcmUgLSBgeGZybV91c2VyX3Jjdl9tc2dgLiBZZXAsIHRoYXQncyBzdGF0aWMgYXMgd2VsbC4gVGhpcyBpcyBxdWl0ZSBzdHJhbmdlLCBpZiBJIGRpZG4ndCBrbm93IGJldHRlciwgSSdkIHNheSB0aGF0IGV2ZXJ5dGhpbmcgaXMgc3RhdGljLlxuXG5BbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gYmVjb21lczogaXMgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbiBgeGZybV91c2VyLmNgPyBUaGUgYXNzdW1wdGlvbiB0aGF0IGl0J3MgYWxsIHN0YXRpYyBzZWVtcyB0byBiZSBob2xkaW5nIHRydWUsIHNvIGxldCBtZSBkbyBhIGRlZXBlciBkaXZlIGludG8gdGhlIGZpbGUgdG8gdmVyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTgwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6MjAuNzU0MTk0MTA1WiIsIlNlcSI6ODgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTEzNDA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2NTk9Y29uc3QgaW50IHhmcm1fbXNnX21pbltYRlJNX05SX01TR1RZUEVTXSA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2ODUtfTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjg2OkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fbXNnX21pbik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY4Ny1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2OTA9Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgeGZybWFfcG9saWN5W1hGUk1BX01BWCsxXSA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3MzItfTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzMzOkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1hX3BvbGljeSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzczNC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2NjA9c3RhdGljIHZvaWQgX19leGl0IHhmcm1fdXNlcl9leGl0KHZvaWQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjY1LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2NjY6bW9kdWxlX2luaXQoeGZybV91c2VyX2luaXQpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2Njc6bW9kdWxlX2V4aXQoeGZybV91c2VyX2V4aXQpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2Njg6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJYRlJNIFVzZXIgaW50ZXJmYWNlXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDY2OTpNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDY3MDpNT0RVTEVfQUxJQVNfTkVUX1BGX1BST1RPKFBGX05FVExJTkssIE5FVExJTktfWEZSTSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM3OjIwLjgyMzMzMjMzMVoiLCJTZXEiOjg5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzM0Nzg5MDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFwcHJvYWNoIHRvIEFuYWx5emluZyB0aGUgQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBsZXQncyBrZWVwIGl0IGVmZmljaWVudC5cIiBUaGUgbm90ZSBhYm91dCBubyBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgeGZybV91c2VyLmNgLCBiZXNpZGVzIGluaXQvZXhpdCwgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IG1lYW5zIEkgY2FuIHByb2JhYmx5IGp1c3QgaWdub3JlIHRoYXQgZmlsZSBhcyBhIGZvY3VzIHBvaW50LCBhdCBsZWFzdCBmb3Igbm93LiBJIGNhbiBlaXRoZXIgdXNlIGB4ZnJtX3N0YXRlX3dhbGtgIHdoaWNoIHJlc2lkZXMgaW4gYHhmcm1fc3RhdGUuY2AsIG9yIGp1c3QgYXZvaWQgZm9jdXNpbmcgdGhlcmUgYXQgYWxsLlxuXG5Ob3csIGxldCdzIG1vdmUgZm9yd2FyZCBhbmQgdHJ5IHRvIGlkZW50aWZ5IHRoZSByZWFsIGZvY2FsIHBvaW50cy4gQmFzZWQgb24gdGhlIHRhc2sgaW4gZnJvbnQgb2YgbWUsIEkgbmVlZCB0byBsaXN0IHRoZSBmb2N1cyBzeW1ib2xzLiBJJ3ZlIGNvbXBpbGVkIHRoaXMgbGlzdDpcblxuKiAgIGBlc3Bfb3V0cHV0X3RhaWxgXG4qICAgYGVzcDZfb3V0cHV0X3RhaWxgXG4qICAgYHhmcm02X2lucHV0X2FkZHJgXG4qICAgYHhmcm1fb3V0cHV0YFxuKiAgIGBlc3BpbnRjcF9xdWV1ZV9vdXRgXG4qICAgYGVzcGludGNwX3B1c2hfc2tiYFxuKiAgIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGBcblxuT2theSwgbm93IGxldCdzIHNlZSBpZiB0aGlzIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgaXMgYWN0dWFsbHkgZXhwb3NlZC4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3OTUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6MjguNTU4MTI1MTQyWiIsIlNlcSI6OTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDcwMTA5OTM0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6MzEuMDI4MjQxNTQ2WiIsIlNlcSI6OTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Mzg3MTQxMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBWYXJpYWJsZSBWaXNpYmlsaXR5KipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgYSBwYXJ0aWN1bGFyIHZhcmlhYmxlIGlzbid0IGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIG1hcmtlZCBhcyBleHBvcnRlZC4gVGhhdCBzdWdnZXN0cyBpdCdzIGxpa2VseSBzY29wZWQgdG8gaXRzIGN1cnJlbnQgbW9kdWxlLCB3aGljaCBpcyB0aGUgaW1tZWRpYXRlIGlzc3VlLiBIb3dldmVyLCB3aGlsZSBpdCdzIG5vbi1zdGF0aWMsIGl0IGNhbiBzdGlsbCBleGlzdCBhdCB0aGUgZmlsZSBzY29wZS5cblxuVGhlbiB0aGUgcXVlc3Rpb24gYmVjb21lcywgaXMgYGFoNl9vdXRwdXRgIGV4cG9ydGVkPyBDaGVja2luZyBmb3IgZXhwb3J0IGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVjYXVzZSB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCdzIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLiBJZiBpdCBpcywgdGhlbiB0aGUgc2NvcGUgb2YgaXRzIHVzZSB3aWxsIGhhdmUgdG8gYmUgaW5zcGVjdGVkIGZ1cnRoZXIuIE90aGVyd2lzZSwgdGhlcmUgbWF5IGJlIGFuIG9wcG9ydHVuaXR5IGZvciBhIG5hbWVzcGFjZSBjb2xsaXNpb24uIEVpdGhlciB3YXksIGl0J3Mgc29tZXRoaW5nIHRoYXQgSSdsbCBuZWVkIHRvIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyODIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNzozNC42NjY5NTkyMDdaIiwiU2VxIjo5MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjgwNjk3NTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmFoNl9vdXRwdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM3OjM3LjIzNTA1MDIyOVoiLCJTZXEiOjkzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY1MTQ3MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHRoaW5ncyBmZWVsIHN0YWduYW50LCBhIGJpdCBmcm96ZW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdGhhdCBzb21ldGhpbmcncyBub3QgbW92aW5nIGFzIGl0IHNob3VsZC4gTGV0J3MgZGlnIGRlZXBlci4gVGhlIGluc3RpbmN0IGlzIHRvIGFzc3VtZSB0aGF0IHRoZSBwcm9ibGVtIGNvdWxkIGJlIGR1ZSB0byBzdGF0aWMgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcy4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGBhaDYuY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5LCBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucy4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0J3MgYSBxdWljayB3aW4sIGhvcGVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNzo0MC44MDAyMDE3NDZaIiwiU2VxIjo5NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NTY3MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvYWg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvYWg2LmM9ODIxPXN0YXRpYyB2b2lkIF9fZXhpdCBhaDZfZmluaSh2b2lkKVxcbi0tXFxubmV0L2lwdjYvYWg2LmMtODI4LVxcbm5ldC9pcHY2L2FoNi5jOjgyOTptb2R1bGVfaW5pdChhaDZfaW5pdCk7XFxubmV0L2lwdjYvYWg2LmM6ODMwOm1vZHVsZV9leGl0KGFoNl9maW5pKTtcXG5uZXQvaXB2Ni9haDYuYy04MzEtXFxubmV0L2lwdjYvYWg2LmM6ODMyOk1PRFVMRV9ERVNDUklQVElPTihcXFwiSVB2NiBBSCB0cmFuc2Zvcm1hdGlvbiBoZWxwZXJzXFxcIik7XFxubmV0L2lwdjYvYWg2LmM6ODMzOk1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5uZXQvaXB2Ni9haDYuYzo4MzQ6TU9EVUxFX0FMSUFTX1hGUk1fVFlQRShBRl9JTkVUNiwgWEZSTV9QUk9UT19BSCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM3OjQwLjg5NDc3NTg1NloiLCJTZXEiOjk1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk1NzUyMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBFU1AvQUggRnVuY3Rpb25hbGl0eSBpbiBgYWg2LmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFoNi5jYCBhbmQgaW1tZWRpYXRlbHkgbm90aWNpbmcgYSBrZXkgY29uc3RyYWludDogYXNpZGUgZnJvbSB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQgZnVuY3Rpb25zLCB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGFueSBzdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LCBhcyBpdCBnaXZlcyB1cyBhIGNsZWFyIGxpc3Qgb2Ygd2hhdCB3ZSAqY2FuKiB1dGlsaXplLiBTcGVjaWZpY2FsbHksIEkgc2VlIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgcmVsZXZhbnQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgaW5jbHVkaW5nOiBgZXNwX291dHB1dF90YWlsYCwgYGVzcDZfb3V0cHV0X3RhaWxgLCBgeGZybTZfaW5wdXRfYWRkcmAsIGB4ZnJtX291dHB1dGAsIGBlc3BpbnRjcF9xdWV1ZV9vdXRgLCBgZXNwaW50Y3BfcHVzaF9za2JgLCBhbmQgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gVGhlc2UgYXJlIHRoZSB0b29scyBhdCBvdXIgZGlzcG9zYWwuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBlbnN1cmUgb3VyIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQgYXBwcm9wcmlhdGVseSB0byBlbmFibGUgdGhlIHJlcXVpcmVkIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYFhGUk1gLCBgWEZSTV9VU0VSYCwgYElORVRfRVNQYCwgYElORVQ2X0VTUGAsIGFuZCBgSU5FVDZfQUhgIGFyZSBhbGwgZW5hYmxlZCBhbmQgcGxheWluZyBuaWNlbHkgdG9nZXRoZXIuIEFsc28gSSdsbCBoYXZlIHRvIGNvbnNpZGVyIGBYRlJNX0VTUElOVENQYCBzaW5jZSB0aGF0J3MgZGlyZWN0bHkgdGllZCB0byBgSU5FVF9FU1BJTlRDUGAgYW5kIGBJTkVUNl9FU1BJTlRDUGAsIHdoaWNoIGlzIGxpa2VseSB0aGUgYXJlYSBvZiBmb2N1cy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBvciBub3QgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgIGFyZSBwcm9wZXJseSBlbmFibGVkIGFuZCBjb25maWd1cmVkLCBiZWNhdXNlIHRoZXkgc2VlbSBjcml0aWNhbCBmb3IgdGhlIEVTUC9UQ1AgZnVuY3Rpb25hbGl0eSB0aGF0IEknbSB0YXJnZXRpbmcuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhvc2UgdHdvIGFyZSBzZXQgY29ycmVjdGx5LCB0aGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5MTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6NDYuMDkwNTMxNjc4WiIsIlNlcSI6OTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY4NTExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVF9FU1BJTlRDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzgzLVxcdGJvb2wgXFxcIklQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzc6NDYuMTQzMjIwNjg2WiIsIlNlcSI6OTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTU0NjkxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkVTUElOVENQIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIHRoZSB1c2VyLWZhY2luZyBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGBJTkVUX0VTUElOVENQYCBhbmQgYElORVQ2X0VTUElOVENQYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuIEJ1dCBsZXQncyBiZSBwcmFnbWF0aWMgaGVyZTsgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcuIEl04oCZcyB0aGUgdXN1YWwgZGFuY2UsIG1ha2luZyBzdXJlIHRoZSB1c2VyLXZpc2libGUgc2V0dGluZ3MgYXJlIGNvcnJlY3RseSBleHBvc2VkIGFuZCBiZWhhdmUgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGRyaWxsIGRvd24uIEknbGwgZm9jdXMgbXkgaW1tZWRpYXRlIGF0dGVudGlvbiBvbiBgSU5FVDZfRVNQSU5UQ1BgIHNwZWNpZmljYWxseSB0byBlbnN1cmUgdGhhdCB0aGUgSVB2NiB2YXJpYW50IGlzIGJlaGF2aW5nIGFjY29yZGluZyB0byBteSBleHBlY3RhdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBpdCdzIHBsYXlpbmcgbmljZWx5IHdpdGggdGhlIElQdjQgaW1wbGVtZW50YXRpb24uIE5lZWQgYSBiYXNlbGluZSwgYWZ0ZXIgYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU5NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM3OjUxLjAzODY5MTg3NFoiLCJTZXEiOjk4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzMDA1MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVQ2X0VTUElOVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctODktXFxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTkxLVxcdGJvb2wgXFxcIklQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozNzo1MS4xMTc5OTY4NjdaIiwiU2VxIjo5OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExMDA5OTY1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIFN5bWJvbHMgZm9yIElQc2VjIE1vZHVsZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIElQc2VjIGNvZGUgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYW5kIGtleSBmdW5jdGlvbiBzeW1ib2xzLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGNvbmZpZ3MgaWRlbnRpZmllZC4gV2UndmUgZ290IGBYRlJNYCwgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGBJTkVUNl9FU1BgLCBgSU5FVDZfQUhgLCBgSU5FVF9FU1BJTlRDUGAsIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLiBXZSBhbHJlYWR5IGtub3cgYFhGUk1fTkFUX0tFRVBBTElWRWAgaXNuJ3QgYSBkaXJlY3QgY29uZmlnLCBidXQgaXQncyBjb21waWxlZCB3aXRoIGBDT05GSUdfWEZSTWAgZW5hYmxlZCwgc28gdGhhdCBtYWtlcyBzZW5zZS5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgaG93IHRoZXNlIGNvbmZpZ3MgcmVsYXRlIHRvIHRoZSBzb3VyY2UgZmlsZXM6IGBlc3A0LmNgIG1hcHMgdG8gYElORVRfRVNQYCwgYGFoNi5jYCB0byBgSU5FVDZfQUhgLCBgZXNwNi5jYCB0byBgSU5FVDZfRVNQYCwgYHhmcm02X2lucHV0LmNgIHRvIGBYRlJNYCAodmlhIHRoZSBpcHY2LSQoQ09ORklHX1hGUk0pIGxpbmUpLCBgZXNwaW50Y3AuY2AgZ2V0cyBgWEZSTV9FU1BJTlRDUGAgKHNlbGVjdGVkIGJ5IGBJTkVUX0VTUElOVENQYCBhbmQgYElORVQ2X0VTUElOVENQYCksIGB4ZnJtX25hdF9rZWVwYWxpdmUuY2AgdG8gYFhGUk1gIGFuZCBgeGZybV9vdXRwdXQuY2AgYW5kIGB4ZnJtX3VzZXIuY2AgdG8gYFhGUk1fVVNFUmBcblxuVGhlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBwbGFjZSBhbmQgYWNjZXNzaWJsZS4gTm93LCBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb24gc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgYW5hbHlzaXMuIEkndmUgY29tcGlsZWQgdGhlIGZvbGxvd2luZyBsaXN0OiBgZXNwX291dHB1dF90YWlsYCwgYGVzcDZfb3V0cHV0X3RhaWxgLCBgeGZybTZfaW5wdXRfYWRkcmAsIGB4ZnJtX291dHB1dGAsIGBlc3BpbnRjcF9xdWV1ZV9vdXRgLCBgZXNwaW50Y3BfcHVzaF9za2JgLCBhbmQgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlc2UgYXJlIGdvb2QgZm9jdXMgc3ltYm9scy4gTGV0J3Mgc3RhcnQgd2l0aCBgeGZybV9uYXRfa2VlcGFsaXZlLmNgLiBJIGNvbnNpZGVyZWQgYHhmcm1fc3RhdGVfd2Fsa2AsIGJ1dCB0aGF0J3MgaW4gYHhmcm1fc3RhdGUuY2AgYW5kIHdhc24ndCBjaGFuZ2VkLiBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgICppcyogaW4gYHhmcm1fbmF0X2tlZXBhbGl2ZS5jYCBhbmQgaXMgbm9uLXN0YXRpYywgc28gaXQgbG9va3MgcHJvbWlzaW5nLlxuXG5JJ2xsIGNoZWNrIGB4ZnJtX291dHB1dF9yZXN1bWVgIHZlcnN1cyBgeGZybV9vdXRwdXRgLiBCb3RoIGB4ZnJtX291dHB1dF9yZXN1bWVgIGFuZCBgeGZybV9vdXRwdXRgIGFyZSBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYyBzbyBJIGhhdmUgYSBjaG9pY2UuXG5cbkFuZCBgeGZybTZfcmN2YCB2cyBgeGZybTZfaW5wdXRfYWRkcmAsIHNhbWUgdGhpbmcgLSBib3RoIGFyZSBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgSSBjYW4gdXNlIGVpdGhlci5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBleHBvcnQgc3RhdHVzIG9mIHRoZSBvdGhlciBmb2N1cyBzeW1ib2xzLiBPa2F5LCBgZXNwX291dHB1dF90YWlsYCwgYW5kIGBlc3A2X291dHB1dF90YWlsYCBhcmUgYm90aCBleHBvcnRlZC4gYGVzcGludGNwX3F1ZXVlX291dGAgYW5kIGBlc3BpbnRjcF9wdXNoX3NrYmAgYXJlIGV4cG9ydGVkIHRvby4gYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCBpcyAqbm90KiBleHBvcnRlZCwgYnV0IGl0J3Mgbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZCBlbm91Z2guIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBjaGFpbiB0byBzZWUgd2hlcmUgaXQgZ2V0cyBjYWxsZWQgZnJvbSwgaXQgaXMgbm90IHVzZWQgaW4gYW55IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgYWxzbyBub3RpY2VkIHRoYXQgdGhlcmUgYXJlIG5vdCBhbnkgbm9uLXN0YXRpYyBzeW1ib2xzIGluIGB4ZnJtX3VzZXIuY2AuXG5cbk9rYXksIHNvIHRoZSBmaW5hbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgcmVtYWluczogYGVzcF9vdXRwdXRfdGFpbGAsIGBlc3A2X291dHB1dF90YWlsYCwgYHhmcm02X2lucHV0X2FkZHJgLCBgeGZybV9vdXRwdXRgLCBgZXNwaW50Y3BfcXVldWVfb3V0YCwgYGVzcGludGNwX3B1c2hfc2tiYCwgYW5kIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAuIE5vdywgSSdsbCB0cmFjZSB0aHJvdWdoIHRoZSBjb2RlYmFzZSB0byBzZWUgaG93IHRoZXNlIHJlbGF0ZSBhbmQsIHNwZWNpZmljYWxseSwgaWYgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDkzMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozODowMi4yMTg5OTY2NDhaIiwiU2VxIjoxMDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcyOTA4NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3hmcm0uaD0yMzc0PWludCB4ZnJtX25hdF9rZWVwYWxpdmVfbmV0X2Zpbmkoc3RydWN0IG5ldCAqbmV0KTtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3NTp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjM3Ni1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTI3OT1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NrX2Zpbmkoc3RydWN0IHNvY2tfYmhfbG9ja2VkIF9fcGVyY3B1ICpzb2NrcylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI4Ni1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyODc6dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yODgte1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTgxMT1pbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MzItXFx0XFx0bmV0LVxcdTAwM2V4ZnJtLnN0YXRlX251bS0tO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo4MzM6XFx0XFx0eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoeCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTgzNC1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTcyMz1zdGF0aWMgdm9pZCBfX3hmcm1fc3RhdGVfaW5zZXJ0KHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE3NjctXFx0eGZybV9oYXNoX2dyb3dfY2hlY2sobmV0LCB4LVxcdTAwM2VieWRzdC5uZXh0ICE9IE5VTEwpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNzY4OlxcdHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHgpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNzY5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzg6MDQuMzkxOTE0ODc3WiIsIlNlcSI6MTAxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU5ODY4NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZGlyZWN0IHJlZmxlY3Rpb24gb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgWEZSTSBDb2RlYmFzZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIHBvaW50cyB0byBhIGNhbGwgZnJvbSBgeGZybV9zdGF0ZS5jYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBicm9hZGVyIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGB4ZnJtX3N0YXRlX3dhbGtgIGlzIGFjdHVhbGx5IGludm9rZWQuIFRoaXMgaXMgd2hlcmUgSSBnbyBkaWdnaW5nIHRocm91Z2ggdGhlIGNvZGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyB0byBzZWUgd2hlcmUgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBnaXZlIG1lIHRoZSBpbnNpZ2h0cyB0aGF0IEkgbmVlZC4gVGhpcyBpcyBob3cgSSBidWlsZCB0aGUgbWVudGFsIG1vZGVsIHRvIHNvbHZlIHRoZSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcxMzEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzozODowNy4zNTE3ODgyMDRaIiwiU2VxIjoxMDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc5MTI1MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc3RhdGVfd2Fsa1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC94ZnJtLmgtMTIzLVxcbmluY2x1ZGUvbmV0L3hmcm0uaDoxMjQ6c3RydWN0IHhmcm1fc3RhdGVfd2FsayB7XFxuaW5jbHVkZS9uZXQveGZybS5oLTEyNS1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0YWxsO1xcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTE5MD1zdHJ1Y3QgeGZybV9zdGF0ZSB7XFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmgtMjE3LVxcdC8qIEtleSBtYW5hZ2VyIGJpdHMgKi9cXG5pbmNsdWRlL25ldC94ZnJtLmg6MjE4OlxcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGtcXHRrbTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjE5LVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTE2OTU9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fc3lzY3RsX2Zpbmkoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oLTE2OTktXFxuaW5jbHVkZS9uZXQveGZybS5oOjE3MDA6dm9pZCB4ZnJtX3N0YXRlX3dhbGtfaW5pdChzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLCB1OCBwcm90byxcXG5pbmNsdWRlL25ldC94ZnJtLmgtMTcwMS1cXHRcXHRcXHQgIHN0cnVjdCB4ZnJtX2FkZHJlc3NfZmlsdGVyICpmaWx0ZXIpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaDoxNzAyOmludCB4ZnJtX3N0YXRlX3dhbGsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLFxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNzAzLVxcdFxcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgeGZybV9zdGF0ZSAqLCBpbnQsIHZvaWQqKSwgdm9pZCAqKTtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MTcwNDp2b2lkIHhmcm1fc3RhdGVfd2Fsa19kb25lKHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHN0cnVjdCBuZXQgKm5ldCk7XFxuaW5jbHVkZS9uZXQveGZybS5oLTE3MDUtc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0KTtcXG4tLVxcbm5ldC9rZXkvYWZfa2V5LmM9NDU9c3RydWN0IHBma2V5X3NvY2sge1xcbi0tXFxubmV0L2tleS9hZl9rZXkuYy01Ny1cXHRcXHRcXHRzdHJ1Y3QgeGZybV9wb2xpY3lfd2Fsa1xcdHBvbGljeTtcXG5uZXQva2V5L2FmX2tleS5jOjU4OlxcdFxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGtcXHRzdGF0ZTtcXG5uZXQva2V5L2FmX2tleS5jLTU5LVxcdFxcdH0gdTtcXG4tLVxcbm5ldC9rZXkvYWZfa2V5LmM9MTgzND1zdGF0aWMgaW50IHBma2V5X2R1bXBfc2Eoc3RydWN0IHBma2V5X3NvY2sgKnBmaylcXG4tLVxcbm5ldC9rZXkvYWZfa2V5LmMtMTgzNi1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChcXHUwMDI2cGZrLVxcdTAwM2Vzayk7XFxubmV0L2tleS9hZl9rZXkuYzoxODM3OlxcdHJldHVybiB4ZnJtX3N0YXRlX3dhbGsobmV0LCBcXHUwMDI2cGZrLVxcdTAwM2VkdW1wLnUuc3RhdGUsIGR1bXBfc2EsICh2b2lkICopIHBmayk7XFxubmV0L2tleS9hZl9rZXkuYy0xODM4LX1cXG4tLVxcbm5ldC9rZXkvYWZfa2V5LmM9MTg0MD1zdGF0aWMgdm9pZCBwZmtleV9kdW1wX3NhX2RvbmUoc3RydWN0IHBma2V5X3NvY2sgKnBmaylcXG4tLVxcbm5ldC9rZXkvYWZfa2V5LmMtMTg0My1cXG5uZXQva2V5L2FmX2tleS5jOjE4NDQ6XFx0eGZybV9zdGF0ZV93YWxrX2RvbmUoXFx1MDAyNnBmay1cXHUwMDNlZHVtcC51LnN0YXRlLCBuZXQpO1xcbm5ldC9rZXkvYWZfa2V5LmMtMTg0NS19XFxuLS1cXG5uZXQva2V5L2FmX2tleS5jPTE4NDc9c3RhdGljIGludCBwZmtleV9kdW1wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNhZGJfbXNnICpoZHIsIHZvaWQgKiBjb25zdCAqZXh0X2hkcnMpXFxuLS1cXG5uZXQva2V5L2FmX2tleS5jLTE4OTMtXFx0cGZrLVxcdTAwM2VkdW1wLmRvbmUgPSBwZmtleV9kdW1wX3NhX2RvbmU7XFxubmV0L2tleS9hZl9rZXkuYzoxODk0OlxcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFxcdTAwMjZwZmstXFx1MDAzZWR1bXAudS5zdGF0ZSwgcHJvdG8sIGZpbHRlcik7XFxubmV0L2tleS9hZl9rZXkuYy0xODk1LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cGZrLVxcdTAwM2VkdW1wX2xvY2spO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MjI3PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMzAtXFx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4O1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIzMTpcXHRzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrIHdhbGs7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjMyLVxcdHN0cnVjdCBuZXQgKm5ldDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIzOS1cXHRuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQwOlxcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFxcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQxOlxcdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFxcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXFx1MDAyNmN0eCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQyOlxcdHhmcm1fc3RhdGVfd2Fsa19kb25lKFxcdTAwMjZ3YWxrLCBuZXQpO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0My1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhdGUsIHRtcCwgXFx1MDAyNmN0eC5zdGF0ZXMsIGxpc3QpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xNjg3PXN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2xvb2t1cF9ieXNwaShzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUzMiBzcGksXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTY5MC1cXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTY5MTpcXHRzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3O1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjkyLVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTI2ODQ9c3RhdGljIGJvb2wgX194ZnJtX3N0YXRlX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzAwLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzAxOmludCB4ZnJtX3N0YXRlX3dhbGsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzAyLVxcdFxcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgeGZybV9zdGF0ZSAqLCBpbnQsIHZvaWQqKSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzA1LVxcdHN0cnVjdCB4ZnJtX3N0YXRlICpzdGF0ZTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjcwNjpcXHRzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp4O1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzA3LVxcdGludCBlcnIgPSAwO1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MTMtXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNndhbGstXFx1MDAzZWFsbCkpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MTQ6XFx0XFx0eCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5zdGF0ZV9hbGwsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGssIGFsbCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MTUtXFx0ZWxzZVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzE2OlxcdFxcdHggPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ3YWxrLVxcdTAwM2VhbGwsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGssIGFsbCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MTctXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKHgsIFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0uc3RhdGVfYWxsLCBhbGwpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzQwLX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc0MTpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfd2Fsayk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDItXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NDM6dm9pZCB4ZnJtX3N0YXRlX3dhbGtfaW5pdChzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLCB1OCBwcm90byxcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc0NC1cXHRcXHRcXHQgIHN0cnVjdCB4ZnJtX2FkZHJlc3NfZmlsdGVyICpmaWx0ZXIpXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc1MS19XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NTI6RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3dhbGtfaW5pdCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NTMtXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NTQ6dm9pZCB4ZnJtX3N0YXRlX3dhbGtfZG9uZShzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrLCBzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NTUte1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NjQtfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzY1OkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV93YWxrX2RvbmUpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzY2LVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MTUzNT1zdGF0aWMgaW50IHhmcm1fZHVtcF9zYV9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTM2LXtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTM3OlxcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGsgPSAoc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqKSBcXHUwMDI2Y2ItXFx1MDAzZWFyZ3NbMV07XFxubmV0L3hmcm0veGZybV91c2VyLmMtMTUzOC1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjYi1cXHUwMDNlc2tiLVxcdTAwM2VzaztcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1NDEtXFx0aWYgKGNiLVxcdTAwM2VhcmdzWzBdKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1NDI6XFx0XFx0eGZybV9zdGF0ZV93YWxrX2RvbmUod2FsaywgbmV0KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTQzLVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MTU0Nj1zdGF0aWMgaW50IHhmcm1fZHVtcF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTQ4LVxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1NDk6XFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsayA9IChzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICopIFxcdTAwMjZjYi1cXHUwMDNlYXJnc1sxXTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTUwLVxcdHN0cnVjdCB4ZnJtX2R1bXBfaW5mbyBpbmZvO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1NTEtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTU1MjpcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGspIFxcdTAwM2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTUzLVxcdFxcdCAgICAgc2l6ZW9mKGNiLVxcdTAwM2VhcmdzKSAtIHNpemVvZihjYi1cXHUwMDNlYXJnc1swXSkpO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTU4OS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTkwOlxcdFxcdHhmcm1fc3RhdGVfd2Fsa19pbml0KHdhbGssIHByb3RvLCBmaWx0ZXIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1OTEtXFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSAxO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTU5My1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTk0OlxcdCh2b2lkKSB4ZnJtX3N0YXRlX3dhbGsobmV0LCB3YWxrLCBkdW1wX29uZV9zdGF0ZSwgXFx1MDAyNmluZm8pO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1OTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjM4OjA5LjYzMDkxOTgyWiIsIlNlcSI6MTAzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzM3OTEyMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFhGUk0gS2VybmVsIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgeGZybV9zdGF0ZV93YWxrYCBpcyBpbmRlZWQgZXhwb3J0ZWQgYW5kIHV0aWxpemVkIHdpdGhpbiBgeGZybV9uYXRfa2VlcGFsaXZlLmNgIGFuZCBgeGZybV91c2VyLmNgLiBFeGNlbGxlbnQsIHRoYXQgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgYXMgYSBzeW1ib2wgdG8gaG9uZSBpbiBvbi5cblxuTGV0J3MgZG8gYSBxdWljayBydW5kb3duIG9mIHRoZSBmb2N1cyBzeW1ib2xzIGFnYWluOiBgZXNwX291dHB1dF90YWlsYCwgYGVzcDZfb3V0cHV0X3RhaWxgLCBgeGZybTZfaW5wdXRfYWRkcmAsIGB4ZnJtX291dHB1dGAsIGBlc3BpbnRjcF9xdWV1ZV9vdXRgLCBgZXNwaW50Y3BfcHVzaF9za2JgLCBhbmQgb2YgY291cnNlLCB0aGUgcGl2b3RhbCBgeGZybV9zdGF0ZV93YWxrYC5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBYRlJNYCwgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGBJTkVUNl9FU1BgLCBgSU5FVDZfQUhgLCBgSU5FVF9FU1BJTlRDUGAsIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLlxuXG5BbHJpZ2h0LCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgIGlzIHNlbGVjdGVkIHdoZW4gZWl0aGVyIGBJTkVUX0VTUElOVENQYCBvciBgSU5FVDZfRVNQSU5UQ1BgIGFyZSBlbmFibGVkLiBHb29kLiBJIHdhcyBjdXJpb3VzIGlmIHRoZXJlIHdlcmUgYSBgQ09ORklHX1hGUk1fTkFUX0tFRVBBTElWRWAsIGJ1dCB0aGF0IGRvZXNuJ3QgZXhpc3QgZGlyZWN0bHkuIEluc3RlYWQsIGB4ZnJtX25hdF9rZWVwYWxpdmUuY2Agc2VlbXMgdG8gYmUgY29tcGlsZWQgd2hlbiBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQuIEFuZCwgYXMgZXhwZWN0ZWQsIGBDT05GSUdfWEZSTV9VU0VSYCBpcyB0aGUga2V5IGZvciBgeGZybV91c2VyLmNgLlxuXG5JIGJlbGlldmUgdGhhdCB3cmFwcyB1cCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgdGhlIGtleSBlbGVtZW50cyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJIHRoaW5rIHRoaXMgYXNzZXNzbWVudCBpcyBjb21wbGV0ZSBhbmQgcmVmbGVjdHMgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBYRlJNIHN1YnN5c3RlbSdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyB0byB0aGUgaWRlbnRpZmllZCBzeW1ib2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDA2NywiT3V0cHV0VG9rZW5zIjoyNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6Mzg6MTYuOTY4ODM1NDY4WiIsIlNlcSI6MTA0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTI3OTQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9BSFwiLFxuICAgIFwiSU5FVF9FU1BJTlRDUFwiLFxuICAgIFwiSU5FVDZfRVNQSU5UQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3Bfb3V0cHV0X3RhaWxcIixcbiAgICBcImVzcDZfb3V0cHV0X3RhaWxcIixcbiAgICBcInhmcm02X2lucHV0X2FkZHJcIixcbiAgICBcInhmcm1fb3V0cHV0XCIsXG4gICAgXCJlc3BpbnRjcF9xdWV1ZV9vdXRcIixcbiAgICBcImVzcGludGNwX3B1c2hfc2tiXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX3dhbGtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzIGluIHRoZSBJUHNlYyAoWEZSTSwgRVNQLCBBSCkgc3Vic3lzdGVtLiBJdCBhZGRzIGNoZWNrcyBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFnbWVudHMgaW4gRVNQLCBmaXhlcyBhZGRyZXNzIHJlYXJyYW5nZW1lbnQgaW4gQUg2LCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBYRlJNNiBpbnB1dCwgYWRkcyBhIGNoZWNrIGZvciBtaXNzaW5nIGRldmljZSBpbiBFU1AtaW4tVENQLCBjaGFuZ2VzIHRoZSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSB0byBjb2xsZWN0IHN0YXRlcyBiZWZvcmUgcHJvY2Vzc2luZyB0aGVtLCByZW1vdmVzIGEgZG91YmxlIGZyZWUgaW4gWEZSTSBvdXRwdXQsIGFuZCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBYRlJNIHVzZXIuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9BSFwiLFxuICAgIFwiSU5FVF9FU1BJTlRDUFwiLFxuICAgIFwiSU5FVDZfRVNQSU5UQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3Bfb3V0cHV0X3RhaWxcIixcbiAgICBcImVzcDZfb3V0cHV0X3RhaWxcIixcbiAgICBcInhmcm02X2lucHV0X2FkZHJcIixcbiAgICBcInhmcm1fb3V0cHV0XCIsXG4gICAgXCJlc3BpbnRjcF9xdWV1ZV9vdXRcIixcbiAgICBcImVzcGludGNwX3B1c2hfc2tiXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX3dhbGtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzIGluIHRoZSBJUHNlYyAoWEZSTSwgRVNQLCBBSCkgc3Vic3lzdGVtLiBJdCBhZGRzIGNoZWNrcyBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFnbWVudHMgaW4gRVNQLCBmaXhlcyBhZGRyZXNzIHJlYXJyYW5nZW1lbnQgaW4gQUg2LCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBYRlJNNiBpbnB1dCwgYWRkcyBhIGNoZWNrIGZvciBtaXNzaW5nIGRldmljZSBpbiBFU1AtaW4tVENQLCBjaGFuZ2VzIHRoZSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSB0byBjb2xsZWN0IHN0YXRlcyBiZWZvcmUgcHJvY2Vzc2luZyB0aGVtLCByZW1vdmVzIGEgZG91YmxlIGZyZWUgaW4gWEZSTSBvdXRwdXQsIGFuZCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBYRlJNIHVzZXIuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow22h4p[1] Phase: Succeeded StartedAt: 2026-07-30 13:38:29 +0000 UTC FinishedAt: 2026-07-30 13:38:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 13:38:29 +0000 UTC FinishedAt: 2026-07-30 13:38:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2] Phase: Succeeded StartedAt: 2026-07-30 13:38:29 +0000 UTC FinishedAt: 2026-07-30 17:29:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 13:38:29 +0000 UTC FinishedAt: 2026-07-30 17:29:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 13:38:29 +0000 UTC FinishedAt: 2026-07-30 13:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 13:38:29 +0000 UTC FinishedAt: 2026-07-30 13:38:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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-workflow22h4p/series-workflow22h4p-convert-artifact-2922000326/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 13:38:41 +0000 UTC FinishedAt: 2026-07-30 13:59:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 13:38:41 +0000 UTC FinishedAt: 2026-07-30 13:59:44 +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:*001c17fe-4b61-4f30-9288-2f8b71a37aef,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-workflow22h4p/series-workflow22h4p-convert-artifact-2922000326/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": "3e916d4b-732c-46e7-828d-eb05293d3c8b", "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-workflow22h4p/series-workflow22h4p-build-action-4195810652/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 13:38:41 +0000 UTC FinishedAt: 2026-07-30 13:59:33 +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:*001c17fe-4b61-4f30-9288-2f8b71a37aef,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-workflow22h4p/series-workflow22h4p-convert-artifact-2922000326/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": "3e916d4b-732c-46e7-828d-eb05293d3c8b", "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-workflow22h4p/series-workflow22h4p-build-action-4195810652/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 13:59:44 +0000 UTC FinishedAt: 2026-07-30 13:59:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 13:59:44 +0000 UTC FinishedAt: 2026-07-30 13:59:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 13:59:44 +0000 UTC FinishedAt: 2026-07-30 13:59:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 13:59:44 +0000 UTC FinishedAt: 2026-07-30 13:59:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-workflow22h4p/series-workflow22h4p-convert-artifact-2141885977/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 13:59:56 +0000 UTC FinishedAt: 2026-07-30 14:01:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 13:59:56 +0000 UTC FinishedAt: 2026-07-30 14:01:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e916d4b-732c-46e7-828d-eb05293d3c8b,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-workflow22h4p/series-workflow22h4p-build-action-4195810652/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-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:01:58 +0000 UTC FinishedAt: 2026-07-30 14:01:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:01:59 +0000 UTC FinishedAt: 2026-07-30 14:01:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:01:59 +0000 UTC FinishedAt: 2026-07-30 14:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:01:59 +0000 UTC FinishedAt: 2026-07-30 14:24:06 +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:*001c17fe-4b61-4f30-9288-2f8b71a37aef,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-workflow22h4p/series-workflow22h4p-convert-artifact-2141885977/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": "8d8506ea-4576-4022-be15-52e3b3d47b3d", "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-workflow22h4p/series-workflow22h4p-build-action-4086605173/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:01:59 +0000 UTC FinishedAt: 2026-07-30 14:23:56 +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:*001c17fe-4b61-4f30-9288-2f8b71a37aef,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-workflow22h4p/series-workflow22h4p-convert-artifact-2141885977/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": "8d8506ea-4576-4022-be15-52e3b3d47b3d", "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-workflow22h4p/series-workflow22h4p-build-action-4086605173/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:24:06 +0000 UTC FinishedAt: 2026-07-30 14:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:24:06 +0000 UTC FinishedAt: 2026-07-30 14:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:24:06 +0000 UTC FinishedAt: 2026-07-30 14:26:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:24:06 +0000 UTC FinishedAt: 2026-07-30 14:26:03 +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:*8d8506ea-4576-4022-be15-52e3b3d47b3d,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-workflow22h4p/series-workflow22h4p-build-action-4086605173/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-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:26:13 +0000 UTC FinishedAt: 2026-07-30 17:29:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:26:13 +0000 UTC FinishedAt: 2026-07-30 17:29:14 +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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"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:*3e916d4b-732c-46e7-828d-eb05293d3c8b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8d8506ea-4576-4022-be15-52e3b3d47b3d,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-workflow22h4p/series-workflow22h4p-build-action-4195810652/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-workflow22h4p/series-workflow22h4p-build-action-4086605173/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:26:13 +0000 UTC FinishedAt: 2026-07-30 14:26:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:26:13 +0000 UTC FinishedAt: 2026-07-30 14:26:19 +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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"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-workflow22h4p/series-workflow22h4p-convert-artifact-2091012366/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:26:13 +0000 UTC FinishedAt: 2026-07-30 14:26:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:26:13 +0000 UTC FinishedAt: 2026-07-30 14:26:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:26:13 +0000 UTC FinishedAt: 2026-07-30 14:26:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:26:23 +0000 UTC FinishedAt: 2026-07-30 17:29:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow22h4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"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":["esp_output_tail","esp6_output_tail","xfrm6_input_addr","xfrm_output","espintcp_queue_out","espintcp_push_skb","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET6_ESP","INET6_AH","INET_ESPINTCP","INET6_ESPINTCP"],"series_id":"0d290b5f-2748-448e-97fc-2b711f663e6f","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-07-30 14:26:23 +0000 UTC FinishedAt: 2026-07-30 17:29:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e916d4b-732c-46e7-828d-eb05293d3c8b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8d8506ea-4576-4022-be15-52e3b3d47b3d,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-workflow22h4p/series-workflow22h4p-build-action-4195810652/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-workflow22h4p/series-workflow22h4p-build-action-4086605173/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-workflow22h4p/series-workflow22h4p-convert-artifact-2091012366/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,}