Name: series-workflowr4wfm Phase: Succeeded StartedAt: 2026-09-03 00:41:49 +0000 UTC FinishedAt: 2026-09-03 05:02:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[0] Phase: Succeeded StartedAt: 2026-09-03 00:41:49 +0000 UTC FinishedAt: 2026-09-03 01:22:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 00:41:49 +0000 UTC FinishedAt: 2026-09-03 01:22:26 +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": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_MPLS", "NET_CLS_ACT", "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_MPLS", "NET_CLS_ACT", "OPENVSWITCH" ], "series_id": "d909db3a-23b5-49df-84a3-ea3f6e2cf9a4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_mpls_pop", "skb_mpls_push", "tcf_mpls_act" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfTVBMUyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9tcGxzX3BvcCYjMzQ7LAogICAgJiMzNDtza2JfbXBsc19wdXNoJiMzNDssCiAgICAmIzM0O3RjZl9tcGxzX2FjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfbXBsc19wb3AoKWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCB0byByZXNldCBgc2tiLVx1MDAzZWlubmVyX3Byb3RvY29sYCB0byAwIHdoZW4gdGhlIHBvcHBlZCBNUExTIGhlYWRlciBpcyB0aGUgbGFzdCBvbmUgKGkuZS4gYCFldGhfcF9tcGxzKG5leHRfcHJvdG8pYCkuIFRoaXMgZW5zdXJlcyB0aGF0IHN1YnNlcXVlbnQgYHNrYl9tcGxzX3B1c2goKWAgY2FsbHMgZG8gbm90IHJldGFpbiBzdGFsZSBpbm5lciBwcm90b2NvbCBhbmQgaW5uZXIgbmV0d29yayBoZWFkZXIgb2Zmc2V0cy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHN0cnVjdCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgbGVuZ3RocyBvciBidWZmZXIgYm91bmRzIGluIGEgd2F5IHRoYXQgbGVhZHMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBBbnkgcG90ZW50aWFsIGJ1ZmZlci9vZmZzZXQgaXNzdWVzIGFyaXNpbmcgZnJvbSBza2IgaGVhZGVyIG1hbmlwdWxhdGlvbiBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNrYl9tcGxzX3BvcCBpbiBuZXQvY29yZS9za2J1ZmYuYyB0byBjbGVhciBza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2wgd2hlbiBwb3BwaW5nIHRoZSBsYXN0IE1QTFMgaGVhZGVyLCBwcmV2ZW50aW5nIHN0YWxlIGlubmVyIGhlYWRlciBvZmZzZXRzIG9uIHN1YnNlcXVlbnQgTVBMUyBvcGVyYXRpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBza2IgTVBMUyBoYW5kbGluZyB1c2VkIGJ5IFRDIE1QTFMgYWN0aW9ucyBhbmQgT3BlbiB2U3dpdGNoLCBib3RoIG9mIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTJhNDFhY2UzMjE1MGRkYTQ0ODU0OTBiY2UzNDczZGI4OWRhOGM1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDE6MjE6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggOTY2YWYzYmVlZDk0ZC4uY2MzYjRiNzAyODhiNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTY2OTAsNiAmIzQzOzY2OTAsMTMgQEAgaW50IHNrYl9tcGxzX3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgbmV4dF9wcm90bywgaW50IG1hY19sZW4sXG4gXHR9XG4gXHRza2ItXHUwMDNlcHJvdG9jb2wgPSBuZXh0X3Byb3RvO1xuIFxuJiM0MztcdC8qIFRoZSBsYXN0IGxhYmVsIGlzIGdvbmUsIHNvIHRoZSBpbm5lciBoZWFkZXIgcmVjb3JkZWQgYnlcbiYjNDM7XHQgKiBza2JfbXBsc19wdXNoKCkgbm8gbG9uZ2VyIGRlc2NyaWJlcyB0aGlzIHBhY2tldC4gRHJvcCBpdCwgb3IgYVxuJiM0MztcdCAqIGxhdGVyIHB1c2gga2VlcHMgdGhlIHN0YWxlIG9mZnNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWV0aF9wX21wbHMobmV4dF9wcm90bykpXG4mIzQzO1x0XHRza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2wgPSAwO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChza2JfbXBsc19wb3ApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfTVBMUyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9tcGxzX3BvcCYjMzQ7LAogICAgJiMzNDtza2JfbXBsc19wdXNoJiMzNDssCiAgICAmIzM0O3RjZl9tcGxzX2FjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBza2JfbXBsc19wb3AgaW4gbmV0L2NvcmUvc2tidWZmLmMgdG8gY2xlYXIgc2tiLVx1MDAzZWlubmVyX3Byb3RvY29sIHdoZW4gcG9wcGluZyB0aGUgbGFzdCBNUExTIGhlYWRlciwgcHJldmVudGluZyBzdGFsZSBpbm5lciBoZWFkZXIgb2Zmc2V0cyBvbiBzdWJzZXF1ZW50IE1QTFMgb3BlcmF0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgc2tiIE1QTFMgaGFuZGxpbmcgdXNlZCBieSBUQyBNUExTIGFjdGlvbnMgYW5kIE9wZW4gdlN3aXRjaCwgYm90aCBvZiB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEyYTQxYWNlMzIxNTBkZGE0NDg1NDkwYmNlMzQ3M2RiODlkYThjNTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDAxOjIxOjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCA5NjZhZjNiZWVkOTRkLi5jYzNiNGI3MDI4OGI0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtNjY5MCw2ICYjNDM7NjY5MCwxMyBAQCBpbnQgc2tiX21wbHNfcG9wKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBuZXh0X3Byb3RvLCBpbnQgbWFjX2xlbiwKIAl9CiAJc2tiLSZndDtwcm90b2NvbCA9IG5leHRfcHJvdG87CiAKJiM0MzsJLyogVGhlIGxhc3QgbGFiZWwgaXMgZ29uZSwgc28gdGhlIGlubmVyIGhlYWRlciByZWNvcmRlZCBieQomIzQzOwkgKiBza2JfbXBsc19wdXNoKCkgbm8gbG9uZ2VyIGRlc2NyaWJlcyB0aGlzIHBhY2tldC4gRHJvcCBpdCwgb3IgYQomIzQzOwkgKiBsYXRlciBwdXNoIGtlZXBzIHRoZSBzdGFsZSBvZmZzZXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWV0aF9wX21wbHMobmV4dF9wcm90bykpCiYjNDM7CQlza2ItJmd0O2lubmVyX3Byb3RvY29sID0gMDsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9tcGxzX3BvcCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipBbmFseXppbmcgdGhlIE1QTFMgUG9wIFBhdGNoKioKClJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBza2JfbXBsc19wb3BgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhpcyBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGFuZCwgY3J1Y2lhbGx5LCBpdHMgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgbmV0d29yayBzdGFjay4KClRoZXJlZm9yZSwgSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSBkaWcgZGVlcGVyLiBJJiMzOTttIGdvaW5nIHRvIHJlYWNoIGZvciBlaXRoZXIgYGdyZXBwZXJgIG9yIHBlcmhhcHMgYSBkaXJlY3QgYHJlYWQtZmlsZWAgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24gYHNrYl9tcGxzX3BvcGAgaXRzZWxmLiBJIG5lZWQgdGhlIGNvZGUgcmlnaHQgdGhlcmUgaW4gZnJvbnQgb2YgbWUuIEkgd2lsbCBjaGVjayBmb3IgaW5saW5lLWVkIGNvZGUgYXMgd2VsbC4KClRoZW4sIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjYWxsZXJzIG9mIGBza2JfbXBsc19wb3BgLiBTZWVpbmcgaG93IGl0JiMzOTtzIHVzZWQg4oCTIHRoZSBlbnZpcm9ubWVudHMgaXQmIzM5O3MgaW52b2tlZCBpbiwgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHRoZSBwcm90b2NvbHMgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoIOKAkyBpcyBwYXJhbW91bnQuIFRoaXMgd2lsbCBpbnN0YW50bHkgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBwb3RlbnRpYWwgaW1wYWN0cyB0aGlzIHBhdGNoIG1pZ2h0IGhhdmUuIENvbnRleHQgaXMga2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfbXBsc19wb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTY2NTA9RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcHVzaCk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjY1Mi0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjY2NTM6ICogc2tiX21wbHNfcG9wKCkgLSBwb3AgdGhlIG91dGVybW9zdCBNUExTIGhlYWRlclxubmV0L2NvcmUvc2tidWZmLmMtNjY1NC0gKlxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY2NjMtICovXG5uZXQvY29yZS9za2J1ZmYuYzo2NjY0OmludCBza2JfbXBsc19wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IG5leHRfcHJvdG8sIGludCBtYWNfbGVuLFxubmV0L2NvcmUvc2tidWZmLmMtNjY2NS1cdFx0IGJvb2wgZXRoZXJuZXQpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjcwMS19XG5uZXQvY29yZS9za2J1ZmYuYzo2NzAyOkVYUE9SVF9TWU1CT0xfR1BMKHNrYl9tcGxzX3BvcCk7XG5uZXQvY29yZS9za2J1ZmYuYy02NzAzLVxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTQ2PXN0YXRpYyBpbnQgcG9wX21wbHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTAtXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjE1MTpcdGVyciA9IHNrYl9tcGxzX3BvcChza2IsIGV0aGVydHlwZSwgc2tiLVx1MDAzZW1hY19sZW4sXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1Mi1cdFx0XHQgICBvdnNfa2V5X21hY19wcm90byhrZXkpID09IE1BQ19QUk9UT19FVEhFUk5FVCk7XG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NTM9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9tcGxzX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfbXBscy5jLTc4LVx0Y2FzZSBUQ0FfTVBMU19BQ1RfUE9QOlxubmV0L3NjaGVkL2FjdF9tcGxzLmM6Nzk6XHRcdGlmIChza2JfbXBsc19wb3Aoc2tiLCBwLVx1MDAzZXRjZm1fcHJvdG8sIG1hY19sZW4sXG5uZXQvc2NoZWQvYWN0X21wbHMuYy04MC1cdFx0XHRcdCBza2ItXHUwMDNlZGV2IFx1MDAyNlx1MDAyNiBza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTY4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVBMUyBQYWNrZXQgSGFuZGxpbmcgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2UgYW5kIGNvbnRleHQgb2YgYHNrYl9tcGxzX3BvcGAuIEZpcnN0LCBJIHNob3VsZCB6ZXJvIGluIG9uIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGBza2JfbXBsc19wb3BgIHdpdGhpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBUaGF0IHBsYWNlcyBpdCBmaXJtbHkgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHdoaWNoIGlzIGdvb2QgdG8ga25vdyDigJMgaXQmIzM5O3MgZnVuZGFtZW50YWwuIE5vdywgd2hlcmUgaXMgaXQgYmVpbmcgKmNhbGxlZCo/IExldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUgc2VhcmNoIHR1cm5lZCB1cCB0aHJlZSBjYWxsZXJzOiBgbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY2Ag4oCTIHRoYXQmIzM5O3MgT3BlbiB2U3dpdGNoLCB3aGljaCBpcyBpbnRlcmVzdGluZywgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGl0IGlzIHVzaW5nIHRoaXMgZnVuY3Rpb24uIFRoZW4sIGBuZXQvc2NoZWQvYWN0X21wbHMuY2Ag4oCTIGFoLCB0aGF0JiMzOTtzIHRoZSBNUExTIGNsYXNzaWZpZXIvYWN0aW9uIG1vZHVsZSBpbiB0cmFmZmljIGNvbnRyb2wuIEFuZCwgZmluYWxseSwgdGhlIGV4cGVjdGVkIGNhbGxzIGZyb20gd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AgZm9yIHVzZSBpbiBgc2tiX21wbHNfcHVzaGAgYW5kIGBza2JfbXBsc19wb3BgIGl0c2VsZi4KClRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYG5ldC9zY2hlZC9hY3RfbXBscy5jYCBhbmQgYG5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNgLCBhbmQgc2VlIHdoYXQgdGhlaXIgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIGFyZSB1c2luZyBgc2tiX21wbHNfcG9wYCwgYW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIGl0cyBpbnZvY2F0aW9uLiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2Ygd2hlcmUgdGhlIE1QTFMgcGFja2V0IHByb2Nlc3NpbmcgaXMgaGFwcGVuaW5nIHdpdGhpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVF9BQ1RfTVBMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9ODA4PWNvbmZpZyBORVRfQUNUX0NTVU1cbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04MTgtXG5uZXQvc2NoZWQvS2NvbmZpZzo4MTk6Y29uZmlnIE5FVF9BQ1RfTVBMU1xubmV0L3NjaGVkL0tjb25maWctODIwLVx0dHJpc3RhdGUgXCYjMzQ7TVBMUyBtYW5pcHVsYXRpb25cJiMzNDtcbi0tXG5uZXQvc2NoZWQvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX05FVF9BQ1RfQ1NVTSlcdCYjNDM7PSBhY3RfY3N1bS5vXG5uZXQvc2NoZWQvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX05FVF9BQ1RfTVBMUylcdCYjNDM7PSBhY3RfbXBscy5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX05FVF9BQ1RfVkxBTilcdCYjNDM7PSBhY3Rfdmxhbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFRyYWZmaWMgQ29udHJvbCBDb25maWd1cmF0aW9uKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi4gTXkgaW50dWl0aW9uIHNheXMgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFyZSBwcm9iYWJseSBpbiBgbmV0L3NjaGVkL0tjb25maWdgLiBMZXQmIzM5O3MgemVybyBpbiBvbiB0aGF0IGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSA4MTkuIEkmIzM5O20gbm90IGVudGlyZWx5IHN1cmUgKndoYXQqIEkmIzM5O20gbG9va2luZyBmb3IgeWV0LCBidXQgdGhhdCYjMzk7cyBvZnRlbiBob3cgaXQgZ29lcy4gVGhhdCBsaW5lIGZlZWxzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGxvcmUgdGhlIGFyZWEgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlIGhvbGRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgxMDpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcdTAwMjZcdTAwMjYgSU5FVFxuIDgxMTpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiA4MTI6XHRcdGhlbHBcbiA4MTM6XHRcdCAgU2F5IFkgaGVyZSB0byB1cGRhdGUgc29tZSBjb21tb24gY2hlY2tzdW0gYWZ0ZXIgc29tZSBkaXJlY3RcbiA4MTQ6XHRcdCAgcGFja2V0IGFsdGVyYXRpb25zLlxuIDgxNTpcdFxuIDgxNjpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODE3Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY3N1bS5cbiA4MTg6XHRcbiA4MTk6XHRjb25maWcgTkVUX0FDVF9NUExTXG4gODIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtNUExTIG1hbmlwdWxhdGlvblwmIzM0O1xuIDgyMTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDgyMjpcdFx0aGVscFxuIDgyMzpcdFx0ICBTYXkgWSBoZXJlIHRvIHB1c2ggb3IgcG9wIE1QTFMgaGVhZGVycy5cbiA4MjQ6XHRcbiA4MjU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiA4MjY6XHRcbiA4Mjc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDgyODpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X21wbHMuXG4gODI5Olx0XG4gODMwOlx0Y29uZmlnIE5FVF9BQ1RfVkxBTlxuIDgzMTpcdFx0dHJpc3RhdGUgXCYjMzQ7VmxhbiBtYW5pcHVsYXRpb25cJiMzNDtcbiA4MzI6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA4MzM6XHRcdGhlbHBcbiA4MzQ6XHRcdCAgU2F5IFkgaGVyZSB0byBwdXNoIG9yIHBvcCB2bGFuIGhlYWRlcnMuXG4gODM1Olx0XG4gODM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gODM3Olx0XG4gODM4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA4Mzk6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF92bGFuLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgT3BlbiB2U3dpdGNoIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBPcGVuIHZTd2l0Y2ggY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQmIzM5O2xsIGxheSBvdXQgdGhlIGNvcmUgZmVhdHVyZXMgYW5kIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBjb25maWd1cmluZyBPcGVuIHZTd2l0Y2ggd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0b3AtbGV2ZWwgbWVudSBzdHJ1Y3R1cmUsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgYW5kIHRoZSBkZWZhdWx0IHZhbHVlcyBvciBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBhbHNvIGludGVyZXN0ZWQgaW4gYW55IG5ldyBvciBjaGFuZ2VkIG9wdGlvbnMgc2luY2UgbXkgbGFzdCBkZWVwIGRpdmUsIGVzcGVjaWFsbHkgYW55IHJlbGF0ZWQgdG8gcmVjZW50IHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cyBvciBuZXcgcHJvdG9jb2xzLiBUaGlzIEtjb25maWcgd2lsbCBnaXZlIG1lIGEgaGlnaC1sZXZlbCB2aWV3IGFuZCBhbnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyB0byBpbnZlc3RpZ2F0ZSBzcGVjaWZpYyBhc3BlY3RzIGluIG1vcmUgZGV0YWlsLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlcGVuZGVuY2llcyDigJMgdW5kZXJzdGFuZGluZyB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIGNlcnRhaW4gT3BlbiB2U3dpdGNoIGZlYXR1cmVzIGlzIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBPcGVuIHZTd2l0Y2gqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIGRlcGVuZGVuY2llcywgcGFydGljdWxhcmx5IHRob3NlIGRlZmluZWQgaW4gdGhlIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGtub3cgdGhpcyBmaWxlIGlzIGdvaW5nIHRvIGNvbnRhaW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgY29udHJvbCB3aGljaCBmZWF0dXJlcyBnZXQgY29tcGlsZWQgaW50byBPcGVuIHZTd2l0Y2guIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZGlmZmVyZW50IGNvbXBvbmVudHMgcmVsYXRlIHRvIGVhY2ggb3RoZXIgYW5kIGZvciBjdXN0b21pemluZyB0aGUgYnVpbGQgZm9yIHNwZWNpZmljIGRlcGxveW1lbnRzLiBJIGV4cGVjdCB0byBzZWUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIG1heWJlIHNvbWUgYHNlbGVjdGAgc3RhdGVtZW50cywgYW5kIGRlZmluaXRlbHkgc29tZSBib29sZWFuIG9yIHRyaXN0YXRlIG9wdGlvbnMuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0cmlnZ2VycyB3aGF0LCBhbmQgaG93IHRvIGVuYWJsZSBvciBkaXNhYmxlIGRpZmZlcmVudCBmZWF0dXJlcyBlZmZlY3RpdmVseS4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgT3BlbiB2U3dpdGNoXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBPUEVOVlNXSVRDSFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxuICAxMDpcdFx0XHQgICAoTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXHUwMDI2XHUwMDI2IFxcXG4gIDExOlx0XHRcdFx0XHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IFxcXG4gIDEyOlx0XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG4gIDEzOlx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbiAgMTQ6XHRcdHNlbGVjdCBNUExTXG4gIDE1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxNjpcdFx0c2VsZWN0IE5FVF9NUExTX0dTT1xuICAxNzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICAxODpcdFx0c2VsZWN0IE5FVF9OU0hcbiAgMTk6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xuICAyMDpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXG4gIDIzOlx0XHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXG4gIDI0Olx0XHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxuICAyNTpcdFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXG4gIDI2Olx0XHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcbiAgMjc6XHRcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXG4gIDI4Olx0XHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXG4gIDI5Olx0XHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXG4gIDMwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgd2Fsa2luZyB0aHJvdWdoIHRoZSBsb2dpYzoKCioqRXhhbWluaW5nIE1QTFMgTGFiZWwgSGFuZGxpbmcgaW4gdGhlIEtlcm5lbCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBNUExTIGxhYmVscyBhcmUgaGFuZGxlZCBpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIGFjdGlvbnMgcmVsYXRlZCB0byBwb3BwaW5nIGFuZCBwdXNoaW5nIHRoZXNlIGxhYmVscy4gTXkgZmlyc3QgaW5zdGluY3QsIGJlaW5nIGZhbWlsaWFyIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBmaWxlczogSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGBuZXQvc2NoZWQvYWN0X21wbHMuY2AgYmVjYXVzZSBpdCBkZWFscyBkaXJlY3RseSB3aXRoIE1QTFMgYWN0aW9ucywgbGlrZWx5IHRoZSAmIzM0O21wbHMmIzM0OyBwYXJ0IG9mIHRoaW5ncy4gQnV0IEkga25vdyB0aGF0IHRoZSBgc2tidWZmYCBzdHJ1Y3R1cmUgaXMgY2VudHJhbCB0byBwYWNrZXQgaGFuZGxpbmcgaW4gdGhlIGtlcm5lbCwgc28gSSYjMzk7bGwgYWxzbyB3YW50IHRvIGxvb2sgY2xvc2VseSBhdCBgbmV0L2NvcmUvc2tidWZmLmNgLgoKTm93LCB3aXRoaW4gYHNrYnVmZi5jYCwgSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGRlYWwgd2l0aCBtYW5pcHVsYXRpbmcgdGhvc2UgbGFiZWxzLCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgZnVuY3Rpb25zIGBza2JfbXBsc19wb3BgIGFuZCBgc2tiX21wbHNfcHVzaGAuIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGtleSBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCAqcmVtb3ZlcyogYW5kICphZGRzKiBNUExTIGxhYmVscyByZXNwZWN0aXZlbHkuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCB0aGUgY29kZSBhcm91bmQgdGhvc2UgZnVuY3Rpb25zLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkgYXJlIG1vZGlmaWVkLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSBsb29raW5nIGF0IGhvdyB0aGUgYHNrYmAgc3RydWN0dXJlJiMzOTtzIGRhdGEgaXMgYWRqdXN0ZWQgYW5kIGhvdyB0aGUgbGFiZWwgc3RhY2sgaXMgbWFuYWdlZC4gQmFzaWNhbGx5LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgb2YgZGF0YSBhcm91bmQgdGhvc2UgZnVuY3Rpb25zIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjY0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NjQ1Olx0XHRcdHNrYl9tb2RfZXRoX3R5cGUoc2tiLCBldGhfaGRyKHNrYiksIG1wbHNfcHJvdG8pO1xuNjY0NjpcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gbXBsc19wcm90bztcbjY2NDc6XHRcbjY2NDg6XHRcdHJldHVybiAwO1xuNjY0OTpcdH1cbjY2NTA6XHRFWFBPUlRfU1lNQk9MX0dQTChza2JfbXBsc19wdXNoKTtcbjY2NTE6XHRcbjY2NTI6XHQvKipcbjY2NTM6XHQgKiBza2JfbXBsc19wb3AoKSAtIHBvcCB0aGUgb3V0ZXJtb3N0IE1QTFMgaGVhZGVyXG42NjU0Olx0ICpcbjY2NTU6XHQgKiBAc2tiOiBidWZmZXJcbjY2NTY6XHQgKiBAbmV4dF9wcm90bzogZXRoZXJ0eXBlIG9mIGhlYWRlciBhZnRlciBwb3BwZWQgTVBMUyBoZWFkZXJcbjY2NTc6XHQgKiBAbWFjX2xlbjogbGVuZ3RoIG9mIHRoZSBNQUMgaGVhZGVyXG42NjU4Olx0ICogQGV0aGVybmV0OiBmbGFnIHRvIGluZGljYXRlIGlmIHRoZSBwYWNrZXQgaXMgZXRoZXJuZXRcbjY2NTk6XHQgKlxuNjY2MDpcdCAqIEV4cGVjdHMgc2tiLVx1MDAzZWRhdGEgYXQgbWFjIGhlYWRlci5cbjY2NjE6XHQgKlxuNjY2MjpcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtZXJybm8gb3RoZXJ3aXNlLlxuNjY2MzpcdCAqL1xuNjY2NDpcdGludCBza2JfbXBsc19wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IG5leHRfcHJvdG8sIGludCBtYWNfbGVuLFxuNjY2NTpcdFx0XHQgYm9vbCBldGhlcm5ldClcbjY2NjY6XHR7XG42NjY3Olx0XHRpbnQgZXJyO1xuNjY2ODpcdFxuNjY2OTpcdFx0aWYgKHVubGlrZWx5KCFldGhfcF9tcGxzKHNrYi1cdTAwM2Vwcm90b2NvbCkpKVxuNjY3MDpcdFx0XHRyZXR1cm4gMDtcbjY2NzE6XHRcbjY2NzI6XHRcdGVyciA9IHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYWNfbGVuICYjNDM7IE1QTFNfSExFTik7XG42NjczOlx0XHRpZiAodW5saWtlbHkoZXJyKSlcbjY2NzQ6XHRcdFx0cmV0dXJuIGVycjtcbjY2NzU6XHRcbjY2NzY6XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIG1wbHNfaGRyKHNrYiksIE1QTFNfSExFTik7XG42Njc3Olx0XHRtZW1tb3ZlKHNrYl9tYWNfaGVhZGVyKHNrYikgJiM0MzsgTVBMU19ITEVOLCBza2JfbWFjX2hlYWRlcihza2IpLFxuNjY3ODpcdFx0XHRtYWNfbGVuKTtcbjY2Nzk6XHRcbjY2ODA6XHRcdF9fc2tiX3B1bGwoc2tiLCBNUExTX0hMRU4pO1xuNjY4MTpcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbjY2ODI6XHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBtYWNfbGVuKTtcbjY2ODM6XHRcbjY2ODQ6XHRcdGlmIChldGhlcm5ldCBcdTAwMjZcdTAwMjYgbWFjX2xlbiBcdTAwM2U9IEVUSF9ITEVOKSB7XG42Njg1Olx0XHRcdHN0cnVjdCBldGhoZHIgKmhkcjtcbjY2ODY6XHRcbjY2ODc6XHRcdFx0LyogdXNlIG1wbHNfaGRyKCkgdG8gZ2V0IGV0aGVydHlwZSB0byBhY2NvdW50IGZvciBWTEFOcy4gKi9cbjY2ODg6XHRcdFx0aGRyID0gKHN0cnVjdCBldGhoZHIgKikoKHZvaWQgKiltcGxzX2hkcihza2IpIC0gRVRIX0hMRU4pO1xuNjY4OTpcdFx0XHRza2JfbW9kX2V0aF90eXBlKHNrYiwgaGRyLCBuZXh0X3Byb3RvKTtcbjY2OTA6XHRcdH1cbjY2OTE6XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IG5leHRfcHJvdG87XG42NjkyOlx0XG42NjkzOlx0XHQvKiBUaGUgbGFzdCBsYWJlbCBpcyBnb25lLCBzbyB0aGUgaW5uZXIgaGVhZGVyIHJlY29yZGVkIGJ5XG42Njk0Olx0XHQgKiBza2JfbXBsc19wdXNoKCkgbm8gbG9uZ2VyIGRlc2NyaWJlcyB0aGlzIHBhY2tldC4gRHJvcCBpdCwgb3IgYVxuNjY5NTpcdFx0ICogbGF0ZXIgcHVzaCBrZWVwcyB0aGUgc3RhbGUgb2Zmc2V0LlxuNjY5NjpcdFx0ICovXG42Njk3Olx0XHRpZiAoIWV0aF9wX21wbHMobmV4dF9wcm90bykpXG42Njk4Olx0XHRcdHNrYi1cdTAwM2Vpbm5lcl9wcm90b2NvbCA9IDA7XG42Njk5Olx0XG42NzAwOlx0XHRyZXR1cm4gMDtcbjY3MDE6XHR9XG42NzAyOlx0RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcG9wKTtcbjY3MDM6XHRcbjY3MDQ6XHQvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbToKCioqRXhhbWluaW5nIHRoZSBgc2tiX21wbHNfcG9wYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2tiX21wbHNfcG9wYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHBpbnBvaW50IGl0cyBsb2NhdGlvbiBhbmQgcG9zc2libGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIFNvLCB0aGUgZmlyc3Qgc3RlcCBpcyB0byBjb25maXJtIHRoYXQgaXQmIzM5O3Mgd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIEdvb2QsIHRoYXQgY2hlY2tzIG91dC4gTm93IEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIG9yIHNpbWlsYXIgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFscyB0aGF0IG1pZ2h0IGFmZmVjdCB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY29tcGlsZWQgb3IgdXNlZCBpbiBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zLiBUbyBkbyB0aGlzIHN5c3RlbWF0aWNhbGx5LCBsZXQmIzM5O3Mgc2NhbiBhIHNwZWNpZmljIHJlZ2lvbiBvZiB0aGUgc291cmNlIGNvZGUuIEkmIzM5O2xsIGZvY3VzIG9uIGxpbmVzIDY2MDAgdGhyb3VnaCA2NzIwIHdpdGhpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY29uY2VudHJhdGVkIHZpZXcgb2YgaXRzIGNvbnRleHQsIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIG9yIGJ1aWxkLXRpbWUgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjYwMDpcdCAqIEBza2I6IGJ1ZmZlclxuNjYwMTpcdCAqIEBtcGxzX2xzZTogTVBMUyBsYWJlbCBzdGFjayBlbnRyeSB0byBwdXNoXG42NjAyOlx0ICogQG1wbHNfcHJvdG86IGV0aGVydHlwZSBvZiB0aGUgbmV3IE1QTFMgaGVhZGVyIChleHBlY3RzIDB4ODg0NyBvciAweDg4NDgpXG42NjAzOlx0ICogQG1hY19sZW46IGxlbmd0aCBvZiB0aGUgTUFDIGhlYWRlclxuNjYwNDpcdCAqIEBldGhlcm5ldDogZmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgcmVzdWx0aW5nIHBhY2tldCBhZnRlciBza2JfbXBsc19wdXNoIGlzXG42NjA1Olx0ICogICAgICAgICAgICBldGhlcm5ldFxuNjYwNjpcdCAqXG42NjA3Olx0ICogRXhwZWN0cyBza2ItXHUwMDNlZGF0YSBhdCBtYWMgaGVhZGVyLlxuNjYwODpcdCAqXG42NjA5Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuXG42NjEwOlx0ICovXG42NjExOlx0aW50IHNrYl9tcGxzX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIG1wbHNfbHNlLCBfX2JlMTYgbXBsc19wcm90byxcbjY2MTI6XHRcdFx0ICBpbnQgbWFjX2xlbiwgYm9vbCBldGhlcm5ldClcbjY2MTM6XHR7XG42NjE0Olx0XHRzdHJ1Y3QgbXBsc19zaGltX2hkciAqbHNlO1xuNjYxNTpcdFx0aW50IGVycjtcbjY2MTY6XHRcbjY2MTc6XHRcdGlmICh1bmxpa2VseSghZXRoX3BfbXBscyhtcGxzX3Byb3RvKSkpXG42NjE4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjYxOTpcdFxuNjYyMDpcdFx0LyogTmV0d29ya2luZyBzdGFjayBkb2VzIG5vdCBhbGxvdyBzaW11bHRhbmVvdXMgVHVubmVsIGFuZCBNUExTIEdTTy4gKi9cbjY2MjE6XHRcdGlmIChza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbjY2MjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42NjIzOlx0XG42NjI0Olx0XHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBNUExTX0hMRU4pO1xuNjYyNTpcdFx0aWYgKHVubGlrZWx5KGVycikpXG42NjI2Olx0XHRcdHJldHVybiBlcnI7XG42NjI3Olx0XG42NjI4Olx0XHRpZiAoIXNrYi1cdTAwM2Vpbm5lcl9wcm90b2NvbCkge1xuNjYyOTpcdFx0XHRza2Jfc2V0X2lubmVyX25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuNjYzMDpcdFx0XHRza2Jfc2V0X2lubmVyX3Byb3RvY29sKHNrYiwgc2tiLVx1MDAzZXByb3RvY29sKTtcbjY2MzE6XHRcdH1cbjY2MzI6XHRcbjY2MzM6XHRcdHNrYl9wdXNoKHNrYiwgTVBMU19ITEVOKTtcbjY2MzQ6XHRcdG1lbW1vdmUoc2tiX21hY19oZWFkZXIoc2tiKSAtIE1QTFNfSExFTiwgc2tiX21hY19oZWFkZXIoc2tiKSxcbjY2MzU6XHRcdFx0bWFjX2xlbik7XG42NjM2Olx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuNjYzNzpcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIG1hY19sZW4pO1xuNjYzODpcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbjY2Mzk6XHRcbjY2NDA6XHRcdGxzZSA9IG1wbHNfaGRyKHNrYik7XG42NjQxOlx0XHRsc2UtXHUwMDNlbGFiZWxfc3RhY2tfZW50cnkgPSBtcGxzX2xzZTtcbjY2NDI6XHRcdHNrYl9wb3N0cHVzaF9yY3N1bShza2IsIGxzZSwgTVBMU19ITEVOKTtcbjY2NDM6XHRcbjY2NDQ6XHRcdGlmIChldGhlcm5ldCBcdTAwMjZcdTAwMjYgbWFjX2xlbiBcdTAwM2U9IEVUSF9ITEVOKVxuNjY0NTpcdFx0XHRza2JfbW9kX2V0aF90eXBlKHNrYiwgZXRoX2hkcihza2IpLCBtcGxzX3Byb3RvKTtcbjY2NDY6XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IG1wbHNfcHJvdG87XG42NjQ3Olx0XG42NjQ4Olx0XHRyZXR1cm4gMDtcbjY2NDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MzcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1QTFMgT3BlcmF0aW9ucyBpbiB0aGUgTGludXggS2VybmVsKioKCk9rYXksIHNvIGBza2JfbXBsc19wdXNoYCBhbmQgYHNrYl9tcGxzX3BvcGAg4oCTIHRob3NlIGFyZSAqYWx3YXlzKiBidWlsdCBpbiwgcGFydCBvZiB0aGUgY29yZSBgbmV0L2NvcmUvc2tidWZmLmNgIG1vZHVsZSwgdW5kZXIgYENPTkZJR19ORVRgLiBUaGF0IG1ha2VzIHNlbnNlOyB0aGV5JiMzOTtyZSBmdW5kYW1lbnRhbC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGV5JiMzOTtyZSBhY3R1YWxseSB1c2VkLiBTcGVjaWZpY2FsbHksIHdoaWNoIGNvbXBvbmVudHMgdHJpZ2dlciB0aGVpciBleGVjdXRpb24uIEZyb20gbWVtb3J5LCB0aGUgbWFpbiBjYWxsZXJzIHNlZW0gdG8gYmUgdGhyb3VnaCBUQyBhY3Rpb24gTVBMUywgd2hpY2ggZ2V0cyBlbmFibGVkIHdpdGggYENPTkZJR19ORVRfQUNUX01QTFNgIGFsb25nIHdpdGggYENPTkZJR19ORVRfQ0xTX0FDVGAg4oCTIHRoZSBUcmFmZmljIENvbnRyb2wgYWN0aW9uLCBuYXR1cmFsbHkuIFRoZW4gdGhlcmUmIzM5O3MgT3BlbiB2U3dpdGNoIHRvby4KCkkgdGhpbmsgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBgdGNmX21wbHNfYWN0YCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9zY2hlZC9hY3RfbXBscy5jYCB0byBzZWUgaG93IGl0IGFsbCBjb21lcyB0b2dldGhlci4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRyb2wgZmxvdy4gSXTigJlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjb3JlIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCBhbmQgb3JjaGVzdHJhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfbXBscy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdFx0cmV0dXJuIGNwdV90b19iZTMyKG5ld19sc2UpO1xuICA1MTpcdH1cbiAgNTI6XHRcbiAgNTM6XHRUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gIDU0Olx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuICA1NTpcdFx0XHRcdFx0ICAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcylcbiAgNTY6XHR7XG4gIDU3Olx0XHRzdHJ1Y3QgdGNmX21wbHMgKm0gPSB0b19tcGxzKGEpO1xuICA1ODpcdFx0c3RydWN0IHRjZl9tcGxzX3BhcmFtcyAqcDtcbiAgNTk6XHRcdF9fYmUzMiBuZXdfbHNlO1xuICA2MDpcdFx0aW50IG1hY19sZW47XG4gIDYxOlx0XG4gIDYyOlx0XHR0Y2ZfbGFzdHVzZV91cGRhdGUoXHUwMDI2bS1cdTAwM2V0Y2ZfdG0pO1xuICA2MzpcdFx0YnN0YXRzX3VwZGF0ZSh0aGlzX2NwdV9wdHIobS1cdTAwM2Vjb21tb24uY3B1X2JzdGF0cyksIHNrYik7XG4gIDY0Olx0XG4gIDY1Olx0XHQvKiBFbnN1cmUgJiMzOTtkYXRhJiMzOTsgcG9pbnRzIGF0IG1hY19oZWFkZXIgcHJpb3IgY2FsbGluZyBtcGxzIG1hbmlwdWxhdGluZ1xuICA2NjpcdFx0ICogZnVuY3Rpb25zLlxuICA2NzpcdFx0ICovXG4gIDY4Olx0XHRpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSkge1xuICA2OTpcdFx0XHRza2JfcHVzaF9yY3N1bShza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiAgNzA6XHRcdFx0bWFjX2xlbiA9IHNrYi1cdTAwM2VtYWNfbGVuO1xuICA3MTpcdFx0fSBlbHNlIHtcbiAgNzI6XHRcdFx0bWFjX2xlbiA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpO1xuICA3MzpcdFx0fVxuICA3NDpcdFxuICA3NTpcdFx0cCA9IHJjdV9kZXJlZmVyZW5jZV9iaChtLVx1MDAzZW1wbHNfcCk7XG4gIDc2Olx0XG4gIDc3Olx0XHRzd2l0Y2ggKHAtXHUwMDNldGNmbV9hY3Rpb24pIHtcbiAgNzg6XHRcdGNhc2UgVENBX01QTFNfQUNUX1BPUDpcbiAgNzk6XHRcdFx0aWYgKHNrYl9tcGxzX3BvcChza2IsIHAtXHUwMDNldGNmbV9wcm90bywgbWFjX2xlbixcbiAgODA6XHRcdFx0XHRcdCBza2ItXHUwMDNlZGV2IFx1MDAyNlx1MDAyNiBza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSlcbiAgODE6XHRcdFx0XHRnb3RvIGRyb3A7XG4gIDgyOlx0XHRcdGJyZWFrO1xuICA4MzpcdFx0Y2FzZSBUQ0FfTVBMU19BQ1RfUFVTSDpcbiAgODQ6XHRcdFx0bmV3X2xzZSA9IHRjZl9tcGxzX2dldF9sc2UoTlVMTCwgcCwgIWV0aF9wX21wbHMoc2tiX3Byb3RvY29sKHNrYiwgdHJ1ZSkpKTtcbiAgODU6XHRcdFx0aWYgKHNrYl9tcGxzX3B1c2goc2tiLCBuZXdfbHNlLCBwLVx1MDAzZXRjZm1fcHJvdG8sIG1hY19sZW4sXG4gIDg2Olx0XHRcdFx0XHQgIHNrYi1cdTAwM2VkZXYgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpKVxuICA4NzpcdFx0XHRcdGdvdG8gZHJvcDtcbiAgODg6XHRcdFx0YnJlYWs7XG4gIDg5Olx0XHRjYXNlIFRDQV9NUExTX0FDVF9NQUNfUFVTSDpcbiAgOTA6XHRcdFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcbiAgOTE6XHRcdFx0XHRpZiAoX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXHUwMDNldmxhbl9wcm90byxcbiAgOTI6XHRcdFx0XHRcdFx0XHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpLFxuICA5MzpcdFx0XHRcdFx0XHRcdCAgICBFVEhfSExFTikgXHUwMDNjIDApXG4gIDk0Olx0XHRcdFx0XHRnb3RvIGRyb3A7XG4gIDk1Olx0XG4gIDk2Olx0XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gc2tiLVx1MDAzZXZsYW5fcHJvdG87XG4gIDk3Olx0XHRcdFx0X192bGFuX2h3YWNjZWxfY2xlYXJfdGFnKHNrYik7XG4gIDk4Olx0XHRcdH1cbiAgOTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkzNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIERlZXBlciBpbnRvIE9wZW4gdlN3aXRjaCBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgaG93IE9wZW4gdlN3aXRjaCBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTt2ZSBhbHJlYWR5IGV4cGxvcmVkIHRoZSBtb3JlIG9idmlvdXMgZW50cnkgcG9pbnRzLCBidXQgSSBoYXZlIGEgaHVuY2ggdGhlcmUgbWlnaHQgYmUgc29tZSBtb3JlIHN1YnRsZSBpbnRlcmFjdGlvbnMgaGlkZGVuIHdpdGhpbiB0aGUgYG5ldC9vcGVudnN3aXRjaGAgZGlyZWN0b3J5IGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgYWN0aW9ucy5jYCBmaWxlLiBJdCYjMzk7cyBhIGtleSBwaWVjZSwgZGVmaW5pbmcgd2hhdCBoYXBwZW5zICphZnRlciogYSBmbG93IHJ1bGUgaGFzIGJlZW4gbWF0Y2hlZCwgc28gSSBzaG91bGQgc2VlIHdoYXQgY2FsbGVycyBpbiB0aGF0IGZpbGUgYXJlIGJlaW5nIHRyaWdnZXJlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhbm90aGVyIGF2ZW51ZSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUuIExldCYjMzk7cyBzZWUgaWYgdGhpcyByZXZlYWxzIGFueXRoaW5nIGludGVyZXN0aW5nIG9yIGFueSBuZXcgbGVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0XHRcdGtleS1cdTAwM2VtYWNfcHJvdG8gPSBNQUNfUFJPVE9fTk9ORTtcbiAxNDE6XHRcbiAxNDI6XHRcdGludmFsaWRhdGVfZmxvd19rZXkoa2V5KTtcbiAxNDM6XHRcdHJldHVybiAwO1xuIDE0NDpcdH1cbiAxNDU6XHRcbiAxNDY6XHRzdGF0aWMgaW50IHBvcF9tcGxzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuIDE0NzpcdFx0XHQgICAgY29uc3QgX19iZTE2IGV0aGVydHlwZSlcbiAxNDg6XHR7XG4gMTQ5Olx0XHRpbnQgZXJyO1xuIDE1MDpcdFxuIDE1MTpcdFx0ZXJyID0gc2tiX21wbHNfcG9wKHNrYiwgZXRoZXJ0eXBlLCBza2ItXHUwMDNlbWFjX2xlbixcbiAxNTI6XHRcdFx0XHQgICBvdnNfa2V5X21hY19wcm90byhrZXkpID09IE1BQ19QUk9UT19FVEhFUk5FVCk7XG4gMTUzOlx0XHRpZiAoZXJyKVxuIDE1NDpcdFx0XHRyZXR1cm4gZXJyO1xuIDE1NTpcdFxuIDE1NjpcdFx0aWYgKGV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9URUIpKVxuIDE1NzpcdFx0XHRrZXktXHUwMDNlbWFjX3Byb3RvID0gTUFDX1BST1RPX0VUSEVSTkVUO1xuIDE1ODpcdFxuIDE1OTpcdFx0aW52YWxpZGF0ZV9mbG93X2tleShrZXkpO1xuIDE2MDpcdFx0cmV0dXJuIDA7XG4gMTYxOlx0fVxuIDE2MjpcdFxuIDE2MzpcdHN0YXRpYyBpbnQgc2V0X21wbHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICpmbG93X2tleSxcbiAxNjQ6XHRcdFx0ICAgIGNvbnN0IF9fYmUzMiAqbXBsc19sc2UsIGNvbnN0IF9fYmUzMiAqbWFzaylcbiAxNjU6XHR7XG4gMTY2Olx0XHRzdHJ1Y3QgbXBsc19zaGltX2hkciAqc3RhY2s7XG4gMTY3Olx0XHRfX2JlMzIgbHNlO1xuIDE2ODpcdFx0aW50IGVycjtcbiAxNjk6XHRcbiAxNzA6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpICYjNDM7IE1QTFNfSExFTikpXG4gMTcxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE3MjpcdFxuIDE3MzpcdFx0c3RhY2sgPSBtcGxzX2hkcihza2IpO1xuIDE3NDpcdFx0bHNlID0gT1ZTX01BU0tFRChzdGFjay1cdTAwM2VsYWJlbF9zdGFja19lbnRyeSwgKm1wbHNfbHNlLCAqbWFzayk7XG4gMTc1Olx0XHRlcnIgPSBza2JfbXBsc191cGRhdGVfbHNlKHNrYiwgbHNlKTtcbiAxNzY6XHRcdGlmIChlcnIpXG4gMTc3Olx0XHRcdHJldHVybiBlcnI7XG4gMTc4Olx0XG4gMTc5Olx0XHRmbG93X2tleS1cdTAwM2VtcGxzLmxzZVswXSA9IGxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3OAoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiA1NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogTVBMUyBQYWNrZXQgUHJvY2Vzc2luZyoqCgpPa2F5LCB0aGlzIGxvb2tzIHByb21pc2luZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSGVyZSYjMzk7cyB3aHk6CgpGaXJzdCwgaXQgdG91Y2hlcyBjb3JlIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljIHdpdGhpbiBgc2tiX21wbHNfcG9wYC4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgdGhlIHBvdGVudGlhbCBmb3Igc3RhbGUgb2Zmc2V0IGFuZCBpbm5lciBoZWFkZXIgbWV0YWRhdGEgYnVncyB0aGF0IGNvdWxkIGFyaXNlIGR1cmluZyBNUExTIGVuY2Fwc3VsYXRpb24gYW5kIGRlY2Fwc3VsYXRpb24sIHdoaWNoIGlzIGEgY29tbW9uIHZ1bG5lcmFiaWxpdHkgcGF0dGVybi4gVGhhdCYjMzk7cyBhIHN0cm9uZyBzaWduYWwuCgpTZWNvbmQsIHRoZSBjb2RlIGlzIGVhc2lseSByZWFjaGFibGUgaW4gY29tbW9uIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSBjYW4gaGl0IHRoaXMgdGhyb3VnaCBzdGFuZGFyZCBzZXR1cHMgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgbGV2ZXJhZ2luZyBUQyBhY3Rpb24gTVBMUyAoYENPTkZJR19ORVRfQUNUX01QTFNgLCBgQ09ORklHX05FVF9DTFNfQUNUYCkgb3IgZXZlbiBPcGVuIHZTd2l0Y2ggKGBDT05GSUdfT1BFTlZTV0lUQ0hgKS4gU28gbm8gbmVlZCBmb3IgZXhvdGljIHNldHVwczsgYSBzdGFuZGFyZCBlbnZpcm9ubWVudCB3aWxsIHdvcmsuCgpUaGlyZCwgSSYjMzk7dmUgaWRlbnRpZmllZCBrZXkgc3ltYm9scyB0byBmb2N1cyBvbjogYHNrYl9tcGxzX3BvcGAsIGBza2JfbXBsc19wdXNoYCwgYW5kIGB0Y2ZfbXBsc19hY3RgLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRob3NlIGVudHJ5cG9pbnRzLiBPa2F5LCBnb29kLiBgc2tiX21wbHNfcG9wYCwgYHNrYl9tcGxzX3B1c2hgLCBhbmQgYHRjZl9tcGxzX2FjdGAgYXJlIGFsbCBub24tc3RhdGljIHN5bWJvbHMuIEhvd2V2ZXIsIEkgd2FudCB0byBkb3VibGUtY2hlY2sgYHBvcF9tcGxzYCBhcyBpdCBpcyBzdGF0aWMgaW4gb3BlbnZzd2l0Y2guIFRoZSBlbnRyeXBvaW50IGZvciBPVlMgYWN0aW9ucyBzaG91bGQgYmUgYG92c19leGVjdXRlX2FjdGlvbnNgIG9yIGBkb19leGVjdXRlX2FjdGlvbnNgLiBMZXQmIzM5O3Mgc3RpY2sgd2l0aCB0aGUgZm9jdXMgc3ltYm9scyBmb3Igbm93OiBgc2tiX21wbHNfcG9wYCwgYHNrYl9tcGxzX3B1c2hgLCBhbmQgYHRjZl9tcGxzX2FjdGAuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlLiBXZSBuZWVkIGBORVRgICh3aGljaCBpcyBhbHdheXMgZW5hYmxlZCksIGBORVRfQ0xTX0FDVGAsIGBORVRfQUNUX01QTFNgLCBhbmQgYE9QRU5WU1dJVENIYC4gSSYjMzk7bGwganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIGluIGBuZXQvc2NoZWQvS2NvbmZpZ2AgdG8gYmUgc3VyZS4gQWxyaWdodCwgYE5FVF9BQ1RfTVBMU2AgZGVwZW5kcyBvbiBgTkVUX0NMU19BQ1RgLCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYE5FVGAuIEFuZCBgT1BFTlZTV0lUQ0hgIGRlcGVuZHMgb24gYElORVRgLCB3aGljaCBpcyBhbGwgZ29vZC4KCkZpbmFsbHksIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhlIHRvb2wgcGFyYW1ldGVycyBhcmUgY29ycmVjdGx5IGZvcm1hdHRlZCwgYW5kIGFsbCBpcyBhcyBleHBlY3RlZC4KCmBFbmFibGVDb25maWdzYDogYFsmIzM0O05FVF9BQ1RfTVBMUyYjMzQ7LCAmIzM0O05FVF9DTFNfQUNUJiMzNDssICYjMzQ7T1BFTlZTV0lUQ0gmIzM0O11gCmBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7c2tiX21wbHNfcG9wJiMzNDssICYjMzQ7c2tiX21wbHNfcHVzaCYjMzQ7LCAmIzM0O3RjZl9tcGxzX2FjdCYjMzQ7XWAKYFdvcnRoRnV6emluZ2A6IHRydWUKYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHZlcmRpY3QuCgpMb29rcyBnb29kIHRvIG1lLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfTVBMUyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9tcGxzX3BvcCYjMzQ7LAogICAgJiMzNDtza2JfbXBsc19wdXNoJiMzNDssCiAgICAmIzM0O3RjZl9tcGxzX2FjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBza2JfbXBsc19wb3AgaW4gbmV0L2NvcmUvc2tidWZmLmMgdG8gY2xlYXIgc2tiLVx1MDAzZWlubmVyX3Byb3RvY29sIHdoZW4gcG9wcGluZyB0aGUgbGFzdCBNUExTIGhlYWRlciwgcHJldmVudGluZyBzdGFsZSBpbm5lciBoZWFkZXIgb2Zmc2V0cyBvbiBzdWJzZXF1ZW50IE1QTFMgb3BlcmF0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgc2tiIE1QTFMgaGFuZGxpbmcgdXNlZCBieSBUQyBNUExTIGFjdGlvbnMgYW5kIE9wZW4gdlN3aXRjaCwgYm90aCBvZiB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0FDVF9NUExTJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX21wbHNfcG9wJiMzNDssCiAgICAmIzM0O3NrYl9tcGxzX3B1c2gmIzM0OywKICAgICYjMzQ7dGNmX21wbHNfYWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNrYl9tcGxzX3BvcCBpbiBuZXQvY29yZS9za2J1ZmYuYyB0byBjbGVhciBza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2wgd2hlbiBwb3BwaW5nIHRoZSBsYXN0IE1QTFMgaGVhZGVyLCBwcmV2ZW50aW5nIHN0YWxlIGlubmVyIGhlYWRlciBvZmZzZXRzIG9uIHN1YnNlcXVlbnQgTVBMUyBvcGVyYXRpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBza2IgTVBMUyBoYW5kbGluZyB1c2VkIGJ5IFRDIE1QTFMgYWN0aW9ucyBhbmQgT3BlbiB2U3dpdGNoLCBib3RoIG9mIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl9tcGxzX3BvcCgpYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIHJlc2V0IGBza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2xgIHRvIDAgd2hlbiB0aGUgcG9wcGVkIE1QTFMgaGVhZGVyIGlzIHRoZSBsYXN0IG9uZSAoaS5lLiBgIWV0aF9wX21wbHMobmV4dF9wcm90bylgKS4gVGhpcyBlbnN1cmVzIHRoYXQgc3Vic2VxdWVudCBgc2tiX21wbHNfcHVzaCgpYCBjYWxscyBkbyBub3QgcmV0YWluIHN0YWxlIGlubmVyIHByb3RvY29sIGFuZCBpbm5lciBuZXR3b3JrIGhlYWRlciBvZmZzZXRzLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMgaW4gYSB3YXkgdGhhdCBsZWFkcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgYnVmZmVyL29mZnNldCBpc3N1ZXMgYXJpc2luZyBmcm9tIHNrYiBoZWFkZXIgbWFuaXB1bGF0aW9uIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTJhNDFhY2UzMjE1MGRkYTQ0ODU0OTBiY2UzNDczZGI4OWRhOGM1MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDE6MjE6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IDk2NmFmM2JlZWQ5NGQuLmNjM2I0YjcwMjg4YjQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC02NjkwLDYgJiM0Mzs2NjkwLDEzIEBAIGludCBza2JfbXBsc19wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IG5leHRfcHJvdG8sIGludCBtYWNfbGVuLAogCX0KIAlza2ItJmd0O3Byb3RvY29sID0gbmV4dF9wcm90bzsKIAomIzQzOwkvKiBUaGUgbGFzdCBsYWJlbCBpcyBnb25lLCBzbyB0aGUgaW5uZXIgaGVhZGVyIHJlY29yZGVkIGJ5CiYjNDM7CSAqIHNrYl9tcGxzX3B1c2goKSBubyBsb25nZXIgZGVzY3JpYmVzIHRoaXMgcGFja2V0LiBEcm9wIGl0LCBvciBhCiYjNDM7CSAqIGxhdGVyIHB1c2gga2VlcHMgdGhlIHN0YWxlIG9mZnNldC4KJiM0MzsJICovCiYjNDM7CWlmICghZXRoX3BfbXBscyhuZXh0X3Byb3RvKSkKJiM0MzsJCXNrYi0mZ3Q7aW5uZXJfcHJvdG9jb2wgPSAwOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcG9wKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIENvZGUgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIHByb3ZpZGVkIHBhdGNoLiBJIHNlZSBpdCB0YXJnZXRzIGBuZXQvY29yZS9za2J1ZmYuY2AgYW5kIHNwZWNpZmljYWxseSB0b3VjaGVzIHRoZSBgc2tiX21wbHNfcG9wYCBmdW5jdGlvbi4gTXkgaW5zdGluY3QsIGJlaW5nIGEgc2Vhc29uZWQgcHJvLCBpcyB0byBpbW1lZGlhdGVseSBncmFzcCB0aGUgd2lkZXIgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB3aXRoaW4gdGhlIGV4aXN0aW5nIGNvZGUgZmxvdy4gVGhlcmVmb3JlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgbmF2aWdhdGUgdG8gdGhhdCBzZWN0aW9uIHdpdGhpbiBgbmV0L2NvcmUvc2tidWZmLmNgLCBmb2N1c2luZyBhcm91bmQgbGluZSA2NjkwLCB0byB1bmRlcnN0YW5kIGl0cyBuZWlnaGJvcnMgYW5kIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgY3J1Y2lhbCB0byBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjaywgYW5kIHdoZXJlIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3Igcmlza3MgbWlnaHQgcmVzaWRlLiBUaGlzIHVwZnJvbnQgY29udGV4dHVhbCBhd2FyZW5lc3MgaXMgdGhlIGZvdW5kYXRpb24gZm9yIGEgcHJvcGVyIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY2NjA6XHQgKiBFeHBlY3RzIHNrYi1cdTAwM2VkYXRhIGF0IG1hYyBoZWFkZXIuXG42NjYxOlx0ICpcbjY2NjI6XHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS5cbjY2NjM6XHQgKi9cbjY2NjQ6XHRpbnQgc2tiX21wbHNfcG9wKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBuZXh0X3Byb3RvLCBpbnQgbWFjX2xlbixcbjY2NjU6XHRcdFx0IGJvb2wgZXRoZXJuZXQpXG42NjY2Olx0e1xuNjY2NzpcdFx0aW50IGVycjtcbjY2Njg6XHRcbjY2Njk6XHRcdGlmICh1bmxpa2VseSghZXRoX3BfbXBscyhza2ItXHUwMDNlcHJvdG9jb2wpKSlcbjY2NzA6XHRcdFx0cmV0dXJuIDA7XG42NjcxOlx0XG42NjcyOlx0XHRlcnIgPSBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgbWFjX2xlbiAmIzQzOyBNUExTX0hMRU4pO1xuNjY3MzpcdFx0aWYgKHVubGlrZWx5KGVycikpXG42Njc0Olx0XHRcdHJldHVybiBlcnI7XG42Njc1Olx0XG42Njc2Olx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBtcGxzX2hkcihza2IpLCBNUExTX0hMRU4pO1xuNjY3NzpcdFx0bWVtbW92ZShza2JfbWFjX2hlYWRlcihza2IpICYjNDM7IE1QTFNfSExFTiwgc2tiX21hY19oZWFkZXIoc2tiKSxcbjY2Nzg6XHRcdFx0bWFjX2xlbik7XG42Njc5Olx0XG42NjgwOlx0XHRfX3NrYl9wdWxsKHNrYiwgTVBMU19ITEVOKTtcbjY2ODE6XHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG42NjgyOlx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgbWFjX2xlbik7XG42NjgzOlx0XG42Njg0Olx0XHRpZiAoZXRoZXJuZXQgXHUwMDI2XHUwMDI2IG1hY19sZW4gXHUwMDNlPSBFVEhfSExFTikge1xuNjY4NTpcdFx0XHRzdHJ1Y3QgZXRoaGRyICpoZHI7XG42Njg2Olx0XG42Njg3Olx0XHRcdC8qIHVzZSBtcGxzX2hkcigpIHRvIGdldCBldGhlcnR5cGUgdG8gYWNjb3VudCBmb3IgVkxBTnMuICovXG42Njg4Olx0XHRcdGhkciA9IChzdHJ1Y3QgZXRoaGRyICopKCh2b2lkICopbXBsc19oZHIoc2tiKSAtIEVUSF9ITEVOKTtcbjY2ODk6XHRcdFx0c2tiX21vZF9ldGhfdHlwZShza2IsIGhkciwgbmV4dF9wcm90byk7XG42NjkwOlx0XHR9XG42NjkxOlx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBuZXh0X3Byb3RvO1xuNjY5MjpcdFxuNjY5MzpcdFx0LyogVGhlIGxhc3QgbGFiZWwgaXMgZ29uZSwgc28gdGhlIGlubmVyIGhlYWRlciByZWNvcmRlZCBieVxuNjY5NDpcdFx0ICogc2tiX21wbHNfcHVzaCgpIG5vIGxvbmdlciBkZXNjcmliZXMgdGhpcyBwYWNrZXQuIERyb3AgaXQsIG9yIGFcbjY2OTU6XHRcdCAqIGxhdGVyIHB1c2gga2VlcHMgdGhlIHN0YWxlIG9mZnNldC5cbjY2OTY6XHRcdCAqL1xuNjY5NzpcdFx0aWYgKCFldGhfcF9tcGxzKG5leHRfcHJvdG8pKVxuNjY5ODpcdFx0XHRza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2wgPSAwO1xuNjY5OTpcdFxuNjcwMDpcdFx0cmV0dXJuIDA7XG42NzAxOlx0fVxuNjcwMjpcdEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9tcGxzX3BvcCk7XG42NzAzOlx0XG42NzA0Olx0LyoqXG42NzA1Olx0ICogc2tiX21wbHNfdXBkYXRlX2xzZSgpIC0gbW9kaWZ5IG91dGVybW9zdCBNUExTIGhlYWRlciBhbmQgdXBkYXRlIGNzdW1cbjY3MDY6XHQgKlxuNjcwNzpcdCAqIEBza2I6IGJ1ZmZlclxuNjcwODpcdCAqIEBtcGxzX2xzZTogbmV3IE1QTFMgbGFiZWwgc3RhY2sgZW50cnkgdG8gdXBkYXRlIHRvXG42NzA5Olx0ICpcbjY3MTA6XHQgKiBFeHBlY3RzIHNrYi1cdTAwM2VkYXRhIGF0IG1hYyBoZWFkZXIuXG42NzExOlx0ICpcbjY3MTI6XHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS5cbjY3MTM6XHQgKi9cbjY3MTQ6XHRpbnQgc2tiX21wbHNfdXBkYXRlX2xzZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgbXBsc19sc2UpXG42NzE1Olx0e1xuNjcxNjpcdFx0aW50IGVycjtcbjY3MTc6XHRcbjY3MTg6XHRcdGlmICh1bmxpa2VseSghZXRoX3BfbXBscyhza2ItXHUwMDNlcHJvdG9jb2wpKSlcbjY3MTk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHNrYl9tcGxzX3B1c2ggYW5kIElubmVyIFByb3RvY29scyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBza2JfbXBsc19wdXNoYCBpcyBpbXBsZW1lbnRlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBUaGUgbWFpbiBwb2ludCBvZiBpbnRlcmVzdCBpcyBob3cgdGhlIGBpbm5lcl9wcm90b2NvbGAgZmllbGQgaXMgYmVpbmcgdXRpbGl6ZWQgaW4gdGhhdCBmdW5jdGlvbiwgYW5kIGlmIGl0IGlzIGJlaW5nIHVzZWQgaW4gb3RoZXIgcGxhY2VzIHRvby4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpIGFuZCBob3cgdGhlIGlubmVyIHByb3RvY29sIGdldHMgaGFuZGxlZCBkdXJpbmcgdGhlIE1QTFMgbGFiZWwgcHVzaCBvcGVyYXRpb24uIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIGRlYWwgd2l0aCBuZXN0ZWQgcHJvdG9jb2xzIGFuZCBmb3J3YXJkaW5nIGRlY2lzaW9ucyBpbiB0aGUgZGF0YSBwbGFuZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byBlbnN1cmUgdGhhdCB0aGUgcHJvdG9jb2wgc3RhY2sgY29ycmVjdGx5IGludGVycHJldHMgYW5kIHByb2Nlc3NlcyB0aGUgbmVzdGVkIGhlYWRlcnMgYWZ0ZXIgdGhlIE1QTFMgbGFiZWwgaXMgYWRkZWQuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIHJlZmVyZW5jZXMgYW5kIHVzYWdlIG9mIHRoYXQgdmFyaWFibGUgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX21wbHNfcHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9NjU4ND1zdGF0aWMgdm9pZCBza2JfbW9kX2V0aF90eXBlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBldGhoZHIgKmhkcixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02NTk2LS8qKlxubmV0L2NvcmUvc2tidWZmLmM6NjU5NzogKiBza2JfbXBsc19wdXNoKCkgLSBwdXNoIGEgbmV3IE1QTFMgaGVhZGVyIGFmdGVyIG1hY19sZW4gYnl0ZXMgZnJvbSBzdGFydCBvZlxubmV0L2NvcmUvc2tidWZmLmMtNjU5OC0gKiAgICAgICAgICAgICAgICAgICB0aGUgcGFja2V0XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjYwMy0gKiBAbWFjX2xlbjogbGVuZ3RoIG9mIHRoZSBNQUMgaGVhZGVyXG5uZXQvY29yZS9za2J1ZmYuYzo2NjA0OiAqIEBldGhlcm5ldDogZmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgcmVzdWx0aW5nIHBhY2tldCBhZnRlciBza2JfbXBsc19wdXNoIGlzXG5uZXQvY29yZS9za2J1ZmYuYy02NjA1LSAqICAgICAgICAgICAgZXRoZXJuZXRcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02NjEwLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6NjYxMTppbnQgc2tiX21wbHNfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgbXBsc19sc2UsIF9fYmUxNiBtcGxzX3Byb3RvLFxubmV0L2NvcmUvc2tidWZmLmMtNjYxMi1cdFx0ICBpbnQgbWFjX2xlbiwgYm9vbCBldGhlcm5ldClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02NjQ5LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjY2NTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcHVzaCk7XG5uZXQvY29yZS9za2J1ZmYuYy02NjUxLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTY2NjQ9aW50IHNrYl9tcGxzX3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgbmV4dF9wcm90bywgaW50IG1hY19sZW4sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjY5My1cdC8qIFRoZSBsYXN0IGxhYmVsIGlzIGdvbmUsIHNvIHRoZSBpbm5lciBoZWFkZXIgcmVjb3JkZWQgYnlcbm5ldC9jb3JlL3NrYnVmZi5jOjY2OTQ6XHQgKiBza2JfbXBsc19wdXNoKCkgbm8gbG9uZ2VyIGRlc2NyaWJlcyB0aGlzIHBhY2tldC4gRHJvcCBpdCwgb3IgYVxubmV0L2NvcmUvc2tidWZmLmMtNjY5NS1cdCAqIGxhdGVyIHB1c2gga2VlcHMgdGhlIHN0YWxlIG9mZnNldC5cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTEzMD1zdGF0aWMgaW50IHB1c2hfbXBscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTEzNC1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTM1Olx0ZXJyID0gc2tiX21wbHNfcHVzaChza2IsIG1wbHNfbHNlLCBtcGxzX2V0aGVydHlwZSwgbWFjX2xlbiwgISFtYWNfbGVuKTtcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTM2LVx0aWYgKGVycilcbi0tXG5uZXQvc2NoZWQvYWN0X21wbHMuYz01Mz1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtODQtXHRcdG5ld19sc2UgPSB0Y2ZfbXBsc19nZXRfbHNlKE5VTEwsIHAsICFldGhfcF9tcGxzKHNrYl9wcm90b2NvbChza2IsIHRydWUpKSk7XG5uZXQvc2NoZWQvYWN0X21wbHMuYzo4NTpcdFx0aWYgKHNrYl9tcGxzX3B1c2goc2tiLCBuZXdfbHNlLCBwLVx1MDAzZXRjZm1fcHJvdG8sIG1hY19sZW4sXG5uZXQvc2NoZWQvYWN0X21wbHMuYy04Ni1cdFx0XHRcdCAgc2tiLVx1MDAzZWRldiBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtMTAyLVxubmV0L3NjaGVkL2FjdF9tcGxzLmM6MTAzOlx0XHRpZiAoc2tiX21wbHNfcHVzaChza2IsIG5ld19sc2UsIHAtXHUwMDNldGNmbV9wcm90bywgMCwgZmFsc2UpKVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtMTA0LVx0XHRcdGdvdG8gZHJvcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBza2JfbXBsc19wdXNoYCBmdW5jdGlvbiwgZnJlc2ggZnJvbSB0aGUgc291cmNlIGNvZGU6CgoqKkRpdmluZyBpbnRvIHNrYl9tcGxzX3B1c2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBza2JfbXBsc19wdXNoYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIHRoZSBjcnVjaWFsIHN0ZXAgb2YgcHJlcGVuZGluZyBNUExTIGxhYmVscyBvbnRvIGEgbmV0d29yayBidWZmZXIgKHNrYikuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gaGF2ZSBhIGNvbXByZWhlbnNpdmUgZ3Jhc3Agb2YgTVBMUyBmb3J3YXJkaW5nIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCByaWdodD8gTGV0JiMzOTtzIGJyZWFrIGRvd24gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGlzIHByb2Nlc3MuCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZWNoYW5pY3MgaGVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHNrYiBpcyBiZWluZyBtYW5pcHVsYXRlZCwgc3BlY2lmaWNhbGx5LCBob3cgdGhlIGRhdGEgcG9pbnRlciBpcyBtYW5hZ2VkLCB0aGUgbGVuZ3RoIGFkanVzdGVkLCBhbmQgdGhlIGFjdHVhbCBsYWJlbCBpcyBpbnNlcnRlZC4gSSBhbHNvIHdhbnQgdG8gb2JzZXJ2ZSB0aGUgaGFuZGxpbmcgb2YgcG90ZW50aWFsIGVkZ2UgY2FzZXMsIGVycm9yIGNvbmRpdGlvbnMsIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBpZiBuZWNlc3NhcnkuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IGhhcHBlbnMgaWYgd2UmIzM5O3JlIHB1c2hpbmcgbXVsdGlwbGUgbGFiZWxzIGFuZCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHRoZSBsYWJlbCBzdGFjayBjb3JyZWN0bHkuIEkmIzM5O2xsIHByb2JhYmx5IGFsc28gY2hlY2sgdGhlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIHVzZWQsIHNpbmNlIG1vZGlmeWluZyBza2JzIGNhbiBiZSBhIHByZXR0eSB0cmlja3kgYnVzaW5lc3MuCgpUaGlzIHdpbGwgZ2l2ZSBtZSBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgTVBMUyBpbXBsZW1lbnRhdGlvbiwgdGhlIGRlc2lnbiBjaG9pY2VzIG1hZGUgYnkgdGhlIGtlcm5lbCBkZXZlbG9wZXJzLCBhbmQgaG93IGVmZmljaWVudGx5IHRoaXMgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBidWlsZGluZyBibG9jayB0byB1bmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgbmV0d29yayBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjYwMDpcdCAqIEBza2I6IGJ1ZmZlclxuNjYwMTpcdCAqIEBtcGxzX2xzZTogTVBMUyBsYWJlbCBzdGFjayBlbnRyeSB0byBwdXNoXG42NjAyOlx0ICogQG1wbHNfcHJvdG86IGV0aGVydHlwZSBvZiB0aGUgbmV3IE1QTFMgaGVhZGVyIChleHBlY3RzIDB4ODg0NyBvciAweDg4NDgpXG42NjAzOlx0ICogQG1hY19sZW46IGxlbmd0aCBvZiB0aGUgTUFDIGhlYWRlclxuNjYwNDpcdCAqIEBldGhlcm5ldDogZmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgcmVzdWx0aW5nIHBhY2tldCBhZnRlciBza2JfbXBsc19wdXNoIGlzXG42NjA1Olx0ICogICAgICAgICAgICBldGhlcm5ldFxuNjYwNjpcdCAqXG42NjA3Olx0ICogRXhwZWN0cyBza2ItXHUwMDNlZGF0YSBhdCBtYWMgaGVhZGVyLlxuNjYwODpcdCAqXG42NjA5Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuXG42NjEwOlx0ICovXG42NjExOlx0aW50IHNrYl9tcGxzX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIG1wbHNfbHNlLCBfX2JlMTYgbXBsc19wcm90byxcbjY2MTI6XHRcdFx0ICBpbnQgbWFjX2xlbiwgYm9vbCBldGhlcm5ldClcbjY2MTM6XHR7XG42NjE0Olx0XHRzdHJ1Y3QgbXBsc19zaGltX2hkciAqbHNlO1xuNjYxNTpcdFx0aW50IGVycjtcbjY2MTY6XHRcbjY2MTc6XHRcdGlmICh1bmxpa2VseSghZXRoX3BfbXBscyhtcGxzX3Byb3RvKSkpXG42NjE4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjYxOTpcdFxuNjYyMDpcdFx0LyogTmV0d29ya2luZyBzdGFjayBkb2VzIG5vdCBhbGxvdyBzaW11bHRhbmVvdXMgVHVubmVsIGFuZCBNUExTIEdTTy4gKi9cbjY2MjE6XHRcdGlmIChza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbjY2MjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42NjIzOlx0XG42NjI0Olx0XHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBNUExTX0hMRU4pO1xuNjYyNTpcdFx0aWYgKHVubGlrZWx5KGVycikpXG42NjI2Olx0XHRcdHJldHVybiBlcnI7XG42NjI3Olx0XG42NjI4Olx0XHRpZiAoIXNrYi1cdTAwM2Vpbm5lcl9wcm90b2NvbCkge1xuNjYyOTpcdFx0XHRza2Jfc2V0X2lubmVyX25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuNjYzMDpcdFx0XHRza2Jfc2V0X2lubmVyX3Byb3RvY29sKHNrYiwgc2tiLVx1MDAzZXByb3RvY29sKTtcbjY2MzE6XHRcdH1cbjY2MzI6XHRcbjY2MzM6XHRcdHNrYl9wdXNoKHNrYiwgTVBMU19ITEVOKTtcbjY2MzQ6XHRcdG1lbW1vdmUoc2tiX21hY19oZWFkZXIoc2tiKSAtIE1QTFNfSExFTiwgc2tiX21hY19oZWFkZXIoc2tiKSxcbjY2MzU6XHRcdFx0bWFjX2xlbik7XG42NjM2Olx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuNjYzNzpcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIG1hY19sZW4pO1xuNjYzODpcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbjY2Mzk6XHRcbjY2NDA6XHRcdGxzZSA9IG1wbHNfaGRyKHNrYik7XG42NjQxOlx0XHRsc2UtXHUwMDNlbGFiZWxfc3RhY2tfZW50cnkgPSBtcGxzX2xzZTtcbjY2NDI6XHRcdHNrYl9wb3N0cHVzaF9yY3N1bShza2IsIGxzZSwgTVBMU19ITEVOKTtcbjY2NDM6XHRcbjY2NDQ6XHRcdGlmIChldGhlcm5ldCBcdTAwMjZcdTAwMjYgbWFjX2xlbiBcdTAwM2U9IEVUSF9ITEVOKVxuNjY0NTpcdFx0XHRza2JfbW9kX2V0aF90eXBlKHNrYiwgZXRoX2hkcihza2IpLCBtcGxzX3Byb3RvKTtcbjY2NDY6XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IG1wbHNfcHJvdG87XG42NjQ3Olx0XG42NjQ4Olx0XHRyZXR1cm4gMDtcbjY2NDk6XHR9XG42NjUwOlx0RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcHVzaCk7XG42NjUxOlx0XG42NjUyOlx0LyoqXG42NjUzOlx0ICogc2tiX21wbHNfcG9wKCkgLSBwb3AgdGhlIG91dGVybW9zdCBNUExTIGhlYWRlclxuNjY1NDpcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NzcKCQkJCQkJCW91dHB1dDogMjAyCgkJCQkJCQl0aG91Z2h0czogNTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QTFMgSGVhZGVyIE1hbmFnZW1lbnQ6IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgTVBMUyBoYW5kbGluZyB3aXRoaW4gYHNrYl9tcGxzX3B1c2hgIGFuZCBgc2tiX21wbHNfcG9wYCwgZm9jdXNlcyBvbiBhIHBvdGVudGlhbCBzdGF0ZSBtYW5hZ2VtZW50IGlzc3VlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgYXMgYWx3YXlzLCB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggaXQuCgpUaGUgaXNzdWUgbGllcyBpbiBob3cgdGhlIGBpbm5lcl9wcm90b2NvbGAgd2l0aGluIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgc3RydWN0dXJlIGlzIGhhbmRsZWQuIFByZXZpb3VzbHksIHdoZW4gcG9wcGluZyB0aGUgbGFzdCBNUExTIGhlYWRlciBpbiBgc2tiX21wbHNfcG9wYCwgdGhlIGBza2ItJmd0O2lubmVyX3Byb3RvY29sYCB3YXNuJiMzOTt0IGJlaW5nIGNsZWFyZWQgaWYgdGhlIG5leHQgcHJvdG9jb2wgd2FzbiYjMzk7dCBNUExTLiBUaGlzIG1lYW50IHRoYXQgaWYgYSBzdWJzZXF1ZW50IHB1c2ggb3BlcmF0aW9uIG9jY3VycmVkLCB0aGUgYGlubmVyX3Byb3RvY29sYCB3b3VsZCByZW1haW4gc3RhbGUuIFRoZSBuZXcgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgc2ltcGxlIGBza2ItJmd0O2lubmVyX3Byb3RvY29sID0gMDtgIGNsZWFyaW5nIHRoZSBwcm90b2NvbCBzdGF0ZS4KCk15IGZvY3VzIG5vdyBpcyBhIHNhZmV0eSBldmFsdWF0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSBtZW1vcnkgc2FmZXR5IGlzc3Vlcz8gTGV0JiMzOTtzIGNoZWNrOgoKMS4gICoqRXhwb3NlZCBVbmluaXRpYWxpemVkIE1lbW9yeToqKiBOby4gVGhlIHBhdGNoIGV4cGxpY2l0bHkgKnNldHMqIHRoZSB2YWx1ZSB0byB6ZXJvLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciBhbnkgaW50ZXJuYWwga2VybmVsIGNvbnRleHQgYXMgYSByZXN1bHQgb2YgdGhlIGNoYW5nZS4KMi4gICoqSW50ZXJhY3Rpb24gd2l0aCBDb3B5IE9wZXJhdGlvbnM6KiogTm8uIFRoZXJlIGlzIG5vIGludGVyYWN0aW9uIHdpdGggb3BlcmF0aW9ucyBsaWtlIGBjb3B5X3RvX3VzZXJgLCBgbmV0bGlua2AsIGBpb2N0bGAsIGFuZCBubyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgYXJlIHRvdWNoZWQgYnkgdGhpcyBjb2RlIHBhdGguCjMuICAqKkNvbmRpdGlvbmFsIEJyYW5jaGluZyBvbiBVbmluaXRpYWxpemVkIFZhcmlhYmxlczoqKiBOby4gYG5leHRfcHJvdG9gIGlzIHByb3ZpZGVkIGFzIGFuIGFyZ3VtZW50IGFuZCB0aHVzIGluaXRpYWxpemVkLgo0LiAgKipSZWFkaW5nIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OioqIE5vLiBUaGUgY29kZSAqY2xlYXJzKiB0aGUgc3RhbGUgYGlubmVyX3Byb3RvY29sYCwgZW5zdXJpbmcgc3Vic2VxdWVudCBwdXNoZXMgd2lsbCBjb3JyZWN0bHkgY2FwdHVyZSB0aGUgaW5uZXIgbmV0d29yayBoZWFkZXIgYW5kIHByb3RvY29sLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIG1vcmUgc3BlY2lmaWMgS0FTQU4vS01TQU4gaW1wbGljYXRpb25zLiBUaGlzIHBhdGNoICpmaXhlcyogYSBwcm90b2NvbCBzdGF0ZSB0cmFja2luZyBpc3N1ZSwgbm90IGEgbWVtb3J5IGFsbG9jYXRpb24gb3IgYWNjZXNzIHByb2JsZW0uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBhY2Nlc3Nlcywgb3IgbGVha3MgdGhhdCBtaWdodCB0cmlnZ2VyIEtNU0FOJiMzOTtzIGNoZWNrcy4gSXQmIzM5O3MgcHVyZSBsb2dpYyBjb3JyZWN0aW9uLCBjbGVhcmluZyB0aGUgc3RhbGUgYGlubmVyX3Byb3RvY29sYC4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBmYWxzZSBpbiB0aGlzIGNhc2UuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tiX21wbHNfcG9wKClgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgdG8gcmVzZXQgYHNrYi1cdTAwM2Vpbm5lcl9wcm90b2NvbGAgdG8gMCB3aGVuIHRoZSBwb3BwZWQgTVBMUyBoZWFkZXIgaXMgdGhlIGxhc3Qgb25lIChpLmUuIGAhZXRoX3BfbXBscyhuZXh0X3Byb3RvKWApLiBUaGlzIGVuc3VyZXMgdGhhdCBzdWJzZXF1ZW50IGBza2JfbXBsc19wdXNoKClgIGNhbGxzIGRvIG5vdCByZXRhaW4gc3RhbGUgaW5uZXIgcHJvdG9jb2wgYW5kIGlubmVyIG5ldHdvcmsgaGVhZGVyIG9mZnNldHMuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBzdHJ1Y3QgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGxlbmd0aHMgb3IgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IGxlYWRzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gQW55IHBvdGVudGlhbCBidWZmZXIvb2Zmc2V0IGlzc3VlcyBhcmlzaW5nIGZyb20gc2tiIGhlYWRlciBtYW5pcHVsYXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl9tcGxzX3BvcCgpYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIHJlc2V0IGBza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2xgIHRvIDAgd2hlbiB0aGUgcG9wcGVkIE1QTFMgaGVhZGVyIGlzIHRoZSBsYXN0IG9uZSAoaS5lLiBgIWV0aF9wX21wbHMobmV4dF9wcm90bylgKS4gVGhpcyBlbnN1cmVzIHRoYXQgc3Vic2VxdWVudCBgc2tiX21wbHNfcHVzaCgpYCBjYWxscyBkbyBub3QgcmV0YWluIHN0YWxlIGlubmVyIHByb3RvY29sIGFuZCBpbm5lciBuZXR3b3JrIGhlYWRlciBvZmZzZXRzLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMgaW4gYSB3YXkgdGhhdCBsZWFkcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgYnVmZmVyL29mZnNldCBpc3N1ZXMgYXJpc2luZyBmcm9tIHNrYiBoZWFkZXIgbWFuaXB1bGF0aW9uIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6MjIuNTg3NjQ2OTkyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIxNTA3NzY1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0FDVF9NUExTXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfbXBsc19wb3BcIixcbiAgICBcInNrYl9tcGxzX3B1c2hcIixcbiAgICBcInRjZl9tcGxzX2FjdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl9tcGxzX3BvcCgpYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIHJlc2V0IGBza2ItXFx1MDAzZWlubmVyX3Byb3RvY29sYCB0byAwIHdoZW4gdGhlIHBvcHBlZCBNUExTIGhlYWRlciBpcyB0aGUgbGFzdCBvbmUgKGkuZS4gYCFldGhfcF9tcGxzKG5leHRfcHJvdG8pYCkuIFRoaXMgZW5zdXJlcyB0aGF0IHN1YnNlcXVlbnQgYHNrYl9tcGxzX3B1c2goKWAgY2FsbHMgZG8gbm90IHJldGFpbiBzdGFsZSBpbm5lciBwcm90b2NvbCBhbmQgaW5uZXIgbmV0d29yayBoZWFkZXIgb2Zmc2V0cy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMgaW4gYSB3YXkgdGhhdCBsZWFkcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgYnVmZmVyL29mZnNldCBpc3N1ZXMgYXJpc2luZyBmcm9tIHNrYiBoZWFkZXIgbWFuaXB1bGF0aW9uIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBza2JfbXBsc19wb3AgaW4gbmV0L2NvcmUvc2tidWZmLmMgdG8gY2xlYXIgc2tiLVxcdTAwM2Vpbm5lcl9wcm90b2NvbCB3aGVuIHBvcHBpbmcgdGhlIGxhc3QgTVBMUyBoZWFkZXIsIHByZXZlbnRpbmcgc3RhbGUgaW5uZXIgaGVhZGVyIG9mZnNldHMgb24gc3Vic2VxdWVudCBNUExTIG9wZXJhdGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIHNrYiBNUExTIGhhbmRsaW5nIHVzZWQgYnkgVEMgTVBMUyBhY3Rpb25zIGFuZCBPcGVuIHZTd2l0Y2gsIGJvdGggb2Ygd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIxOjIyLjU4NzY1MTQzMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE4MjQwMzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTJhNDFhY2UzMjE1MGRkYTQ0ODU0OTBiY2UzNDczZGI4OWRhOGM1MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDAxOjIxOjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5pbmRleCA5NjZhZjNiZWVkOTRkLi5jYzNiNGI3MDI4OGI0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXFxuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5AQCAtNjY5MCw2ICs2NjkwLDEzIEBAIGludCBza2JfbXBsc19wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IG5leHRfcHJvdG8sIGludCBtYWNfbGVuLFxcbiBcXHR9XFxuIFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBuZXh0X3Byb3RvO1xcbiBcXG4rXFx0LyogVGhlIGxhc3QgbGFiZWwgaXMgZ29uZSwgc28gdGhlIGlubmVyIGhlYWRlciByZWNvcmRlZCBieVxcbitcXHQgKiBza2JfbXBsc19wdXNoKCkgbm8gbG9uZ2VyIGRlc2NyaWJlcyB0aGlzIHBhY2tldC4gRHJvcCBpdCwgb3IgYVxcbitcXHQgKiBsYXRlciBwdXNoIGtlZXBzIHRoZSBzdGFsZSBvZmZzZXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWV0aF9wX21wbHMobmV4dF9wcm90bykpXFxuK1xcdFxcdHNrYi1cXHUwMDNlaW5uZXJfcHJvdG9jb2wgPSAwO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcG9wKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6MjMuMDA2NjM1Njk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjI4MDE5OTYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX01QTFNcIixcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl9tcGxzX3BvcFwiLFxuICAgIFwic2tiX21wbHNfcHVzaFwiLFxuICAgIFwidGNmX21wbHNfYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2tiX21wbHNfcG9wIGluIG5ldC9jb3JlL3NrYnVmZi5jIHRvIGNsZWFyIHNrYi1cXHUwMDNlaW5uZXJfcHJvdG9jb2wgd2hlbiBwb3BwaW5nIHRoZSBsYXN0IE1QTFMgaGVhZGVyLCBwcmV2ZW50aW5nIHN0YWxlIGlubmVyIGhlYWRlciBvZmZzZXRzIG9uIHN1YnNlcXVlbnQgTVBMUyBvcGVyYXRpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBza2IgTVBMUyBoYW5kbGluZyB1c2VkIGJ5IFRDIE1QTFMgYWN0aW9ucyBhbmQgT3BlbiB2U3dpdGNoLCBib3RoIG9mIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMmE0MWFjZTMyMTUwZGRhNDQ4NTQ5MGJjZTM0NzNkYjg5ZGE4YzUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMToyMToyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IDk2NmFmM2JlZWQ5NGQuLmNjM2I0YjcwMjg4YjQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC02NjkwLDYgKzY2OTAsMTMgQEAgaW50IHNrYl9tcGxzX3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgbmV4dF9wcm90bywgaW50IG1hY19sZW4sXG4gXHR9XG4gXHRza2ItXHUwMDNlcHJvdG9jb2wgPSBuZXh0X3Byb3RvO1xuIFxuK1x0LyogVGhlIGxhc3QgbGFiZWwgaXMgZ29uZSwgc28gdGhlIGlubmVyIGhlYWRlciByZWNvcmRlZCBieVxuK1x0ICogc2tiX21wbHNfcHVzaCgpIG5vIGxvbmdlciBkZXNjcmliZXMgdGhpcyBwYWNrZXQuIERyb3AgaXQsIG9yIGFcbitcdCAqIGxhdGVyIHB1c2gga2VlcHMgdGhlIHN0YWxlIG9mZnNldC5cbitcdCAqL1xuK1x0aWYgKCFldGhfcF9tcGxzKG5leHRfcHJvdG8pKVxuK1x0XHRza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2wgPSAwO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9tcGxzX3BvcCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMToyMy4wMDY2MzcwOTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODQ4NjY2MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipBbmFseXppbmcgdGhlIE1QTFMgUG9wIFBhdGNoKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHNrYl9tcGxzX3BvcGAsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGlzIGZ1bmN0aW9uJ3MgcHVycG9zZSBhbmQsIGNydWNpYWxseSwgaXRzIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIG5ldHdvcmsgc3RhY2suXG5cblRoZXJlZm9yZSwgSSdsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGRpZyBkZWVwZXIuIEknbSBnb2luZyB0byByZWFjaCBmb3IgZWl0aGVyIGBncmVwcGVyYCBvciBwZXJoYXBzIGEgZGlyZWN0IGByZWFkLWZpbGVgIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIGBza2JfbXBsc19wb3BgIGl0c2VsZi4gSSBuZWVkIHRoZSBjb2RlIHJpZ2h0IHRoZXJlIGluIGZyb250IG9mIG1lLiBJIHdpbGwgY2hlY2sgZm9yIGlubGluZS1lZCBjb2RlIGFzIHdlbGwuXG5cblRoZW4sIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjYWxsZXJzIG9mIGBza2JfbXBsc19wb3BgLiBTZWVpbmcgaG93IGl0J3MgdXNlZCDigJMgdGhlIGVudmlyb25tZW50cyBpdCdzIGludm9rZWQgaW4sIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCB0aGUgcHJvdG9jb2xzIGl0J3MgYXNzb2NpYXRlZCB3aXRoIOKAkyBpcyBwYXJhbW91bnQuIFRoaXMgd2lsbCBpbnN0YW50bHkgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBwb3RlbnRpYWwgaW1wYWN0cyB0aGlzIHBhdGNoIG1pZ2h0IGhhdmUuIENvbnRleHQgaXMga2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6MjcuODU1MzA2MzU3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjE0ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9tcGxzX3BvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jPTY2NTA9RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcHVzaCk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NjUyLS8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjY2NTM6ICogc2tiX21wbHNfcG9wKCkgLSBwb3AgdGhlIG91dGVybW9zdCBNUExTIGhlYWRlclxcbm5ldC9jb3JlL3NrYnVmZi5jLTY2NTQtICpcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY2NjMtICovXFxubmV0L2NvcmUvc2tidWZmLmM6NjY2NDppbnQgc2tiX21wbHNfcG9wKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBuZXh0X3Byb3RvLCBpbnQgbWFjX2xlbixcXG5uZXQvY29yZS9za2J1ZmYuYy02NjY1LVxcdFxcdCBib29sIGV0aGVybmV0KVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjcwMS19XFxubmV0L2NvcmUvc2tidWZmLmM6NjcwMjpFWFBPUlRfU1lNQk9MX0dQTChza2JfbXBsc19wb3ApO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTY3MDMtXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE0Nj1zdGF0aWMgaW50IHBvcF9tcGxzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTAtXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxNTE6XFx0ZXJyID0gc2tiX21wbHNfcG9wKHNrYiwgZXRoZXJ0eXBlLCBza2ItXFx1MDAzZW1hY19sZW4sXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTItXFx0XFx0XFx0ICAgb3ZzX2tleV9tYWNfcHJvdG8oa2V5KSA9PSBNQUNfUFJPVE9fRVRIRVJORVQpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NTM9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9tcGxzX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNzgtXFx0Y2FzZSBUQ0FfTVBMU19BQ1RfUE9QOlxcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjc5OlxcdFxcdGlmIChza2JfbXBsc19wb3Aoc2tiLCBwLVxcdTAwM2V0Y2ZtX3Byb3RvLCBtYWNfbGVuLFxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTgwLVxcdFxcdFxcdFxcdCBza2ItXFx1MDAzZWRldiBcXHUwMDI2XFx1MDAyNiBza2ItXFx1MDAzZWRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMToyNy45MzA5Mjg3NDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTM4ODI4MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVBMUyBQYWNrZXQgSGFuZGxpbmcgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBhbmQgY29udGV4dCBvZiBgc2tiX21wbHNfcG9wYC4gRmlyc3QsIEkgc2hvdWxkIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9uIGl0c2VsZiwgYHNrYl9tcGxzX3BvcGAgd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIFRoYXQgcGxhY2VzIGl0IGZpcm1seSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgd2hpY2ggaXMgZ29vZCB0byBrbm93IOKAkyBpdCdzIGZ1bmRhbWVudGFsLiBOb3csIHdoZXJlIGlzIGl0IGJlaW5nICpjYWxsZWQqPyBMZXQncyBzZWUuLi4gdGhlIGNvZGUgc2VhcmNoIHR1cm5lZCB1cCB0aHJlZSBjYWxsZXJzOiBgbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY2Ag4oCTIHRoYXQncyBPcGVuIHZTd2l0Y2gsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBpdCBpcyB1c2luZyB0aGlzIGZ1bmN0aW9uLiBUaGVuLCBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgIOKAkyBhaCwgdGhhdCdzIHRoZSBNUExTIGNsYXNzaWZpZXIvYWN0aW9uIG1vZHVsZSBpbiB0cmFmZmljIGNvbnRyb2wuIEFuZCwgZmluYWxseSwgdGhlIGV4cGVjdGVkIGNhbGxzIGZyb20gd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AgZm9yIHVzZSBpbiBgc2tiX21wbHNfcHVzaGAgYW5kIGBza2JfbXBsc19wb3BgIGl0c2VsZi5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgIGFuZCBgbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY2AsIGFuZCBzZWUgd2hhdCB0aGVpciBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIHVzaW5nIGBza2JfbXBsc19wb3BgLCBhbmQgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgaXRzIGludm9jYXRpb24uIEtub3dpbmcgdGhhdCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiB3aGVyZSB0aGUgTVBMUyBwYWNrZXQgcHJvY2Vzc2luZyBpcyBoYXBwZW5pbmcgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6MzEuNDY5NzYwNTQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTQzMzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9BQ1RfTVBMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTgwOD1jb25maWcgTkVUX0FDVF9DU1VNXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy04MTgtXFxubmV0L3NjaGVkL0tjb25maWc6ODE5OmNvbmZpZyBORVRfQUNUX01QTFNcXG5uZXQvc2NoZWQvS2NvbmZpZy04MjAtXFx0dHJpc3RhdGUgXFxcIk1QTFMgbWFuaXB1bGF0aW9uXFxcIlxcbi0tXFxubmV0L3NjaGVkL01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19ORVRfQUNUX0NTVU0pXFx0Kz0gYWN0X2NzdW0ub1xcbm5ldC9zY2hlZC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfTkVUX0FDVF9NUExTKVxcdCs9IGFjdF9tcGxzLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX05FVF9BQ1RfVkxBTilcXHQrPSBhY3Rfdmxhbi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIxOjMxLjU0MTcxMDY1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NzQ5NzU1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFRyYWZmaWMgQ29udHJvbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIHRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLiBNeSBpbnR1aXRpb24gc2F5cyB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYXJlIHByb2JhYmx5IGluIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIExldCdzIHplcm8gaW4gb24gdGhhdCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSA4MTkuIEknbSBub3QgZW50aXJlbHkgc3VyZSAqd2hhdCogSSdtIGxvb2tpbmcgZm9yIHlldCwgYnV0IHRoYXQncyBvZnRlbiBob3cgaXQgZ29lcy4gVGhhdCBsaW5lIGZlZWxzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGxvcmUgdGhlIGFyZWEgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgaG9sZHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTozMy4xMTY2ODg4NDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MTA6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuIDgxMTpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiA4MTI6XFx0XFx0aGVscFxcbiA4MTM6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIHVwZGF0ZSBzb21lIGNvbW1vbiBjaGVja3N1bSBhZnRlciBzb21lIGRpcmVjdFxcbiA4MTQ6XFx0XFx0ICBwYWNrZXQgYWx0ZXJhdGlvbnMuXFxuIDgxNTpcXHRcXG4gODE2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4MTc6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2NzdW0uXFxuIDgxODpcXHRcXG4gODE5OlxcdGNvbmZpZyBORVRfQUNUX01QTFNcXG4gODIwOlxcdFxcdHRyaXN0YXRlIFxcXCJNUExTIG1hbmlwdWxhdGlvblxcXCJcXG4gODIxOlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gODIyOlxcdFxcdGhlbHBcXG4gODIzOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBwdXNoIG9yIHBvcCBNUExTIGhlYWRlcnMuXFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gODI2OlxcdFxcbiA4Mjc6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDgyODpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfbXBscy5cXG4gODI5OlxcdFxcbiA4MzA6XFx0Y29uZmlnIE5FVF9BQ1RfVkxBTlxcbiA4MzE6XFx0XFx0dHJpc3RhdGUgXFxcIlZsYW4gbWFuaXB1bGF0aW9uXFxcIlxcbiA4MzI6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA4MzM6XFx0XFx0aGVscFxcbiA4MzQ6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIHB1c2ggb3IgcG9wIHZsYW4gaGVhZGVycy5cXG4gODM1OlxcdFxcbiA4MzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiA4Mzc6XFx0XFxuIDgzODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gODM5OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF92bGFuLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTozMy4xMTY3ODA0ODJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODYxNTk4NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgT3BlbiB2U3dpdGNoIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIE9wZW4gdlN3aXRjaCBjb25maWd1cmF0aW9uLiBMZXQncyBzdGFydCB3aXRoIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQnbGwgbGF5IG91dCB0aGUgY29yZSBmZWF0dXJlcyBhbmQgb3B0aW9ucyBhdmFpbGFibGUgZm9yIGNvbmZpZ3VyaW5nIE9wZW4gdlN3aXRjaCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgdG9wLWxldmVsIG1lbnUgc3RydWN0dXJlLCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZXMgb3IgY29uZmlndXJhdGlvbnMuIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gYW55IG5ldyBvciBjaGFuZ2VkIG9wdGlvbnMgc2luY2UgbXkgbGFzdCBkZWVwIGRpdmUsIGVzcGVjaWFsbHkgYW55IHJlbGF0ZWQgdG8gcmVjZW50IHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cyBvciBuZXcgcHJvdG9jb2xzLiBUaGlzIEtjb25maWcgd2lsbCBnaXZlIG1lIGEgaGlnaC1sZXZlbCB2aWV3IGFuZCBhbnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyB0byBpbnZlc3RpZ2F0ZSBzcGVjaWZpYyBhc3BlY3RzIGluIG1vcmUgZGV0YWlsLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzIOKAkyB1bmRlcnN0YW5kaW5nIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgY2VydGFpbiBPcGVuIHZTd2l0Y2ggZmVhdHVyZXMgaXMgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6MzUuOTc4MzgxMDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTkwOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIxOjM2LjAyNDM3NzYwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ3ODEzMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBEZXBlbmRlbmNpZXMgZm9yIE9wZW4gdlN3aXRjaCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSB0aG9zZSBkZWZpbmVkIGluIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBrbm93IHRoaXMgZmlsZSBpcyBnb2luZyB0byBjb250YWluIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGNvbnRyb2wgd2hpY2ggZmVhdHVyZXMgZ2V0IGNvbXBpbGVkIGludG8gT3BlbiB2U3dpdGNoLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGRpZmZlcmVudCBjb21wb25lbnRzIHJlbGF0ZSB0byBlYWNoIG90aGVyIGFuZCBmb3IgY3VzdG9taXppbmcgdGhlIGJ1aWxkIGZvciBzcGVjaWZpYyBkZXBsb3ltZW50cy4gSSBleHBlY3QgdG8gc2VlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBtYXliZSBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMsIGFuZCBkZWZpbml0ZWx5IHNvbWUgYm9vbGVhbiBvciB0cmlzdGF0ZSBvcHRpb25zLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0cmlnZ2VycyB3aGF0LCBhbmQgaG93IHRvIGVuYWJsZSBvciBkaXNhYmxlIGRpZmZlcmVudCBmZWF0dXJlcyBlZmZlY3RpdmVseS4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6MzguMTcyMTkzODI3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBPcGVuIHZTd2l0Y2hcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE9QRU5WU1dJVENIXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgXFxcXFxcbiAgMTA6XFx0XFx0XFx0ICAgKE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTE6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5GX05BVCB8fCBORl9OQVQpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDEyOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCAhUFNBTVBMRVxcbiAgMTQ6XFx0XFx0c2VsZWN0IE1QTFNcXG4gIDE1OlxcdFxcdHNlbGVjdCBORVRfQ1JDMzJDXFxuICAxNjpcXHRcXHRzZWxlY3QgTkVUX01QTFNfR1NPXFxuICAxNzpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuICAxODpcXHRcXHRzZWxlY3QgTkVUX05TSFxcbiAgMTk6XFx0XFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMgaWYgTkZfQ09OTlRSQUNLXFxuICAyMDpcXHRcXHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgT3BlbiB2U3dpdGNoIGlzIGEgbXVsdGlsYXllciBFdGhlcm5ldCBzd2l0Y2ggdGFyZ2V0ZWQgYXQgdmlydHVhbGl6ZWRcXG4gIDIzOlxcdFxcdCAgZW52aXJvbm1lbnRzLiAgSW4gYWRkaXRpb24gdG8gc3VwcG9ydGluZyBhIHZhcmlldHkgb2YgZmVhdHVyZXNcXG4gIDI0OlxcdFxcdCAgZXhwZWN0ZWQgaW4gYSB0cmFkaXRpb25hbCBoYXJkd2FyZSBzd2l0Y2gsIGl0IGVuYWJsZXMgZmluZS1ncmFpbmVkXFxuICAyNTpcXHRcXHQgIHByb2dyYW1tYXRpYyBleHRlbnNpb24gYW5kIGZsb3ctYmFzZWQgY29udHJvbCBvZiB0aGUgbmV0d29yay4gIFRoaXNcXG4gIDI2OlxcdFxcdCAgY29udHJvbCBpcyB1c2VmdWwgaW4gYSB3aWRlIHZhcmlldHkgb2YgYXBwbGljYXRpb25zIGJ1dCBpc1xcbiAgMjc6XFx0XFx0ICBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGluIG11bHRpLXNlcnZlciB2aXJ0dWFsaXphdGlvbiBkZXBsb3ltZW50cyxcXG4gIDI4OlxcdFxcdCAgd2hpY2ggYXJlIG9mdGVuIGNoYXJhY3Rlcml6ZWQgYnkgaGlnaGx5IGR5bmFtaWMgZW5kcG9pbnRzIGFuZCB0aGVcXG4gIDI5OlxcdFxcdCAgbmVlZCB0byBtYWludGFpbiBsb2dpY2FsIGFic3RyYWN0aW9ucyBmb3IgbXVsdGlwbGUgdGVuYW50cy5cXG4gIDMwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTozOC4xNzIzMDI3MjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM3MzczMTczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgd2Fsa2luZyB0aHJvdWdoIHRoZSBsb2dpYzpcblxuKipFeGFtaW5pbmcgTVBMUyBMYWJlbCBIYW5kbGluZyBpbiB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBNUExTIGxhYmVscyBhcmUgaGFuZGxlZCBpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIGFjdGlvbnMgcmVsYXRlZCB0byBwb3BwaW5nIGFuZCBwdXNoaW5nIHRoZXNlIGxhYmVscy4gTXkgZmlyc3QgaW5zdGluY3QsIGJlaW5nIGZhbWlsaWFyIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBmaWxlczogSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYG5ldC9zY2hlZC9hY3RfbXBscy5jYCBiZWNhdXNlIGl0IGRlYWxzIGRpcmVjdGx5IHdpdGggTVBMUyBhY3Rpb25zLCBsaWtlbHkgdGhlIFwibXBsc1wiIHBhcnQgb2YgdGhpbmdzLiBCdXQgSSBrbm93IHRoYXQgdGhlIGBza2J1ZmZgIHN0cnVjdHVyZSBpcyBjZW50cmFsIHRvIHBhY2tldCBoYW5kbGluZyBpbiB0aGUga2VybmVsLCBzbyBJJ2xsIGFsc28gd2FudCB0byBsb29rIGNsb3NlbHkgYXQgYG5ldC9jb3JlL3NrYnVmZi5jYC5cblxuTm93LCB3aXRoaW4gYHNrYnVmZi5jYCwgSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGRlYWwgd2l0aCBtYW5pcHVsYXRpbmcgdGhvc2UgbGFiZWxzLCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBmdW5jdGlvbnMgYHNrYl9tcGxzX3BvcGAgYW5kIGBza2JfbXBsc19wdXNoYC4gVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUga2V5IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsICpyZW1vdmVzKiBhbmQgKmFkZHMqIE1QTFMgbGFiZWxzIHJlc3BlY3RpdmVseS4gSSdsbCBuZWVkIHRvIHJlYWQgdGhlIGNvZGUgYXJvdW5kIHRob3NlIGZ1bmN0aW9ucywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5IGFyZSBtb2RpZmllZC4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgbG9va2luZyBhdCBob3cgdGhlIGBza2JgIHN0cnVjdHVyZSdzIGRhdGEgaXMgYWRqdXN0ZWQgYW5kIGhvdyB0aGUgbGFiZWwgc3RhY2sgaXMgbWFuYWdlZC4gQmFzaWNhbGx5LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgb2YgZGF0YSBhcm91bmQgdGhvc2UgZnVuY3Rpb25zIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjE0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo0MS41NDYwMzc5MjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2NDUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY2NDU6XFx0XFx0XFx0c2tiX21vZF9ldGhfdHlwZShza2IsIGV0aF9oZHIoc2tiKSwgbXBsc19wcm90byk7XFxuNjY0NjpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gbXBsc19wcm90bztcXG42NjQ3OlxcdFxcbjY2NDg6XFx0XFx0cmV0dXJuIDA7XFxuNjY0OTpcXHR9XFxuNjY1MDpcXHRFWFBPUlRfU1lNQk9MX0dQTChza2JfbXBsc19wdXNoKTtcXG42NjUxOlxcdFxcbjY2NTI6XFx0LyoqXFxuNjY1MzpcXHQgKiBza2JfbXBsc19wb3AoKSAtIHBvcCB0aGUgb3V0ZXJtb3N0IE1QTFMgaGVhZGVyXFxuNjY1NDpcXHQgKlxcbjY2NTU6XFx0ICogQHNrYjogYnVmZmVyXFxuNjY1NjpcXHQgKiBAbmV4dF9wcm90bzogZXRoZXJ0eXBlIG9mIGhlYWRlciBhZnRlciBwb3BwZWQgTVBMUyBoZWFkZXJcXG42NjU3OlxcdCAqIEBtYWNfbGVuOiBsZW5ndGggb2YgdGhlIE1BQyBoZWFkZXJcXG42NjU4OlxcdCAqIEBldGhlcm5ldDogZmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgcGFja2V0IGlzIGV0aGVybmV0XFxuNjY1OTpcXHQgKlxcbjY2NjA6XFx0ICogRXhwZWN0cyBza2ItXFx1MDAzZWRhdGEgYXQgbWFjIGhlYWRlci5cXG42NjYxOlxcdCAqXFxuNjY2MjpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS5cXG42NjYzOlxcdCAqL1xcbjY2NjQ6XFx0aW50IHNrYl9tcGxzX3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgbmV4dF9wcm90bywgaW50IG1hY19sZW4sXFxuNjY2NTpcXHRcXHRcXHQgYm9vbCBldGhlcm5ldClcXG42NjY2OlxcdHtcXG42NjY3OlxcdFxcdGludCBlcnI7XFxuNjY2ODpcXHRcXG42NjY5OlxcdFxcdGlmICh1bmxpa2VseSghZXRoX3BfbXBscyhza2ItXFx1MDAzZXByb3RvY29sKSkpXFxuNjY3MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG42NjcxOlxcdFxcbjY2NzI6XFx0XFx0ZXJyID0gc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG1hY19sZW4gKyBNUExTX0hMRU4pO1xcbjY2NzM6XFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuNjY3NDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjY2NzU6XFx0XFxuNjY3NjpcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBtcGxzX2hkcihza2IpLCBNUExTX0hMRU4pO1xcbjY2Nzc6XFx0XFx0bWVtbW92ZShza2JfbWFjX2hlYWRlcihza2IpICsgTVBMU19ITEVOLCBza2JfbWFjX2hlYWRlcihza2IpLFxcbjY2Nzg6XFx0XFx0XFx0bWFjX2xlbik7XFxuNjY3OTpcXHRcXG42NjgwOlxcdFxcdF9fc2tiX3B1bGwoc2tiLCBNUExTX0hMRU4pO1xcbjY2ODE6XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG42NjgyOlxcdFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBtYWNfbGVuKTtcXG42NjgzOlxcdFxcbjY2ODQ6XFx0XFx0aWYgKGV0aGVybmV0IFxcdTAwMjZcXHUwMDI2IG1hY19sZW4gXFx1MDAzZT0gRVRIX0hMRU4pIHtcXG42Njg1OlxcdFxcdFxcdHN0cnVjdCBldGhoZHIgKmhkcjtcXG42Njg2OlxcdFxcbjY2ODc6XFx0XFx0XFx0LyogdXNlIG1wbHNfaGRyKCkgdG8gZ2V0IGV0aGVydHlwZSB0byBhY2NvdW50IGZvciBWTEFOcy4gKi9cXG42Njg4OlxcdFxcdFxcdGhkciA9IChzdHJ1Y3QgZXRoaGRyICopKCh2b2lkICopbXBsc19oZHIoc2tiKSAtIEVUSF9ITEVOKTtcXG42Njg5OlxcdFxcdFxcdHNrYl9tb2RfZXRoX3R5cGUoc2tiLCBoZHIsIG5leHRfcHJvdG8pO1xcbjY2OTA6XFx0XFx0fVxcbjY2OTE6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IG5leHRfcHJvdG87XFxuNjY5MjpcXHRcXG42NjkzOlxcdFxcdC8qIFRoZSBsYXN0IGxhYmVsIGlzIGdvbmUsIHNvIHRoZSBpbm5lciBoZWFkZXIgcmVjb3JkZWQgYnlcXG42Njk0OlxcdFxcdCAqIHNrYl9tcGxzX3B1c2goKSBubyBsb25nZXIgZGVzY3JpYmVzIHRoaXMgcGFja2V0LiBEcm9wIGl0LCBvciBhXFxuNjY5NTpcXHRcXHQgKiBsYXRlciBwdXNoIGtlZXBzIHRoZSBzdGFsZSBvZmZzZXQuXFxuNjY5NjpcXHRcXHQgKi9cXG42Njk3OlxcdFxcdGlmICghZXRoX3BfbXBscyhuZXh0X3Byb3RvKSlcXG42Njk4OlxcdFxcdFxcdHNrYi1cXHUwMDNlaW5uZXJfcHJvdG9jb2wgPSAwO1xcbjY2OTk6XFx0XFxuNjcwMDpcXHRcXHRyZXR1cm4gMDtcXG42NzAxOlxcdH1cXG42NzAyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9tcGxzX3BvcCk7XFxuNjcwMzpcXHRcXG42NzA0OlxcdC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo0MS41NDYyOTQ0NTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkwNTA0OTg0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipFeGFtaW5pbmcgdGhlIGBza2JfbXBsc19wb3BgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBsb29raW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBza2JfbXBsc19wb3BgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcGlucG9pbnQgaXRzIGxvY2F0aW9uIGFuZCBwb3NzaWJsZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gU28sIHRoZSBmaXJzdCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhhdCBpdCdzIHdpdGhpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBHb29kLCB0aGF0IGNoZWNrcyBvdXQuIE5vdyBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcyBvciBzaW1pbGFyIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgdGhhdCBtaWdodCBhZmZlY3Qgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNvbXBpbGVkIG9yIHVzZWQgaW4gY2VydGFpbiBjb25maWd1cmF0aW9ucy4gVG8gZG8gdGhpcyBzeXN0ZW1hdGljYWxseSwgbGV0J3Mgc2NhbiBhIHNwZWNpZmljIHJlZ2lvbiBvZiB0aGUgc291cmNlIGNvZGUuIEknbGwgZm9jdXMgb24gbGluZXMgNjYwMCB0aHJvdWdoIDY3MjAgd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjb25jZW50cmF0ZWQgdmlldyBvZiBpdHMgY29udGV4dCwgcG90ZW50aWFsIGRlcGVuZGVuY2llcywgb3IgYnVpbGQtdGltZSBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo0NC40NTEzNDc2MTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY2MDA6XFx0ICogQHNrYjogYnVmZmVyXFxuNjYwMTpcXHQgKiBAbXBsc19sc2U6IE1QTFMgbGFiZWwgc3RhY2sgZW50cnkgdG8gcHVzaFxcbjY2MDI6XFx0ICogQG1wbHNfcHJvdG86IGV0aGVydHlwZSBvZiB0aGUgbmV3IE1QTFMgaGVhZGVyIChleHBlY3RzIDB4ODg0NyBvciAweDg4NDgpXFxuNjYwMzpcXHQgKiBAbWFjX2xlbjogbGVuZ3RoIG9mIHRoZSBNQUMgaGVhZGVyXFxuNjYwNDpcXHQgKiBAZXRoZXJuZXQ6IGZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIHJlc3VsdGluZyBwYWNrZXQgYWZ0ZXIgc2tiX21wbHNfcHVzaCBpc1xcbjY2MDU6XFx0ICogICAgICAgICAgICBldGhlcm5ldFxcbjY2MDY6XFx0ICpcXG42NjA3OlxcdCAqIEV4cGVjdHMgc2tiLVxcdTAwM2VkYXRhIGF0IG1hYyBoZWFkZXIuXFxuNjYwODpcXHQgKlxcbjY2MDk6XFx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuXFxuNjYxMDpcXHQgKi9cXG42NjExOlxcdGludCBza2JfbXBsc19wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBtcGxzX2xzZSwgX19iZTE2IG1wbHNfcHJvdG8sXFxuNjYxMjpcXHRcXHRcXHQgIGludCBtYWNfbGVuLCBib29sIGV0aGVybmV0KVxcbjY2MTM6XFx0e1xcbjY2MTQ6XFx0XFx0c3RydWN0IG1wbHNfc2hpbV9oZHIgKmxzZTtcXG42NjE1OlxcdFxcdGludCBlcnI7XFxuNjYxNjpcXHRcXG42NjE3OlxcdFxcdGlmICh1bmxpa2VseSghZXRoX3BfbXBscyhtcGxzX3Byb3RvKSkpXFxuNjYxODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NjE5OlxcdFxcbjY2MjA6XFx0XFx0LyogTmV0d29ya2luZyBzdGFjayBkb2VzIG5vdCBhbGxvdyBzaW11bHRhbmVvdXMgVHVubmVsIGFuZCBNUExTIEdTTy4gKi9cXG42NjIxOlxcdFxcdGlmIChza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24pXFxuNjYyMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NjIzOlxcdFxcbjY2MjQ6XFx0XFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgTVBMU19ITEVOKTtcXG42NjI1OlxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbjY2MjY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG42NjI3OlxcdFxcbjY2Mjg6XFx0XFx0aWYgKCFza2ItXFx1MDAzZWlubmVyX3Byb3RvY29sKSB7XFxuNjYyOTpcXHRcXHRcXHRza2Jfc2V0X2lubmVyX25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xcbjY2MzA6XFx0XFx0XFx0c2tiX3NldF9pbm5lcl9wcm90b2NvbChza2IsIHNrYi1cXHUwMDNlcHJvdG9jb2wpO1xcbjY2MzE6XFx0XFx0fVxcbjY2MzI6XFx0XFxuNjYzMzpcXHRcXHRza2JfcHVzaChza2IsIE1QTFNfSExFTik7XFxuNjYzNDpcXHRcXHRtZW1tb3ZlKHNrYl9tYWNfaGVhZGVyKHNrYikgLSBNUExTX0hMRU4sIHNrYl9tYWNfaGVhZGVyKHNrYiksXFxuNjYzNTpcXHRcXHRcXHRtYWNfbGVuKTtcXG42NjM2OlxcdFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuNjYzNzpcXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgbWFjX2xlbik7XFxuNjYzODpcXHRcXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xcbjY2Mzk6XFx0XFxuNjY0MDpcXHRcXHRsc2UgPSBtcGxzX2hkcihza2IpO1xcbjY2NDE6XFx0XFx0bHNlLVxcdTAwM2VsYWJlbF9zdGFja19lbnRyeSA9IG1wbHNfbHNlO1xcbjY2NDI6XFx0XFx0c2tiX3Bvc3RwdXNoX3Jjc3VtKHNrYiwgbHNlLCBNUExTX0hMRU4pO1xcbjY2NDM6XFx0XFxuNjY0NDpcXHRcXHRpZiAoZXRoZXJuZXQgXFx1MDAyNlxcdTAwMjYgbWFjX2xlbiBcXHUwMDNlPSBFVEhfSExFTilcXG42NjQ1OlxcdFxcdFxcdHNrYl9tb2RfZXRoX3R5cGUoc2tiLCBldGhfaGRyKHNrYiksIG1wbHNfcHJvdG8pO1xcbjY2NDY6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IG1wbHNfcHJvdG87XFxuNjY0NzpcXHRcXG42NjQ4OlxcdFxcdHJldHVybiAwO1xcbjY2NDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo0NC40NTE2MTY5MTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIyMzQwNjA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTVBMUyBPcGVyYXRpb25zIGluIHRoZSBMaW51eCBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBgc2tiX21wbHNfcHVzaGAgYW5kIGBza2JfbXBsc19wb3BgIOKAkyB0aG9zZSBhcmUgKmFsd2F5cyogYnVpbHQgaW4sIHBhcnQgb2YgdGhlIGNvcmUgYG5ldC9jb3JlL3NrYnVmZi5jYCBtb2R1bGUsIHVuZGVyIGBDT05GSUdfTkVUYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSdyZSBmdW5kYW1lbnRhbC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGV5J3JlIGFjdHVhbGx5IHVzZWQuIFNwZWNpZmljYWxseSwgd2hpY2ggY29tcG9uZW50cyB0cmlnZ2VyIHRoZWlyIGV4ZWN1dGlvbi4gRnJvbSBtZW1vcnksIHRoZSBtYWluIGNhbGxlcnMgc2VlbSB0byBiZSB0aHJvdWdoIFRDIGFjdGlvbiBNUExTLCB3aGljaCBnZXRzIGVuYWJsZWQgd2l0aCBgQ09ORklHX05FVF9BQ1RfTVBMU2AgYWxvbmcgd2l0aCBgQ09ORklHX05FVF9DTFNfQUNUYCDigJMgdGhlIFRyYWZmaWMgQ29udHJvbCBhY3Rpb24sIG5hdHVyYWxseS4gVGhlbiB0aGVyZSdzIE9wZW4gdlN3aXRjaCB0b28uXG5cbkkgdGhpbmsgSSdsbCBkaXZlIGludG8gdGhlIGB0Y2ZfbXBsc19hY3RgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgIHRvIHNlZSBob3cgaXQgYWxsIGNvbWVzIHRvZ2V0aGVyLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udHJvbCBmbG93LiBJdOKAmXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNvcmUgZnVuY3Rpb25zIGFyZSBpbnRlZ3JhdGVkIGFuZCBvcmNoZXN0cmF0ZWQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo0OC42NzUwMjYzMDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9tcGxzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0XFx0cmV0dXJuIGNwdV90b19iZTMyKG5ld19sc2UpO1xcbiAgNTE6XFx0fVxcbiAgNTI6XFx0XFxuICA1MzpcXHRUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuICA1NDpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbiAgNTU6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcylcXG4gIDU2OlxcdHtcXG4gIDU3OlxcdFxcdHN0cnVjdCB0Y2ZfbXBscyAqbSA9IHRvX21wbHMoYSk7XFxuICA1ODpcXHRcXHRzdHJ1Y3QgdGNmX21wbHNfcGFyYW1zICpwO1xcbiAgNTk6XFx0XFx0X19iZTMyIG5ld19sc2U7XFxuICA2MDpcXHRcXHRpbnQgbWFjX2xlbjtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0dGNmX2xhc3R1c2VfdXBkYXRlKFxcdTAwMjZtLVxcdTAwM2V0Y2ZfdG0pO1xcbiAgNjM6XFx0XFx0YnN0YXRzX3VwZGF0ZSh0aGlzX2NwdV9wdHIobS1cXHUwMDNlY29tbW9uLmNwdV9ic3RhdHMpLCBza2IpO1xcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHQvKiBFbnN1cmUgJ2RhdGEnIHBvaW50cyBhdCBtYWNfaGVhZGVyIHByaW9yIGNhbGxpbmcgbXBscyBtYW5pcHVsYXRpbmdcXG4gIDY2OlxcdFxcdCAqIGZ1bmN0aW9ucy5cXG4gIDY3OlxcdFxcdCAqL1xcbiAgNjg6XFx0XFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpIHtcXG4gIDY5OlxcdFxcdFxcdHNrYl9wdXNoX3Jjc3VtKHNrYiwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG4gIDcwOlxcdFxcdFxcdG1hY19sZW4gPSBza2ItXFx1MDAzZW1hY19sZW47XFxuICA3MTpcXHRcXHR9IGVsc2Uge1xcbiAgNzI6XFx0XFx0XFx0bWFjX2xlbiA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHRwID0gcmN1X2RlcmVmZXJlbmNlX2JoKG0tXFx1MDAzZW1wbHNfcCk7XFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdHN3aXRjaCAocC1cXHUwMDNldGNmbV9hY3Rpb24pIHtcXG4gIDc4OlxcdFxcdGNhc2UgVENBX01QTFNfQUNUX1BPUDpcXG4gIDc5OlxcdFxcdFxcdGlmIChza2JfbXBsc19wb3Aoc2tiLCBwLVxcdTAwM2V0Y2ZtX3Byb3RvLCBtYWNfbGVuLFxcbiAgODA6XFx0XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlZGV2IFxcdTAwMjZcXHUwMDI2IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpXFxuICA4MTpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA4MjpcXHRcXHRcXHRicmVhaztcXG4gIDgzOlxcdFxcdGNhc2UgVENBX01QTFNfQUNUX1BVU0g6XFxuICA4NDpcXHRcXHRcXHRuZXdfbHNlID0gdGNmX21wbHNfZ2V0X2xzZShOVUxMLCBwLCAhZXRoX3BfbXBscyhza2JfcHJvdG9jb2woc2tiLCB0cnVlKSkpO1xcbiAgODU6XFx0XFx0XFx0aWYgKHNrYl9tcGxzX3B1c2goc2tiLCBuZXdfbHNlLCBwLVxcdTAwM2V0Y2ZtX3Byb3RvLCBtYWNfbGVuLFxcbiAgODY6XFx0XFx0XFx0XFx0XFx0ICBza2ItXFx1MDAzZWRldiBcXHUwMDI2XFx1MDAyNiBza2ItXFx1MDAzZWRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpKVxcbiAgODc6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAgODg6XFx0XFx0XFx0YnJlYWs7XFxuICA4OTpcXHRcXHRjYXNlIFRDQV9NUExTX0FDVF9NQUNfUFVTSDpcXG4gIDkwOlxcdFxcdFxcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XFxuICA5MTpcXHRcXHRcXHRcXHRpZiAoX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxuICA5MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpLFxcbiAgOTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIEVUSF9ITEVOKSBcXHUwMDNjIDApXFxuICA5NDpcXHRcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBza2ItXFx1MDAzZXZsYW5fcHJvdG87XFxuICA5NzpcXHRcXHRcXHRcXHRfX3ZsYW5faHdhY2NlbF9jbGVhcl90YWcoc2tiKTtcXG4gIDk4OlxcdFxcdFxcdH1cXG4gIDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo0OC42NzUxMDQyMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjU3NTMwODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBPcGVuIHZTd2l0Y2ggSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBob3cgT3BlbiB2U3dpdGNoIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIG5ldHdvcmsgc3RhY2suIEkndmUgYWxyZWFkeSBleHBsb3JlZCB0aGUgbW9yZSBvYnZpb3VzIGVudHJ5IHBvaW50cywgYnV0IEkgaGF2ZSBhIGh1bmNoIHRoZXJlIG1pZ2h0IGJlIHNvbWUgbW9yZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIGhpZGRlbiB3aXRoaW4gdGhlIGBuZXQvb3BlbnZzd2l0Y2hgIGRpcmVjdG9yeSBpdHNlbGYuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBgYWN0aW9ucy5jYCBmaWxlLiBJdCdzIGEga2V5IHBpZWNlLCBkZWZpbmluZyB3aGF0IGhhcHBlbnMgKmFmdGVyKiBhIGZsb3cgcnVsZSBoYXMgYmVlbiBtYXRjaGVkLCBzbyBJIHNob3VsZCBzZWUgd2hhdCBjYWxsZXJzIGluIHRoYXQgZmlsZSBhcmUgYmVpbmcgdHJpZ2dlcmVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGFub3RoZXIgYXZlbnVlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZS4gTGV0J3Mgc2VlIGlmIHRoaXMgcmV2ZWFscyBhbnl0aGluZyBpbnRlcmVzdGluZyBvciBhbnkgbmV3IGxlYWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTM1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo1MC4zMzI2MzgxMTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdFxcdGtleS1cXHUwMDNlbWFjX3Byb3RvID0gTUFDX1BST1RPX05PTkU7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdGludmFsaWRhdGVfZmxvd19rZXkoa2V5KTtcXG4gMTQzOlxcdFxcdHJldHVybiAwO1xcbiAxNDQ6XFx0fVxcbiAxNDU6XFx0XFxuIDE0NjpcXHRzdGF0aWMgaW50IHBvcF9tcGxzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbiAxNDc6XFx0XFx0XFx0ICAgIGNvbnN0IF9fYmUxNiBldGhlcnR5cGUpXFxuIDE0ODpcXHR7XFxuIDE0OTpcXHRcXHRpbnQgZXJyO1xcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRlcnIgPSBza2JfbXBsc19wb3Aoc2tiLCBldGhlcnR5cGUsIHNrYi1cXHUwMDNlbWFjX2xlbixcXG4gMTUyOlxcdFxcdFxcdFxcdCAgIG92c19rZXlfbWFjX3Byb3RvKGtleSkgPT0gTUFDX1BST1RPX0VUSEVSTkVUKTtcXG4gMTUzOlxcdFxcdGlmIChlcnIpXFxuIDE1NDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXHRpZiAoZXRoZXJ0eXBlID09IGh0b25zKEVUSF9QX1RFQikpXFxuIDE1NzpcXHRcXHRcXHRrZXktXFx1MDAzZW1hY19wcm90byA9IE1BQ19QUk9UT19FVEhFUk5FVDtcXG4gMTU4OlxcdFxcbiAxNTk6XFx0XFx0aW52YWxpZGF0ZV9mbG93X2tleShrZXkpO1xcbiAxNjA6XFx0XFx0cmV0dXJuIDA7XFxuIDE2MTpcXHR9XFxuIDE2MjpcXHRcXG4gMTYzOlxcdHN0YXRpYyBpbnQgc2V0X21wbHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICpmbG93X2tleSxcXG4gMTY0OlxcdFxcdFxcdCAgICBjb25zdCBfX2JlMzIgKm1wbHNfbHNlLCBjb25zdCBfX2JlMzIgKm1hc2spXFxuIDE2NTpcXHR7XFxuIDE2NjpcXHRcXHRzdHJ1Y3QgbXBsc19zaGltX2hkciAqc3RhY2s7XFxuIDE2NzpcXHRcXHRfX2JlMzIgbHNlO1xcbiAxNjg6XFx0XFx0aW50IGVycjtcXG4gMTY5OlxcdFxcbiAxNzA6XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgKyBNUExTX0hMRU4pKVxcbiAxNzE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE3MjpcXHRcXG4gMTczOlxcdFxcdHN0YWNrID0gbXBsc19oZHIoc2tiKTtcXG4gMTc0OlxcdFxcdGxzZSA9IE9WU19NQVNLRUQoc3RhY2stXFx1MDAzZWxhYmVsX3N0YWNrX2VudHJ5LCAqbXBsc19sc2UsICptYXNrKTtcXG4gMTc1OlxcdFxcdGVyciA9IHNrYl9tcGxzX3VwZGF0ZV9sc2Uoc2tiLCBsc2UpO1xcbiAxNzY6XFx0XFx0aWYgKGVycilcXG4gMTc3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdGZsb3dfa2V5LVxcdTAwM2VtcGxzLmxzZVswXSA9IGxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6NTAuMzMyNzYwMTE5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NjgyNjc2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogTVBMUyBQYWNrZXQgUHJvY2Vzc2luZyoqXG5cbk9rYXksIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBIZXJlJ3Mgd2h5OlxuXG5GaXJzdCwgaXQgdG91Y2hlcyBjb3JlIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljIHdpdGhpbiBgc2tiX21wbHNfcG9wYC4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgdGhlIHBvdGVudGlhbCBmb3Igc3RhbGUgb2Zmc2V0IGFuZCBpbm5lciBoZWFkZXIgbWV0YWRhdGEgYnVncyB0aGF0IGNvdWxkIGFyaXNlIGR1cmluZyBNUExTIGVuY2Fwc3VsYXRpb24gYW5kIGRlY2Fwc3VsYXRpb24sIHdoaWNoIGlzIGEgY29tbW9uIHZ1bG5lcmFiaWxpdHkgcGF0dGVybi4gVGhhdCdzIGEgc3Ryb25nIHNpZ25hbC5cblxuU2Vjb25kLCB0aGUgY29kZSBpcyBlYXNpbHkgcmVhY2hhYmxlIGluIGNvbW1vbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkgY2FuIGhpdCB0aGlzIHRocm91Z2ggc3RhbmRhcmQgc2V0dXBzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIGxldmVyYWdpbmcgVEMgYWN0aW9uIE1QTFMgKGBDT05GSUdfTkVUX0FDVF9NUExTYCwgYENPTkZJR19ORVRfQ0xTX0FDVGApIG9yIGV2ZW4gT3BlbiB2U3dpdGNoIChgQ09ORklHX09QRU5WU1dJVENIYCkuIFNvIG5vIG5lZWQgZm9yIGV4b3RpYyBzZXR1cHM7IGEgc3RhbmRhcmQgZW52aXJvbm1lbnQgd2lsbCB3b3JrLlxuXG5UaGlyZCwgSSd2ZSBpZGVudGlmaWVkIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uOiBgc2tiX21wbHNfcG9wYCwgYHNrYl9tcGxzX3B1c2hgLCBhbmQgYHRjZl9tcGxzX2FjdGAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhvc2UgZW50cnlwb2ludHMuIE9rYXksIGdvb2QuIGBza2JfbXBsc19wb3BgLCBgc2tiX21wbHNfcHVzaGAsIGFuZCBgdGNmX21wbHNfYWN0YCBhcmUgYWxsIG5vbi1zdGF0aWMgc3ltYm9scy4gSG93ZXZlciwgSSB3YW50IHRvIGRvdWJsZS1jaGVjayBgcG9wX21wbHNgIGFzIGl0IGlzIHN0YXRpYyBpbiBvcGVudnN3aXRjaC4gVGhlIGVudHJ5cG9pbnQgZm9yIE9WUyBhY3Rpb25zIHNob3VsZCBiZSBgb3ZzX2V4ZWN1dGVfYWN0aW9uc2Agb3IgYGRvX2V4ZWN1dGVfYWN0aW9uc2AuIExldCdzIHN0aWNrIHdpdGggdGhlIGZvY3VzIHN5bWJvbHMgZm9yIG5vdzogYHNrYl9tcGxzX3BvcGAsIGBza2JfbXBsc19wdXNoYCwgYW5kIGB0Y2ZfbXBsc19hY3RgLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIFdlIG5lZWQgYE5FVGAgKHdoaWNoIGlzIGFsd2F5cyBlbmFibGVkKSwgYE5FVF9DTFNfQUNUYCwgYE5FVF9BQ1RfTVBMU2AsIGFuZCBgT1BFTlZTV0lUQ0hgLiBJJ2xsIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBpbiBgbmV0L3NjaGVkL0tjb25maWdgIHRvIGJlIHN1cmUuIEFscmlnaHQsIGBORVRfQUNUX01QTFNgIGRlcGVuZHMgb24gYE5FVF9DTFNfQUNUYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBORVRgLiBBbmQgYE9QRU5WU1dJVENIYCBkZXBlbmRzIG9uIGBJTkVUYCwgd2hpY2ggaXMgYWxsIGdvb2QuXG5cbkZpbmFsbHksIGxldCdzIG1ha2Ugc3VyZSB0aGUgdG9vbCBwYXJhbWV0ZXJzIGFyZSBjb3JyZWN0bHkgZm9ybWF0dGVkLCBhbmQgYWxsIGlzIGFzIGV4cGVjdGVkLlxuXG5gRW5hYmxlQ29uZmlnc2A6IGBbXCJORVRfQUNUX01QTFNcIiwgXCJORVRfQ0xTX0FDVFwiLCBcIk9QRU5WU1dJVENIXCJdYFxuYEZvY3VzU3ltYm9sc2A6IGBbXCJza2JfbXBsc19wb3BcIiwgXCJza2JfbXBsc19wdXNoXCIsIFwidGNmX21wbHNfYWN0XCJdYFxuYFdvcnRoRnV6emluZ2A6IHRydWVcbmBSZWFzb25pbmdgOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSB2ZXJkaWN0LlxuXG5Mb29rcyBnb29kIHRvIG1lLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc3OCwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo1NS4yMDEwMzAwMjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTgwMTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0FDVF9NUExTXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfbXBsc19wb3BcIixcbiAgICBcInNrYl9tcGxzX3B1c2hcIixcbiAgICBcInRjZl9tcGxzX2FjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNrYl9tcGxzX3BvcCBpbiBuZXQvY29yZS9za2J1ZmYuYyB0byBjbGVhciBza2ItXFx1MDAzZWlubmVyX3Byb3RvY29sIHdoZW4gcG9wcGluZyB0aGUgbGFzdCBNUExTIGhlYWRlciwgcHJldmVudGluZyBzdGFsZSBpbm5lciBoZWFkZXIgb2Zmc2V0cyBvbiBzdWJzZXF1ZW50IE1QTFMgb3BlcmF0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgc2tiIE1QTFMgaGFuZGxpbmcgdXNlZCBieSBUQyBNUExTIGFjdGlvbnMgYW5kIE9wZW4gdlN3aXRjaCwgYm90aCBvZiB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX01QTFNcIixcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl9tcGxzX3BvcFwiLFxuICAgIFwic2tiX21wbHNfcHVzaFwiLFxuICAgIFwidGNmX21wbHNfYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2tiX21wbHNfcG9wIGluIG5ldC9jb3JlL3NrYnVmZi5jIHRvIGNsZWFyIHNrYi1cXHUwMDNlaW5uZXJfcHJvdG9jb2wgd2hlbiBwb3BwaW5nIHRoZSBsYXN0IE1QTFMgaGVhZGVyLCBwcmV2ZW50aW5nIHN0YWxlIGlubmVyIGhlYWRlciBvZmZzZXRzIG9uIHN1YnNlcXVlbnQgTVBMUyBvcGVyYXRpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBza2IgTVBMUyBoYW5kbGluZyB1c2VkIGJ5IFRDIE1QTFMgYWN0aW9ucyBhbmQgT3BlbiB2U3dpdGNoLCBib3RoIG9mIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo1NS4yODY4Mzk3OTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDUxNTcyMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6NTUuMjg3MzQwNzM3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk0NTEwNjY0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfbXBsc19wb3AoKWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCB0byByZXNldCBgc2tiLVxcdTAwM2Vpbm5lcl9wcm90b2NvbGAgdG8gMCB3aGVuIHRoZSBwb3BwZWQgTVBMUyBoZWFkZXIgaXMgdGhlIGxhc3Qgb25lIChpLmUuIGAhZXRoX3BfbXBscyhuZXh0X3Byb3RvKWApLiBUaGlzIGVuc3VyZXMgdGhhdCBzdWJzZXF1ZW50IGBza2JfbXBsc19wdXNoKClgIGNhbGxzIGRvIG5vdCByZXRhaW4gc3RhbGUgaW5uZXIgcHJvdG9jb2wgYW5kIGlubmVyIG5ldHdvcmsgaGVhZGVyIG9mZnNldHMuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHN0cnVjdCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgbGVuZ3RocyBvciBidWZmZXIgYm91bmRzIGluIGEgd2F5IHRoYXQgbGVhZHMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBBbnkgcG90ZW50aWFsIGJ1ZmZlci9vZmZzZXQgaXNzdWVzIGFyaXNpbmcgZnJvbSBza2IgaGVhZGVyIG1hbmlwdWxhdGlvbiBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTJhNDFhY2UzMjE1MGRkYTQ0ODU0OTBiY2UzNDczZGI4OWRhOGM1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDE6MjE6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCA5NjZhZjNiZWVkOTRkLi5jYzNiNGI3MDI4OGI0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtNjY5MCw2ICs2NjkwLDEzIEBAIGludCBza2JfbXBsc19wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IG5leHRfcHJvdG8sIGludCBtYWNfbGVuLFxuIFx0fVxuIFx0c2tiLVx1MDAzZXByb3RvY29sID0gbmV4dF9wcm90bztcbiBcbitcdC8qIFRoZSBsYXN0IGxhYmVsIGlzIGdvbmUsIHNvIHRoZSBpbm5lciBoZWFkZXIgcmVjb3JkZWQgYnlcbitcdCAqIHNrYl9tcGxzX3B1c2goKSBubyBsb25nZXIgZGVzY3JpYmVzIHRoaXMgcGFja2V0LiBEcm9wIGl0LCBvciBhXG4rXHQgKiBsYXRlciBwdXNoIGtlZXBzIHRoZSBzdGFsZSBvZmZzZXQuXG4rXHQgKi9cbitcdGlmICghZXRoX3BfbXBscyhuZXh0X3Byb3RvKSlcbitcdFx0c2tiLVx1MDAzZWlubmVyX3Byb3RvY29sID0gMDtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChza2JfbXBsc19wb3ApO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6NTUuMjg3MzQxODA3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNzQ0NDU0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBDb2RlIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgcHJvdmlkZWQgcGF0Y2guIEkgc2VlIGl0IHRhcmdldHMgYG5ldC9jb3JlL3NrYnVmZi5jYCBhbmQgc3BlY2lmaWNhbGx5IHRvdWNoZXMgdGhlIGBza2JfbXBsc19wb3BgIGZ1bmN0aW9uLiBNeSBpbnN0aW5jdCwgYmVpbmcgYSBzZWFzb25lZCBwcm8sIGlzIHRvIGltbWVkaWF0ZWx5IGdyYXNwIHRoZSB3aWRlciBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgZXhpc3RpbmcgY29kZSBmbG93LiBUaGVyZWZvcmUsIEknbSBnb2luZyB0byBxdWlja2x5IG5hdmlnYXRlIHRvIHRoYXQgc2VjdGlvbiB3aXRoaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgZm9jdXNpbmcgYXJvdW5kIGxpbmUgNjY5MCwgdG8gdW5kZXJzdGFuZCBpdHMgbmVpZ2hib3JzIGFuZCBkZXBlbmRlbmNpZXMuIEl0J3MgY3J1Y2lhbCB0byBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjaywgYW5kIHdoZXJlIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3Igcmlza3MgbWlnaHQgcmVzaWRlLiBUaGlzIHVwZnJvbnQgY29udGV4dHVhbCBhd2FyZW5lc3MgaXMgdGhlIGZvdW5kYXRpb24gZm9yIGEgcHJvcGVyIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIyOjAwLjM2MTc5MDIwMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTE3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjY2MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjY2MDpcXHQgKiBFeHBlY3RzIHNrYi1cXHUwMDNlZGF0YSBhdCBtYWMgaGVhZGVyLlxcbjY2NjE6XFx0ICpcXG42NjYyOlxcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtZXJybm8gb3RoZXJ3aXNlLlxcbjY2NjM6XFx0ICovXFxuNjY2NDpcXHRpbnQgc2tiX21wbHNfcG9wKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBuZXh0X3Byb3RvLCBpbnQgbWFjX2xlbixcXG42NjY1OlxcdFxcdFxcdCBib29sIGV0aGVybmV0KVxcbjY2NjY6XFx0e1xcbjY2Njc6XFx0XFx0aW50IGVycjtcXG42NjY4OlxcdFxcbjY2Njk6XFx0XFx0aWYgKHVubGlrZWx5KCFldGhfcF9tcGxzKHNrYi1cXHUwMDNlcHJvdG9jb2wpKSlcXG42NjcwOlxcdFxcdFxcdHJldHVybiAwO1xcbjY2NzE6XFx0XFxuNjY3MjpcXHRcXHRlcnIgPSBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgbWFjX2xlbiArIE1QTFNfSExFTik7XFxuNjY3MzpcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG42Njc0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNjY3NTpcXHRcXG42Njc2OlxcdFxcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIG1wbHNfaGRyKHNrYiksIE1QTFNfSExFTik7XFxuNjY3NzpcXHRcXHRtZW1tb3ZlKHNrYl9tYWNfaGVhZGVyKHNrYikgKyBNUExTX0hMRU4sIHNrYl9tYWNfaGVhZGVyKHNrYiksXFxuNjY3ODpcXHRcXHRcXHRtYWNfbGVuKTtcXG42Njc5OlxcdFxcbjY2ODA6XFx0XFx0X19za2JfcHVsbChza2IsIE1QTFNfSExFTik7XFxuNjY4MTpcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbjY2ODI6XFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIG1hY19sZW4pO1xcbjY2ODM6XFx0XFxuNjY4NDpcXHRcXHRpZiAoZXRoZXJuZXQgXFx1MDAyNlxcdTAwMjYgbWFjX2xlbiBcXHUwMDNlPSBFVEhfSExFTikge1xcbjY2ODU6XFx0XFx0XFx0c3RydWN0IGV0aGhkciAqaGRyO1xcbjY2ODY6XFx0XFxuNjY4NzpcXHRcXHRcXHQvKiB1c2UgbXBsc19oZHIoKSB0byBnZXQgZXRoZXJ0eXBlIHRvIGFjY291bnQgZm9yIFZMQU5zLiAqL1xcbjY2ODg6XFx0XFx0XFx0aGRyID0gKHN0cnVjdCBldGhoZHIgKikoKHZvaWQgKiltcGxzX2hkcihza2IpIC0gRVRIX0hMRU4pO1xcbjY2ODk6XFx0XFx0XFx0c2tiX21vZF9ldGhfdHlwZShza2IsIGhkciwgbmV4dF9wcm90byk7XFxuNjY5MDpcXHRcXHR9XFxuNjY5MTpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gbmV4dF9wcm90bztcXG42NjkyOlxcdFxcbjY2OTM6XFx0XFx0LyogVGhlIGxhc3QgbGFiZWwgaXMgZ29uZSwgc28gdGhlIGlubmVyIGhlYWRlciByZWNvcmRlZCBieVxcbjY2OTQ6XFx0XFx0ICogc2tiX21wbHNfcHVzaCgpIG5vIGxvbmdlciBkZXNjcmliZXMgdGhpcyBwYWNrZXQuIERyb3AgaXQsIG9yIGFcXG42Njk1OlxcdFxcdCAqIGxhdGVyIHB1c2gga2VlcHMgdGhlIHN0YWxlIG9mZnNldC5cXG42Njk2OlxcdFxcdCAqL1xcbjY2OTc6XFx0XFx0aWYgKCFldGhfcF9tcGxzKG5leHRfcHJvdG8pKVxcbjY2OTg6XFx0XFx0XFx0c2tiLVxcdTAwM2Vpbm5lcl9wcm90b2NvbCA9IDA7XFxuNjY5OTpcXHRcXG42NzAwOlxcdFxcdHJldHVybiAwO1xcbjY3MDE6XFx0fVxcbjY3MDI6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcG9wKTtcXG42NzAzOlxcdFxcbjY3MDQ6XFx0LyoqXFxuNjcwNTpcXHQgKiBza2JfbXBsc191cGRhdGVfbHNlKCkgLSBtb2RpZnkgb3V0ZXJtb3N0IE1QTFMgaGVhZGVyIGFuZCB1cGRhdGUgY3N1bVxcbjY3MDY6XFx0ICpcXG42NzA3OlxcdCAqIEBza2I6IGJ1ZmZlclxcbjY3MDg6XFx0ICogQG1wbHNfbHNlOiBuZXcgTVBMUyBsYWJlbCBzdGFjayBlbnRyeSB0byB1cGRhdGUgdG9cXG42NzA5OlxcdCAqXFxuNjcxMDpcXHQgKiBFeHBlY3RzIHNrYi1cXHUwMDNlZGF0YSBhdCBtYWMgaGVhZGVyLlxcbjY3MTE6XFx0ICpcXG42NzEyOlxcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtZXJybm8gb3RoZXJ3aXNlLlxcbjY3MTM6XFx0ICovXFxuNjcxNDpcXHRpbnQgc2tiX21wbHNfdXBkYXRlX2xzZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgbXBsc19sc2UpXFxuNjcxNTpcXHR7XFxuNjcxNjpcXHRcXHRpbnQgZXJyO1xcbjY3MTc6XFx0XFxuNjcxODpcXHRcXHRpZiAodW5saWtlbHkoIWV0aF9wX21wbHMoc2tiLVxcdTAwM2Vwcm90b2NvbCkpKVxcbjY3MTk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIyOjAwLjM2MjE4NDMyMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQ2MDQ0NTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHNrYl9tcGxzX3B1c2ggYW5kIElubmVyIFByb3RvY29scyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgc2tiX21wbHNfcHVzaGAgaXMgaW1wbGVtZW50ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gVGhlIG1haW4gcG9pbnQgb2YgaW50ZXJlc3QgaXMgaG93IHRoZSBgaW5uZXJfcHJvdG9jb2xgIGZpZWxkIGlzIGJlaW5nIHV0aWxpemVkIGluIHRoYXQgZnVuY3Rpb24sIGFuZCBpZiBpdCBpcyBiZWluZyB1c2VkIGluIG90aGVyIHBsYWNlcyB0b28uIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpIGFuZCBob3cgdGhlIGlubmVyIHByb3RvY29sIGdldHMgaGFuZGxlZCBkdXJpbmcgdGhlIE1QTFMgbGFiZWwgcHVzaCBvcGVyYXRpb24uIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIGRlYWwgd2l0aCBuZXN0ZWQgcHJvdG9jb2xzIGFuZCBmb3J3YXJkaW5nIGRlY2lzaW9ucyBpbiB0aGUgZGF0YSBwbGFuZS4gSXQncyBjcnVjaWFsIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm90b2NvbCBzdGFjayBjb3JyZWN0bHkgaW50ZXJwcmV0cyBhbmQgcHJvY2Vzc2VzIHRoZSBuZXN0ZWQgaGVhZGVycyBhZnRlciB0aGUgTVBMUyBsYWJlbCBpcyBhZGRlZC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSByZWZlcmVuY2VzIGFuZCB1c2FnZSBvZiB0aGF0IHZhcmlhYmxlIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIyOjAyLjQwODIzMjY4NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgxNTAwMzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9tcGxzX3B1c2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz02NTg0PXN0YXRpYyB2b2lkIHNrYl9tb2RfZXRoX3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGV0aGhkciAqaGRyLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjU5Ni0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzo2NTk3OiAqIHNrYl9tcGxzX3B1c2goKSAtIHB1c2ggYSBuZXcgTVBMUyBoZWFkZXIgYWZ0ZXIgbWFjX2xlbiBieXRlcyBmcm9tIHN0YXJ0IG9mXFxubmV0L2NvcmUvc2tidWZmLmMtNjU5OC0gKiAgICAgICAgICAgICAgICAgICB0aGUgcGFja2V0XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NjAzLSAqIEBtYWNfbGVuOiBsZW5ndGggb2YgdGhlIE1BQyBoZWFkZXJcXG5uZXQvY29yZS9za2J1ZmYuYzo2NjA0OiAqIEBldGhlcm5ldDogZmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgcmVzdWx0aW5nIHBhY2tldCBhZnRlciBza2JfbXBsc19wdXNoIGlzXFxubmV0L2NvcmUvc2tidWZmLmMtNjYwNS0gKiAgICAgICAgICAgIGV0aGVybmV0XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NjEwLSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjY2MTE6aW50IHNrYl9tcGxzX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIG1wbHNfbHNlLCBfX2JlMTYgbXBsc19wcm90byxcXG5uZXQvY29yZS9za2J1ZmYuYy02NjEyLVxcdFxcdCAgaW50IG1hY19sZW4sIGJvb2wgZXRoZXJuZXQpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NjQ5LX1cXG5uZXQvY29yZS9za2J1ZmYuYzo2NjUwOkVYUE9SVF9TWU1CT0xfR1BMKHNrYl9tcGxzX3B1c2gpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTY2NTEtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02NjY0PWludCBza2JfbXBsc19wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IG5leHRfcHJvdG8sIGludCBtYWNfbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjY5My1cXHQvKiBUaGUgbGFzdCBsYWJlbCBpcyBnb25lLCBzbyB0aGUgaW5uZXIgaGVhZGVyIHJlY29yZGVkIGJ5XFxubmV0L2NvcmUvc2tidWZmLmM6NjY5NDpcXHQgKiBza2JfbXBsc19wdXNoKCkgbm8gbG9uZ2VyIGRlc2NyaWJlcyB0aGlzIHBhY2tldC4gRHJvcCBpdCwgb3IgYVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY2OTUtXFx0ICogbGF0ZXIgcHVzaCBrZWVwcyB0aGUgc3RhbGUgb2Zmc2V0Llxcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xMzA9c3RhdGljIGludCBwdXNoX21wbHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTEzNC1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjEzNTpcXHRlcnIgPSBza2JfbXBsc19wdXNoKHNrYiwgbXBsc19sc2UsIG1wbHNfZXRoZXJ0eXBlLCBtYWNfbGVuLCAhIW1hY19sZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTM2LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYz01Mz1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYy04NC1cXHRcXHRuZXdfbHNlID0gdGNmX21wbHNfZ2V0X2xzZShOVUxMLCBwLCAhZXRoX3BfbXBscyhza2JfcHJvdG9jb2woc2tiLCB0cnVlKSkpO1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjg1OlxcdFxcdGlmIChza2JfbXBsc19wdXNoKHNrYiwgbmV3X2xzZSwgcC1cXHUwMDNldGNmbV9wcm90bywgbWFjX2xlbixcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy04Ni1cXHRcXHRcXHRcXHQgIHNrYi1cXHUwMDNlZGV2IFxcdTAwMjZcXHUwMDI2IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYy0xMDItXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM6MTAzOlxcdFxcdGlmIChza2JfbXBsc19wdXNoKHNrYiwgbmV3X2xzZSwgcC1cXHUwMDNldGNmbV9wcm90bywgMCwgZmFsc2UpKVxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTEwNC1cXHRcXHRcXHRnb3RvIGRyb3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIyOjAyLjc4OTczOTA4OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjI4NzEwOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYHNrYl9tcGxzX3B1c2hgIGZ1bmN0aW9uLCBmcmVzaCBmcm9tIHRoZSBzb3VyY2UgY29kZTpcblxuKipEaXZpbmcgaW50byBza2JfbXBsc19wdXNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHNrYl9tcGxzX3B1c2hgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgdGhlIGNydWNpYWwgc3RlcCBvZiBwcmVwZW5kaW5nIE1QTFMgbGFiZWxzIG9udG8gYSBuZXR3b3JrIGJ1ZmZlciAoc2tiKS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSBncmFzcCBvZiBNUExTIGZvcndhcmRpbmcgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHJpZ2h0PyBMZXQncyBicmVhayBkb3duIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhpcyBwcm9jZXNzLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lY2hhbmljcyBoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc2tiIGlzIGJlaW5nIG1hbmlwdWxhdGVkLCBzcGVjaWZpY2FsbHksIGhvdyB0aGUgZGF0YSBwb2ludGVyIGlzIG1hbmFnZWQsIHRoZSBsZW5ndGggYWRqdXN0ZWQsIGFuZCB0aGUgYWN0dWFsIGxhYmVsIGlzIGluc2VydGVkLiBJIGFsc28gd2FudCB0byBvYnNlcnZlIHRoZSBoYW5kbGluZyBvZiBwb3RlbnRpYWwgZWRnZSBjYXNlcywgZXJyb3IgY29uZGl0aW9ucywgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGlmIG5lY2Vzc2FyeS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBoYXBwZW5zIGlmIHdlJ3JlIHB1c2hpbmcgbXVsdGlwbGUgbGFiZWxzIGFuZCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHRoZSBsYWJlbCBzdGFjayBjb3JyZWN0bHkuIEknbGwgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdXNlZCwgc2luY2UgbW9kaWZ5aW5nIHNrYnMgY2FuIGJlIGEgcHJldHR5IHRyaWNreSBidXNpbmVzcy5cblxuVGhpcyB3aWxsIGdpdmUgbWUgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgaW50cmljYWNpZXMgb2YgdGhlIE1QTFMgaW1wbGVtZW50YXRpb24sIHRoZSBkZXNpZ24gY2hvaWNlcyBtYWRlIGJ5IHRoZSBrZXJuZWwgZGV2ZWxvcGVycywgYW5kIGhvdyBlZmZpY2llbnRseSB0aGlzIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNydWNpYWwgYnVpbGRpbmcgYmxvY2sgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGFyZ2VyIG5ldHdvcmsgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMjowNS40MTg0NTM3MzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA4NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2MDAsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY2MDA6XFx0ICogQHNrYjogYnVmZmVyXFxuNjYwMTpcXHQgKiBAbXBsc19sc2U6IE1QTFMgbGFiZWwgc3RhY2sgZW50cnkgdG8gcHVzaFxcbjY2MDI6XFx0ICogQG1wbHNfcHJvdG86IGV0aGVydHlwZSBvZiB0aGUgbmV3IE1QTFMgaGVhZGVyIChleHBlY3RzIDB4ODg0NyBvciAweDg4NDgpXFxuNjYwMzpcXHQgKiBAbWFjX2xlbjogbGVuZ3RoIG9mIHRoZSBNQUMgaGVhZGVyXFxuNjYwNDpcXHQgKiBAZXRoZXJuZXQ6IGZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIHJlc3VsdGluZyBwYWNrZXQgYWZ0ZXIgc2tiX21wbHNfcHVzaCBpc1xcbjY2MDU6XFx0ICogICAgICAgICAgICBldGhlcm5ldFxcbjY2MDY6XFx0ICpcXG42NjA3OlxcdCAqIEV4cGVjdHMgc2tiLVxcdTAwM2VkYXRhIGF0IG1hYyBoZWFkZXIuXFxuNjYwODpcXHQgKlxcbjY2MDk6XFx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuXFxuNjYxMDpcXHQgKi9cXG42NjExOlxcdGludCBza2JfbXBsc19wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBtcGxzX2xzZSwgX19iZTE2IG1wbHNfcHJvdG8sXFxuNjYxMjpcXHRcXHRcXHQgIGludCBtYWNfbGVuLCBib29sIGV0aGVybmV0KVxcbjY2MTM6XFx0e1xcbjY2MTQ6XFx0XFx0c3RydWN0IG1wbHNfc2hpbV9oZHIgKmxzZTtcXG42NjE1OlxcdFxcdGludCBlcnI7XFxuNjYxNjpcXHRcXG42NjE3OlxcdFxcdGlmICh1bmxpa2VseSghZXRoX3BfbXBscyhtcGxzX3Byb3RvKSkpXFxuNjYxODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NjE5OlxcdFxcbjY2MjA6XFx0XFx0LyogTmV0d29ya2luZyBzdGFjayBkb2VzIG5vdCBhbGxvdyBzaW11bHRhbmVvdXMgVHVubmVsIGFuZCBNUExTIEdTTy4gKi9cXG42NjIxOlxcdFxcdGlmIChza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24pXFxuNjYyMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NjIzOlxcdFxcbjY2MjQ6XFx0XFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgTVBMU19ITEVOKTtcXG42NjI1OlxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbjY2MjY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG42NjI3OlxcdFxcbjY2Mjg6XFx0XFx0aWYgKCFza2ItXFx1MDAzZWlubmVyX3Byb3RvY29sKSB7XFxuNjYyOTpcXHRcXHRcXHRza2Jfc2V0X2lubmVyX25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xcbjY2MzA6XFx0XFx0XFx0c2tiX3NldF9pbm5lcl9wcm90b2NvbChza2IsIHNrYi1cXHUwMDNlcHJvdG9jb2wpO1xcbjY2MzE6XFx0XFx0fVxcbjY2MzI6XFx0XFxuNjYzMzpcXHRcXHRza2JfcHVzaChza2IsIE1QTFNfSExFTik7XFxuNjYzNDpcXHRcXHRtZW1tb3ZlKHNrYl9tYWNfaGVhZGVyKHNrYikgLSBNUExTX0hMRU4sIHNrYl9tYWNfaGVhZGVyKHNrYiksXFxuNjYzNTpcXHRcXHRcXHRtYWNfbGVuKTtcXG42NjM2OlxcdFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuNjYzNzpcXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgbWFjX2xlbik7XFxuNjYzODpcXHRcXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xcbjY2Mzk6XFx0XFxuNjY0MDpcXHRcXHRsc2UgPSBtcGxzX2hkcihza2IpO1xcbjY2NDE6XFx0XFx0bHNlLVxcdTAwM2VsYWJlbF9zdGFja19lbnRyeSA9IG1wbHNfbHNlO1xcbjY2NDI6XFx0XFx0c2tiX3Bvc3RwdXNoX3Jjc3VtKHNrYiwgbHNlLCBNUExTX0hMRU4pO1xcbjY2NDM6XFx0XFxuNjY0NDpcXHRcXHRpZiAoZXRoZXJuZXQgXFx1MDAyNlxcdTAwMjYgbWFjX2xlbiBcXHUwMDNlPSBFVEhfSExFTilcXG42NjQ1OlxcdFxcdFxcdHNrYl9tb2RfZXRoX3R5cGUoc2tiLCBldGhfaGRyKHNrYiksIG1wbHNfcHJvdG8pO1xcbjY2NDY6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IG1wbHNfcHJvdG87XFxuNjY0NzpcXHRcXG42NjQ4OlxcdFxcdHJldHVybiAwO1xcbjY2NDk6XFx0fVxcbjY2NTA6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcHVzaCk7XFxuNjY1MTpcXHRcXG42NjUyOlxcdC8qKlxcbjY2NTM6XFx0ICogc2tiX21wbHNfcG9wKCkgLSBwb3AgdGhlIG91dGVybW9zdCBNUExTIGhlYWRlclxcbjY2NTQ6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjI6MDUuNDE4ODYzNzc2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzMTk1MTUxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBMUyBIZWFkZXIgTWFuYWdlbWVudDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgTVBMUyBoYW5kbGluZyB3aXRoaW4gYHNrYl9tcGxzX3B1c2hgIGFuZCBgc2tiX21wbHNfcG9wYCwgZm9jdXNlcyBvbiBhIHBvdGVudGlhbCBzdGF0ZSBtYW5hZ2VtZW50IGlzc3VlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgYXMgYWx3YXlzLCB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggaXQuXG5cblRoZSBpc3N1ZSBsaWVzIGluIGhvdyB0aGUgYGlubmVyX3Byb3RvY29sYCB3aXRoaW4gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBzdHJ1Y3R1cmUgaXMgaGFuZGxlZC4gUHJldmlvdXNseSwgd2hlbiBwb3BwaW5nIHRoZSBsYXN0IE1QTFMgaGVhZGVyIGluIGBza2JfbXBsc19wb3BgLCB0aGUgYHNrYi1cdTAwM2Vpbm5lcl9wcm90b2NvbGAgd2Fzbid0IGJlaW5nIGNsZWFyZWQgaWYgdGhlIG5leHQgcHJvdG9jb2wgd2Fzbid0IE1QTFMuIFRoaXMgbWVhbnQgdGhhdCBpZiBhIHN1YnNlcXVlbnQgcHVzaCBvcGVyYXRpb24gb2NjdXJyZWQsIHRoZSBgaW5uZXJfcHJvdG9jb2xgIHdvdWxkIHJlbWFpbiBzdGFsZS4gVGhlIG5ldyBwYXRjaCBhZGRyZXNzZXMgdGhpcyBieSBhZGRpbmcgYSBzaW1wbGUgYHNrYi1cdTAwM2Vpbm5lcl9wcm90b2NvbCA9IDA7YCBjbGVhcmluZyB0aGUgcHJvdG9jb2wgc3RhdGUuXG5cbk15IGZvY3VzIG5vdyBpcyBhIHNhZmV0eSBldmFsdWF0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSBtZW1vcnkgc2FmZXR5IGlzc3Vlcz8gTGV0J3MgY2hlY2s6XG5cbjEuICAqKkV4cG9zZWQgVW5pbml0aWFsaXplZCBNZW1vcnk6KiogTm8uIFRoZSBwYXRjaCBleHBsaWNpdGx5ICpzZXRzKiB0aGUgdmFsdWUgdG8gemVyby4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgYW55IGludGVybmFsIGtlcm5lbCBjb250ZXh0IGFzIGEgcmVzdWx0IG9mIHRoZSBjaGFuZ2UuXG4yLiAgKipJbnRlcmFjdGlvbiB3aXRoIENvcHkgT3BlcmF0aW9uczoqKiBOby4gVGhlcmUgaXMgbm8gaW50ZXJhY3Rpb24gd2l0aCBvcGVyYXRpb25zIGxpa2UgYGNvcHlfdG9fdXNlcmAsIGBuZXRsaW5rYCwgYGlvY3RsYCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBhcmUgdG91Y2hlZCBieSB0aGlzIGNvZGUgcGF0aC5cbjMuICAqKkNvbmRpdGlvbmFsIEJyYW5jaGluZyBvbiBVbmluaXRpYWxpemVkIFZhcmlhYmxlczoqKiBOby4gYG5leHRfcHJvdG9gIGlzIHByb3ZpZGVkIGFzIGFuIGFyZ3VtZW50IGFuZCB0aHVzIGluaXRpYWxpemVkLlxuNC4gICoqUmVhZGluZyBVbmluaXRpYWxpemVkIE1lbW9yeToqKiBOby4gVGhlIGNvZGUgKmNsZWFycyogdGhlIHN0YWxlIGBpbm5lcl9wcm90b2NvbGAsIGVuc3VyaW5nIHN1YnNlcXVlbnQgcHVzaGVzIHdpbGwgY29ycmVjdGx5IGNhcHR1cmUgdGhlIGlubmVyIG5ldHdvcmsgaGVhZGVyIGFuZCBwcm90b2NvbC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgbW9yZSBzcGVjaWZpYyBLQVNBTi9LTVNBTiBpbXBsaWNhdGlvbnMuIFRoaXMgcGF0Y2ggKmZpeGVzKiBhIHByb3RvY29sIHN0YXRlIHRyYWNraW5nIGlzc3VlLCBub3QgYSBtZW1vcnkgYWxsb2NhdGlvbiBvciBhY2Nlc3MgcHJvYmxlbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGFjY2Vzc2VzLCBvciBsZWFrcyB0aGF0IG1pZ2h0IHRyaWdnZXIgS01TQU4ncyBjaGVja3MuIEl0J3MgcHVyZSBsb2dpYyBjb3JyZWN0aW9uLCBjbGVhcmluZyB0aGUgc3RhbGUgYGlubmVyX3Byb3RvY29sYC4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBmYWxzZSBpbiB0aGlzIGNhc2UuXG5cbk9rYXksIEknbSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzc3LCJPdXRwdXRUb2tlbnMiOjIwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIyOjE0LjczODM4MjMxNloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl9tcGxzX3BvcCgpYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIHJlc2V0IGBza2ItXFx1MDAzZWlubmVyX3Byb3RvY29sYCB0byAwIHdoZW4gdGhlIHBvcHBlZCBNUExTIGhlYWRlciBpcyB0aGUgbGFzdCBvbmUgKGkuZS4gYCFldGhfcF9tcGxzKG5leHRfcHJvdG8pYCkuIFRoaXMgZW5zdXJlcyB0aGF0IHN1YnNlcXVlbnQgYHNrYl9tcGxzX3B1c2goKWAgY2FsbHMgZG8gbm90IHJldGFpbiBzdGFsZSBpbm5lciBwcm90b2NvbCBhbmQgaW5uZXIgbmV0d29yayBoZWFkZXIgb2Zmc2V0cy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMgaW4gYSB3YXkgdGhhdCBsZWFkcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgYnVmZmVyL29mZnNldCBpc3N1ZXMgYXJpc2luZyBmcm9tIHNrYiBoZWFkZXIgbWFuaXB1bGF0aW9uIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2tiX21wbHNfcG9wKClgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgdG8gcmVzZXQgYHNrYi1cXHUwMDNlaW5uZXJfcHJvdG9jb2xgIHRvIDAgd2hlbiB0aGUgcG9wcGVkIE1QTFMgaGVhZGVyIGlzIHRoZSBsYXN0IG9uZSAoaS5lLiBgIWV0aF9wX21wbHMobmV4dF9wcm90bylgKS4gVGhpcyBlbnN1cmVzIHRoYXQgc3Vic2VxdWVudCBgc2tiX21wbHNfcHVzaCgpYCBjYWxscyBkbyBub3QgcmV0YWluIHN0YWxlIGlubmVyIHByb3RvY29sIGFuZCBpbm5lciBuZXR3b3JrIGhlYWRlciBvZmZzZXRzLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBzdHJ1Y3QgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGxlbmd0aHMgb3IgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IGxlYWRzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gQW55IHBvdGVudGlhbCBidWZmZXIvb2Zmc2V0IGlzc3VlcyBhcmlzaW5nIGZyb20gc2tiIGhlYWRlciBtYW5pcHVsYXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowr4wfm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 00:41:49 +0000 UTC FinishedAt: 2026-09-03 01:22:16 +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": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_MPLS", "NET_CLS_ACT", "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_MPLS", "NET_CLS_ACT", "OPENVSWITCH" ], "series_id": "d909db3a-23b5-49df-84a3-ea3f6e2cf9a4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_mpls_pop", "skb_mpls_push", "tcf_mpls_act" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfTVBMUyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9tcGxzX3BvcCYjMzQ7LAogICAgJiMzNDtza2JfbXBsc19wdXNoJiMzNDssCiAgICAmIzM0O3RjZl9tcGxzX2FjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfbXBsc19wb3AoKWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCB0byByZXNldCBgc2tiLVx1MDAzZWlubmVyX3Byb3RvY29sYCB0byAwIHdoZW4gdGhlIHBvcHBlZCBNUExTIGhlYWRlciBpcyB0aGUgbGFzdCBvbmUgKGkuZS4gYCFldGhfcF9tcGxzKG5leHRfcHJvdG8pYCkuIFRoaXMgZW5zdXJlcyB0aGF0IHN1YnNlcXVlbnQgYHNrYl9tcGxzX3B1c2goKWAgY2FsbHMgZG8gbm90IHJldGFpbiBzdGFsZSBpbm5lciBwcm90b2NvbCBhbmQgaW5uZXIgbmV0d29yayBoZWFkZXIgb2Zmc2V0cy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHN0cnVjdCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgbGVuZ3RocyBvciBidWZmZXIgYm91bmRzIGluIGEgd2F5IHRoYXQgbGVhZHMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBBbnkgcG90ZW50aWFsIGJ1ZmZlci9vZmZzZXQgaXNzdWVzIGFyaXNpbmcgZnJvbSBza2IgaGVhZGVyIG1hbmlwdWxhdGlvbiBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNrYl9tcGxzX3BvcCBpbiBuZXQvY29yZS9za2J1ZmYuYyB0byBjbGVhciBza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2wgd2hlbiBwb3BwaW5nIHRoZSBsYXN0IE1QTFMgaGVhZGVyLCBwcmV2ZW50aW5nIHN0YWxlIGlubmVyIGhlYWRlciBvZmZzZXRzIG9uIHN1YnNlcXVlbnQgTVBMUyBvcGVyYXRpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBza2IgTVBMUyBoYW5kbGluZyB1c2VkIGJ5IFRDIE1QTFMgYWN0aW9ucyBhbmQgT3BlbiB2U3dpdGNoLCBib3RoIG9mIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTJhNDFhY2UzMjE1MGRkYTQ0ODU0OTBiY2UzNDczZGI4OWRhOGM1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDE6MjE6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggOTY2YWYzYmVlZDk0ZC4uY2MzYjRiNzAyODhiNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTY2OTAsNiAmIzQzOzY2OTAsMTMgQEAgaW50IHNrYl9tcGxzX3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgbmV4dF9wcm90bywgaW50IG1hY19sZW4sXG4gXHR9XG4gXHRza2ItXHUwMDNlcHJvdG9jb2wgPSBuZXh0X3Byb3RvO1xuIFxuJiM0MztcdC8qIFRoZSBsYXN0IGxhYmVsIGlzIGdvbmUsIHNvIHRoZSBpbm5lciBoZWFkZXIgcmVjb3JkZWQgYnlcbiYjNDM7XHQgKiBza2JfbXBsc19wdXNoKCkgbm8gbG9uZ2VyIGRlc2NyaWJlcyB0aGlzIHBhY2tldC4gRHJvcCBpdCwgb3IgYVxuJiM0MztcdCAqIGxhdGVyIHB1c2gga2VlcHMgdGhlIHN0YWxlIG9mZnNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWV0aF9wX21wbHMobmV4dF9wcm90bykpXG4mIzQzO1x0XHRza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2wgPSAwO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChza2JfbXBsc19wb3ApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfTVBMUyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9tcGxzX3BvcCYjMzQ7LAogICAgJiMzNDtza2JfbXBsc19wdXNoJiMzNDssCiAgICAmIzM0O3RjZl9tcGxzX2FjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBza2JfbXBsc19wb3AgaW4gbmV0L2NvcmUvc2tidWZmLmMgdG8gY2xlYXIgc2tiLVx1MDAzZWlubmVyX3Byb3RvY29sIHdoZW4gcG9wcGluZyB0aGUgbGFzdCBNUExTIGhlYWRlciwgcHJldmVudGluZyBzdGFsZSBpbm5lciBoZWFkZXIgb2Zmc2V0cyBvbiBzdWJzZXF1ZW50IE1QTFMgb3BlcmF0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgc2tiIE1QTFMgaGFuZGxpbmcgdXNlZCBieSBUQyBNUExTIGFjdGlvbnMgYW5kIE9wZW4gdlN3aXRjaCwgYm90aCBvZiB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEyYTQxYWNlMzIxNTBkZGE0NDg1NDkwYmNlMzQ3M2RiODlkYThjNTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDAxOjIxOjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCA5NjZhZjNiZWVkOTRkLi5jYzNiNGI3MDI4OGI0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtNjY5MCw2ICYjNDM7NjY5MCwxMyBAQCBpbnQgc2tiX21wbHNfcG9wKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBuZXh0X3Byb3RvLCBpbnQgbWFjX2xlbiwKIAl9CiAJc2tiLSZndDtwcm90b2NvbCA9IG5leHRfcHJvdG87CiAKJiM0MzsJLyogVGhlIGxhc3QgbGFiZWwgaXMgZ29uZSwgc28gdGhlIGlubmVyIGhlYWRlciByZWNvcmRlZCBieQomIzQzOwkgKiBza2JfbXBsc19wdXNoKCkgbm8gbG9uZ2VyIGRlc2NyaWJlcyB0aGlzIHBhY2tldC4gRHJvcCBpdCwgb3IgYQomIzQzOwkgKiBsYXRlciBwdXNoIGtlZXBzIHRoZSBzdGFsZSBvZmZzZXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWV0aF9wX21wbHMobmV4dF9wcm90bykpCiYjNDM7CQlza2ItJmd0O2lubmVyX3Byb3RvY29sID0gMDsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9tcGxzX3BvcCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipBbmFseXppbmcgdGhlIE1QTFMgUG9wIFBhdGNoKioKClJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBza2JfbXBsc19wb3BgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhpcyBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGFuZCwgY3J1Y2lhbGx5LCBpdHMgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgbmV0d29yayBzdGFjay4KClRoZXJlZm9yZSwgSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSBkaWcgZGVlcGVyLiBJJiMzOTttIGdvaW5nIHRvIHJlYWNoIGZvciBlaXRoZXIgYGdyZXBwZXJgIG9yIHBlcmhhcHMgYSBkaXJlY3QgYHJlYWQtZmlsZWAgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24gYHNrYl9tcGxzX3BvcGAgaXRzZWxmLiBJIG5lZWQgdGhlIGNvZGUgcmlnaHQgdGhlcmUgaW4gZnJvbnQgb2YgbWUuIEkgd2lsbCBjaGVjayBmb3IgaW5saW5lLWVkIGNvZGUgYXMgd2VsbC4KClRoZW4sIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjYWxsZXJzIG9mIGBza2JfbXBsc19wb3BgLiBTZWVpbmcgaG93IGl0JiMzOTtzIHVzZWQg4oCTIHRoZSBlbnZpcm9ubWVudHMgaXQmIzM5O3MgaW52b2tlZCBpbiwgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHRoZSBwcm90b2NvbHMgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoIOKAkyBpcyBwYXJhbW91bnQuIFRoaXMgd2lsbCBpbnN0YW50bHkgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBwb3RlbnRpYWwgaW1wYWN0cyB0aGlzIHBhdGNoIG1pZ2h0IGhhdmUuIENvbnRleHQgaXMga2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfbXBsc19wb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTY2NTA9RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcHVzaCk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjY1Mi0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjY2NTM6ICogc2tiX21wbHNfcG9wKCkgLSBwb3AgdGhlIG91dGVybW9zdCBNUExTIGhlYWRlclxubmV0L2NvcmUvc2tidWZmLmMtNjY1NC0gKlxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY2NjMtICovXG5uZXQvY29yZS9za2J1ZmYuYzo2NjY0OmludCBza2JfbXBsc19wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IG5leHRfcHJvdG8sIGludCBtYWNfbGVuLFxubmV0L2NvcmUvc2tidWZmLmMtNjY2NS1cdFx0IGJvb2wgZXRoZXJuZXQpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjcwMS19XG5uZXQvY29yZS9za2J1ZmYuYzo2NzAyOkVYUE9SVF9TWU1CT0xfR1BMKHNrYl9tcGxzX3BvcCk7XG5uZXQvY29yZS9za2J1ZmYuYy02NzAzLVxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTQ2PXN0YXRpYyBpbnQgcG9wX21wbHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTAtXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjE1MTpcdGVyciA9IHNrYl9tcGxzX3BvcChza2IsIGV0aGVydHlwZSwgc2tiLVx1MDAzZW1hY19sZW4sXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1Mi1cdFx0XHQgICBvdnNfa2V5X21hY19wcm90byhrZXkpID09IE1BQ19QUk9UT19FVEhFUk5FVCk7XG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NTM9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9tcGxzX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfbXBscy5jLTc4LVx0Y2FzZSBUQ0FfTVBMU19BQ1RfUE9QOlxubmV0L3NjaGVkL2FjdF9tcGxzLmM6Nzk6XHRcdGlmIChza2JfbXBsc19wb3Aoc2tiLCBwLVx1MDAzZXRjZm1fcHJvdG8sIG1hY19sZW4sXG5uZXQvc2NoZWQvYWN0X21wbHMuYy04MC1cdFx0XHRcdCBza2ItXHUwMDNlZGV2IFx1MDAyNlx1MDAyNiBza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTY4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVBMUyBQYWNrZXQgSGFuZGxpbmcgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2UgYW5kIGNvbnRleHQgb2YgYHNrYl9tcGxzX3BvcGAuIEZpcnN0LCBJIHNob3VsZCB6ZXJvIGluIG9uIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGBza2JfbXBsc19wb3BgIHdpdGhpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBUaGF0IHBsYWNlcyBpdCBmaXJtbHkgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHdoaWNoIGlzIGdvb2QgdG8ga25vdyDigJMgaXQmIzM5O3MgZnVuZGFtZW50YWwuIE5vdywgd2hlcmUgaXMgaXQgYmVpbmcgKmNhbGxlZCo/IExldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUgc2VhcmNoIHR1cm5lZCB1cCB0aHJlZSBjYWxsZXJzOiBgbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY2Ag4oCTIHRoYXQmIzM5O3MgT3BlbiB2U3dpdGNoLCB3aGljaCBpcyBpbnRlcmVzdGluZywgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGl0IGlzIHVzaW5nIHRoaXMgZnVuY3Rpb24uIFRoZW4sIGBuZXQvc2NoZWQvYWN0X21wbHMuY2Ag4oCTIGFoLCB0aGF0JiMzOTtzIHRoZSBNUExTIGNsYXNzaWZpZXIvYWN0aW9uIG1vZHVsZSBpbiB0cmFmZmljIGNvbnRyb2wuIEFuZCwgZmluYWxseSwgdGhlIGV4cGVjdGVkIGNhbGxzIGZyb20gd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AgZm9yIHVzZSBpbiBgc2tiX21wbHNfcHVzaGAgYW5kIGBza2JfbXBsc19wb3BgIGl0c2VsZi4KClRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYG5ldC9zY2hlZC9hY3RfbXBscy5jYCBhbmQgYG5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNgLCBhbmQgc2VlIHdoYXQgdGhlaXIgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIGFyZSB1c2luZyBgc2tiX21wbHNfcG9wYCwgYW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIGl0cyBpbnZvY2F0aW9uLiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2Ygd2hlcmUgdGhlIE1QTFMgcGFja2V0IHByb2Nlc3NpbmcgaXMgaGFwcGVuaW5nIHdpdGhpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVF9BQ1RfTVBMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9ODA4PWNvbmZpZyBORVRfQUNUX0NTVU1cbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04MTgtXG5uZXQvc2NoZWQvS2NvbmZpZzo4MTk6Y29uZmlnIE5FVF9BQ1RfTVBMU1xubmV0L3NjaGVkL0tjb25maWctODIwLVx0dHJpc3RhdGUgXCYjMzQ7TVBMUyBtYW5pcHVsYXRpb25cJiMzNDtcbi0tXG5uZXQvc2NoZWQvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX05FVF9BQ1RfQ1NVTSlcdCYjNDM7PSBhY3RfY3N1bS5vXG5uZXQvc2NoZWQvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX05FVF9BQ1RfTVBMUylcdCYjNDM7PSBhY3RfbXBscy5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX05FVF9BQ1RfVkxBTilcdCYjNDM7PSBhY3Rfdmxhbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFRyYWZmaWMgQ29udHJvbCBDb25maWd1cmF0aW9uKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi4gTXkgaW50dWl0aW9uIHNheXMgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFyZSBwcm9iYWJseSBpbiBgbmV0L3NjaGVkL0tjb25maWdgLiBMZXQmIzM5O3MgemVybyBpbiBvbiB0aGF0IGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSA4MTkuIEkmIzM5O20gbm90IGVudGlyZWx5IHN1cmUgKndoYXQqIEkmIzM5O20gbG9va2luZyBmb3IgeWV0LCBidXQgdGhhdCYjMzk7cyBvZnRlbiBob3cgaXQgZ29lcy4gVGhhdCBsaW5lIGZlZWxzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGxvcmUgdGhlIGFyZWEgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlIGhvbGRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgxMDpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcdTAwMjZcdTAwMjYgSU5FVFxuIDgxMTpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiA4MTI6XHRcdGhlbHBcbiA4MTM6XHRcdCAgU2F5IFkgaGVyZSB0byB1cGRhdGUgc29tZSBjb21tb24gY2hlY2tzdW0gYWZ0ZXIgc29tZSBkaXJlY3RcbiA4MTQ6XHRcdCAgcGFja2V0IGFsdGVyYXRpb25zLlxuIDgxNTpcdFxuIDgxNjpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODE3Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY3N1bS5cbiA4MTg6XHRcbiA4MTk6XHRjb25maWcgTkVUX0FDVF9NUExTXG4gODIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtNUExTIG1hbmlwdWxhdGlvblwmIzM0O1xuIDgyMTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDgyMjpcdFx0aGVscFxuIDgyMzpcdFx0ICBTYXkgWSBoZXJlIHRvIHB1c2ggb3IgcG9wIE1QTFMgaGVhZGVycy5cbiA4MjQ6XHRcbiA4MjU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiA4MjY6XHRcbiA4Mjc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDgyODpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X21wbHMuXG4gODI5Olx0XG4gODMwOlx0Y29uZmlnIE5FVF9BQ1RfVkxBTlxuIDgzMTpcdFx0dHJpc3RhdGUgXCYjMzQ7VmxhbiBtYW5pcHVsYXRpb25cJiMzNDtcbiA4MzI6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA4MzM6XHRcdGhlbHBcbiA4MzQ6XHRcdCAgU2F5IFkgaGVyZSB0byBwdXNoIG9yIHBvcCB2bGFuIGhlYWRlcnMuXG4gODM1Olx0XG4gODM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gODM3Olx0XG4gODM4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA4Mzk6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF92bGFuLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgT3BlbiB2U3dpdGNoIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBPcGVuIHZTd2l0Y2ggY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQmIzM5O2xsIGxheSBvdXQgdGhlIGNvcmUgZmVhdHVyZXMgYW5kIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBjb25maWd1cmluZyBPcGVuIHZTd2l0Y2ggd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0b3AtbGV2ZWwgbWVudSBzdHJ1Y3R1cmUsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgYW5kIHRoZSBkZWZhdWx0IHZhbHVlcyBvciBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBhbHNvIGludGVyZXN0ZWQgaW4gYW55IG5ldyBvciBjaGFuZ2VkIG9wdGlvbnMgc2luY2UgbXkgbGFzdCBkZWVwIGRpdmUsIGVzcGVjaWFsbHkgYW55IHJlbGF0ZWQgdG8gcmVjZW50IHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cyBvciBuZXcgcHJvdG9jb2xzLiBUaGlzIEtjb25maWcgd2lsbCBnaXZlIG1lIGEgaGlnaC1sZXZlbCB2aWV3IGFuZCBhbnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyB0byBpbnZlc3RpZ2F0ZSBzcGVjaWZpYyBhc3BlY3RzIGluIG1vcmUgZGV0YWlsLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlcGVuZGVuY2llcyDigJMgdW5kZXJzdGFuZGluZyB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIGNlcnRhaW4gT3BlbiB2U3dpdGNoIGZlYXR1cmVzIGlzIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBPcGVuIHZTd2l0Y2gqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIGRlcGVuZGVuY2llcywgcGFydGljdWxhcmx5IHRob3NlIGRlZmluZWQgaW4gdGhlIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGtub3cgdGhpcyBmaWxlIGlzIGdvaW5nIHRvIGNvbnRhaW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgY29udHJvbCB3aGljaCBmZWF0dXJlcyBnZXQgY29tcGlsZWQgaW50byBPcGVuIHZTd2l0Y2guIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZGlmZmVyZW50IGNvbXBvbmVudHMgcmVsYXRlIHRvIGVhY2ggb3RoZXIgYW5kIGZvciBjdXN0b21pemluZyB0aGUgYnVpbGQgZm9yIHNwZWNpZmljIGRlcGxveW1lbnRzLiBJIGV4cGVjdCB0byBzZWUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIG1heWJlIHNvbWUgYHNlbGVjdGAgc3RhdGVtZW50cywgYW5kIGRlZmluaXRlbHkgc29tZSBib29sZWFuIG9yIHRyaXN0YXRlIG9wdGlvbnMuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0cmlnZ2VycyB3aGF0LCBhbmQgaG93IHRvIGVuYWJsZSBvciBkaXNhYmxlIGRpZmZlcmVudCBmZWF0dXJlcyBlZmZlY3RpdmVseS4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgT3BlbiB2U3dpdGNoXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBPUEVOVlNXSVRDSFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxuICAxMDpcdFx0XHQgICAoTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXHUwMDI2XHUwMDI2IFxcXG4gIDExOlx0XHRcdFx0XHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IFxcXG4gIDEyOlx0XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG4gIDEzOlx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbiAgMTQ6XHRcdHNlbGVjdCBNUExTXG4gIDE1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxNjpcdFx0c2VsZWN0IE5FVF9NUExTX0dTT1xuICAxNzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICAxODpcdFx0c2VsZWN0IE5FVF9OU0hcbiAgMTk6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xuICAyMDpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXG4gIDIzOlx0XHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXG4gIDI0Olx0XHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxuICAyNTpcdFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXG4gIDI2Olx0XHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcbiAgMjc6XHRcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXG4gIDI4Olx0XHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXG4gIDI5Olx0XHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXG4gIDMwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgd2Fsa2luZyB0aHJvdWdoIHRoZSBsb2dpYzoKCioqRXhhbWluaW5nIE1QTFMgTGFiZWwgSGFuZGxpbmcgaW4gdGhlIEtlcm5lbCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBNUExTIGxhYmVscyBhcmUgaGFuZGxlZCBpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIGFjdGlvbnMgcmVsYXRlZCB0byBwb3BwaW5nIGFuZCBwdXNoaW5nIHRoZXNlIGxhYmVscy4gTXkgZmlyc3QgaW5zdGluY3QsIGJlaW5nIGZhbWlsaWFyIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBmaWxlczogSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGBuZXQvc2NoZWQvYWN0X21wbHMuY2AgYmVjYXVzZSBpdCBkZWFscyBkaXJlY3RseSB3aXRoIE1QTFMgYWN0aW9ucywgbGlrZWx5IHRoZSAmIzM0O21wbHMmIzM0OyBwYXJ0IG9mIHRoaW5ncy4gQnV0IEkga25vdyB0aGF0IHRoZSBgc2tidWZmYCBzdHJ1Y3R1cmUgaXMgY2VudHJhbCB0byBwYWNrZXQgaGFuZGxpbmcgaW4gdGhlIGtlcm5lbCwgc28gSSYjMzk7bGwgYWxzbyB3YW50IHRvIGxvb2sgY2xvc2VseSBhdCBgbmV0L2NvcmUvc2tidWZmLmNgLgoKTm93LCB3aXRoaW4gYHNrYnVmZi5jYCwgSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGRlYWwgd2l0aCBtYW5pcHVsYXRpbmcgdGhvc2UgbGFiZWxzLCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgZnVuY3Rpb25zIGBza2JfbXBsc19wb3BgIGFuZCBgc2tiX21wbHNfcHVzaGAuIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGtleSBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCAqcmVtb3ZlcyogYW5kICphZGRzKiBNUExTIGxhYmVscyByZXNwZWN0aXZlbHkuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCB0aGUgY29kZSBhcm91bmQgdGhvc2UgZnVuY3Rpb25zLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkgYXJlIG1vZGlmaWVkLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSBsb29raW5nIGF0IGhvdyB0aGUgYHNrYmAgc3RydWN0dXJlJiMzOTtzIGRhdGEgaXMgYWRqdXN0ZWQgYW5kIGhvdyB0aGUgbGFiZWwgc3RhY2sgaXMgbWFuYWdlZC4gQmFzaWNhbGx5LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgb2YgZGF0YSBhcm91bmQgdGhvc2UgZnVuY3Rpb25zIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjY0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NjQ1Olx0XHRcdHNrYl9tb2RfZXRoX3R5cGUoc2tiLCBldGhfaGRyKHNrYiksIG1wbHNfcHJvdG8pO1xuNjY0NjpcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gbXBsc19wcm90bztcbjY2NDc6XHRcbjY2NDg6XHRcdHJldHVybiAwO1xuNjY0OTpcdH1cbjY2NTA6XHRFWFBPUlRfU1lNQk9MX0dQTChza2JfbXBsc19wdXNoKTtcbjY2NTE6XHRcbjY2NTI6XHQvKipcbjY2NTM6XHQgKiBza2JfbXBsc19wb3AoKSAtIHBvcCB0aGUgb3V0ZXJtb3N0IE1QTFMgaGVhZGVyXG42NjU0Olx0ICpcbjY2NTU6XHQgKiBAc2tiOiBidWZmZXJcbjY2NTY6XHQgKiBAbmV4dF9wcm90bzogZXRoZXJ0eXBlIG9mIGhlYWRlciBhZnRlciBwb3BwZWQgTVBMUyBoZWFkZXJcbjY2NTc6XHQgKiBAbWFjX2xlbjogbGVuZ3RoIG9mIHRoZSBNQUMgaGVhZGVyXG42NjU4Olx0ICogQGV0aGVybmV0OiBmbGFnIHRvIGluZGljYXRlIGlmIHRoZSBwYWNrZXQgaXMgZXRoZXJuZXRcbjY2NTk6XHQgKlxuNjY2MDpcdCAqIEV4cGVjdHMgc2tiLVx1MDAzZWRhdGEgYXQgbWFjIGhlYWRlci5cbjY2NjE6XHQgKlxuNjY2MjpcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtZXJybm8gb3RoZXJ3aXNlLlxuNjY2MzpcdCAqL1xuNjY2NDpcdGludCBza2JfbXBsc19wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IG5leHRfcHJvdG8sIGludCBtYWNfbGVuLFxuNjY2NTpcdFx0XHQgYm9vbCBldGhlcm5ldClcbjY2NjY6XHR7XG42NjY3Olx0XHRpbnQgZXJyO1xuNjY2ODpcdFxuNjY2OTpcdFx0aWYgKHVubGlrZWx5KCFldGhfcF9tcGxzKHNrYi1cdTAwM2Vwcm90b2NvbCkpKVxuNjY3MDpcdFx0XHRyZXR1cm4gMDtcbjY2NzE6XHRcbjY2NzI6XHRcdGVyciA9IHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYWNfbGVuICYjNDM7IE1QTFNfSExFTik7XG42NjczOlx0XHRpZiAodW5saWtlbHkoZXJyKSlcbjY2NzQ6XHRcdFx0cmV0dXJuIGVycjtcbjY2NzU6XHRcbjY2NzY6XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIG1wbHNfaGRyKHNrYiksIE1QTFNfSExFTik7XG42Njc3Olx0XHRtZW1tb3ZlKHNrYl9tYWNfaGVhZGVyKHNrYikgJiM0MzsgTVBMU19ITEVOLCBza2JfbWFjX2hlYWRlcihza2IpLFxuNjY3ODpcdFx0XHRtYWNfbGVuKTtcbjY2Nzk6XHRcbjY2ODA6XHRcdF9fc2tiX3B1bGwoc2tiLCBNUExTX0hMRU4pO1xuNjY4MTpcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbjY2ODI6XHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBtYWNfbGVuKTtcbjY2ODM6XHRcbjY2ODQ6XHRcdGlmIChldGhlcm5ldCBcdTAwMjZcdTAwMjYgbWFjX2xlbiBcdTAwM2U9IEVUSF9ITEVOKSB7XG42Njg1Olx0XHRcdHN0cnVjdCBldGhoZHIgKmhkcjtcbjY2ODY6XHRcbjY2ODc6XHRcdFx0LyogdXNlIG1wbHNfaGRyKCkgdG8gZ2V0IGV0aGVydHlwZSB0byBhY2NvdW50IGZvciBWTEFOcy4gKi9cbjY2ODg6XHRcdFx0aGRyID0gKHN0cnVjdCBldGhoZHIgKikoKHZvaWQgKiltcGxzX2hkcihza2IpIC0gRVRIX0hMRU4pO1xuNjY4OTpcdFx0XHRza2JfbW9kX2V0aF90eXBlKHNrYiwgaGRyLCBuZXh0X3Byb3RvKTtcbjY2OTA6XHRcdH1cbjY2OTE6XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IG5leHRfcHJvdG87XG42NjkyOlx0XG42NjkzOlx0XHQvKiBUaGUgbGFzdCBsYWJlbCBpcyBnb25lLCBzbyB0aGUgaW5uZXIgaGVhZGVyIHJlY29yZGVkIGJ5XG42Njk0Olx0XHQgKiBza2JfbXBsc19wdXNoKCkgbm8gbG9uZ2VyIGRlc2NyaWJlcyB0aGlzIHBhY2tldC4gRHJvcCBpdCwgb3IgYVxuNjY5NTpcdFx0ICogbGF0ZXIgcHVzaCBrZWVwcyB0aGUgc3RhbGUgb2Zmc2V0LlxuNjY5NjpcdFx0ICovXG42Njk3Olx0XHRpZiAoIWV0aF9wX21wbHMobmV4dF9wcm90bykpXG42Njk4Olx0XHRcdHNrYi1cdTAwM2Vpbm5lcl9wcm90b2NvbCA9IDA7XG42Njk5Olx0XG42NzAwOlx0XHRyZXR1cm4gMDtcbjY3MDE6XHR9XG42NzAyOlx0RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcG9wKTtcbjY3MDM6XHRcbjY3MDQ6XHQvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbToKCioqRXhhbWluaW5nIHRoZSBgc2tiX21wbHNfcG9wYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2tiX21wbHNfcG9wYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHBpbnBvaW50IGl0cyBsb2NhdGlvbiBhbmQgcG9zc2libGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIFNvLCB0aGUgZmlyc3Qgc3RlcCBpcyB0byBjb25maXJtIHRoYXQgaXQmIzM5O3Mgd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIEdvb2QsIHRoYXQgY2hlY2tzIG91dC4gTm93IEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIG9yIHNpbWlsYXIgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFscyB0aGF0IG1pZ2h0IGFmZmVjdCB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY29tcGlsZWQgb3IgdXNlZCBpbiBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zLiBUbyBkbyB0aGlzIHN5c3RlbWF0aWNhbGx5LCBsZXQmIzM5O3Mgc2NhbiBhIHNwZWNpZmljIHJlZ2lvbiBvZiB0aGUgc291cmNlIGNvZGUuIEkmIzM5O2xsIGZvY3VzIG9uIGxpbmVzIDY2MDAgdGhyb3VnaCA2NzIwIHdpdGhpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY29uY2VudHJhdGVkIHZpZXcgb2YgaXRzIGNvbnRleHQsIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIG9yIGJ1aWxkLXRpbWUgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjYwMDpcdCAqIEBza2I6IGJ1ZmZlclxuNjYwMTpcdCAqIEBtcGxzX2xzZTogTVBMUyBsYWJlbCBzdGFjayBlbnRyeSB0byBwdXNoXG42NjAyOlx0ICogQG1wbHNfcHJvdG86IGV0aGVydHlwZSBvZiB0aGUgbmV3IE1QTFMgaGVhZGVyIChleHBlY3RzIDB4ODg0NyBvciAweDg4NDgpXG42NjAzOlx0ICogQG1hY19sZW46IGxlbmd0aCBvZiB0aGUgTUFDIGhlYWRlclxuNjYwNDpcdCAqIEBldGhlcm5ldDogZmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgcmVzdWx0aW5nIHBhY2tldCBhZnRlciBza2JfbXBsc19wdXNoIGlzXG42NjA1Olx0ICogICAgICAgICAgICBldGhlcm5ldFxuNjYwNjpcdCAqXG42NjA3Olx0ICogRXhwZWN0cyBza2ItXHUwMDNlZGF0YSBhdCBtYWMgaGVhZGVyLlxuNjYwODpcdCAqXG42NjA5Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuXG42NjEwOlx0ICovXG42NjExOlx0aW50IHNrYl9tcGxzX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIG1wbHNfbHNlLCBfX2JlMTYgbXBsc19wcm90byxcbjY2MTI6XHRcdFx0ICBpbnQgbWFjX2xlbiwgYm9vbCBldGhlcm5ldClcbjY2MTM6XHR7XG42NjE0Olx0XHRzdHJ1Y3QgbXBsc19zaGltX2hkciAqbHNlO1xuNjYxNTpcdFx0aW50IGVycjtcbjY2MTY6XHRcbjY2MTc6XHRcdGlmICh1bmxpa2VseSghZXRoX3BfbXBscyhtcGxzX3Byb3RvKSkpXG42NjE4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjYxOTpcdFxuNjYyMDpcdFx0LyogTmV0d29ya2luZyBzdGFjayBkb2VzIG5vdCBhbGxvdyBzaW11bHRhbmVvdXMgVHVubmVsIGFuZCBNUExTIEdTTy4gKi9cbjY2MjE6XHRcdGlmIChza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbjY2MjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42NjIzOlx0XG42NjI0Olx0XHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBNUExTX0hMRU4pO1xuNjYyNTpcdFx0aWYgKHVubGlrZWx5KGVycikpXG42NjI2Olx0XHRcdHJldHVybiBlcnI7XG42NjI3Olx0XG42NjI4Olx0XHRpZiAoIXNrYi1cdTAwM2Vpbm5lcl9wcm90b2NvbCkge1xuNjYyOTpcdFx0XHRza2Jfc2V0X2lubmVyX25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuNjYzMDpcdFx0XHRza2Jfc2V0X2lubmVyX3Byb3RvY29sKHNrYiwgc2tiLVx1MDAzZXByb3RvY29sKTtcbjY2MzE6XHRcdH1cbjY2MzI6XHRcbjY2MzM6XHRcdHNrYl9wdXNoKHNrYiwgTVBMU19ITEVOKTtcbjY2MzQ6XHRcdG1lbW1vdmUoc2tiX21hY19oZWFkZXIoc2tiKSAtIE1QTFNfSExFTiwgc2tiX21hY19oZWFkZXIoc2tiKSxcbjY2MzU6XHRcdFx0bWFjX2xlbik7XG42NjM2Olx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuNjYzNzpcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIG1hY19sZW4pO1xuNjYzODpcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbjY2Mzk6XHRcbjY2NDA6XHRcdGxzZSA9IG1wbHNfaGRyKHNrYik7XG42NjQxOlx0XHRsc2UtXHUwMDNlbGFiZWxfc3RhY2tfZW50cnkgPSBtcGxzX2xzZTtcbjY2NDI6XHRcdHNrYl9wb3N0cHVzaF9yY3N1bShza2IsIGxzZSwgTVBMU19ITEVOKTtcbjY2NDM6XHRcbjY2NDQ6XHRcdGlmIChldGhlcm5ldCBcdTAwMjZcdTAwMjYgbWFjX2xlbiBcdTAwM2U9IEVUSF9ITEVOKVxuNjY0NTpcdFx0XHRza2JfbW9kX2V0aF90eXBlKHNrYiwgZXRoX2hkcihza2IpLCBtcGxzX3Byb3RvKTtcbjY2NDY6XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IG1wbHNfcHJvdG87XG42NjQ3Olx0XG42NjQ4Olx0XHRyZXR1cm4gMDtcbjY2NDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MzcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1QTFMgT3BlcmF0aW9ucyBpbiB0aGUgTGludXggS2VybmVsKioKCk9rYXksIHNvIGBza2JfbXBsc19wdXNoYCBhbmQgYHNrYl9tcGxzX3BvcGAg4oCTIHRob3NlIGFyZSAqYWx3YXlzKiBidWlsdCBpbiwgcGFydCBvZiB0aGUgY29yZSBgbmV0L2NvcmUvc2tidWZmLmNgIG1vZHVsZSwgdW5kZXIgYENPTkZJR19ORVRgLiBUaGF0IG1ha2VzIHNlbnNlOyB0aGV5JiMzOTtyZSBmdW5kYW1lbnRhbC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGV5JiMzOTtyZSBhY3R1YWxseSB1c2VkLiBTcGVjaWZpY2FsbHksIHdoaWNoIGNvbXBvbmVudHMgdHJpZ2dlciB0aGVpciBleGVjdXRpb24uIEZyb20gbWVtb3J5LCB0aGUgbWFpbiBjYWxsZXJzIHNlZW0gdG8gYmUgdGhyb3VnaCBUQyBhY3Rpb24gTVBMUywgd2hpY2ggZ2V0cyBlbmFibGVkIHdpdGggYENPTkZJR19ORVRfQUNUX01QTFNgIGFsb25nIHdpdGggYENPTkZJR19ORVRfQ0xTX0FDVGAg4oCTIHRoZSBUcmFmZmljIENvbnRyb2wgYWN0aW9uLCBuYXR1cmFsbHkuIFRoZW4gdGhlcmUmIzM5O3MgT3BlbiB2U3dpdGNoIHRvby4KCkkgdGhpbmsgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBgdGNmX21wbHNfYWN0YCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9zY2hlZC9hY3RfbXBscy5jYCB0byBzZWUgaG93IGl0IGFsbCBjb21lcyB0b2dldGhlci4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRyb2wgZmxvdy4gSXTigJlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjb3JlIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCBhbmQgb3JjaGVzdHJhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfbXBscy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdFx0cmV0dXJuIGNwdV90b19iZTMyKG5ld19sc2UpO1xuICA1MTpcdH1cbiAgNTI6XHRcbiAgNTM6XHRUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gIDU0Olx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuICA1NTpcdFx0XHRcdFx0ICAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcylcbiAgNTY6XHR7XG4gIDU3Olx0XHRzdHJ1Y3QgdGNmX21wbHMgKm0gPSB0b19tcGxzKGEpO1xuICA1ODpcdFx0c3RydWN0IHRjZl9tcGxzX3BhcmFtcyAqcDtcbiAgNTk6XHRcdF9fYmUzMiBuZXdfbHNlO1xuICA2MDpcdFx0aW50IG1hY19sZW47XG4gIDYxOlx0XG4gIDYyOlx0XHR0Y2ZfbGFzdHVzZV91cGRhdGUoXHUwMDI2bS1cdTAwM2V0Y2ZfdG0pO1xuICA2MzpcdFx0YnN0YXRzX3VwZGF0ZSh0aGlzX2NwdV9wdHIobS1cdTAwM2Vjb21tb24uY3B1X2JzdGF0cyksIHNrYik7XG4gIDY0Olx0XG4gIDY1Olx0XHQvKiBFbnN1cmUgJiMzOTtkYXRhJiMzOTsgcG9pbnRzIGF0IG1hY19oZWFkZXIgcHJpb3IgY2FsbGluZyBtcGxzIG1hbmlwdWxhdGluZ1xuICA2NjpcdFx0ICogZnVuY3Rpb25zLlxuICA2NzpcdFx0ICovXG4gIDY4Olx0XHRpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSkge1xuICA2OTpcdFx0XHRza2JfcHVzaF9yY3N1bShza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiAgNzA6XHRcdFx0bWFjX2xlbiA9IHNrYi1cdTAwM2VtYWNfbGVuO1xuICA3MTpcdFx0fSBlbHNlIHtcbiAgNzI6XHRcdFx0bWFjX2xlbiA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpO1xuICA3MzpcdFx0fVxuICA3NDpcdFxuICA3NTpcdFx0cCA9IHJjdV9kZXJlZmVyZW5jZV9iaChtLVx1MDAzZW1wbHNfcCk7XG4gIDc2Olx0XG4gIDc3Olx0XHRzd2l0Y2ggKHAtXHUwMDNldGNmbV9hY3Rpb24pIHtcbiAgNzg6XHRcdGNhc2UgVENBX01QTFNfQUNUX1BPUDpcbiAgNzk6XHRcdFx0aWYgKHNrYl9tcGxzX3BvcChza2IsIHAtXHUwMDNldGNmbV9wcm90bywgbWFjX2xlbixcbiAgODA6XHRcdFx0XHRcdCBza2ItXHUwMDNlZGV2IFx1MDAyNlx1MDAyNiBza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSlcbiAgODE6XHRcdFx0XHRnb3RvIGRyb3A7XG4gIDgyOlx0XHRcdGJyZWFrO1xuICA4MzpcdFx0Y2FzZSBUQ0FfTVBMU19BQ1RfUFVTSDpcbiAgODQ6XHRcdFx0bmV3X2xzZSA9IHRjZl9tcGxzX2dldF9sc2UoTlVMTCwgcCwgIWV0aF9wX21wbHMoc2tiX3Byb3RvY29sKHNrYiwgdHJ1ZSkpKTtcbiAgODU6XHRcdFx0aWYgKHNrYl9tcGxzX3B1c2goc2tiLCBuZXdfbHNlLCBwLVx1MDAzZXRjZm1fcHJvdG8sIG1hY19sZW4sXG4gIDg2Olx0XHRcdFx0XHQgIHNrYi1cdTAwM2VkZXYgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpKVxuICA4NzpcdFx0XHRcdGdvdG8gZHJvcDtcbiAgODg6XHRcdFx0YnJlYWs7XG4gIDg5Olx0XHRjYXNlIFRDQV9NUExTX0FDVF9NQUNfUFVTSDpcbiAgOTA6XHRcdFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcbiAgOTE6XHRcdFx0XHRpZiAoX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXHUwMDNldmxhbl9wcm90byxcbiAgOTI6XHRcdFx0XHRcdFx0XHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpLFxuICA5MzpcdFx0XHRcdFx0XHRcdCAgICBFVEhfSExFTikgXHUwMDNjIDApXG4gIDk0Olx0XHRcdFx0XHRnb3RvIGRyb3A7XG4gIDk1Olx0XG4gIDk2Olx0XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gc2tiLVx1MDAzZXZsYW5fcHJvdG87XG4gIDk3Olx0XHRcdFx0X192bGFuX2h3YWNjZWxfY2xlYXJfdGFnKHNrYik7XG4gIDk4Olx0XHRcdH1cbiAgOTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkzNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIERlZXBlciBpbnRvIE9wZW4gdlN3aXRjaCBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgaG93IE9wZW4gdlN3aXRjaCBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTt2ZSBhbHJlYWR5IGV4cGxvcmVkIHRoZSBtb3JlIG9idmlvdXMgZW50cnkgcG9pbnRzLCBidXQgSSBoYXZlIGEgaHVuY2ggdGhlcmUgbWlnaHQgYmUgc29tZSBtb3JlIHN1YnRsZSBpbnRlcmFjdGlvbnMgaGlkZGVuIHdpdGhpbiB0aGUgYG5ldC9vcGVudnN3aXRjaGAgZGlyZWN0b3J5IGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgYWN0aW9ucy5jYCBmaWxlLiBJdCYjMzk7cyBhIGtleSBwaWVjZSwgZGVmaW5pbmcgd2hhdCBoYXBwZW5zICphZnRlciogYSBmbG93IHJ1bGUgaGFzIGJlZW4gbWF0Y2hlZCwgc28gSSBzaG91bGQgc2VlIHdoYXQgY2FsbGVycyBpbiB0aGF0IGZpbGUgYXJlIGJlaW5nIHRyaWdnZXJlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhbm90aGVyIGF2ZW51ZSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUuIExldCYjMzk7cyBzZWUgaWYgdGhpcyByZXZlYWxzIGFueXRoaW5nIGludGVyZXN0aW5nIG9yIGFueSBuZXcgbGVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0XHRcdGtleS1cdTAwM2VtYWNfcHJvdG8gPSBNQUNfUFJPVE9fTk9ORTtcbiAxNDE6XHRcbiAxNDI6XHRcdGludmFsaWRhdGVfZmxvd19rZXkoa2V5KTtcbiAxNDM6XHRcdHJldHVybiAwO1xuIDE0NDpcdH1cbiAxNDU6XHRcbiAxNDY6XHRzdGF0aWMgaW50IHBvcF9tcGxzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuIDE0NzpcdFx0XHQgICAgY29uc3QgX19iZTE2IGV0aGVydHlwZSlcbiAxNDg6XHR7XG4gMTQ5Olx0XHRpbnQgZXJyO1xuIDE1MDpcdFxuIDE1MTpcdFx0ZXJyID0gc2tiX21wbHNfcG9wKHNrYiwgZXRoZXJ0eXBlLCBza2ItXHUwMDNlbWFjX2xlbixcbiAxNTI6XHRcdFx0XHQgICBvdnNfa2V5X21hY19wcm90byhrZXkpID09IE1BQ19QUk9UT19FVEhFUk5FVCk7XG4gMTUzOlx0XHRpZiAoZXJyKVxuIDE1NDpcdFx0XHRyZXR1cm4gZXJyO1xuIDE1NTpcdFxuIDE1NjpcdFx0aWYgKGV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9URUIpKVxuIDE1NzpcdFx0XHRrZXktXHUwMDNlbWFjX3Byb3RvID0gTUFDX1BST1RPX0VUSEVSTkVUO1xuIDE1ODpcdFxuIDE1OTpcdFx0aW52YWxpZGF0ZV9mbG93X2tleShrZXkpO1xuIDE2MDpcdFx0cmV0dXJuIDA7XG4gMTYxOlx0fVxuIDE2MjpcdFxuIDE2MzpcdHN0YXRpYyBpbnQgc2V0X21wbHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICpmbG93X2tleSxcbiAxNjQ6XHRcdFx0ICAgIGNvbnN0IF9fYmUzMiAqbXBsc19sc2UsIGNvbnN0IF9fYmUzMiAqbWFzaylcbiAxNjU6XHR7XG4gMTY2Olx0XHRzdHJ1Y3QgbXBsc19zaGltX2hkciAqc3RhY2s7XG4gMTY3Olx0XHRfX2JlMzIgbHNlO1xuIDE2ODpcdFx0aW50IGVycjtcbiAxNjk6XHRcbiAxNzA6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpICYjNDM7IE1QTFNfSExFTikpXG4gMTcxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE3MjpcdFxuIDE3MzpcdFx0c3RhY2sgPSBtcGxzX2hkcihza2IpO1xuIDE3NDpcdFx0bHNlID0gT1ZTX01BU0tFRChzdGFjay1cdTAwM2VsYWJlbF9zdGFja19lbnRyeSwgKm1wbHNfbHNlLCAqbWFzayk7XG4gMTc1Olx0XHRlcnIgPSBza2JfbXBsc191cGRhdGVfbHNlKHNrYiwgbHNlKTtcbiAxNzY6XHRcdGlmIChlcnIpXG4gMTc3Olx0XHRcdHJldHVybiBlcnI7XG4gMTc4Olx0XG4gMTc5Olx0XHRmbG93X2tleS1cdTAwM2VtcGxzLmxzZVswXSA9IGxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3OAoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiA1NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogTVBMUyBQYWNrZXQgUHJvY2Vzc2luZyoqCgpPa2F5LCB0aGlzIGxvb2tzIHByb21pc2luZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSGVyZSYjMzk7cyB3aHk6CgpGaXJzdCwgaXQgdG91Y2hlcyBjb3JlIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljIHdpdGhpbiBgc2tiX21wbHNfcG9wYC4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgdGhlIHBvdGVudGlhbCBmb3Igc3RhbGUgb2Zmc2V0IGFuZCBpbm5lciBoZWFkZXIgbWV0YWRhdGEgYnVncyB0aGF0IGNvdWxkIGFyaXNlIGR1cmluZyBNUExTIGVuY2Fwc3VsYXRpb24gYW5kIGRlY2Fwc3VsYXRpb24sIHdoaWNoIGlzIGEgY29tbW9uIHZ1bG5lcmFiaWxpdHkgcGF0dGVybi4gVGhhdCYjMzk7cyBhIHN0cm9uZyBzaWduYWwuCgpTZWNvbmQsIHRoZSBjb2RlIGlzIGVhc2lseSByZWFjaGFibGUgaW4gY29tbW9uIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSBjYW4gaGl0IHRoaXMgdGhyb3VnaCBzdGFuZGFyZCBzZXR1cHMgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgbGV2ZXJhZ2luZyBUQyBhY3Rpb24gTVBMUyAoYENPTkZJR19ORVRfQUNUX01QTFNgLCBgQ09ORklHX05FVF9DTFNfQUNUYCkgb3IgZXZlbiBPcGVuIHZTd2l0Y2ggKGBDT05GSUdfT1BFTlZTV0lUQ0hgKS4gU28gbm8gbmVlZCBmb3IgZXhvdGljIHNldHVwczsgYSBzdGFuZGFyZCBlbnZpcm9ubWVudCB3aWxsIHdvcmsuCgpUaGlyZCwgSSYjMzk7dmUgaWRlbnRpZmllZCBrZXkgc3ltYm9scyB0byBmb2N1cyBvbjogYHNrYl9tcGxzX3BvcGAsIGBza2JfbXBsc19wdXNoYCwgYW5kIGB0Y2ZfbXBsc19hY3RgLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRob3NlIGVudHJ5cG9pbnRzLiBPa2F5LCBnb29kLiBgc2tiX21wbHNfcG9wYCwgYHNrYl9tcGxzX3B1c2hgLCBhbmQgYHRjZl9tcGxzX2FjdGAgYXJlIGFsbCBub24tc3RhdGljIHN5bWJvbHMuIEhvd2V2ZXIsIEkgd2FudCB0byBkb3VibGUtY2hlY2sgYHBvcF9tcGxzYCBhcyBpdCBpcyBzdGF0aWMgaW4gb3BlbnZzd2l0Y2guIFRoZSBlbnRyeXBvaW50IGZvciBPVlMgYWN0aW9ucyBzaG91bGQgYmUgYG92c19leGVjdXRlX2FjdGlvbnNgIG9yIGBkb19leGVjdXRlX2FjdGlvbnNgLiBMZXQmIzM5O3Mgc3RpY2sgd2l0aCB0aGUgZm9jdXMgc3ltYm9scyBmb3Igbm93OiBgc2tiX21wbHNfcG9wYCwgYHNrYl9tcGxzX3B1c2hgLCBhbmQgYHRjZl9tcGxzX2FjdGAuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlLiBXZSBuZWVkIGBORVRgICh3aGljaCBpcyBhbHdheXMgZW5hYmxlZCksIGBORVRfQ0xTX0FDVGAsIGBORVRfQUNUX01QTFNgLCBhbmQgYE9QRU5WU1dJVENIYC4gSSYjMzk7bGwganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIGluIGBuZXQvc2NoZWQvS2NvbmZpZ2AgdG8gYmUgc3VyZS4gQWxyaWdodCwgYE5FVF9BQ1RfTVBMU2AgZGVwZW5kcyBvbiBgTkVUX0NMU19BQ1RgLCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYE5FVGAuIEFuZCBgT1BFTlZTV0lUQ0hgIGRlcGVuZHMgb24gYElORVRgLCB3aGljaCBpcyBhbGwgZ29vZC4KCkZpbmFsbHksIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhlIHRvb2wgcGFyYW1ldGVycyBhcmUgY29ycmVjdGx5IGZvcm1hdHRlZCwgYW5kIGFsbCBpcyBhcyBleHBlY3RlZC4KCmBFbmFibGVDb25maWdzYDogYFsmIzM0O05FVF9BQ1RfTVBMUyYjMzQ7LCAmIzM0O05FVF9DTFNfQUNUJiMzNDssICYjMzQ7T1BFTlZTV0lUQ0gmIzM0O11gCmBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7c2tiX21wbHNfcG9wJiMzNDssICYjMzQ7c2tiX21wbHNfcHVzaCYjMzQ7LCAmIzM0O3RjZl9tcGxzX2FjdCYjMzQ7XWAKYFdvcnRoRnV6emluZ2A6IHRydWUKYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHZlcmRpY3QuCgpMb29rcyBnb29kIHRvIG1lLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfTVBMUyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9tcGxzX3BvcCYjMzQ7LAogICAgJiMzNDtza2JfbXBsc19wdXNoJiMzNDssCiAgICAmIzM0O3RjZl9tcGxzX2FjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBza2JfbXBsc19wb3AgaW4gbmV0L2NvcmUvc2tidWZmLmMgdG8gY2xlYXIgc2tiLVx1MDAzZWlubmVyX3Byb3RvY29sIHdoZW4gcG9wcGluZyB0aGUgbGFzdCBNUExTIGhlYWRlciwgcHJldmVudGluZyBzdGFsZSBpbm5lciBoZWFkZXIgb2Zmc2V0cyBvbiBzdWJzZXF1ZW50IE1QTFMgb3BlcmF0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgc2tiIE1QTFMgaGFuZGxpbmcgdXNlZCBieSBUQyBNUExTIGFjdGlvbnMgYW5kIE9wZW4gdlN3aXRjaCwgYm90aCBvZiB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0FDVF9NUExTJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX21wbHNfcG9wJiMzNDssCiAgICAmIzM0O3NrYl9tcGxzX3B1c2gmIzM0OywKICAgICYjMzQ7dGNmX21wbHNfYWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNrYl9tcGxzX3BvcCBpbiBuZXQvY29yZS9za2J1ZmYuYyB0byBjbGVhciBza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2wgd2hlbiBwb3BwaW5nIHRoZSBsYXN0IE1QTFMgaGVhZGVyLCBwcmV2ZW50aW5nIHN0YWxlIGlubmVyIGhlYWRlciBvZmZzZXRzIG9uIHN1YnNlcXVlbnQgTVBMUyBvcGVyYXRpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBza2IgTVBMUyBoYW5kbGluZyB1c2VkIGJ5IFRDIE1QTFMgYWN0aW9ucyBhbmQgT3BlbiB2U3dpdGNoLCBib3RoIG9mIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl9tcGxzX3BvcCgpYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIHJlc2V0IGBza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2xgIHRvIDAgd2hlbiB0aGUgcG9wcGVkIE1QTFMgaGVhZGVyIGlzIHRoZSBsYXN0IG9uZSAoaS5lLiBgIWV0aF9wX21wbHMobmV4dF9wcm90bylgKS4gVGhpcyBlbnN1cmVzIHRoYXQgc3Vic2VxdWVudCBgc2tiX21wbHNfcHVzaCgpYCBjYWxscyBkbyBub3QgcmV0YWluIHN0YWxlIGlubmVyIHByb3RvY29sIGFuZCBpbm5lciBuZXR3b3JrIGhlYWRlciBvZmZzZXRzLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMgaW4gYSB3YXkgdGhhdCBsZWFkcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgYnVmZmVyL29mZnNldCBpc3N1ZXMgYXJpc2luZyBmcm9tIHNrYiBoZWFkZXIgbWFuaXB1bGF0aW9uIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTJhNDFhY2UzMjE1MGRkYTQ0ODU0OTBiY2UzNDczZGI4OWRhOGM1MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDE6MjE6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IDk2NmFmM2JlZWQ5NGQuLmNjM2I0YjcwMjg4YjQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC02NjkwLDYgJiM0Mzs2NjkwLDEzIEBAIGludCBza2JfbXBsc19wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IG5leHRfcHJvdG8sIGludCBtYWNfbGVuLAogCX0KIAlza2ItJmd0O3Byb3RvY29sID0gbmV4dF9wcm90bzsKIAomIzQzOwkvKiBUaGUgbGFzdCBsYWJlbCBpcyBnb25lLCBzbyB0aGUgaW5uZXIgaGVhZGVyIHJlY29yZGVkIGJ5CiYjNDM7CSAqIHNrYl9tcGxzX3B1c2goKSBubyBsb25nZXIgZGVzY3JpYmVzIHRoaXMgcGFja2V0LiBEcm9wIGl0LCBvciBhCiYjNDM7CSAqIGxhdGVyIHB1c2gga2VlcHMgdGhlIHN0YWxlIG9mZnNldC4KJiM0MzsJICovCiYjNDM7CWlmICghZXRoX3BfbXBscyhuZXh0X3Byb3RvKSkKJiM0MzsJCXNrYi0mZ3Q7aW5uZXJfcHJvdG9jb2wgPSAwOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcG9wKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIENvZGUgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIHByb3ZpZGVkIHBhdGNoLiBJIHNlZSBpdCB0YXJnZXRzIGBuZXQvY29yZS9za2J1ZmYuY2AgYW5kIHNwZWNpZmljYWxseSB0b3VjaGVzIHRoZSBgc2tiX21wbHNfcG9wYCBmdW5jdGlvbi4gTXkgaW5zdGluY3QsIGJlaW5nIGEgc2Vhc29uZWQgcHJvLCBpcyB0byBpbW1lZGlhdGVseSBncmFzcCB0aGUgd2lkZXIgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB3aXRoaW4gdGhlIGV4aXN0aW5nIGNvZGUgZmxvdy4gVGhlcmVmb3JlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgbmF2aWdhdGUgdG8gdGhhdCBzZWN0aW9uIHdpdGhpbiBgbmV0L2NvcmUvc2tidWZmLmNgLCBmb2N1c2luZyBhcm91bmQgbGluZSA2NjkwLCB0byB1bmRlcnN0YW5kIGl0cyBuZWlnaGJvcnMgYW5kIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgY3J1Y2lhbCB0byBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjaywgYW5kIHdoZXJlIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3Igcmlza3MgbWlnaHQgcmVzaWRlLiBUaGlzIHVwZnJvbnQgY29udGV4dHVhbCBhd2FyZW5lc3MgaXMgdGhlIGZvdW5kYXRpb24gZm9yIGEgcHJvcGVyIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY2NjA6XHQgKiBFeHBlY3RzIHNrYi1cdTAwM2VkYXRhIGF0IG1hYyBoZWFkZXIuXG42NjYxOlx0ICpcbjY2NjI6XHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS5cbjY2NjM6XHQgKi9cbjY2NjQ6XHRpbnQgc2tiX21wbHNfcG9wKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBuZXh0X3Byb3RvLCBpbnQgbWFjX2xlbixcbjY2NjU6XHRcdFx0IGJvb2wgZXRoZXJuZXQpXG42NjY2Olx0e1xuNjY2NzpcdFx0aW50IGVycjtcbjY2Njg6XHRcbjY2Njk6XHRcdGlmICh1bmxpa2VseSghZXRoX3BfbXBscyhza2ItXHUwMDNlcHJvdG9jb2wpKSlcbjY2NzA6XHRcdFx0cmV0dXJuIDA7XG42NjcxOlx0XG42NjcyOlx0XHRlcnIgPSBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgbWFjX2xlbiAmIzQzOyBNUExTX0hMRU4pO1xuNjY3MzpcdFx0aWYgKHVubGlrZWx5KGVycikpXG42Njc0Olx0XHRcdHJldHVybiBlcnI7XG42Njc1Olx0XG42Njc2Olx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBtcGxzX2hkcihza2IpLCBNUExTX0hMRU4pO1xuNjY3NzpcdFx0bWVtbW92ZShza2JfbWFjX2hlYWRlcihza2IpICYjNDM7IE1QTFNfSExFTiwgc2tiX21hY19oZWFkZXIoc2tiKSxcbjY2Nzg6XHRcdFx0bWFjX2xlbik7XG42Njc5Olx0XG42NjgwOlx0XHRfX3NrYl9wdWxsKHNrYiwgTVBMU19ITEVOKTtcbjY2ODE6XHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG42NjgyOlx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgbWFjX2xlbik7XG42NjgzOlx0XG42Njg0Olx0XHRpZiAoZXRoZXJuZXQgXHUwMDI2XHUwMDI2IG1hY19sZW4gXHUwMDNlPSBFVEhfSExFTikge1xuNjY4NTpcdFx0XHRzdHJ1Y3QgZXRoaGRyICpoZHI7XG42Njg2Olx0XG42Njg3Olx0XHRcdC8qIHVzZSBtcGxzX2hkcigpIHRvIGdldCBldGhlcnR5cGUgdG8gYWNjb3VudCBmb3IgVkxBTnMuICovXG42Njg4Olx0XHRcdGhkciA9IChzdHJ1Y3QgZXRoaGRyICopKCh2b2lkICopbXBsc19oZHIoc2tiKSAtIEVUSF9ITEVOKTtcbjY2ODk6XHRcdFx0c2tiX21vZF9ldGhfdHlwZShza2IsIGhkciwgbmV4dF9wcm90byk7XG42NjkwOlx0XHR9XG42NjkxOlx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBuZXh0X3Byb3RvO1xuNjY5MjpcdFxuNjY5MzpcdFx0LyogVGhlIGxhc3QgbGFiZWwgaXMgZ29uZSwgc28gdGhlIGlubmVyIGhlYWRlciByZWNvcmRlZCBieVxuNjY5NDpcdFx0ICogc2tiX21wbHNfcHVzaCgpIG5vIGxvbmdlciBkZXNjcmliZXMgdGhpcyBwYWNrZXQuIERyb3AgaXQsIG9yIGFcbjY2OTU6XHRcdCAqIGxhdGVyIHB1c2gga2VlcHMgdGhlIHN0YWxlIG9mZnNldC5cbjY2OTY6XHRcdCAqL1xuNjY5NzpcdFx0aWYgKCFldGhfcF9tcGxzKG5leHRfcHJvdG8pKVxuNjY5ODpcdFx0XHRza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2wgPSAwO1xuNjY5OTpcdFxuNjcwMDpcdFx0cmV0dXJuIDA7XG42NzAxOlx0fVxuNjcwMjpcdEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9tcGxzX3BvcCk7XG42NzAzOlx0XG42NzA0Olx0LyoqXG42NzA1Olx0ICogc2tiX21wbHNfdXBkYXRlX2xzZSgpIC0gbW9kaWZ5IG91dGVybW9zdCBNUExTIGhlYWRlciBhbmQgdXBkYXRlIGNzdW1cbjY3MDY6XHQgKlxuNjcwNzpcdCAqIEBza2I6IGJ1ZmZlclxuNjcwODpcdCAqIEBtcGxzX2xzZTogbmV3IE1QTFMgbGFiZWwgc3RhY2sgZW50cnkgdG8gdXBkYXRlIHRvXG42NzA5Olx0ICpcbjY3MTA6XHQgKiBFeHBlY3RzIHNrYi1cdTAwM2VkYXRhIGF0IG1hYyBoZWFkZXIuXG42NzExOlx0ICpcbjY3MTI6XHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS5cbjY3MTM6XHQgKi9cbjY3MTQ6XHRpbnQgc2tiX21wbHNfdXBkYXRlX2xzZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgbXBsc19sc2UpXG42NzE1Olx0e1xuNjcxNjpcdFx0aW50IGVycjtcbjY3MTc6XHRcbjY3MTg6XHRcdGlmICh1bmxpa2VseSghZXRoX3BfbXBscyhza2ItXHUwMDNlcHJvdG9jb2wpKSlcbjY3MTk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHNrYl9tcGxzX3B1c2ggYW5kIElubmVyIFByb3RvY29scyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBza2JfbXBsc19wdXNoYCBpcyBpbXBsZW1lbnRlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBUaGUgbWFpbiBwb2ludCBvZiBpbnRlcmVzdCBpcyBob3cgdGhlIGBpbm5lcl9wcm90b2NvbGAgZmllbGQgaXMgYmVpbmcgdXRpbGl6ZWQgaW4gdGhhdCBmdW5jdGlvbiwgYW5kIGlmIGl0IGlzIGJlaW5nIHVzZWQgaW4gb3RoZXIgcGxhY2VzIHRvby4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpIGFuZCBob3cgdGhlIGlubmVyIHByb3RvY29sIGdldHMgaGFuZGxlZCBkdXJpbmcgdGhlIE1QTFMgbGFiZWwgcHVzaCBvcGVyYXRpb24uIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIGRlYWwgd2l0aCBuZXN0ZWQgcHJvdG9jb2xzIGFuZCBmb3J3YXJkaW5nIGRlY2lzaW9ucyBpbiB0aGUgZGF0YSBwbGFuZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byBlbnN1cmUgdGhhdCB0aGUgcHJvdG9jb2wgc3RhY2sgY29ycmVjdGx5IGludGVycHJldHMgYW5kIHByb2Nlc3NlcyB0aGUgbmVzdGVkIGhlYWRlcnMgYWZ0ZXIgdGhlIE1QTFMgbGFiZWwgaXMgYWRkZWQuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIHJlZmVyZW5jZXMgYW5kIHVzYWdlIG9mIHRoYXQgdmFyaWFibGUgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX21wbHNfcHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9NjU4ND1zdGF0aWMgdm9pZCBza2JfbW9kX2V0aF90eXBlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBldGhoZHIgKmhkcixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02NTk2LS8qKlxubmV0L2NvcmUvc2tidWZmLmM6NjU5NzogKiBza2JfbXBsc19wdXNoKCkgLSBwdXNoIGEgbmV3IE1QTFMgaGVhZGVyIGFmdGVyIG1hY19sZW4gYnl0ZXMgZnJvbSBzdGFydCBvZlxubmV0L2NvcmUvc2tidWZmLmMtNjU5OC0gKiAgICAgICAgICAgICAgICAgICB0aGUgcGFja2V0XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjYwMy0gKiBAbWFjX2xlbjogbGVuZ3RoIG9mIHRoZSBNQUMgaGVhZGVyXG5uZXQvY29yZS9za2J1ZmYuYzo2NjA0OiAqIEBldGhlcm5ldDogZmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgcmVzdWx0aW5nIHBhY2tldCBhZnRlciBza2JfbXBsc19wdXNoIGlzXG5uZXQvY29yZS9za2J1ZmYuYy02NjA1LSAqICAgICAgICAgICAgZXRoZXJuZXRcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02NjEwLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6NjYxMTppbnQgc2tiX21wbHNfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgbXBsc19sc2UsIF9fYmUxNiBtcGxzX3Byb3RvLFxubmV0L2NvcmUvc2tidWZmLmMtNjYxMi1cdFx0ICBpbnQgbWFjX2xlbiwgYm9vbCBldGhlcm5ldClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02NjQ5LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjY2NTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcHVzaCk7XG5uZXQvY29yZS9za2J1ZmYuYy02NjUxLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTY2NjQ9aW50IHNrYl9tcGxzX3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgbmV4dF9wcm90bywgaW50IG1hY19sZW4sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjY5My1cdC8qIFRoZSBsYXN0IGxhYmVsIGlzIGdvbmUsIHNvIHRoZSBpbm5lciBoZWFkZXIgcmVjb3JkZWQgYnlcbm5ldC9jb3JlL3NrYnVmZi5jOjY2OTQ6XHQgKiBza2JfbXBsc19wdXNoKCkgbm8gbG9uZ2VyIGRlc2NyaWJlcyB0aGlzIHBhY2tldC4gRHJvcCBpdCwgb3IgYVxubmV0L2NvcmUvc2tidWZmLmMtNjY5NS1cdCAqIGxhdGVyIHB1c2gga2VlcHMgdGhlIHN0YWxlIG9mZnNldC5cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTEzMD1zdGF0aWMgaW50IHB1c2hfbXBscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTEzNC1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTM1Olx0ZXJyID0gc2tiX21wbHNfcHVzaChza2IsIG1wbHNfbHNlLCBtcGxzX2V0aGVydHlwZSwgbWFjX2xlbiwgISFtYWNfbGVuKTtcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTM2LVx0aWYgKGVycilcbi0tXG5uZXQvc2NoZWQvYWN0X21wbHMuYz01Mz1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtODQtXHRcdG5ld19sc2UgPSB0Y2ZfbXBsc19nZXRfbHNlKE5VTEwsIHAsICFldGhfcF9tcGxzKHNrYl9wcm90b2NvbChza2IsIHRydWUpKSk7XG5uZXQvc2NoZWQvYWN0X21wbHMuYzo4NTpcdFx0aWYgKHNrYl9tcGxzX3B1c2goc2tiLCBuZXdfbHNlLCBwLVx1MDAzZXRjZm1fcHJvdG8sIG1hY19sZW4sXG5uZXQvc2NoZWQvYWN0X21wbHMuYy04Ni1cdFx0XHRcdCAgc2tiLVx1MDAzZWRldiBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtMTAyLVxubmV0L3NjaGVkL2FjdF9tcGxzLmM6MTAzOlx0XHRpZiAoc2tiX21wbHNfcHVzaChza2IsIG5ld19sc2UsIHAtXHUwMDNldGNmbV9wcm90bywgMCwgZmFsc2UpKVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtMTA0LVx0XHRcdGdvdG8gZHJvcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBza2JfbXBsc19wdXNoYCBmdW5jdGlvbiwgZnJlc2ggZnJvbSB0aGUgc291cmNlIGNvZGU6CgoqKkRpdmluZyBpbnRvIHNrYl9tcGxzX3B1c2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBza2JfbXBsc19wdXNoYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIHRoZSBjcnVjaWFsIHN0ZXAgb2YgcHJlcGVuZGluZyBNUExTIGxhYmVscyBvbnRvIGEgbmV0d29yayBidWZmZXIgKHNrYikuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gaGF2ZSBhIGNvbXByZWhlbnNpdmUgZ3Jhc3Agb2YgTVBMUyBmb3J3YXJkaW5nIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCByaWdodD8gTGV0JiMzOTtzIGJyZWFrIGRvd24gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGlzIHByb2Nlc3MuCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZWNoYW5pY3MgaGVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHNrYiBpcyBiZWluZyBtYW5pcHVsYXRlZCwgc3BlY2lmaWNhbGx5LCBob3cgdGhlIGRhdGEgcG9pbnRlciBpcyBtYW5hZ2VkLCB0aGUgbGVuZ3RoIGFkanVzdGVkLCBhbmQgdGhlIGFjdHVhbCBsYWJlbCBpcyBpbnNlcnRlZC4gSSBhbHNvIHdhbnQgdG8gb2JzZXJ2ZSB0aGUgaGFuZGxpbmcgb2YgcG90ZW50aWFsIGVkZ2UgY2FzZXMsIGVycm9yIGNvbmRpdGlvbnMsIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBpZiBuZWNlc3NhcnkuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IGhhcHBlbnMgaWYgd2UmIzM5O3JlIHB1c2hpbmcgbXVsdGlwbGUgbGFiZWxzIGFuZCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHRoZSBsYWJlbCBzdGFjayBjb3JyZWN0bHkuIEkmIzM5O2xsIHByb2JhYmx5IGFsc28gY2hlY2sgdGhlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIHVzZWQsIHNpbmNlIG1vZGlmeWluZyBza2JzIGNhbiBiZSBhIHByZXR0eSB0cmlja3kgYnVzaW5lc3MuCgpUaGlzIHdpbGwgZ2l2ZSBtZSBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgTVBMUyBpbXBsZW1lbnRhdGlvbiwgdGhlIGRlc2lnbiBjaG9pY2VzIG1hZGUgYnkgdGhlIGtlcm5lbCBkZXZlbG9wZXJzLCBhbmQgaG93IGVmZmljaWVudGx5IHRoaXMgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBidWlsZGluZyBibG9jayB0byB1bmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgbmV0d29yayBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjYwMDpcdCAqIEBza2I6IGJ1ZmZlclxuNjYwMTpcdCAqIEBtcGxzX2xzZTogTVBMUyBsYWJlbCBzdGFjayBlbnRyeSB0byBwdXNoXG42NjAyOlx0ICogQG1wbHNfcHJvdG86IGV0aGVydHlwZSBvZiB0aGUgbmV3IE1QTFMgaGVhZGVyIChleHBlY3RzIDB4ODg0NyBvciAweDg4NDgpXG42NjAzOlx0ICogQG1hY19sZW46IGxlbmd0aCBvZiB0aGUgTUFDIGhlYWRlclxuNjYwNDpcdCAqIEBldGhlcm5ldDogZmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgcmVzdWx0aW5nIHBhY2tldCBhZnRlciBza2JfbXBsc19wdXNoIGlzXG42NjA1Olx0ICogICAgICAgICAgICBldGhlcm5ldFxuNjYwNjpcdCAqXG42NjA3Olx0ICogRXhwZWN0cyBza2ItXHUwMDNlZGF0YSBhdCBtYWMgaGVhZGVyLlxuNjYwODpcdCAqXG42NjA5Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuXG42NjEwOlx0ICovXG42NjExOlx0aW50IHNrYl9tcGxzX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIG1wbHNfbHNlLCBfX2JlMTYgbXBsc19wcm90byxcbjY2MTI6XHRcdFx0ICBpbnQgbWFjX2xlbiwgYm9vbCBldGhlcm5ldClcbjY2MTM6XHR7XG42NjE0Olx0XHRzdHJ1Y3QgbXBsc19zaGltX2hkciAqbHNlO1xuNjYxNTpcdFx0aW50IGVycjtcbjY2MTY6XHRcbjY2MTc6XHRcdGlmICh1bmxpa2VseSghZXRoX3BfbXBscyhtcGxzX3Byb3RvKSkpXG42NjE4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjYxOTpcdFxuNjYyMDpcdFx0LyogTmV0d29ya2luZyBzdGFjayBkb2VzIG5vdCBhbGxvdyBzaW11bHRhbmVvdXMgVHVubmVsIGFuZCBNUExTIEdTTy4gKi9cbjY2MjE6XHRcdGlmIChza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbjY2MjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42NjIzOlx0XG42NjI0Olx0XHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBNUExTX0hMRU4pO1xuNjYyNTpcdFx0aWYgKHVubGlrZWx5KGVycikpXG42NjI2Olx0XHRcdHJldHVybiBlcnI7XG42NjI3Olx0XG42NjI4Olx0XHRpZiAoIXNrYi1cdTAwM2Vpbm5lcl9wcm90b2NvbCkge1xuNjYyOTpcdFx0XHRza2Jfc2V0X2lubmVyX25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuNjYzMDpcdFx0XHRza2Jfc2V0X2lubmVyX3Byb3RvY29sKHNrYiwgc2tiLVx1MDAzZXByb3RvY29sKTtcbjY2MzE6XHRcdH1cbjY2MzI6XHRcbjY2MzM6XHRcdHNrYl9wdXNoKHNrYiwgTVBMU19ITEVOKTtcbjY2MzQ6XHRcdG1lbW1vdmUoc2tiX21hY19oZWFkZXIoc2tiKSAtIE1QTFNfSExFTiwgc2tiX21hY19oZWFkZXIoc2tiKSxcbjY2MzU6XHRcdFx0bWFjX2xlbik7XG42NjM2Olx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuNjYzNzpcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIG1hY19sZW4pO1xuNjYzODpcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbjY2Mzk6XHRcbjY2NDA6XHRcdGxzZSA9IG1wbHNfaGRyKHNrYik7XG42NjQxOlx0XHRsc2UtXHUwMDNlbGFiZWxfc3RhY2tfZW50cnkgPSBtcGxzX2xzZTtcbjY2NDI6XHRcdHNrYl9wb3N0cHVzaF9yY3N1bShza2IsIGxzZSwgTVBMU19ITEVOKTtcbjY2NDM6XHRcbjY2NDQ6XHRcdGlmIChldGhlcm5ldCBcdTAwMjZcdTAwMjYgbWFjX2xlbiBcdTAwM2U9IEVUSF9ITEVOKVxuNjY0NTpcdFx0XHRza2JfbW9kX2V0aF90eXBlKHNrYiwgZXRoX2hkcihza2IpLCBtcGxzX3Byb3RvKTtcbjY2NDY6XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IG1wbHNfcHJvdG87XG42NjQ3Olx0XG42NjQ4Olx0XHRyZXR1cm4gMDtcbjY2NDk6XHR9XG42NjUwOlx0RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcHVzaCk7XG42NjUxOlx0XG42NjUyOlx0LyoqXG42NjUzOlx0ICogc2tiX21wbHNfcG9wKCkgLSBwb3AgdGhlIG91dGVybW9zdCBNUExTIGhlYWRlclxuNjY1NDpcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NzcKCQkJCQkJCW91dHB1dDogMjAyCgkJCQkJCQl0aG91Z2h0czogNTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QTFMgSGVhZGVyIE1hbmFnZW1lbnQ6IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgTVBMUyBoYW5kbGluZyB3aXRoaW4gYHNrYl9tcGxzX3B1c2hgIGFuZCBgc2tiX21wbHNfcG9wYCwgZm9jdXNlcyBvbiBhIHBvdGVudGlhbCBzdGF0ZSBtYW5hZ2VtZW50IGlzc3VlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgYXMgYWx3YXlzLCB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggaXQuCgpUaGUgaXNzdWUgbGllcyBpbiBob3cgdGhlIGBpbm5lcl9wcm90b2NvbGAgd2l0aGluIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgc3RydWN0dXJlIGlzIGhhbmRsZWQuIFByZXZpb3VzbHksIHdoZW4gcG9wcGluZyB0aGUgbGFzdCBNUExTIGhlYWRlciBpbiBgc2tiX21wbHNfcG9wYCwgdGhlIGBza2ItJmd0O2lubmVyX3Byb3RvY29sYCB3YXNuJiMzOTt0IGJlaW5nIGNsZWFyZWQgaWYgdGhlIG5leHQgcHJvdG9jb2wgd2FzbiYjMzk7dCBNUExTLiBUaGlzIG1lYW50IHRoYXQgaWYgYSBzdWJzZXF1ZW50IHB1c2ggb3BlcmF0aW9uIG9jY3VycmVkLCB0aGUgYGlubmVyX3Byb3RvY29sYCB3b3VsZCByZW1haW4gc3RhbGUuIFRoZSBuZXcgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgc2ltcGxlIGBza2ItJmd0O2lubmVyX3Byb3RvY29sID0gMDtgIGNsZWFyaW5nIHRoZSBwcm90b2NvbCBzdGF0ZS4KCk15IGZvY3VzIG5vdyBpcyBhIHNhZmV0eSBldmFsdWF0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSBtZW1vcnkgc2FmZXR5IGlzc3Vlcz8gTGV0JiMzOTtzIGNoZWNrOgoKMS4gICoqRXhwb3NlZCBVbmluaXRpYWxpemVkIE1lbW9yeToqKiBOby4gVGhlIHBhdGNoIGV4cGxpY2l0bHkgKnNldHMqIHRoZSB2YWx1ZSB0byB6ZXJvLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciBhbnkgaW50ZXJuYWwga2VybmVsIGNvbnRleHQgYXMgYSByZXN1bHQgb2YgdGhlIGNoYW5nZS4KMi4gICoqSW50ZXJhY3Rpb24gd2l0aCBDb3B5IE9wZXJhdGlvbnM6KiogTm8uIFRoZXJlIGlzIG5vIGludGVyYWN0aW9uIHdpdGggb3BlcmF0aW9ucyBsaWtlIGBjb3B5X3RvX3VzZXJgLCBgbmV0bGlua2AsIGBpb2N0bGAsIGFuZCBubyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgYXJlIHRvdWNoZWQgYnkgdGhpcyBjb2RlIHBhdGguCjMuICAqKkNvbmRpdGlvbmFsIEJyYW5jaGluZyBvbiBVbmluaXRpYWxpemVkIFZhcmlhYmxlczoqKiBOby4gYG5leHRfcHJvdG9gIGlzIHByb3ZpZGVkIGFzIGFuIGFyZ3VtZW50IGFuZCB0aHVzIGluaXRpYWxpemVkLgo0LiAgKipSZWFkaW5nIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OioqIE5vLiBUaGUgY29kZSAqY2xlYXJzKiB0aGUgc3RhbGUgYGlubmVyX3Byb3RvY29sYCwgZW5zdXJpbmcgc3Vic2VxdWVudCBwdXNoZXMgd2lsbCBjb3JyZWN0bHkgY2FwdHVyZSB0aGUgaW5uZXIgbmV0d29yayBoZWFkZXIgYW5kIHByb3RvY29sLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIG1vcmUgc3BlY2lmaWMgS0FTQU4vS01TQU4gaW1wbGljYXRpb25zLiBUaGlzIHBhdGNoICpmaXhlcyogYSBwcm90b2NvbCBzdGF0ZSB0cmFja2luZyBpc3N1ZSwgbm90IGEgbWVtb3J5IGFsbG9jYXRpb24gb3IgYWNjZXNzIHByb2JsZW0uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBhY2Nlc3Nlcywgb3IgbGVha3MgdGhhdCBtaWdodCB0cmlnZ2VyIEtNU0FOJiMzOTtzIGNoZWNrcy4gSXQmIzM5O3MgcHVyZSBsb2dpYyBjb3JyZWN0aW9uLCBjbGVhcmluZyB0aGUgc3RhbGUgYGlubmVyX3Byb3RvY29sYC4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBmYWxzZSBpbiB0aGlzIGNhc2UuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tiX21wbHNfcG9wKClgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgdG8gcmVzZXQgYHNrYi1cdTAwM2Vpbm5lcl9wcm90b2NvbGAgdG8gMCB3aGVuIHRoZSBwb3BwZWQgTVBMUyBoZWFkZXIgaXMgdGhlIGxhc3Qgb25lIChpLmUuIGAhZXRoX3BfbXBscyhuZXh0X3Byb3RvKWApLiBUaGlzIGVuc3VyZXMgdGhhdCBzdWJzZXF1ZW50IGBza2JfbXBsc19wdXNoKClgIGNhbGxzIGRvIG5vdCByZXRhaW4gc3RhbGUgaW5uZXIgcHJvdG9jb2wgYW5kIGlubmVyIG5ldHdvcmsgaGVhZGVyIG9mZnNldHMuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBzdHJ1Y3QgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGxlbmd0aHMgb3IgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IGxlYWRzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gQW55IHBvdGVudGlhbCBidWZmZXIvb2Zmc2V0IGlzc3VlcyBhcmlzaW5nIGZyb20gc2tiIGhlYWRlciBtYW5pcHVsYXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl9tcGxzX3BvcCgpYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIHJlc2V0IGBza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2xgIHRvIDAgd2hlbiB0aGUgcG9wcGVkIE1QTFMgaGVhZGVyIGlzIHRoZSBsYXN0IG9uZSAoaS5lLiBgIWV0aF9wX21wbHMobmV4dF9wcm90bylgKS4gVGhpcyBlbnN1cmVzIHRoYXQgc3Vic2VxdWVudCBgc2tiX21wbHNfcHVzaCgpYCBjYWxscyBkbyBub3QgcmV0YWluIHN0YWxlIGlubmVyIHByb3RvY29sIGFuZCBpbm5lciBuZXR3b3JrIGhlYWRlciBvZmZzZXRzLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMgaW4gYSB3YXkgdGhhdCBsZWFkcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgYnVmZmVyL29mZnNldCBpc3N1ZXMgYXJpc2luZyBmcm9tIHNrYiBoZWFkZXIgbWFuaXB1bGF0aW9uIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6MjIuNTg3NjQ2OTkyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIxNTA3NzY1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0FDVF9NUExTXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfbXBsc19wb3BcIixcbiAgICBcInNrYl9tcGxzX3B1c2hcIixcbiAgICBcInRjZl9tcGxzX2FjdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl9tcGxzX3BvcCgpYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIHJlc2V0IGBza2ItXFx1MDAzZWlubmVyX3Byb3RvY29sYCB0byAwIHdoZW4gdGhlIHBvcHBlZCBNUExTIGhlYWRlciBpcyB0aGUgbGFzdCBvbmUgKGkuZS4gYCFldGhfcF9tcGxzKG5leHRfcHJvdG8pYCkuIFRoaXMgZW5zdXJlcyB0aGF0IHN1YnNlcXVlbnQgYHNrYl9tcGxzX3B1c2goKWAgY2FsbHMgZG8gbm90IHJldGFpbiBzdGFsZSBpbm5lciBwcm90b2NvbCBhbmQgaW5uZXIgbmV0d29yayBoZWFkZXIgb2Zmc2V0cy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMgaW4gYSB3YXkgdGhhdCBsZWFkcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgYnVmZmVyL29mZnNldCBpc3N1ZXMgYXJpc2luZyBmcm9tIHNrYiBoZWFkZXIgbWFuaXB1bGF0aW9uIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBza2JfbXBsc19wb3AgaW4gbmV0L2NvcmUvc2tidWZmLmMgdG8gY2xlYXIgc2tiLVxcdTAwM2Vpbm5lcl9wcm90b2NvbCB3aGVuIHBvcHBpbmcgdGhlIGxhc3QgTVBMUyBoZWFkZXIsIHByZXZlbnRpbmcgc3RhbGUgaW5uZXIgaGVhZGVyIG9mZnNldHMgb24gc3Vic2VxdWVudCBNUExTIG9wZXJhdGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIHNrYiBNUExTIGhhbmRsaW5nIHVzZWQgYnkgVEMgTVBMUyBhY3Rpb25zIGFuZCBPcGVuIHZTd2l0Y2gsIGJvdGggb2Ygd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIxOjIyLjU4NzY1MTQzMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE4MjQwMzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTJhNDFhY2UzMjE1MGRkYTQ0ODU0OTBiY2UzNDczZGI4OWRhOGM1MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDAxOjIxOjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5pbmRleCA5NjZhZjNiZWVkOTRkLi5jYzNiNGI3MDI4OGI0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXFxuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5AQCAtNjY5MCw2ICs2NjkwLDEzIEBAIGludCBza2JfbXBsc19wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IG5leHRfcHJvdG8sIGludCBtYWNfbGVuLFxcbiBcXHR9XFxuIFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBuZXh0X3Byb3RvO1xcbiBcXG4rXFx0LyogVGhlIGxhc3QgbGFiZWwgaXMgZ29uZSwgc28gdGhlIGlubmVyIGhlYWRlciByZWNvcmRlZCBieVxcbitcXHQgKiBza2JfbXBsc19wdXNoKCkgbm8gbG9uZ2VyIGRlc2NyaWJlcyB0aGlzIHBhY2tldC4gRHJvcCBpdCwgb3IgYVxcbitcXHQgKiBsYXRlciBwdXNoIGtlZXBzIHRoZSBzdGFsZSBvZmZzZXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWV0aF9wX21wbHMobmV4dF9wcm90bykpXFxuK1xcdFxcdHNrYi1cXHUwMDNlaW5uZXJfcHJvdG9jb2wgPSAwO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcG9wKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6MjMuMDA2NjM1Njk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjI4MDE5OTYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX01QTFNcIixcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl9tcGxzX3BvcFwiLFxuICAgIFwic2tiX21wbHNfcHVzaFwiLFxuICAgIFwidGNmX21wbHNfYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2tiX21wbHNfcG9wIGluIG5ldC9jb3JlL3NrYnVmZi5jIHRvIGNsZWFyIHNrYi1cXHUwMDNlaW5uZXJfcHJvdG9jb2wgd2hlbiBwb3BwaW5nIHRoZSBsYXN0IE1QTFMgaGVhZGVyLCBwcmV2ZW50aW5nIHN0YWxlIGlubmVyIGhlYWRlciBvZmZzZXRzIG9uIHN1YnNlcXVlbnQgTVBMUyBvcGVyYXRpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBza2IgTVBMUyBoYW5kbGluZyB1c2VkIGJ5IFRDIE1QTFMgYWN0aW9ucyBhbmQgT3BlbiB2U3dpdGNoLCBib3RoIG9mIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMmE0MWFjZTMyMTUwZGRhNDQ4NTQ5MGJjZTM0NzNkYjg5ZGE4YzUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMToyMToyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IDk2NmFmM2JlZWQ5NGQuLmNjM2I0YjcwMjg4YjQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC02NjkwLDYgKzY2OTAsMTMgQEAgaW50IHNrYl9tcGxzX3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgbmV4dF9wcm90bywgaW50IG1hY19sZW4sXG4gXHR9XG4gXHRza2ItXHUwMDNlcHJvdG9jb2wgPSBuZXh0X3Byb3RvO1xuIFxuK1x0LyogVGhlIGxhc3QgbGFiZWwgaXMgZ29uZSwgc28gdGhlIGlubmVyIGhlYWRlciByZWNvcmRlZCBieVxuK1x0ICogc2tiX21wbHNfcHVzaCgpIG5vIGxvbmdlciBkZXNjcmliZXMgdGhpcyBwYWNrZXQuIERyb3AgaXQsIG9yIGFcbitcdCAqIGxhdGVyIHB1c2gga2VlcHMgdGhlIHN0YWxlIG9mZnNldC5cbitcdCAqL1xuK1x0aWYgKCFldGhfcF9tcGxzKG5leHRfcHJvdG8pKVxuK1x0XHRza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2wgPSAwO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9tcGxzX3BvcCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMToyMy4wMDY2MzcwOTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODQ4NjY2MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipBbmFseXppbmcgdGhlIE1QTFMgUG9wIFBhdGNoKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHNrYl9tcGxzX3BvcGAsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGlzIGZ1bmN0aW9uJ3MgcHVycG9zZSBhbmQsIGNydWNpYWxseSwgaXRzIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIG5ldHdvcmsgc3RhY2suXG5cblRoZXJlZm9yZSwgSSdsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGRpZyBkZWVwZXIuIEknbSBnb2luZyB0byByZWFjaCBmb3IgZWl0aGVyIGBncmVwcGVyYCBvciBwZXJoYXBzIGEgZGlyZWN0IGByZWFkLWZpbGVgIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIGBza2JfbXBsc19wb3BgIGl0c2VsZi4gSSBuZWVkIHRoZSBjb2RlIHJpZ2h0IHRoZXJlIGluIGZyb250IG9mIG1lLiBJIHdpbGwgY2hlY2sgZm9yIGlubGluZS1lZCBjb2RlIGFzIHdlbGwuXG5cblRoZW4sIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjYWxsZXJzIG9mIGBza2JfbXBsc19wb3BgLiBTZWVpbmcgaG93IGl0J3MgdXNlZCDigJMgdGhlIGVudmlyb25tZW50cyBpdCdzIGludm9rZWQgaW4sIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCB0aGUgcHJvdG9jb2xzIGl0J3MgYXNzb2NpYXRlZCB3aXRoIOKAkyBpcyBwYXJhbW91bnQuIFRoaXMgd2lsbCBpbnN0YW50bHkgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBwb3RlbnRpYWwgaW1wYWN0cyB0aGlzIHBhdGNoIG1pZ2h0IGhhdmUuIENvbnRleHQgaXMga2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6MjcuODU1MzA2MzU3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjE0ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9tcGxzX3BvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jPTY2NTA9RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcHVzaCk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NjUyLS8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjY2NTM6ICogc2tiX21wbHNfcG9wKCkgLSBwb3AgdGhlIG91dGVybW9zdCBNUExTIGhlYWRlclxcbm5ldC9jb3JlL3NrYnVmZi5jLTY2NTQtICpcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY2NjMtICovXFxubmV0L2NvcmUvc2tidWZmLmM6NjY2NDppbnQgc2tiX21wbHNfcG9wKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBuZXh0X3Byb3RvLCBpbnQgbWFjX2xlbixcXG5uZXQvY29yZS9za2J1ZmYuYy02NjY1LVxcdFxcdCBib29sIGV0aGVybmV0KVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjcwMS19XFxubmV0L2NvcmUvc2tidWZmLmM6NjcwMjpFWFBPUlRfU1lNQk9MX0dQTChza2JfbXBsc19wb3ApO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTY3MDMtXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE0Nj1zdGF0aWMgaW50IHBvcF9tcGxzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTAtXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxNTE6XFx0ZXJyID0gc2tiX21wbHNfcG9wKHNrYiwgZXRoZXJ0eXBlLCBza2ItXFx1MDAzZW1hY19sZW4sXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTItXFx0XFx0XFx0ICAgb3ZzX2tleV9tYWNfcHJvdG8oa2V5KSA9PSBNQUNfUFJPVE9fRVRIRVJORVQpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NTM9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9tcGxzX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNzgtXFx0Y2FzZSBUQ0FfTVBMU19BQ1RfUE9QOlxcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjc5OlxcdFxcdGlmIChza2JfbXBsc19wb3Aoc2tiLCBwLVxcdTAwM2V0Y2ZtX3Byb3RvLCBtYWNfbGVuLFxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTgwLVxcdFxcdFxcdFxcdCBza2ItXFx1MDAzZWRldiBcXHUwMDI2XFx1MDAyNiBza2ItXFx1MDAzZWRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMToyNy45MzA5Mjg3NDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTM4ODI4MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVBMUyBQYWNrZXQgSGFuZGxpbmcgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBhbmQgY29udGV4dCBvZiBgc2tiX21wbHNfcG9wYC4gRmlyc3QsIEkgc2hvdWxkIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9uIGl0c2VsZiwgYHNrYl9tcGxzX3BvcGAgd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIFRoYXQgcGxhY2VzIGl0IGZpcm1seSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgd2hpY2ggaXMgZ29vZCB0byBrbm93IOKAkyBpdCdzIGZ1bmRhbWVudGFsLiBOb3csIHdoZXJlIGlzIGl0IGJlaW5nICpjYWxsZWQqPyBMZXQncyBzZWUuLi4gdGhlIGNvZGUgc2VhcmNoIHR1cm5lZCB1cCB0aHJlZSBjYWxsZXJzOiBgbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY2Ag4oCTIHRoYXQncyBPcGVuIHZTd2l0Y2gsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBpdCBpcyB1c2luZyB0aGlzIGZ1bmN0aW9uLiBUaGVuLCBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgIOKAkyBhaCwgdGhhdCdzIHRoZSBNUExTIGNsYXNzaWZpZXIvYWN0aW9uIG1vZHVsZSBpbiB0cmFmZmljIGNvbnRyb2wuIEFuZCwgZmluYWxseSwgdGhlIGV4cGVjdGVkIGNhbGxzIGZyb20gd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AgZm9yIHVzZSBpbiBgc2tiX21wbHNfcHVzaGAgYW5kIGBza2JfbXBsc19wb3BgIGl0c2VsZi5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgIGFuZCBgbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY2AsIGFuZCBzZWUgd2hhdCB0aGVpciBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIHVzaW5nIGBza2JfbXBsc19wb3BgLCBhbmQgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgaXRzIGludm9jYXRpb24uIEtub3dpbmcgdGhhdCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiB3aGVyZSB0aGUgTVBMUyBwYWNrZXQgcHJvY2Vzc2luZyBpcyBoYXBwZW5pbmcgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6MzEuNDY5NzYwNTQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTQzMzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9BQ1RfTVBMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTgwOD1jb25maWcgTkVUX0FDVF9DU1VNXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy04MTgtXFxubmV0L3NjaGVkL0tjb25maWc6ODE5OmNvbmZpZyBORVRfQUNUX01QTFNcXG5uZXQvc2NoZWQvS2NvbmZpZy04MjAtXFx0dHJpc3RhdGUgXFxcIk1QTFMgbWFuaXB1bGF0aW9uXFxcIlxcbi0tXFxubmV0L3NjaGVkL01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19ORVRfQUNUX0NTVU0pXFx0Kz0gYWN0X2NzdW0ub1xcbm5ldC9zY2hlZC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfTkVUX0FDVF9NUExTKVxcdCs9IGFjdF9tcGxzLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX05FVF9BQ1RfVkxBTilcXHQrPSBhY3Rfdmxhbi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIxOjMxLjU0MTcxMDY1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NzQ5NzU1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFRyYWZmaWMgQ29udHJvbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIHRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLiBNeSBpbnR1aXRpb24gc2F5cyB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYXJlIHByb2JhYmx5IGluIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIExldCdzIHplcm8gaW4gb24gdGhhdCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSA4MTkuIEknbSBub3QgZW50aXJlbHkgc3VyZSAqd2hhdCogSSdtIGxvb2tpbmcgZm9yIHlldCwgYnV0IHRoYXQncyBvZnRlbiBob3cgaXQgZ29lcy4gVGhhdCBsaW5lIGZlZWxzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGxvcmUgdGhlIGFyZWEgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgaG9sZHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTozMy4xMTY2ODg4NDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MTA6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuIDgxMTpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiA4MTI6XFx0XFx0aGVscFxcbiA4MTM6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIHVwZGF0ZSBzb21lIGNvbW1vbiBjaGVja3N1bSBhZnRlciBzb21lIGRpcmVjdFxcbiA4MTQ6XFx0XFx0ICBwYWNrZXQgYWx0ZXJhdGlvbnMuXFxuIDgxNTpcXHRcXG4gODE2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4MTc6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2NzdW0uXFxuIDgxODpcXHRcXG4gODE5OlxcdGNvbmZpZyBORVRfQUNUX01QTFNcXG4gODIwOlxcdFxcdHRyaXN0YXRlIFxcXCJNUExTIG1hbmlwdWxhdGlvblxcXCJcXG4gODIxOlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gODIyOlxcdFxcdGhlbHBcXG4gODIzOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBwdXNoIG9yIHBvcCBNUExTIGhlYWRlcnMuXFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gODI2OlxcdFxcbiA4Mjc6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDgyODpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfbXBscy5cXG4gODI5OlxcdFxcbiA4MzA6XFx0Y29uZmlnIE5FVF9BQ1RfVkxBTlxcbiA4MzE6XFx0XFx0dHJpc3RhdGUgXFxcIlZsYW4gbWFuaXB1bGF0aW9uXFxcIlxcbiA4MzI6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA4MzM6XFx0XFx0aGVscFxcbiA4MzQ6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIHB1c2ggb3IgcG9wIHZsYW4gaGVhZGVycy5cXG4gODM1OlxcdFxcbiA4MzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiA4Mzc6XFx0XFxuIDgzODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gODM5OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF92bGFuLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTozMy4xMTY3ODA0ODJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODYxNTk4NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgT3BlbiB2U3dpdGNoIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIE9wZW4gdlN3aXRjaCBjb25maWd1cmF0aW9uLiBMZXQncyBzdGFydCB3aXRoIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQnbGwgbGF5IG91dCB0aGUgY29yZSBmZWF0dXJlcyBhbmQgb3B0aW9ucyBhdmFpbGFibGUgZm9yIGNvbmZpZ3VyaW5nIE9wZW4gdlN3aXRjaCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgdG9wLWxldmVsIG1lbnUgc3RydWN0dXJlLCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZXMgb3IgY29uZmlndXJhdGlvbnMuIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gYW55IG5ldyBvciBjaGFuZ2VkIG9wdGlvbnMgc2luY2UgbXkgbGFzdCBkZWVwIGRpdmUsIGVzcGVjaWFsbHkgYW55IHJlbGF0ZWQgdG8gcmVjZW50IHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cyBvciBuZXcgcHJvdG9jb2xzLiBUaGlzIEtjb25maWcgd2lsbCBnaXZlIG1lIGEgaGlnaC1sZXZlbCB2aWV3IGFuZCBhbnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyB0byBpbnZlc3RpZ2F0ZSBzcGVjaWZpYyBhc3BlY3RzIGluIG1vcmUgZGV0YWlsLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzIOKAkyB1bmRlcnN0YW5kaW5nIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgY2VydGFpbiBPcGVuIHZTd2l0Y2ggZmVhdHVyZXMgaXMgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6MzUuOTc4MzgxMDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTkwOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIxOjM2LjAyNDM3NzYwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ3ODEzMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBEZXBlbmRlbmNpZXMgZm9yIE9wZW4gdlN3aXRjaCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSB0aG9zZSBkZWZpbmVkIGluIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBrbm93IHRoaXMgZmlsZSBpcyBnb2luZyB0byBjb250YWluIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGNvbnRyb2wgd2hpY2ggZmVhdHVyZXMgZ2V0IGNvbXBpbGVkIGludG8gT3BlbiB2U3dpdGNoLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGRpZmZlcmVudCBjb21wb25lbnRzIHJlbGF0ZSB0byBlYWNoIG90aGVyIGFuZCBmb3IgY3VzdG9taXppbmcgdGhlIGJ1aWxkIGZvciBzcGVjaWZpYyBkZXBsb3ltZW50cy4gSSBleHBlY3QgdG8gc2VlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBtYXliZSBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMsIGFuZCBkZWZpbml0ZWx5IHNvbWUgYm9vbGVhbiBvciB0cmlzdGF0ZSBvcHRpb25zLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0cmlnZ2VycyB3aGF0LCBhbmQgaG93IHRvIGVuYWJsZSBvciBkaXNhYmxlIGRpZmZlcmVudCBmZWF0dXJlcyBlZmZlY3RpdmVseS4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6MzguMTcyMTkzODI3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBPcGVuIHZTd2l0Y2hcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE9QRU5WU1dJVENIXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgXFxcXFxcbiAgMTA6XFx0XFx0XFx0ICAgKE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTE6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5GX05BVCB8fCBORl9OQVQpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDEyOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCAhUFNBTVBMRVxcbiAgMTQ6XFx0XFx0c2VsZWN0IE1QTFNcXG4gIDE1OlxcdFxcdHNlbGVjdCBORVRfQ1JDMzJDXFxuICAxNjpcXHRcXHRzZWxlY3QgTkVUX01QTFNfR1NPXFxuICAxNzpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuICAxODpcXHRcXHRzZWxlY3QgTkVUX05TSFxcbiAgMTk6XFx0XFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMgaWYgTkZfQ09OTlRSQUNLXFxuICAyMDpcXHRcXHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgT3BlbiB2U3dpdGNoIGlzIGEgbXVsdGlsYXllciBFdGhlcm5ldCBzd2l0Y2ggdGFyZ2V0ZWQgYXQgdmlydHVhbGl6ZWRcXG4gIDIzOlxcdFxcdCAgZW52aXJvbm1lbnRzLiAgSW4gYWRkaXRpb24gdG8gc3VwcG9ydGluZyBhIHZhcmlldHkgb2YgZmVhdHVyZXNcXG4gIDI0OlxcdFxcdCAgZXhwZWN0ZWQgaW4gYSB0cmFkaXRpb25hbCBoYXJkd2FyZSBzd2l0Y2gsIGl0IGVuYWJsZXMgZmluZS1ncmFpbmVkXFxuICAyNTpcXHRcXHQgIHByb2dyYW1tYXRpYyBleHRlbnNpb24gYW5kIGZsb3ctYmFzZWQgY29udHJvbCBvZiB0aGUgbmV0d29yay4gIFRoaXNcXG4gIDI2OlxcdFxcdCAgY29udHJvbCBpcyB1c2VmdWwgaW4gYSB3aWRlIHZhcmlldHkgb2YgYXBwbGljYXRpb25zIGJ1dCBpc1xcbiAgMjc6XFx0XFx0ICBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGluIG11bHRpLXNlcnZlciB2aXJ0dWFsaXphdGlvbiBkZXBsb3ltZW50cyxcXG4gIDI4OlxcdFxcdCAgd2hpY2ggYXJlIG9mdGVuIGNoYXJhY3Rlcml6ZWQgYnkgaGlnaGx5IGR5bmFtaWMgZW5kcG9pbnRzIGFuZCB0aGVcXG4gIDI5OlxcdFxcdCAgbmVlZCB0byBtYWludGFpbiBsb2dpY2FsIGFic3RyYWN0aW9ucyBmb3IgbXVsdGlwbGUgdGVuYW50cy5cXG4gIDMwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTozOC4xNzIzMDI3MjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM3MzczMTczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgd2Fsa2luZyB0aHJvdWdoIHRoZSBsb2dpYzpcblxuKipFeGFtaW5pbmcgTVBMUyBMYWJlbCBIYW5kbGluZyBpbiB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBNUExTIGxhYmVscyBhcmUgaGFuZGxlZCBpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIGFjdGlvbnMgcmVsYXRlZCB0byBwb3BwaW5nIGFuZCBwdXNoaW5nIHRoZXNlIGxhYmVscy4gTXkgZmlyc3QgaW5zdGluY3QsIGJlaW5nIGZhbWlsaWFyIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBmaWxlczogSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYG5ldC9zY2hlZC9hY3RfbXBscy5jYCBiZWNhdXNlIGl0IGRlYWxzIGRpcmVjdGx5IHdpdGggTVBMUyBhY3Rpb25zLCBsaWtlbHkgdGhlIFwibXBsc1wiIHBhcnQgb2YgdGhpbmdzLiBCdXQgSSBrbm93IHRoYXQgdGhlIGBza2J1ZmZgIHN0cnVjdHVyZSBpcyBjZW50cmFsIHRvIHBhY2tldCBoYW5kbGluZyBpbiB0aGUga2VybmVsLCBzbyBJJ2xsIGFsc28gd2FudCB0byBsb29rIGNsb3NlbHkgYXQgYG5ldC9jb3JlL3NrYnVmZi5jYC5cblxuTm93LCB3aXRoaW4gYHNrYnVmZi5jYCwgSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGRlYWwgd2l0aCBtYW5pcHVsYXRpbmcgdGhvc2UgbGFiZWxzLCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBmdW5jdGlvbnMgYHNrYl9tcGxzX3BvcGAgYW5kIGBza2JfbXBsc19wdXNoYC4gVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUga2V5IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsICpyZW1vdmVzKiBhbmQgKmFkZHMqIE1QTFMgbGFiZWxzIHJlc3BlY3RpdmVseS4gSSdsbCBuZWVkIHRvIHJlYWQgdGhlIGNvZGUgYXJvdW5kIHRob3NlIGZ1bmN0aW9ucywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5IGFyZSBtb2RpZmllZC4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgbG9va2luZyBhdCBob3cgdGhlIGBza2JgIHN0cnVjdHVyZSdzIGRhdGEgaXMgYWRqdXN0ZWQgYW5kIGhvdyB0aGUgbGFiZWwgc3RhY2sgaXMgbWFuYWdlZC4gQmFzaWNhbGx5LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgb2YgZGF0YSBhcm91bmQgdGhvc2UgZnVuY3Rpb25zIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjE0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo0MS41NDYwMzc5MjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2NDUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY2NDU6XFx0XFx0XFx0c2tiX21vZF9ldGhfdHlwZShza2IsIGV0aF9oZHIoc2tiKSwgbXBsc19wcm90byk7XFxuNjY0NjpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gbXBsc19wcm90bztcXG42NjQ3OlxcdFxcbjY2NDg6XFx0XFx0cmV0dXJuIDA7XFxuNjY0OTpcXHR9XFxuNjY1MDpcXHRFWFBPUlRfU1lNQk9MX0dQTChza2JfbXBsc19wdXNoKTtcXG42NjUxOlxcdFxcbjY2NTI6XFx0LyoqXFxuNjY1MzpcXHQgKiBza2JfbXBsc19wb3AoKSAtIHBvcCB0aGUgb3V0ZXJtb3N0IE1QTFMgaGVhZGVyXFxuNjY1NDpcXHQgKlxcbjY2NTU6XFx0ICogQHNrYjogYnVmZmVyXFxuNjY1NjpcXHQgKiBAbmV4dF9wcm90bzogZXRoZXJ0eXBlIG9mIGhlYWRlciBhZnRlciBwb3BwZWQgTVBMUyBoZWFkZXJcXG42NjU3OlxcdCAqIEBtYWNfbGVuOiBsZW5ndGggb2YgdGhlIE1BQyBoZWFkZXJcXG42NjU4OlxcdCAqIEBldGhlcm5ldDogZmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgcGFja2V0IGlzIGV0aGVybmV0XFxuNjY1OTpcXHQgKlxcbjY2NjA6XFx0ICogRXhwZWN0cyBza2ItXFx1MDAzZWRhdGEgYXQgbWFjIGhlYWRlci5cXG42NjYxOlxcdCAqXFxuNjY2MjpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS5cXG42NjYzOlxcdCAqL1xcbjY2NjQ6XFx0aW50IHNrYl9tcGxzX3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgbmV4dF9wcm90bywgaW50IG1hY19sZW4sXFxuNjY2NTpcXHRcXHRcXHQgYm9vbCBldGhlcm5ldClcXG42NjY2OlxcdHtcXG42NjY3OlxcdFxcdGludCBlcnI7XFxuNjY2ODpcXHRcXG42NjY5OlxcdFxcdGlmICh1bmxpa2VseSghZXRoX3BfbXBscyhza2ItXFx1MDAzZXByb3RvY29sKSkpXFxuNjY3MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG42NjcxOlxcdFxcbjY2NzI6XFx0XFx0ZXJyID0gc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG1hY19sZW4gKyBNUExTX0hMRU4pO1xcbjY2NzM6XFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuNjY3NDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjY2NzU6XFx0XFxuNjY3NjpcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBtcGxzX2hkcihza2IpLCBNUExTX0hMRU4pO1xcbjY2Nzc6XFx0XFx0bWVtbW92ZShza2JfbWFjX2hlYWRlcihza2IpICsgTVBMU19ITEVOLCBza2JfbWFjX2hlYWRlcihza2IpLFxcbjY2Nzg6XFx0XFx0XFx0bWFjX2xlbik7XFxuNjY3OTpcXHRcXG42NjgwOlxcdFxcdF9fc2tiX3B1bGwoc2tiLCBNUExTX0hMRU4pO1xcbjY2ODE6XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG42NjgyOlxcdFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBtYWNfbGVuKTtcXG42NjgzOlxcdFxcbjY2ODQ6XFx0XFx0aWYgKGV0aGVybmV0IFxcdTAwMjZcXHUwMDI2IG1hY19sZW4gXFx1MDAzZT0gRVRIX0hMRU4pIHtcXG42Njg1OlxcdFxcdFxcdHN0cnVjdCBldGhoZHIgKmhkcjtcXG42Njg2OlxcdFxcbjY2ODc6XFx0XFx0XFx0LyogdXNlIG1wbHNfaGRyKCkgdG8gZ2V0IGV0aGVydHlwZSB0byBhY2NvdW50IGZvciBWTEFOcy4gKi9cXG42Njg4OlxcdFxcdFxcdGhkciA9IChzdHJ1Y3QgZXRoaGRyICopKCh2b2lkICopbXBsc19oZHIoc2tiKSAtIEVUSF9ITEVOKTtcXG42Njg5OlxcdFxcdFxcdHNrYl9tb2RfZXRoX3R5cGUoc2tiLCBoZHIsIG5leHRfcHJvdG8pO1xcbjY2OTA6XFx0XFx0fVxcbjY2OTE6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IG5leHRfcHJvdG87XFxuNjY5MjpcXHRcXG42NjkzOlxcdFxcdC8qIFRoZSBsYXN0IGxhYmVsIGlzIGdvbmUsIHNvIHRoZSBpbm5lciBoZWFkZXIgcmVjb3JkZWQgYnlcXG42Njk0OlxcdFxcdCAqIHNrYl9tcGxzX3B1c2goKSBubyBsb25nZXIgZGVzY3JpYmVzIHRoaXMgcGFja2V0LiBEcm9wIGl0LCBvciBhXFxuNjY5NTpcXHRcXHQgKiBsYXRlciBwdXNoIGtlZXBzIHRoZSBzdGFsZSBvZmZzZXQuXFxuNjY5NjpcXHRcXHQgKi9cXG42Njk3OlxcdFxcdGlmICghZXRoX3BfbXBscyhuZXh0X3Byb3RvKSlcXG42Njk4OlxcdFxcdFxcdHNrYi1cXHUwMDNlaW5uZXJfcHJvdG9jb2wgPSAwO1xcbjY2OTk6XFx0XFxuNjcwMDpcXHRcXHRyZXR1cm4gMDtcXG42NzAxOlxcdH1cXG42NzAyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9tcGxzX3BvcCk7XFxuNjcwMzpcXHRcXG42NzA0OlxcdC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo0MS41NDYyOTQ0NTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkwNTA0OTg0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipFeGFtaW5pbmcgdGhlIGBza2JfbXBsc19wb3BgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBsb29raW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBza2JfbXBsc19wb3BgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcGlucG9pbnQgaXRzIGxvY2F0aW9uIGFuZCBwb3NzaWJsZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gU28sIHRoZSBmaXJzdCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhhdCBpdCdzIHdpdGhpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBHb29kLCB0aGF0IGNoZWNrcyBvdXQuIE5vdyBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcyBvciBzaW1pbGFyIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgdGhhdCBtaWdodCBhZmZlY3Qgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNvbXBpbGVkIG9yIHVzZWQgaW4gY2VydGFpbiBjb25maWd1cmF0aW9ucy4gVG8gZG8gdGhpcyBzeXN0ZW1hdGljYWxseSwgbGV0J3Mgc2NhbiBhIHNwZWNpZmljIHJlZ2lvbiBvZiB0aGUgc291cmNlIGNvZGUuIEknbGwgZm9jdXMgb24gbGluZXMgNjYwMCB0aHJvdWdoIDY3MjAgd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjb25jZW50cmF0ZWQgdmlldyBvZiBpdHMgY29udGV4dCwgcG90ZW50aWFsIGRlcGVuZGVuY2llcywgb3IgYnVpbGQtdGltZSBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo0NC40NTEzNDc2MTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY2MDA6XFx0ICogQHNrYjogYnVmZmVyXFxuNjYwMTpcXHQgKiBAbXBsc19sc2U6IE1QTFMgbGFiZWwgc3RhY2sgZW50cnkgdG8gcHVzaFxcbjY2MDI6XFx0ICogQG1wbHNfcHJvdG86IGV0aGVydHlwZSBvZiB0aGUgbmV3IE1QTFMgaGVhZGVyIChleHBlY3RzIDB4ODg0NyBvciAweDg4NDgpXFxuNjYwMzpcXHQgKiBAbWFjX2xlbjogbGVuZ3RoIG9mIHRoZSBNQUMgaGVhZGVyXFxuNjYwNDpcXHQgKiBAZXRoZXJuZXQ6IGZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIHJlc3VsdGluZyBwYWNrZXQgYWZ0ZXIgc2tiX21wbHNfcHVzaCBpc1xcbjY2MDU6XFx0ICogICAgICAgICAgICBldGhlcm5ldFxcbjY2MDY6XFx0ICpcXG42NjA3OlxcdCAqIEV4cGVjdHMgc2tiLVxcdTAwM2VkYXRhIGF0IG1hYyBoZWFkZXIuXFxuNjYwODpcXHQgKlxcbjY2MDk6XFx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuXFxuNjYxMDpcXHQgKi9cXG42NjExOlxcdGludCBza2JfbXBsc19wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBtcGxzX2xzZSwgX19iZTE2IG1wbHNfcHJvdG8sXFxuNjYxMjpcXHRcXHRcXHQgIGludCBtYWNfbGVuLCBib29sIGV0aGVybmV0KVxcbjY2MTM6XFx0e1xcbjY2MTQ6XFx0XFx0c3RydWN0IG1wbHNfc2hpbV9oZHIgKmxzZTtcXG42NjE1OlxcdFxcdGludCBlcnI7XFxuNjYxNjpcXHRcXG42NjE3OlxcdFxcdGlmICh1bmxpa2VseSghZXRoX3BfbXBscyhtcGxzX3Byb3RvKSkpXFxuNjYxODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NjE5OlxcdFxcbjY2MjA6XFx0XFx0LyogTmV0d29ya2luZyBzdGFjayBkb2VzIG5vdCBhbGxvdyBzaW11bHRhbmVvdXMgVHVubmVsIGFuZCBNUExTIEdTTy4gKi9cXG42NjIxOlxcdFxcdGlmIChza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24pXFxuNjYyMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NjIzOlxcdFxcbjY2MjQ6XFx0XFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgTVBMU19ITEVOKTtcXG42NjI1OlxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbjY2MjY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG42NjI3OlxcdFxcbjY2Mjg6XFx0XFx0aWYgKCFza2ItXFx1MDAzZWlubmVyX3Byb3RvY29sKSB7XFxuNjYyOTpcXHRcXHRcXHRza2Jfc2V0X2lubmVyX25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xcbjY2MzA6XFx0XFx0XFx0c2tiX3NldF9pbm5lcl9wcm90b2NvbChza2IsIHNrYi1cXHUwMDNlcHJvdG9jb2wpO1xcbjY2MzE6XFx0XFx0fVxcbjY2MzI6XFx0XFxuNjYzMzpcXHRcXHRza2JfcHVzaChza2IsIE1QTFNfSExFTik7XFxuNjYzNDpcXHRcXHRtZW1tb3ZlKHNrYl9tYWNfaGVhZGVyKHNrYikgLSBNUExTX0hMRU4sIHNrYl9tYWNfaGVhZGVyKHNrYiksXFxuNjYzNTpcXHRcXHRcXHRtYWNfbGVuKTtcXG42NjM2OlxcdFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuNjYzNzpcXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgbWFjX2xlbik7XFxuNjYzODpcXHRcXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xcbjY2Mzk6XFx0XFxuNjY0MDpcXHRcXHRsc2UgPSBtcGxzX2hkcihza2IpO1xcbjY2NDE6XFx0XFx0bHNlLVxcdTAwM2VsYWJlbF9zdGFja19lbnRyeSA9IG1wbHNfbHNlO1xcbjY2NDI6XFx0XFx0c2tiX3Bvc3RwdXNoX3Jjc3VtKHNrYiwgbHNlLCBNUExTX0hMRU4pO1xcbjY2NDM6XFx0XFxuNjY0NDpcXHRcXHRpZiAoZXRoZXJuZXQgXFx1MDAyNlxcdTAwMjYgbWFjX2xlbiBcXHUwMDNlPSBFVEhfSExFTilcXG42NjQ1OlxcdFxcdFxcdHNrYl9tb2RfZXRoX3R5cGUoc2tiLCBldGhfaGRyKHNrYiksIG1wbHNfcHJvdG8pO1xcbjY2NDY6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IG1wbHNfcHJvdG87XFxuNjY0NzpcXHRcXG42NjQ4OlxcdFxcdHJldHVybiAwO1xcbjY2NDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo0NC40NTE2MTY5MTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIyMzQwNjA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTVBMUyBPcGVyYXRpb25zIGluIHRoZSBMaW51eCBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBgc2tiX21wbHNfcHVzaGAgYW5kIGBza2JfbXBsc19wb3BgIOKAkyB0aG9zZSBhcmUgKmFsd2F5cyogYnVpbHQgaW4sIHBhcnQgb2YgdGhlIGNvcmUgYG5ldC9jb3JlL3NrYnVmZi5jYCBtb2R1bGUsIHVuZGVyIGBDT05GSUdfTkVUYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSdyZSBmdW5kYW1lbnRhbC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGV5J3JlIGFjdHVhbGx5IHVzZWQuIFNwZWNpZmljYWxseSwgd2hpY2ggY29tcG9uZW50cyB0cmlnZ2VyIHRoZWlyIGV4ZWN1dGlvbi4gRnJvbSBtZW1vcnksIHRoZSBtYWluIGNhbGxlcnMgc2VlbSB0byBiZSB0aHJvdWdoIFRDIGFjdGlvbiBNUExTLCB3aGljaCBnZXRzIGVuYWJsZWQgd2l0aCBgQ09ORklHX05FVF9BQ1RfTVBMU2AgYWxvbmcgd2l0aCBgQ09ORklHX05FVF9DTFNfQUNUYCDigJMgdGhlIFRyYWZmaWMgQ29udHJvbCBhY3Rpb24sIG5hdHVyYWxseS4gVGhlbiB0aGVyZSdzIE9wZW4gdlN3aXRjaCB0b28uXG5cbkkgdGhpbmsgSSdsbCBkaXZlIGludG8gdGhlIGB0Y2ZfbXBsc19hY3RgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgIHRvIHNlZSBob3cgaXQgYWxsIGNvbWVzIHRvZ2V0aGVyLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udHJvbCBmbG93LiBJdOKAmXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNvcmUgZnVuY3Rpb25zIGFyZSBpbnRlZ3JhdGVkIGFuZCBvcmNoZXN0cmF0ZWQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo0OC42NzUwMjYzMDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9tcGxzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0XFx0cmV0dXJuIGNwdV90b19iZTMyKG5ld19sc2UpO1xcbiAgNTE6XFx0fVxcbiAgNTI6XFx0XFxuICA1MzpcXHRUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuICA1NDpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbiAgNTU6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcylcXG4gIDU2OlxcdHtcXG4gIDU3OlxcdFxcdHN0cnVjdCB0Y2ZfbXBscyAqbSA9IHRvX21wbHMoYSk7XFxuICA1ODpcXHRcXHRzdHJ1Y3QgdGNmX21wbHNfcGFyYW1zICpwO1xcbiAgNTk6XFx0XFx0X19iZTMyIG5ld19sc2U7XFxuICA2MDpcXHRcXHRpbnQgbWFjX2xlbjtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0dGNmX2xhc3R1c2VfdXBkYXRlKFxcdTAwMjZtLVxcdTAwM2V0Y2ZfdG0pO1xcbiAgNjM6XFx0XFx0YnN0YXRzX3VwZGF0ZSh0aGlzX2NwdV9wdHIobS1cXHUwMDNlY29tbW9uLmNwdV9ic3RhdHMpLCBza2IpO1xcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHQvKiBFbnN1cmUgJ2RhdGEnIHBvaW50cyBhdCBtYWNfaGVhZGVyIHByaW9yIGNhbGxpbmcgbXBscyBtYW5pcHVsYXRpbmdcXG4gIDY2OlxcdFxcdCAqIGZ1bmN0aW9ucy5cXG4gIDY3OlxcdFxcdCAqL1xcbiAgNjg6XFx0XFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpIHtcXG4gIDY5OlxcdFxcdFxcdHNrYl9wdXNoX3Jjc3VtKHNrYiwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG4gIDcwOlxcdFxcdFxcdG1hY19sZW4gPSBza2ItXFx1MDAzZW1hY19sZW47XFxuICA3MTpcXHRcXHR9IGVsc2Uge1xcbiAgNzI6XFx0XFx0XFx0bWFjX2xlbiA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHRwID0gcmN1X2RlcmVmZXJlbmNlX2JoKG0tXFx1MDAzZW1wbHNfcCk7XFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdHN3aXRjaCAocC1cXHUwMDNldGNmbV9hY3Rpb24pIHtcXG4gIDc4OlxcdFxcdGNhc2UgVENBX01QTFNfQUNUX1BPUDpcXG4gIDc5OlxcdFxcdFxcdGlmIChza2JfbXBsc19wb3Aoc2tiLCBwLVxcdTAwM2V0Y2ZtX3Byb3RvLCBtYWNfbGVuLFxcbiAgODA6XFx0XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlZGV2IFxcdTAwMjZcXHUwMDI2IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpXFxuICA4MTpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA4MjpcXHRcXHRcXHRicmVhaztcXG4gIDgzOlxcdFxcdGNhc2UgVENBX01QTFNfQUNUX1BVU0g6XFxuICA4NDpcXHRcXHRcXHRuZXdfbHNlID0gdGNmX21wbHNfZ2V0X2xzZShOVUxMLCBwLCAhZXRoX3BfbXBscyhza2JfcHJvdG9jb2woc2tiLCB0cnVlKSkpO1xcbiAgODU6XFx0XFx0XFx0aWYgKHNrYl9tcGxzX3B1c2goc2tiLCBuZXdfbHNlLCBwLVxcdTAwM2V0Y2ZtX3Byb3RvLCBtYWNfbGVuLFxcbiAgODY6XFx0XFx0XFx0XFx0XFx0ICBza2ItXFx1MDAzZWRldiBcXHUwMDI2XFx1MDAyNiBza2ItXFx1MDAzZWRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpKVxcbiAgODc6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAgODg6XFx0XFx0XFx0YnJlYWs7XFxuICA4OTpcXHRcXHRjYXNlIFRDQV9NUExTX0FDVF9NQUNfUFVTSDpcXG4gIDkwOlxcdFxcdFxcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XFxuICA5MTpcXHRcXHRcXHRcXHRpZiAoX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxuICA5MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpLFxcbiAgOTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIEVUSF9ITEVOKSBcXHUwMDNjIDApXFxuICA5NDpcXHRcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBza2ItXFx1MDAzZXZsYW5fcHJvdG87XFxuICA5NzpcXHRcXHRcXHRcXHRfX3ZsYW5faHdhY2NlbF9jbGVhcl90YWcoc2tiKTtcXG4gIDk4OlxcdFxcdFxcdH1cXG4gIDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo0OC42NzUxMDQyMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjU3NTMwODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBPcGVuIHZTd2l0Y2ggSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBob3cgT3BlbiB2U3dpdGNoIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIG5ldHdvcmsgc3RhY2suIEkndmUgYWxyZWFkeSBleHBsb3JlZCB0aGUgbW9yZSBvYnZpb3VzIGVudHJ5IHBvaW50cywgYnV0IEkgaGF2ZSBhIGh1bmNoIHRoZXJlIG1pZ2h0IGJlIHNvbWUgbW9yZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIGhpZGRlbiB3aXRoaW4gdGhlIGBuZXQvb3BlbnZzd2l0Y2hgIGRpcmVjdG9yeSBpdHNlbGYuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBgYWN0aW9ucy5jYCBmaWxlLiBJdCdzIGEga2V5IHBpZWNlLCBkZWZpbmluZyB3aGF0IGhhcHBlbnMgKmFmdGVyKiBhIGZsb3cgcnVsZSBoYXMgYmVlbiBtYXRjaGVkLCBzbyBJIHNob3VsZCBzZWUgd2hhdCBjYWxsZXJzIGluIHRoYXQgZmlsZSBhcmUgYmVpbmcgdHJpZ2dlcmVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGFub3RoZXIgYXZlbnVlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZS4gTGV0J3Mgc2VlIGlmIHRoaXMgcmV2ZWFscyBhbnl0aGluZyBpbnRlcmVzdGluZyBvciBhbnkgbmV3IGxlYWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTM1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo1MC4zMzI2MzgxMTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdFxcdGtleS1cXHUwMDNlbWFjX3Byb3RvID0gTUFDX1BST1RPX05PTkU7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdGludmFsaWRhdGVfZmxvd19rZXkoa2V5KTtcXG4gMTQzOlxcdFxcdHJldHVybiAwO1xcbiAxNDQ6XFx0fVxcbiAxNDU6XFx0XFxuIDE0NjpcXHRzdGF0aWMgaW50IHBvcF9tcGxzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbiAxNDc6XFx0XFx0XFx0ICAgIGNvbnN0IF9fYmUxNiBldGhlcnR5cGUpXFxuIDE0ODpcXHR7XFxuIDE0OTpcXHRcXHRpbnQgZXJyO1xcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRlcnIgPSBza2JfbXBsc19wb3Aoc2tiLCBldGhlcnR5cGUsIHNrYi1cXHUwMDNlbWFjX2xlbixcXG4gMTUyOlxcdFxcdFxcdFxcdCAgIG92c19rZXlfbWFjX3Byb3RvKGtleSkgPT0gTUFDX1BST1RPX0VUSEVSTkVUKTtcXG4gMTUzOlxcdFxcdGlmIChlcnIpXFxuIDE1NDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXHRpZiAoZXRoZXJ0eXBlID09IGh0b25zKEVUSF9QX1RFQikpXFxuIDE1NzpcXHRcXHRcXHRrZXktXFx1MDAzZW1hY19wcm90byA9IE1BQ19QUk9UT19FVEhFUk5FVDtcXG4gMTU4OlxcdFxcbiAxNTk6XFx0XFx0aW52YWxpZGF0ZV9mbG93X2tleShrZXkpO1xcbiAxNjA6XFx0XFx0cmV0dXJuIDA7XFxuIDE2MTpcXHR9XFxuIDE2MjpcXHRcXG4gMTYzOlxcdHN0YXRpYyBpbnQgc2V0X21wbHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICpmbG93X2tleSxcXG4gMTY0OlxcdFxcdFxcdCAgICBjb25zdCBfX2JlMzIgKm1wbHNfbHNlLCBjb25zdCBfX2JlMzIgKm1hc2spXFxuIDE2NTpcXHR7XFxuIDE2NjpcXHRcXHRzdHJ1Y3QgbXBsc19zaGltX2hkciAqc3RhY2s7XFxuIDE2NzpcXHRcXHRfX2JlMzIgbHNlO1xcbiAxNjg6XFx0XFx0aW50IGVycjtcXG4gMTY5OlxcdFxcbiAxNzA6XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgKyBNUExTX0hMRU4pKVxcbiAxNzE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE3MjpcXHRcXG4gMTczOlxcdFxcdHN0YWNrID0gbXBsc19oZHIoc2tiKTtcXG4gMTc0OlxcdFxcdGxzZSA9IE9WU19NQVNLRUQoc3RhY2stXFx1MDAzZWxhYmVsX3N0YWNrX2VudHJ5LCAqbXBsc19sc2UsICptYXNrKTtcXG4gMTc1OlxcdFxcdGVyciA9IHNrYl9tcGxzX3VwZGF0ZV9sc2Uoc2tiLCBsc2UpO1xcbiAxNzY6XFx0XFx0aWYgKGVycilcXG4gMTc3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdGZsb3dfa2V5LVxcdTAwM2VtcGxzLmxzZVswXSA9IGxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6NTAuMzMyNzYwMTE5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NjgyNjc2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogTVBMUyBQYWNrZXQgUHJvY2Vzc2luZyoqXG5cbk9rYXksIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBIZXJlJ3Mgd2h5OlxuXG5GaXJzdCwgaXQgdG91Y2hlcyBjb3JlIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljIHdpdGhpbiBgc2tiX21wbHNfcG9wYC4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgdGhlIHBvdGVudGlhbCBmb3Igc3RhbGUgb2Zmc2V0IGFuZCBpbm5lciBoZWFkZXIgbWV0YWRhdGEgYnVncyB0aGF0IGNvdWxkIGFyaXNlIGR1cmluZyBNUExTIGVuY2Fwc3VsYXRpb24gYW5kIGRlY2Fwc3VsYXRpb24sIHdoaWNoIGlzIGEgY29tbW9uIHZ1bG5lcmFiaWxpdHkgcGF0dGVybi4gVGhhdCdzIGEgc3Ryb25nIHNpZ25hbC5cblxuU2Vjb25kLCB0aGUgY29kZSBpcyBlYXNpbHkgcmVhY2hhYmxlIGluIGNvbW1vbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkgY2FuIGhpdCB0aGlzIHRocm91Z2ggc3RhbmRhcmQgc2V0dXBzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIGxldmVyYWdpbmcgVEMgYWN0aW9uIE1QTFMgKGBDT05GSUdfTkVUX0FDVF9NUExTYCwgYENPTkZJR19ORVRfQ0xTX0FDVGApIG9yIGV2ZW4gT3BlbiB2U3dpdGNoIChgQ09ORklHX09QRU5WU1dJVENIYCkuIFNvIG5vIG5lZWQgZm9yIGV4b3RpYyBzZXR1cHM7IGEgc3RhbmRhcmQgZW52aXJvbm1lbnQgd2lsbCB3b3JrLlxuXG5UaGlyZCwgSSd2ZSBpZGVudGlmaWVkIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uOiBgc2tiX21wbHNfcG9wYCwgYHNrYl9tcGxzX3B1c2hgLCBhbmQgYHRjZl9tcGxzX2FjdGAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhvc2UgZW50cnlwb2ludHMuIE9rYXksIGdvb2QuIGBza2JfbXBsc19wb3BgLCBgc2tiX21wbHNfcHVzaGAsIGFuZCBgdGNmX21wbHNfYWN0YCBhcmUgYWxsIG5vbi1zdGF0aWMgc3ltYm9scy4gSG93ZXZlciwgSSB3YW50IHRvIGRvdWJsZS1jaGVjayBgcG9wX21wbHNgIGFzIGl0IGlzIHN0YXRpYyBpbiBvcGVudnN3aXRjaC4gVGhlIGVudHJ5cG9pbnQgZm9yIE9WUyBhY3Rpb25zIHNob3VsZCBiZSBgb3ZzX2V4ZWN1dGVfYWN0aW9uc2Agb3IgYGRvX2V4ZWN1dGVfYWN0aW9uc2AuIExldCdzIHN0aWNrIHdpdGggdGhlIGZvY3VzIHN5bWJvbHMgZm9yIG5vdzogYHNrYl9tcGxzX3BvcGAsIGBza2JfbXBsc19wdXNoYCwgYW5kIGB0Y2ZfbXBsc19hY3RgLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIFdlIG5lZWQgYE5FVGAgKHdoaWNoIGlzIGFsd2F5cyBlbmFibGVkKSwgYE5FVF9DTFNfQUNUYCwgYE5FVF9BQ1RfTVBMU2AsIGFuZCBgT1BFTlZTV0lUQ0hgLiBJJ2xsIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBpbiBgbmV0L3NjaGVkL0tjb25maWdgIHRvIGJlIHN1cmUuIEFscmlnaHQsIGBORVRfQUNUX01QTFNgIGRlcGVuZHMgb24gYE5FVF9DTFNfQUNUYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBORVRgLiBBbmQgYE9QRU5WU1dJVENIYCBkZXBlbmRzIG9uIGBJTkVUYCwgd2hpY2ggaXMgYWxsIGdvb2QuXG5cbkZpbmFsbHksIGxldCdzIG1ha2Ugc3VyZSB0aGUgdG9vbCBwYXJhbWV0ZXJzIGFyZSBjb3JyZWN0bHkgZm9ybWF0dGVkLCBhbmQgYWxsIGlzIGFzIGV4cGVjdGVkLlxuXG5gRW5hYmxlQ29uZmlnc2A6IGBbXCJORVRfQUNUX01QTFNcIiwgXCJORVRfQ0xTX0FDVFwiLCBcIk9QRU5WU1dJVENIXCJdYFxuYEZvY3VzU3ltYm9sc2A6IGBbXCJza2JfbXBsc19wb3BcIiwgXCJza2JfbXBsc19wdXNoXCIsIFwidGNmX21wbHNfYWN0XCJdYFxuYFdvcnRoRnV6emluZ2A6IHRydWVcbmBSZWFzb25pbmdgOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSB2ZXJkaWN0LlxuXG5Mb29rcyBnb29kIHRvIG1lLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc3OCwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo1NS4yMDEwMzAwMjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTgwMTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0FDVF9NUExTXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfbXBsc19wb3BcIixcbiAgICBcInNrYl9tcGxzX3B1c2hcIixcbiAgICBcInRjZl9tcGxzX2FjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNrYl9tcGxzX3BvcCBpbiBuZXQvY29yZS9za2J1ZmYuYyB0byBjbGVhciBza2ItXFx1MDAzZWlubmVyX3Byb3RvY29sIHdoZW4gcG9wcGluZyB0aGUgbGFzdCBNUExTIGhlYWRlciwgcHJldmVudGluZyBzdGFsZSBpbm5lciBoZWFkZXIgb2Zmc2V0cyBvbiBzdWJzZXF1ZW50IE1QTFMgb3BlcmF0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgc2tiIE1QTFMgaGFuZGxpbmcgdXNlZCBieSBUQyBNUExTIGFjdGlvbnMgYW5kIE9wZW4gdlN3aXRjaCwgYm90aCBvZiB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX01QTFNcIixcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl9tcGxzX3BvcFwiLFxuICAgIFwic2tiX21wbHNfcHVzaFwiLFxuICAgIFwidGNmX21wbHNfYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2tiX21wbHNfcG9wIGluIG5ldC9jb3JlL3NrYnVmZi5jIHRvIGNsZWFyIHNrYi1cXHUwMDNlaW5uZXJfcHJvdG9jb2wgd2hlbiBwb3BwaW5nIHRoZSBsYXN0IE1QTFMgaGVhZGVyLCBwcmV2ZW50aW5nIHN0YWxlIGlubmVyIGhlYWRlciBvZmZzZXRzIG9uIHN1YnNlcXVlbnQgTVBMUyBvcGVyYXRpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBza2IgTVBMUyBoYW5kbGluZyB1c2VkIGJ5IFRDIE1QTFMgYWN0aW9ucyBhbmQgT3BlbiB2U3dpdGNoLCBib3RoIG9mIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMTo1NS4yODY4Mzk3OTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDUxNTcyMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6NTUuMjg3MzQwNzM3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk0NTEwNjY0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfbXBsc19wb3AoKWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCB0byByZXNldCBgc2tiLVxcdTAwM2Vpbm5lcl9wcm90b2NvbGAgdG8gMCB3aGVuIHRoZSBwb3BwZWQgTVBMUyBoZWFkZXIgaXMgdGhlIGxhc3Qgb25lIChpLmUuIGAhZXRoX3BfbXBscyhuZXh0X3Byb3RvKWApLiBUaGlzIGVuc3VyZXMgdGhhdCBzdWJzZXF1ZW50IGBza2JfbXBsc19wdXNoKClgIGNhbGxzIGRvIG5vdCByZXRhaW4gc3RhbGUgaW5uZXIgcHJvdG9jb2wgYW5kIGlubmVyIG5ldHdvcmsgaGVhZGVyIG9mZnNldHMuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHN0cnVjdCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgbGVuZ3RocyBvciBidWZmZXIgYm91bmRzIGluIGEgd2F5IHRoYXQgbGVhZHMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBBbnkgcG90ZW50aWFsIGJ1ZmZlci9vZmZzZXQgaXNzdWVzIGFyaXNpbmcgZnJvbSBza2IgaGVhZGVyIG1hbmlwdWxhdGlvbiBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTJhNDFhY2UzMjE1MGRkYTQ0ODU0OTBiY2UzNDczZGI4OWRhOGM1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDE6MjE6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCA5NjZhZjNiZWVkOTRkLi5jYzNiNGI3MDI4OGI0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtNjY5MCw2ICs2NjkwLDEzIEBAIGludCBza2JfbXBsc19wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IG5leHRfcHJvdG8sIGludCBtYWNfbGVuLFxuIFx0fVxuIFx0c2tiLVx1MDAzZXByb3RvY29sID0gbmV4dF9wcm90bztcbiBcbitcdC8qIFRoZSBsYXN0IGxhYmVsIGlzIGdvbmUsIHNvIHRoZSBpbm5lciBoZWFkZXIgcmVjb3JkZWQgYnlcbitcdCAqIHNrYl9tcGxzX3B1c2goKSBubyBsb25nZXIgZGVzY3JpYmVzIHRoaXMgcGFja2V0LiBEcm9wIGl0LCBvciBhXG4rXHQgKiBsYXRlciBwdXNoIGtlZXBzIHRoZSBzdGFsZSBvZmZzZXQuXG4rXHQgKi9cbitcdGlmICghZXRoX3BfbXBscyhuZXh0X3Byb3RvKSlcbitcdFx0c2tiLVx1MDAzZWlubmVyX3Byb3RvY29sID0gMDtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChza2JfbXBsc19wb3ApO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjE6NTUuMjg3MzQxODA3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNzQ0NDU0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBDb2RlIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgcHJvdmlkZWQgcGF0Y2guIEkgc2VlIGl0IHRhcmdldHMgYG5ldC9jb3JlL3NrYnVmZi5jYCBhbmQgc3BlY2lmaWNhbGx5IHRvdWNoZXMgdGhlIGBza2JfbXBsc19wb3BgIGZ1bmN0aW9uLiBNeSBpbnN0aW5jdCwgYmVpbmcgYSBzZWFzb25lZCBwcm8sIGlzIHRvIGltbWVkaWF0ZWx5IGdyYXNwIHRoZSB3aWRlciBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgZXhpc3RpbmcgY29kZSBmbG93LiBUaGVyZWZvcmUsIEknbSBnb2luZyB0byBxdWlja2x5IG5hdmlnYXRlIHRvIHRoYXQgc2VjdGlvbiB3aXRoaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgZm9jdXNpbmcgYXJvdW5kIGxpbmUgNjY5MCwgdG8gdW5kZXJzdGFuZCBpdHMgbmVpZ2hib3JzIGFuZCBkZXBlbmRlbmNpZXMuIEl0J3MgY3J1Y2lhbCB0byBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjaywgYW5kIHdoZXJlIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3Igcmlza3MgbWlnaHQgcmVzaWRlLiBUaGlzIHVwZnJvbnQgY29udGV4dHVhbCBhd2FyZW5lc3MgaXMgdGhlIGZvdW5kYXRpb24gZm9yIGEgcHJvcGVyIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIyOjAwLjM2MTc5MDIwMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTE3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjY2MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjY2MDpcXHQgKiBFeHBlY3RzIHNrYi1cXHUwMDNlZGF0YSBhdCBtYWMgaGVhZGVyLlxcbjY2NjE6XFx0ICpcXG42NjYyOlxcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtZXJybm8gb3RoZXJ3aXNlLlxcbjY2NjM6XFx0ICovXFxuNjY2NDpcXHRpbnQgc2tiX21wbHNfcG9wKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBuZXh0X3Byb3RvLCBpbnQgbWFjX2xlbixcXG42NjY1OlxcdFxcdFxcdCBib29sIGV0aGVybmV0KVxcbjY2NjY6XFx0e1xcbjY2Njc6XFx0XFx0aW50IGVycjtcXG42NjY4OlxcdFxcbjY2Njk6XFx0XFx0aWYgKHVubGlrZWx5KCFldGhfcF9tcGxzKHNrYi1cXHUwMDNlcHJvdG9jb2wpKSlcXG42NjcwOlxcdFxcdFxcdHJldHVybiAwO1xcbjY2NzE6XFx0XFxuNjY3MjpcXHRcXHRlcnIgPSBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgbWFjX2xlbiArIE1QTFNfSExFTik7XFxuNjY3MzpcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG42Njc0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNjY3NTpcXHRcXG42Njc2OlxcdFxcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIG1wbHNfaGRyKHNrYiksIE1QTFNfSExFTik7XFxuNjY3NzpcXHRcXHRtZW1tb3ZlKHNrYl9tYWNfaGVhZGVyKHNrYikgKyBNUExTX0hMRU4sIHNrYl9tYWNfaGVhZGVyKHNrYiksXFxuNjY3ODpcXHRcXHRcXHRtYWNfbGVuKTtcXG42Njc5OlxcdFxcbjY2ODA6XFx0XFx0X19za2JfcHVsbChza2IsIE1QTFNfSExFTik7XFxuNjY4MTpcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbjY2ODI6XFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIG1hY19sZW4pO1xcbjY2ODM6XFx0XFxuNjY4NDpcXHRcXHRpZiAoZXRoZXJuZXQgXFx1MDAyNlxcdTAwMjYgbWFjX2xlbiBcXHUwMDNlPSBFVEhfSExFTikge1xcbjY2ODU6XFx0XFx0XFx0c3RydWN0IGV0aGhkciAqaGRyO1xcbjY2ODY6XFx0XFxuNjY4NzpcXHRcXHRcXHQvKiB1c2UgbXBsc19oZHIoKSB0byBnZXQgZXRoZXJ0eXBlIHRvIGFjY291bnQgZm9yIFZMQU5zLiAqL1xcbjY2ODg6XFx0XFx0XFx0aGRyID0gKHN0cnVjdCBldGhoZHIgKikoKHZvaWQgKiltcGxzX2hkcihza2IpIC0gRVRIX0hMRU4pO1xcbjY2ODk6XFx0XFx0XFx0c2tiX21vZF9ldGhfdHlwZShza2IsIGhkciwgbmV4dF9wcm90byk7XFxuNjY5MDpcXHRcXHR9XFxuNjY5MTpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gbmV4dF9wcm90bztcXG42NjkyOlxcdFxcbjY2OTM6XFx0XFx0LyogVGhlIGxhc3QgbGFiZWwgaXMgZ29uZSwgc28gdGhlIGlubmVyIGhlYWRlciByZWNvcmRlZCBieVxcbjY2OTQ6XFx0XFx0ICogc2tiX21wbHNfcHVzaCgpIG5vIGxvbmdlciBkZXNjcmliZXMgdGhpcyBwYWNrZXQuIERyb3AgaXQsIG9yIGFcXG42Njk1OlxcdFxcdCAqIGxhdGVyIHB1c2gga2VlcHMgdGhlIHN0YWxlIG9mZnNldC5cXG42Njk2OlxcdFxcdCAqL1xcbjY2OTc6XFx0XFx0aWYgKCFldGhfcF9tcGxzKG5leHRfcHJvdG8pKVxcbjY2OTg6XFx0XFx0XFx0c2tiLVxcdTAwM2Vpbm5lcl9wcm90b2NvbCA9IDA7XFxuNjY5OTpcXHRcXG42NzAwOlxcdFxcdHJldHVybiAwO1xcbjY3MDE6XFx0fVxcbjY3MDI6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcG9wKTtcXG42NzAzOlxcdFxcbjY3MDQ6XFx0LyoqXFxuNjcwNTpcXHQgKiBza2JfbXBsc191cGRhdGVfbHNlKCkgLSBtb2RpZnkgb3V0ZXJtb3N0IE1QTFMgaGVhZGVyIGFuZCB1cGRhdGUgY3N1bVxcbjY3MDY6XFx0ICpcXG42NzA3OlxcdCAqIEBza2I6IGJ1ZmZlclxcbjY3MDg6XFx0ICogQG1wbHNfbHNlOiBuZXcgTVBMUyBsYWJlbCBzdGFjayBlbnRyeSB0byB1cGRhdGUgdG9cXG42NzA5OlxcdCAqXFxuNjcxMDpcXHQgKiBFeHBlY3RzIHNrYi1cXHUwMDNlZGF0YSBhdCBtYWMgaGVhZGVyLlxcbjY3MTE6XFx0ICpcXG42NzEyOlxcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtZXJybm8gb3RoZXJ3aXNlLlxcbjY3MTM6XFx0ICovXFxuNjcxNDpcXHRpbnQgc2tiX21wbHNfdXBkYXRlX2xzZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgbXBsc19sc2UpXFxuNjcxNTpcXHR7XFxuNjcxNjpcXHRcXHRpbnQgZXJyO1xcbjY3MTc6XFx0XFxuNjcxODpcXHRcXHRpZiAodW5saWtlbHkoIWV0aF9wX21wbHMoc2tiLVxcdTAwM2Vwcm90b2NvbCkpKVxcbjY3MTk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIyOjAwLjM2MjE4NDMyMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQ2MDQ0NTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHNrYl9tcGxzX3B1c2ggYW5kIElubmVyIFByb3RvY29scyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgc2tiX21wbHNfcHVzaGAgaXMgaW1wbGVtZW50ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gVGhlIG1haW4gcG9pbnQgb2YgaW50ZXJlc3QgaXMgaG93IHRoZSBgaW5uZXJfcHJvdG9jb2xgIGZpZWxkIGlzIGJlaW5nIHV0aWxpemVkIGluIHRoYXQgZnVuY3Rpb24sIGFuZCBpZiBpdCBpcyBiZWluZyB1c2VkIGluIG90aGVyIHBsYWNlcyB0b28uIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpIGFuZCBob3cgdGhlIGlubmVyIHByb3RvY29sIGdldHMgaGFuZGxlZCBkdXJpbmcgdGhlIE1QTFMgbGFiZWwgcHVzaCBvcGVyYXRpb24uIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIGRlYWwgd2l0aCBuZXN0ZWQgcHJvdG9jb2xzIGFuZCBmb3J3YXJkaW5nIGRlY2lzaW9ucyBpbiB0aGUgZGF0YSBwbGFuZS4gSXQncyBjcnVjaWFsIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm90b2NvbCBzdGFjayBjb3JyZWN0bHkgaW50ZXJwcmV0cyBhbmQgcHJvY2Vzc2VzIHRoZSBuZXN0ZWQgaGVhZGVycyBhZnRlciB0aGUgTVBMUyBsYWJlbCBpcyBhZGRlZC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSByZWZlcmVuY2VzIGFuZCB1c2FnZSBvZiB0aGF0IHZhcmlhYmxlIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIyOjAyLjQwODIzMjY4NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgxNTAwMzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9tcGxzX3B1c2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz02NTg0PXN0YXRpYyB2b2lkIHNrYl9tb2RfZXRoX3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGV0aGhkciAqaGRyLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjU5Ni0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzo2NTk3OiAqIHNrYl9tcGxzX3B1c2goKSAtIHB1c2ggYSBuZXcgTVBMUyBoZWFkZXIgYWZ0ZXIgbWFjX2xlbiBieXRlcyBmcm9tIHN0YXJ0IG9mXFxubmV0L2NvcmUvc2tidWZmLmMtNjU5OC0gKiAgICAgICAgICAgICAgICAgICB0aGUgcGFja2V0XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NjAzLSAqIEBtYWNfbGVuOiBsZW5ndGggb2YgdGhlIE1BQyBoZWFkZXJcXG5uZXQvY29yZS9za2J1ZmYuYzo2NjA0OiAqIEBldGhlcm5ldDogZmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgcmVzdWx0aW5nIHBhY2tldCBhZnRlciBza2JfbXBsc19wdXNoIGlzXFxubmV0L2NvcmUvc2tidWZmLmMtNjYwNS0gKiAgICAgICAgICAgIGV0aGVybmV0XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NjEwLSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjY2MTE6aW50IHNrYl9tcGxzX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIG1wbHNfbHNlLCBfX2JlMTYgbXBsc19wcm90byxcXG5uZXQvY29yZS9za2J1ZmYuYy02NjEyLVxcdFxcdCAgaW50IG1hY19sZW4sIGJvb2wgZXRoZXJuZXQpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NjQ5LX1cXG5uZXQvY29yZS9za2J1ZmYuYzo2NjUwOkVYUE9SVF9TWU1CT0xfR1BMKHNrYl9tcGxzX3B1c2gpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTY2NTEtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02NjY0PWludCBza2JfbXBsc19wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IG5leHRfcHJvdG8sIGludCBtYWNfbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjY5My1cXHQvKiBUaGUgbGFzdCBsYWJlbCBpcyBnb25lLCBzbyB0aGUgaW5uZXIgaGVhZGVyIHJlY29yZGVkIGJ5XFxubmV0L2NvcmUvc2tidWZmLmM6NjY5NDpcXHQgKiBza2JfbXBsc19wdXNoKCkgbm8gbG9uZ2VyIGRlc2NyaWJlcyB0aGlzIHBhY2tldC4gRHJvcCBpdCwgb3IgYVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY2OTUtXFx0ICogbGF0ZXIgcHVzaCBrZWVwcyB0aGUgc3RhbGUgb2Zmc2V0Llxcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xMzA9c3RhdGljIGludCBwdXNoX21wbHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTEzNC1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjEzNTpcXHRlcnIgPSBza2JfbXBsc19wdXNoKHNrYiwgbXBsc19sc2UsIG1wbHNfZXRoZXJ0eXBlLCBtYWNfbGVuLCAhIW1hY19sZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTM2LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYz01Mz1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYy04NC1cXHRcXHRuZXdfbHNlID0gdGNmX21wbHNfZ2V0X2xzZShOVUxMLCBwLCAhZXRoX3BfbXBscyhza2JfcHJvdG9jb2woc2tiLCB0cnVlKSkpO1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjg1OlxcdFxcdGlmIChza2JfbXBsc19wdXNoKHNrYiwgbmV3X2xzZSwgcC1cXHUwMDNldGNmbV9wcm90bywgbWFjX2xlbixcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy04Ni1cXHRcXHRcXHRcXHQgIHNrYi1cXHUwMDNlZGV2IFxcdTAwMjZcXHUwMDI2IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYy0xMDItXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM6MTAzOlxcdFxcdGlmIChza2JfbXBsc19wdXNoKHNrYiwgbmV3X2xzZSwgcC1cXHUwMDNldGNmbV9wcm90bywgMCwgZmFsc2UpKVxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTEwNC1cXHRcXHRcXHRnb3RvIGRyb3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIyOjAyLjc4OTczOTA4OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjI4NzEwOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYHNrYl9tcGxzX3B1c2hgIGZ1bmN0aW9uLCBmcmVzaCBmcm9tIHRoZSBzb3VyY2UgY29kZTpcblxuKipEaXZpbmcgaW50byBza2JfbXBsc19wdXNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHNrYl9tcGxzX3B1c2hgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgdGhlIGNydWNpYWwgc3RlcCBvZiBwcmVwZW5kaW5nIE1QTFMgbGFiZWxzIG9udG8gYSBuZXR3b3JrIGJ1ZmZlciAoc2tiKS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSBncmFzcCBvZiBNUExTIGZvcndhcmRpbmcgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHJpZ2h0PyBMZXQncyBicmVhayBkb3duIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhpcyBwcm9jZXNzLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lY2hhbmljcyBoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc2tiIGlzIGJlaW5nIG1hbmlwdWxhdGVkLCBzcGVjaWZpY2FsbHksIGhvdyB0aGUgZGF0YSBwb2ludGVyIGlzIG1hbmFnZWQsIHRoZSBsZW5ndGggYWRqdXN0ZWQsIGFuZCB0aGUgYWN0dWFsIGxhYmVsIGlzIGluc2VydGVkLiBJIGFsc28gd2FudCB0byBvYnNlcnZlIHRoZSBoYW5kbGluZyBvZiBwb3RlbnRpYWwgZWRnZSBjYXNlcywgZXJyb3IgY29uZGl0aW9ucywgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGlmIG5lY2Vzc2FyeS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBoYXBwZW5zIGlmIHdlJ3JlIHB1c2hpbmcgbXVsdGlwbGUgbGFiZWxzIGFuZCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHRoZSBsYWJlbCBzdGFjayBjb3JyZWN0bHkuIEknbGwgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdXNlZCwgc2luY2UgbW9kaWZ5aW5nIHNrYnMgY2FuIGJlIGEgcHJldHR5IHRyaWNreSBidXNpbmVzcy5cblxuVGhpcyB3aWxsIGdpdmUgbWUgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgaW50cmljYWNpZXMgb2YgdGhlIE1QTFMgaW1wbGVtZW50YXRpb24sIHRoZSBkZXNpZ24gY2hvaWNlcyBtYWRlIGJ5IHRoZSBrZXJuZWwgZGV2ZWxvcGVycywgYW5kIGhvdyBlZmZpY2llbnRseSB0aGlzIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNydWNpYWwgYnVpbGRpbmcgYmxvY2sgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGFyZ2VyIG5ldHdvcmsgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMToyMjowNS40MTg0NTM3MzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA4NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2MDAsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY2MDA6XFx0ICogQHNrYjogYnVmZmVyXFxuNjYwMTpcXHQgKiBAbXBsc19sc2U6IE1QTFMgbGFiZWwgc3RhY2sgZW50cnkgdG8gcHVzaFxcbjY2MDI6XFx0ICogQG1wbHNfcHJvdG86IGV0aGVydHlwZSBvZiB0aGUgbmV3IE1QTFMgaGVhZGVyIChleHBlY3RzIDB4ODg0NyBvciAweDg4NDgpXFxuNjYwMzpcXHQgKiBAbWFjX2xlbjogbGVuZ3RoIG9mIHRoZSBNQUMgaGVhZGVyXFxuNjYwNDpcXHQgKiBAZXRoZXJuZXQ6IGZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIHJlc3VsdGluZyBwYWNrZXQgYWZ0ZXIgc2tiX21wbHNfcHVzaCBpc1xcbjY2MDU6XFx0ICogICAgICAgICAgICBldGhlcm5ldFxcbjY2MDY6XFx0ICpcXG42NjA3OlxcdCAqIEV4cGVjdHMgc2tiLVxcdTAwM2VkYXRhIGF0IG1hYyBoZWFkZXIuXFxuNjYwODpcXHQgKlxcbjY2MDk6XFx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuXFxuNjYxMDpcXHQgKi9cXG42NjExOlxcdGludCBza2JfbXBsc19wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBtcGxzX2xzZSwgX19iZTE2IG1wbHNfcHJvdG8sXFxuNjYxMjpcXHRcXHRcXHQgIGludCBtYWNfbGVuLCBib29sIGV0aGVybmV0KVxcbjY2MTM6XFx0e1xcbjY2MTQ6XFx0XFx0c3RydWN0IG1wbHNfc2hpbV9oZHIgKmxzZTtcXG42NjE1OlxcdFxcdGludCBlcnI7XFxuNjYxNjpcXHRcXG42NjE3OlxcdFxcdGlmICh1bmxpa2VseSghZXRoX3BfbXBscyhtcGxzX3Byb3RvKSkpXFxuNjYxODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NjE5OlxcdFxcbjY2MjA6XFx0XFx0LyogTmV0d29ya2luZyBzdGFjayBkb2VzIG5vdCBhbGxvdyBzaW11bHRhbmVvdXMgVHVubmVsIGFuZCBNUExTIEdTTy4gKi9cXG42NjIxOlxcdFxcdGlmIChza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24pXFxuNjYyMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NjIzOlxcdFxcbjY2MjQ6XFx0XFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgTVBMU19ITEVOKTtcXG42NjI1OlxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbjY2MjY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG42NjI3OlxcdFxcbjY2Mjg6XFx0XFx0aWYgKCFza2ItXFx1MDAzZWlubmVyX3Byb3RvY29sKSB7XFxuNjYyOTpcXHRcXHRcXHRza2Jfc2V0X2lubmVyX25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xcbjY2MzA6XFx0XFx0XFx0c2tiX3NldF9pbm5lcl9wcm90b2NvbChza2IsIHNrYi1cXHUwMDNlcHJvdG9jb2wpO1xcbjY2MzE6XFx0XFx0fVxcbjY2MzI6XFx0XFxuNjYzMzpcXHRcXHRza2JfcHVzaChza2IsIE1QTFNfSExFTik7XFxuNjYzNDpcXHRcXHRtZW1tb3ZlKHNrYl9tYWNfaGVhZGVyKHNrYikgLSBNUExTX0hMRU4sIHNrYl9tYWNfaGVhZGVyKHNrYiksXFxuNjYzNTpcXHRcXHRcXHRtYWNfbGVuKTtcXG42NjM2OlxcdFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuNjYzNzpcXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgbWFjX2xlbik7XFxuNjYzODpcXHRcXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xcbjY2Mzk6XFx0XFxuNjY0MDpcXHRcXHRsc2UgPSBtcGxzX2hkcihza2IpO1xcbjY2NDE6XFx0XFx0bHNlLVxcdTAwM2VsYWJlbF9zdGFja19lbnRyeSA9IG1wbHNfbHNlO1xcbjY2NDI6XFx0XFx0c2tiX3Bvc3RwdXNoX3Jjc3VtKHNrYiwgbHNlLCBNUExTX0hMRU4pO1xcbjY2NDM6XFx0XFxuNjY0NDpcXHRcXHRpZiAoZXRoZXJuZXQgXFx1MDAyNlxcdTAwMjYgbWFjX2xlbiBcXHUwMDNlPSBFVEhfSExFTilcXG42NjQ1OlxcdFxcdFxcdHNrYl9tb2RfZXRoX3R5cGUoc2tiLCBldGhfaGRyKHNrYiksIG1wbHNfcHJvdG8pO1xcbjY2NDY6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IG1wbHNfcHJvdG87XFxuNjY0NzpcXHRcXG42NjQ4OlxcdFxcdHJldHVybiAwO1xcbjY2NDk6XFx0fVxcbjY2NTA6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21wbHNfcHVzaCk7XFxuNjY1MTpcXHRcXG42NjUyOlxcdC8qKlxcbjY2NTM6XFx0ICogc2tiX21wbHNfcG9wKCkgLSBwb3AgdGhlIG91dGVybW9zdCBNUExTIGhlYWRlclxcbjY2NTQ6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MjI6MDUuNDE4ODYzNzc2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzMTk1MTUxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBMUyBIZWFkZXIgTWFuYWdlbWVudDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgTVBMUyBoYW5kbGluZyB3aXRoaW4gYHNrYl9tcGxzX3B1c2hgIGFuZCBgc2tiX21wbHNfcG9wYCwgZm9jdXNlcyBvbiBhIHBvdGVudGlhbCBzdGF0ZSBtYW5hZ2VtZW50IGlzc3VlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgYXMgYWx3YXlzLCB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggaXQuXG5cblRoZSBpc3N1ZSBsaWVzIGluIGhvdyB0aGUgYGlubmVyX3Byb3RvY29sYCB3aXRoaW4gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBzdHJ1Y3R1cmUgaXMgaGFuZGxlZC4gUHJldmlvdXNseSwgd2hlbiBwb3BwaW5nIHRoZSBsYXN0IE1QTFMgaGVhZGVyIGluIGBza2JfbXBsc19wb3BgLCB0aGUgYHNrYi1cdTAwM2Vpbm5lcl9wcm90b2NvbGAgd2Fzbid0IGJlaW5nIGNsZWFyZWQgaWYgdGhlIG5leHQgcHJvdG9jb2wgd2Fzbid0IE1QTFMuIFRoaXMgbWVhbnQgdGhhdCBpZiBhIHN1YnNlcXVlbnQgcHVzaCBvcGVyYXRpb24gb2NjdXJyZWQsIHRoZSBgaW5uZXJfcHJvdG9jb2xgIHdvdWxkIHJlbWFpbiBzdGFsZS4gVGhlIG5ldyBwYXRjaCBhZGRyZXNzZXMgdGhpcyBieSBhZGRpbmcgYSBzaW1wbGUgYHNrYi1cdTAwM2Vpbm5lcl9wcm90b2NvbCA9IDA7YCBjbGVhcmluZyB0aGUgcHJvdG9jb2wgc3RhdGUuXG5cbk15IGZvY3VzIG5vdyBpcyBhIHNhZmV0eSBldmFsdWF0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSBtZW1vcnkgc2FmZXR5IGlzc3Vlcz8gTGV0J3MgY2hlY2s6XG5cbjEuICAqKkV4cG9zZWQgVW5pbml0aWFsaXplZCBNZW1vcnk6KiogTm8uIFRoZSBwYXRjaCBleHBsaWNpdGx5ICpzZXRzKiB0aGUgdmFsdWUgdG8gemVyby4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgYW55IGludGVybmFsIGtlcm5lbCBjb250ZXh0IGFzIGEgcmVzdWx0IG9mIHRoZSBjaGFuZ2UuXG4yLiAgKipJbnRlcmFjdGlvbiB3aXRoIENvcHkgT3BlcmF0aW9uczoqKiBOby4gVGhlcmUgaXMgbm8gaW50ZXJhY3Rpb24gd2l0aCBvcGVyYXRpb25zIGxpa2UgYGNvcHlfdG9fdXNlcmAsIGBuZXRsaW5rYCwgYGlvY3RsYCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBhcmUgdG91Y2hlZCBieSB0aGlzIGNvZGUgcGF0aC5cbjMuICAqKkNvbmRpdGlvbmFsIEJyYW5jaGluZyBvbiBVbmluaXRpYWxpemVkIFZhcmlhYmxlczoqKiBOby4gYG5leHRfcHJvdG9gIGlzIHByb3ZpZGVkIGFzIGFuIGFyZ3VtZW50IGFuZCB0aHVzIGluaXRpYWxpemVkLlxuNC4gICoqUmVhZGluZyBVbmluaXRpYWxpemVkIE1lbW9yeToqKiBOby4gVGhlIGNvZGUgKmNsZWFycyogdGhlIHN0YWxlIGBpbm5lcl9wcm90b2NvbGAsIGVuc3VyaW5nIHN1YnNlcXVlbnQgcHVzaGVzIHdpbGwgY29ycmVjdGx5IGNhcHR1cmUgdGhlIGlubmVyIG5ldHdvcmsgaGVhZGVyIGFuZCBwcm90b2NvbC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgbW9yZSBzcGVjaWZpYyBLQVNBTi9LTVNBTiBpbXBsaWNhdGlvbnMuIFRoaXMgcGF0Y2ggKmZpeGVzKiBhIHByb3RvY29sIHN0YXRlIHRyYWNraW5nIGlzc3VlLCBub3QgYSBtZW1vcnkgYWxsb2NhdGlvbiBvciBhY2Nlc3MgcHJvYmxlbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGFjY2Vzc2VzLCBvciBsZWFrcyB0aGF0IG1pZ2h0IHRyaWdnZXIgS01TQU4ncyBjaGVja3MuIEl0J3MgcHVyZSBsb2dpYyBjb3JyZWN0aW9uLCBjbGVhcmluZyB0aGUgc3RhbGUgYGlubmVyX3Byb3RvY29sYC4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBmYWxzZSBpbiB0aGlzIGNhc2UuXG5cbk9rYXksIEknbSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzc3LCJPdXRwdXRUb2tlbnMiOjIwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjIyOjE0LjczODM4MjMxNloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl9tcGxzX3BvcCgpYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIHJlc2V0IGBza2ItXFx1MDAzZWlubmVyX3Byb3RvY29sYCB0byAwIHdoZW4gdGhlIHBvcHBlZCBNUExTIGhlYWRlciBpcyB0aGUgbGFzdCBvbmUgKGkuZS4gYCFldGhfcF9tcGxzKG5leHRfcHJvdG8pYCkuIFRoaXMgZW5zdXJlcyB0aGF0IHN1YnNlcXVlbnQgYHNrYl9tcGxzX3B1c2goKWAgY2FsbHMgZG8gbm90IHJldGFpbiBzdGFsZSBpbm5lciBwcm90b2NvbCBhbmQgaW5uZXIgbmV0d29yayBoZWFkZXIgb2Zmc2V0cy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBsZW5ndGhzIG9yIGJ1ZmZlciBib3VuZHMgaW4gYSB3YXkgdGhhdCBsZWFkcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgYnVmZmVyL29mZnNldCBpc3N1ZXMgYXJpc2luZyBmcm9tIHNrYiBoZWFkZXIgbWFuaXB1bGF0aW9uIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2tiX21wbHNfcG9wKClgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgdG8gcmVzZXQgYHNrYi1cXHUwMDNlaW5uZXJfcHJvdG9jb2xgIHRvIDAgd2hlbiB0aGUgcG9wcGVkIE1QTFMgaGVhZGVyIGlzIHRoZSBsYXN0IG9uZSAoaS5lLiBgIWV0aF9wX21wbHMobmV4dF9wcm90bylgKS4gVGhpcyBlbnN1cmVzIHRoYXQgc3Vic2VxdWVudCBgc2tiX21wbHNfcHVzaCgpYCBjYWxscyBkbyBub3QgcmV0YWluIHN0YWxlIGlubmVyIHByb3RvY29sIGFuZCBpbm5lciBuZXR3b3JrIGhlYWRlciBvZmZzZXRzLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBzdHJ1Y3QgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGxlbmd0aHMgb3IgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IGxlYWRzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gQW55IHBvdGVudGlhbCBidWZmZXIvb2Zmc2V0IGlzc3VlcyBhcmlzaW5nIGZyb20gc2tiIGhlYWRlciBtYW5pcHVsYXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowr4wfm[1] Phase: Succeeded StartedAt: 2026-09-03 01:22:26 +0000 UTC FinishedAt: 2026-09-03 01:22:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 01:22:26 +0000 UTC FinishedAt: 2026-09-03 01:22:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2] Phase: Succeeded StartedAt: 2026-09-03 01:22:26 +0000 UTC FinishedAt: 2026-09-03 05:02:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 01:22:26 +0000 UTC FinishedAt: 2026-09-03 05:02:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","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-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 01:22:26 +0000 UTC FinishedAt: 2026-09-03 01:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 01:22:26 +0000 UTC FinishedAt: 2026-09-03 01:22:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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-workflowr4wfm/series-workflowr4wfm-convert-artifact-3721721153/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 01:22:36 +0000 UTC FinishedAt: 2026-09-03 01:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 01:22:36 +0000 UTC FinishedAt: 2026-09-03 01:39:23 +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:*4269e52e-9db6-46ab-8a56-6cc86d3cf847,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-workflowr4wfm/series-workflowr4wfm-convert-artifact-3721721153/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": "77e1a25f-5a48-4c91-bbaa-c6d825c5f33f", "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-workflowr4wfm/series-workflowr4wfm-build-action-2548177775/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 01:22:36 +0000 UTC FinishedAt: 2026-09-03 01:39:13 +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:*4269e52e-9db6-46ab-8a56-6cc86d3cf847,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-workflowr4wfm/series-workflowr4wfm-convert-artifact-3721721153/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": "77e1a25f-5a48-4c91-bbaa-c6d825c5f33f", "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-workflowr4wfm/series-workflowr4wfm-build-action-2548177775/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 01:39:23 +0000 UTC FinishedAt: 2026-09-03 01:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 01:39:23 +0000 UTC FinishedAt: 2026-09-03 01:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 01:39:23 +0000 UTC FinishedAt: 2026-09-03 01:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 01:39:23 +0000 UTC FinishedAt: 2026-09-03 01:39:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","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-workflowr4wfm/series-workflowr4wfm-convert-artifact-4294541076/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 01:39:34 +0000 UTC FinishedAt: 2026-09-03 01:41:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 01:39:34 +0000 UTC FinishedAt: 2026-09-03 01:41:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*77e1a25f-5a48-4c91-bbaa-c6d825c5f33f,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-workflowr4wfm/series-workflowr4wfm-build-action-2548177775/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-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 01:41:30 +0000 UTC FinishedAt: 2026-09-03 01:41:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 01:41:30 +0000 UTC FinishedAt: 2026-09-03 01:41:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 01:41:30 +0000 UTC FinishedAt: 2026-09-03 01:58:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 01:41:30 +0000 UTC FinishedAt: 2026-09-03 01:58:01 +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:*4269e52e-9db6-46ab-8a56-6cc86d3cf847,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-workflowr4wfm/series-workflowr4wfm-convert-artifact-4294541076/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": "26d0e401-de0d-45c2-b782-12a80b567b1f", "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-workflowr4wfm/series-workflowr4wfm-build-action-1967253472/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 01:41:30 +0000 UTC FinishedAt: 2026-09-03 01:57:51 +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:*4269e52e-9db6-46ab-8a56-6cc86d3cf847,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-workflowr4wfm/series-workflowr4wfm-convert-artifact-4294541076/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": "26d0e401-de0d-45c2-b782-12a80b567b1f", "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-workflowr4wfm/series-workflowr4wfm-build-action-1967253472/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 01:58:01 +0000 UTC FinishedAt: 2026-09-03 01:58:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 01:58:01 +0000 UTC FinishedAt: 2026-09-03 01:58:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 01:58:01 +0000 UTC FinishedAt: 2026-09-03 01:59:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 01:58:01 +0000 UTC FinishedAt: 2026-09-03 01:59:44 +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:*26d0e401-de0d-45c2-b782-12a80b567b1f,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-workflowr4wfm/series-workflowr4wfm-build-action-1967253472/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-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 01:59:54 +0000 UTC FinishedAt: 2026-09-03 05:02:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 01:59:54 +0000 UTC FinishedAt: 2026-09-03 05:02:42 +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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"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:*77e1a25f-5a48-4c91-bbaa-c6d825c5f33f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*26d0e401-de0d-45c2-b782-12a80b567b1f,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-workflowr4wfm/series-workflowr4wfm-build-action-2548177775/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-workflowr4wfm/series-workflowr4wfm-build-action-1967253472/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 01:59:54 +0000 UTC FinishedAt: 2026-09-03 02:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 01:59:54 +0000 UTC FinishedAt: 2026-09-03 01:59:59 +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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"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-workflowr4wfm/series-workflowr4wfm-convert-artifact-2112598845/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 01:59:54 +0000 UTC FinishedAt: 2026-09-03 01:59:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 01:59:54 +0000 UTC FinishedAt: 2026-09-03 01:59:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 01:59:54 +0000 UTC FinishedAt: 2026-09-03 01:59:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 02:00:04 +0000 UTC FinishedAt: 2026-09-03 05:02:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4wfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"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":["skb_mpls_pop","skb_mpls_push","tcf_mpls_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_MPLS","NET_CLS_ACT","OPENVSWITCH"],"series_id":"d909db3a-23b5-49df-84a3-ea3f6e2cf9a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 02:00:04 +0000 UTC FinishedAt: 2026-09-03 05:02:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*77e1a25f-5a48-4c91-bbaa-c6d825c5f33f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*26d0e401-de0d-45c2-b782-12a80b567b1f,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-workflowr4wfm/series-workflowr4wfm-build-action-2548177775/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-workflowr4wfm/series-workflowr4wfm-build-action-1967253472/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-workflowr4wfm/series-workflowr4wfm-convert-artifact-2112598845/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,}