Name: series-workflow52j6l Phase: Succeeded StartedAt: 2026-08-18 09:39:32 +0000 UTC FinishedAt: 2026-08-18 13:37:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[0] Phase: Succeeded StartedAt: 2026-08-18 09:39:32 +0000 UTC FinishedAt: 2026-08-18 09:57:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 09:39:32 +0000 UTC FinishedAt: 2026-08-18 09:57:13 +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": "21040c7f931502070dcc66bb0f1aeed07dec032b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "21040c7f931502070dcc66bb0f1aeed07dec032b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "f69c1d1f-9805-4051-8bbb-0d65b8aeb908" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_verify_init", "sctp_process_init" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX3ZlcmlmeV9pbml0JiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19pbml0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCBjaGVjayBmb3IgdGhlIGBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTYCBwYXJhbWV0ZXIgaW4gU0NUUCBjaHVua3MgdG8gcHJldmVudCBhbiBpbnRlZ2VyIHVuZGVyZmxvdy4gV2l0aG91dCB0aGlzIGNoZWNrLCBpZiBgcGFyYW0ucC1cdTAwM2VsZW5ndGhgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHRoZSBjYWxjdWxhdGlvbiBgc2F0ID0gbnRvaHMocGFyYW0ucC1cdTAwM2VsZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAgdW5kZXJmbG93cywgcmVzdWx0aW5nIGluIGEgdmVyeSBsYXJnZSB1bnNpZ25lZCBpbnRlZ2VyLiBUaGlzIGNhdXNlcyB0aGUgc3Vic2VxdWVudCBsb29wIHRvIGl0ZXJhdGUgb3V0IG9mIGJvdW5kcywgcmVhZGluZyBmcm9tIGBwYXJhbS5zYXQtXHUwMDNldHlwZXNbaV1gLiBcblxuVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgb24gdGhlIHBhY2tldCBidWZmZXIgKHNrYikuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAoc2xhYi1vdXQtb2YtYm91bmRzIG9yIGdsb2JhbC1vdXQtb2YtYm91bmRzKS4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIEtBU0FOIHdpbGwgZWZmZWN0aXZlbHkgY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIHRoaXMgbWlzc2luZyBsZW5ndGggY2hlY2suJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVuZGVyZmxvdyBvciBkaXZpZGUtYnktemVybyBidWcgd2hlbiBwcm9jZXNzaW5nIHRoZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTIHBhcmFtZXRlciBpbiBTQ1RQIElOSVQgY2h1bmtzLiBJdCBhZGRzIGxlbmd0aCBjaGVja3MgaW4gc2N0cF92ZXJpZnlfcGFyYW0gYW5kIHNjdHBfcHJvY2Vzc19wYXJhbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldHdvcmsgcGFja2V0IHBhcnNpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiM2ZjZDM5YTYxNGVjYmY5Y2QyY2ZjYmFmZGUxYTE1N2RkMzVkNWRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDk6NTY6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jXG5pbmRleCAyMzZlMjVhYmM3YTQyLi5lYmY3OTE5Njk0NTRiIDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcbkBAIC0yMTY5LDEyICYjNDM7MjE2OSwxOSBAQCBzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3ZlcmlmeV9wYXJhbShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRjYXNlIFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTOlxuIFx0Y2FzZSBTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUzpcbiBcdGNhc2UgU0NUUF9QQVJBTV9DT09LSUVfUFJFU0VSVkFUSVZFOlxuLVx0Y2FzZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTOlxuIFx0Y2FzZSBTQ1RQX1BBUkFNX1NUQVRFX0NPT0tJRTpcbiBcdGNhc2UgU0NUUF9QQVJBTV9IRUFSVEJFQVRfSU5GTzpcbiBcdGNhc2UgU0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSUzpcbiBcdGNhc2UgU0NUUF9QQVJBTV9FQ05fQ0FQQUJMRTpcbiBcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUzpcbiYjNDM7XHRcdGlmIChudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHtcbiYjNDM7XHRcdFx0c2N0cF9wcm9jZXNzX2ludl9wYXJhbWxlbmd0aChhc29jLCBwYXJhbS5wLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGNodW5rLCBlcnJfY2h1bmspO1xuJiM0MztcdFx0XHRyZXR2YWwgPSBTQ1RQX0lFUlJPUl9BQk9SVDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EOlxuIFx0XHRpZiAobnRvaHMocGFyYW0ucC1cdTAwM2VsZW5ndGgpICE9IHNpemVvZigqcGFyYW0uYWluZCkpIHtcbiBcdFx0XHRzY3RwX3Byb2Nlc3NfaW52X3BhcmFtbGVuZ3RoKGFzb2MsIHBhcmFtLnAsXG5AQCAtMjYwMCw2ICYjNDM7MjYwNyw5IEBAIHN0YXRpYyBpbnQgc2N0cF9wcm9jZXNzX3BhcmFtKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuIFx0XHRcdGFzb2MtXHUwMDNlcGVlci5pcHY0X2FkZHJlc3MgPSAxO1xuIFxuIFx0XHQvKiBDeWNsZSB0aHJvdWdoIGFkZHJlc3MgdHlwZXM7IGF2b2lkIGRpdmlkZSBieSAwLiAqL1xuJiM0MztcdFx0aWYgKG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRzYXQgPSBudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpO1xuIFx0XHRpZiAoc2F0KVxuIFx0XHRcdHNhdCAvPSBzaXplb2YoX191MTYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF92ZXJpZnlfaW5pdCYjMzQ7LAogICAgJiMzNDtzY3RwX3Byb2Nlc3NfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1bmRlcmZsb3cgb3IgZGl2aWRlLWJ5LXplcm8gYnVnIHdoZW4gcHJvY2Vzc2luZyB0aGUgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUyBwYXJhbWV0ZXIgaW4gU0NUUCBJTklUIGNodW5rcy4gSXQgYWRkcyBsZW5ndGggY2hlY2tzIGluIHNjdHBfdmVyaWZ5X3BhcmFtIGFuZCBzY3RwX3Byb2Nlc3NfcGFyYW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBuZXR3b3JrIHBhY2tldCBwYXJzaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjNmY2QzOWE2MTRlY2JmOWNkMmNmY2JhZmRlMWExNTdkZDM1ZDVkYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDA5OjU2OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCmluZGV4IDIzNmUyNWFiYzdhNDIuLmViZjc5MTk2OTQ1NGIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKQEAgLTIxNjksMTIgJiM0MzsyMTY5LDE5IEBAIHN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCwKIAljYXNlIFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTOgogCWNhc2UgU0NUUF9QQVJBTV9JUFY2X0FERFJFU1M6CiAJY2FzZSBTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkU6Ci0JY2FzZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTOgogCWNhc2UgU0NUUF9QQVJBTV9TVEFURV9DT09LSUU6CiAJY2FzZSBTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPOgogCWNhc2UgU0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSUzoKIAljYXNlIFNDVFBfUEFSQU1fRUNOX0NBUEFCTEU6CiAJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVM6CiYjNDM7CQlpZiAobnRvaHMocGFyYW0ucC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHsKJiM0MzsJCQlzY3RwX3Byb2Nlc3NfaW52X3BhcmFtbGVuZ3RoKGFzb2MsIHBhcmFtLnAsCiYjNDM7CQkJCQkJICAgICBjaHVuaywgZXJyX2NodW5rKTsKJiM0MzsJCQlyZXR2YWwgPSBTQ1RQX0lFUlJPUl9BQk9SVDsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwogCWNhc2UgU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDoKIAkJaWYgKG50b2hzKHBhcmFtLnAtJmd0O2xlbmd0aCkgIT0gc2l6ZW9mKCpwYXJhbS5haW5kKSkgewogCQkJc2N0cF9wcm9jZXNzX2ludl9wYXJhbWxlbmd0aChhc29jLCBwYXJhbS5wLApAQCAtMjYwMCw2ICYjNDM7MjYwNyw5IEBAIHN0YXRpYyBpbnQgc2N0cF9wcm9jZXNzX3BhcmFtKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJYXNvYy0mZ3Q7cGVlci5pcHY0X2FkZHJlc3MgPSAxOwogCiAJCS8qIEN5Y2xlIHRocm91Z2ggYWRkcmVzcyB0eXBlczsgYXZvaWQgZGl2aWRlIGJ5IDAuICovCiYjNDM7CQlpZiAobnRvaHMocGFyYW0ucC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCXNhdCA9IG50b2hzKHBhcmFtLnAtJmd0O2xlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOwogCQlpZiAoc2F0KQogCQkJc2F0IC89IHNpemVvZihfX3UxNik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0NUUCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIG1vZGlmeWluZyBgbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jYC4gTG9va3MgbGlrZSB0aGV5JiMzOTtyZSBhZGRpbmcgYSB2aXRhbCBjaGVjayBmb3IgdGhlIGxlbmd0aCBvZiB0aGUgYFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVNgIHBhcmFtZXRlciBpbiBib3RoIGBzY3RwX3ZlcmlmeV9wYXJhbWAgYW5kIGBzY3RwX3Byb2Nlc3NfcGFyYW1gLiBUaGlzIGlzIGdvb2Q7IHRoZSBjb2RlJiMzOTtzIGdldHRpbmcgbW9yZSByb2J1c3QuIFNwZWNpZmljYWxseSwgdGhlIGFkZGVkIGNoZWNrcyBhZGRyZXNzIHBvdGVudGlhbCBpc3N1ZXMgbGlrZSB1bmRlcmZsb3cgb3IgYSBkaXZpZGUtYnktemVybyBpZiBhbiBpbnZhbGlkIHBhcmFtZXRlciBsZW5ndGggaXMgcHJvdmlkZWQuIEluIGBzY3RwX3ZlcmlmeV9wYXJhbWAsIHRoZXkmIzM5O3JlIGhhbmRsaW5nIGNhc2VzIHdoZXJlIHRoZSBsZW5ndGggaXMgdG9vIHNob3J0IGFuZCByZXR1cm5pbmcgYW4gZXJyb3IsIGFuZCBpbiBgc2N0cF9wcm9jZXNzX3BhcmFtYCwgdGhleSYjMzk7cmUgYmFpbGluZyBvdXQgZWFybHkgdG8gcHJldmVudCB0aGF0IGRpdmlkZS1ieS16ZXJvIGZyb20gaGFwcGVuaW5nLiBTb2xpZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIHByZWNpc2VseSB3aGF0IHdlIHdhbnQgdG8gc2VlLgoKR2l2ZW4gdGhpcyB0eXBlIG9mIGNoYW5nZSwgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0LiBTZW5kaW5nIG1hbGZvcm1lZCBwYWNrZXRzIHdpdGggdGhpcyBwYXJhbWV0ZXIgd2lsbCBub3cgZ2l2ZSB1cyBuZXcgY29kZSBwYXRocyB0byBsb29rIGF0LiBXZSBuZWVkIHRvIGV4cGxvcmUgdGhlc2UgbmV3IGNoZWNrcyBhbmQgc2VlIGhvdyB3ZWxsIHRoZXkmIzM5O3JlIGhhbmRsaW5nIGVkZ2UgY2FzZXMuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGdldCBhdCB0aGlzIHVzaW5nIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgSVBfU0NUUGAgaXMgbGlrZWx5IHRoZSBtYWluIG9uZSB3ZSYjMzk7cmUgbG9va2luZyBmb3IsIGJ1dCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBnbyBjaGVjayBgbmV0L3NjdHAvS2NvbmZpZ2AuIEkmIzM5O2QgbXVjaCByYXRoZXIgdmVyaWZ5IHdoYXQgY2FuIGJlIHR1cm5lZCBvbiBvciBvZmYgd2hlbiBJIHN0YXJ0IHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NDVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL0tjb25maWctNS1cbm5ldC9zY3RwL0tjb25maWc6NjptZW51Y29uZmlnIElQX1NDVFBcbm5ldC9zY3RwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBTQ1RQIFByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0NUUCBQYXJhbWV0ZXIgVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYElQX1NDVFBgIGNvbmZpZ3VyYXRpb24gaGVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYHNjdHBfdmVyaWZ5X3BhcmFtYCBhbmQgYHNjdHBfcHJvY2Vzc19wYXJhbWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBoYW5kbGUgU0NUUCBwYXJhbWV0ZXJzLiBUaGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIGtub3cgaXMgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpY2FsbHkgZGVmaW5lZCBvciBpZiB0aGV5IGFyZSBwb3RlbnRpYWxseSB2YXJpYWJsZS4gTGV0JiMzOTtzIHNlZS4uLiBgc2N0cF92ZXJpZnlfcGFyYW1gIGlzIHN0YXRpYy4gQWxyaWdodCwgYW5kIGBzY3RwX3Byb2Nlc3NfcGFyYW1gIGlzIGFsc28gc3RhdGljLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSAqdXNlZCosIEkgc2hvdWxkIGNoZWNrIHRoZSBjYWxsaW5nIGNvbnRleHRzLiBUaW1lIHRvIGRpdmUgaW50byBgbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jYC4gVGhhdCBmaWxlIHNob3VsZCBnaXZlIG1lIGluc2lnaHQgaW50byBob3cgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCB3aXRoaW4gdGhlIFNDVFAgc3RhdGUgbWFjaGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX3ZlcmlmeV9wYXJhbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MjA5Nz1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3Byb2Nlc3NfdW5rX3BhcmFtKFxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMTQ5LSAqL1xubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjIxNTA6c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF92ZXJpZnlfcGFyYW0oc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIxNTEtXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz0yMjkxPWludCBzY3RwX3ZlcmlmeV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMzM0LVx0c2N0cF93YWxrX3BhcmFtcyhwYXJhbSwgcGVlcl9pbml0KSB7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjMzNTpcdFx0cmVzdWx0ID0gc2N0cF92ZXJpZnlfcGFyYW0obmV0LCBlcCwgYXNvYywgcGFyYW0sIGNpZCxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMzM2LVx0XHRcdFx0XHQgICBjaHVuaywgZXJycCk7XG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTI1NDI9c3RhdGljIGludCBzY3RwX3Byb2Nlc3NfcGFyYW0oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI3NDYtXHRcdC8qIEFueSB1bnJlY29nbml6ZWQgcGFyYW1ldGVycyBzaG91bGQgaGF2ZSBiZWVuIGNhdWdodFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjI3NDc6XHRcdCAqIGFuZCBoYW5kbGVkIGJ5IHNjdHBfdmVyaWZ5X3BhcmFtKCkgd2hpY2ggc2hvdWxkIGJlXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjc0OC1cdFx0ICogY2FsbGVkIHByaW9yIHRvIHRoaXMgcm91dGluZS4gIFNpbXBseSBsb2cgdGhlIGVycm9yXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwNAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyB0aG91Z2ggaXQgd2VyZSBteSB0cmFpbiBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byBTQ1RQIFBhcmFtZXRlciBWZXJpZmljYXRpb24qKgoKT2theSwgc28gYHNjdHBfdmVyaWZ5X2luaXRgIGlzIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aC4gVGhhdCYjMzk7cyBhIGdvb2QgZW50cnkgcG9pbnQuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBzY3RwX3ZlcmlmeV9pbml0YCBpcyBjYWxsaW5nIGBzY3RwX3ZlcmlmeV9wYXJhbWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgdG8gZW5zdXJlIGFueSBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzIGFyZSB2YWxpZC4gTm93LCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGFuZCBsaWtlbHkgd2hlcmUgYW55IHBvdGVudGlhbCBpc3N1ZXMgbWlnaHQgYmUgc3RlbW1pbmcgZnJvbSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgcGFyYW1ldGVyIHByb2Nlc3NpbmcgYWN0dWFsbHkgKmhhcHBlbnMqLiBMZXQmIzM5O3MgZ28gYWhlYWQgYW5kIGRpZyBpbnRvIGBzY3RwX3Byb2Nlc3NfcGFyYW1gLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBVbmRlcnN0YW5kaW5nIHRoZSBwcm9jZXNzaW5nIHN0ZXBzIG9mIGBzY3RwX3Byb2Nlc3NfcGFyYW1gIGlzIHZpdGFsIHRvIHNlZSBleGFjdGx5IGhvdyB0aGVzZSBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjdHBfcHJvY2Vzc19wYXJhbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9NTc9c3RhdGljIHN0cnVjdCBzY3RwX2Nvb2tpZV9wYXJhbSAqc2N0cF9wYWNrX2Nvb2tpZShcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtNjItXHRcdFx0XHRcdGNvbnN0IF9fdTggKnJhd19hZGRycywgaW50IGFkZHJzX2xlbik7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6NjM6c3RhdGljIGludCBzY3RwX3Byb2Nlc3NfcGFyYW0oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtNjQtXHRcdFx0ICAgICAgdW5pb24gc2N0cF9wYXJhbXMgcGFyYW0sXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTIzNTc9aW50IHNjdHBfcHJvY2Vzc19pbml0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIzOTctXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjM5ODpcdFx0aWYgKCFzY3RwX3Byb2Nlc3NfcGFyYW0oYXNvYywgcGFyYW0sIHBlZXJfYWRkciwgZ2ZwKSlcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMzk5LVx0XHRcdGdvdG8gY2xlYW5fdXA7XG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI1NDEtICovXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjU0MjpzdGF0aWMgaW50IHNjdHBfcHJvY2Vzc19wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yNTQzLVx0XHRcdCAgICAgIHVuaW9uIHNjdHBfcGFyYW1zIHBhcmFtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHNjdHBfdmVyaWZ5X2luaXRgIGFuZCBgc2N0cF9wcm9jZXNzX2luaXRgKioKCk9rYXksIHNvIEkgc2VlIGBzY3RwX3ZlcmlmeV9pbml0YCBhbmQgYHNjdHBfcHJvY2Vzc19pbml0YC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuIEJ1dCBJIG5lZWQgdG8ga25vdyB0aGUgc2NvcGUuIEFyZSB0aGV5IGV4dGVybmFsbHkgdmlzaWJsZSwgb3IgYXJlIHRoZXkgaW50ZXJuYWwgdG8gdGhpcyBtb2R1bGU/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGV5JiMzOTtyZSBleHBvcnRlZCBvciBpZiB0aGV5JiMzOTtyZSBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCBkaXN0aW5jdGlvbiBpcyBjcnVjaWFsLiBJdCB0ZWxscyBtZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIGFuZCwgdGhlcmVmb3JlLCBob3cgdGhleSBtaWdodCBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhpcyBTQ1RQIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZWlyIHNjb3BlIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZHMgdW5kZXJzdGFuZGluZyB0aGVpciByb2xlcyBhbmQgaW1wYWN0LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaW5kIHRob3NlIGRlY2xhcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF92ZXJpZnlfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MjE1MD1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3ZlcmlmeV9wYXJhbShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIyOTAtLyogVmVyaWZ5IHRoZSBJTklUIHBhY2tldCBiZWZvcmUgd2UgcHJvY2VzcyBpdC4gICovXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjI5MTppbnQgc2N0cF92ZXJpZnlfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMjkyLVx0XHQgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBlbnVtIHNjdHBfY2lkIGNpZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBgc2N0cF92ZXJpZnlfaW5pdGAgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzY3RwX3ZlcmlmeV9pbml0YCBmdW5jdGlvbi4gUmlnaHQsIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgIG9yIG5vdC4gTGV0IG1lIGp1c3QgY29uZmlybS4uLiBZdXAsIGRlZmluaXRlbHkgbm90IHN0YXRpYy4gU28gaXQmIzM5O3MgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgaXRzIGRlZmluaW5nIGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQgbWVhbnMgaXQgbGlrZWx5IHBsYXlzIGEgY3JpdGljYWwgcm9sZSBpbiBtb2R1bGUgbGlua2luZyBvciBjcm9zcy1vYmplY3QgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgU0NUUCBjb2RlYmFzZS4gSW50ZXJlc3RpbmcgaW1wbGljYXRpb25zIGFyaXNlIGZyb20gdGhpcyBub24tc3RhdGljIG5hdHVyZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHdoZW4gZGVidWdnaW5nLCBhbmQgYWxzbyB3aGVuIGxvb2tpbmcgZm9yIG90aGVyIGNhbGxpbmcgZnVuY3Rpb25zIHRvIGtub3cgd2h5IHRoaXMgaXMgcmVxdWlyZWQsIGFuZCB3aGF0IGNvbnRleHQgaXMgbmVlZGVkLiBPa2F5LCB1bmRlcnN0b29kLCBtb3Zpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjdHBfcHJvY2Vzc19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fbWFrZV9jaHVuay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz0yMjkxPWludCBzY3RwX3ZlcmlmeV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMzU2LSAqL1xubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjIzNTc6aW50IHNjdHBfcHJvY2Vzc19pbml0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjM1OC1cdFx0ICAgICAgY29uc3QgdW5pb24gc2N0cF9hZGRyICpwZWVyX2FkZHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNTgKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNDVFAgSU5JVCBDaHVuayBQYXRjaCoqCgpPa2F5LCBzbyBgc2N0cF9wcm9jZXNzX2luaXRgIGlzbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gTXkga2V5IGZvY3VzIHBvaW50cyBmb3IgdGhpcyBwYXRjaCBhcmUgdGhlcmVmb3JlIGBzY3RwX3ZlcmlmeV9pbml0YCBhbmQgYHNjdHBfcHJvY2Vzc19pbml0YC4gVGhlIGNvbmZpZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGlzIGBJUF9TQ1RQYC4KClRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHk6IGFuIHVuZGVyZmxvdyBvciBkaXZpZGUtYnktemVybyB0aGF0IGNvdWxkIG9jY3VyIGR1cmluZyB0aGUgcGFyc2luZyBvZiB0aGUgYFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVNgIHBhcmFtZXRlciB3aXRoaW4gU0NUUCBJTklUIGNodW5rcy4gSXQgZG9lcyB0aGlzIGJ5IGluY29ycG9yYXRpbmcgbGVuZ3RoIGNoZWNrcyB3aXRoaW4gYHNjdHBfdmVyaWZ5X3BhcmFtYCBhbmQgYHNjdHBfcHJvY2Vzc19wYXJhbWAuIFRoaXMgbW9kaWZpY2F0aW9uIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbmV0d29yayBwYWNrZXQgcGFyc2luZyBsb2dpYywgd2hpY2ggbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIEkmIzM5O3ZlIG1pc3NlZC4gSXQgc2VlbXMgYElQX1NDVFBgIGlzIHRoZSBjb3JlIG9uZSwgdGhvdWdoLgoKVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfdmVyaWZ5X2luaXQmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdW5kZXJmbG93IG9yIGRpdmlkZS1ieS16ZXJvIGJ1ZyB3aGVuIHByb2Nlc3NpbmcgdGhlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVMgcGFyYW1ldGVyIGluIFNDVFAgSU5JVCBjaHVua3MuIEl0IGFkZHMgbGVuZ3RoIGNoZWNrcyBpbiBzY3RwX3ZlcmlmeV9wYXJhbSBhbmQgc2N0cF9wcm9jZXNzX3BhcmFtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbmV0d29yayBwYWNrZXQgcGFyc2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfdmVyaWZ5X2luaXQmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdW5kZXJmbG93IG9yIGRpdmlkZS1ieS16ZXJvIGJ1ZyB3aGVuIHByb2Nlc3NpbmcgdGhlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVMgcGFyYW1ldGVyIGluIFNDVFAgSU5JVCBjaHVua3MuIEl0IGFkZHMgbGVuZ3RoIGNoZWNrcyBpbiBzY3RwX3ZlcmlmeV9wYXJhbSBhbmQgc2N0cF9wcm9jZXNzX3BhcmFtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbmV0d29yayBwYWNrZXQgcGFyc2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGZvciB0aGUgYFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVNgIHBhcmFtZXRlciBpbiBTQ1RQIGNodW5rcyB0byBwcmV2ZW50IGFuIGludGVnZXIgdW5kZXJmbG93LiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBwYXJhbS5wLVx1MDAzZWxlbmd0aGAgaXMgbGVzcyB0aGFuIGBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCwgdGhlIGNhbGN1bGF0aW9uIGBzYXQgPSBudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCB1bmRlcmZsb3dzLCByZXN1bHRpbmcgaW4gYSB2ZXJ5IGxhcmdlIHVuc2lnbmVkIGludGVnZXIuIFRoaXMgY2F1c2VzIHRoZSBzdWJzZXF1ZW50IGxvb3AgdG8gaXRlcmF0ZSBvdXQgb2YgYm91bmRzLCByZWFkaW5nIGZyb20gYHBhcmFtLnNhdC1cdTAwM2V0eXBlc1tpXWAuIFxuXG5UaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBvbiB0aGUgcGFja2V0IGJ1ZmZlciAoc2tiKS4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChzbGFiLW91dC1vZi1ib3VuZHMgb3IgZ2xvYmFsLW91dC1vZi1ib3VuZHMpLiBUaGVyZSBpcyBubyBhbGxvY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIGludm9sdmVkIGluIHRoaXMgYnVnLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgS0FTQU4gd2lsbCBlZmZlY3RpdmVseSBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmVzdWx0aW5nIGZyb20gdGhpcyBtaXNzaW5nIGxlbmd0aCBjaGVjay4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjNmY2QzOWE2MTRlY2JmOWNkMmNmY2JhZmRlMWExNTdkZDM1ZDVkYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDA5OjU2OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCmluZGV4IDIzNmUyNWFiYzdhNDIuLmViZjc5MTk2OTQ1NGIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKQEAgLTIxNjksMTIgJiM0MzsyMTY5LDE5IEBAIHN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCwKIAljYXNlIFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTOgogCWNhc2UgU0NUUF9QQVJBTV9JUFY2X0FERFJFU1M6CiAJY2FzZSBTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkU6Ci0JY2FzZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTOgogCWNhc2UgU0NUUF9QQVJBTV9TVEFURV9DT09LSUU6CiAJY2FzZSBTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPOgogCWNhc2UgU0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSUzoKIAljYXNlIFNDVFBfUEFSQU1fRUNOX0NBUEFCTEU6CiAJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVM6CiYjNDM7CQlpZiAobnRvaHMocGFyYW0ucC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHsKJiM0MzsJCQlzY3RwX3Byb2Nlc3NfaW52X3BhcmFtbGVuZ3RoKGFzb2MsIHBhcmFtLnAsCiYjNDM7CQkJCQkJICAgICBjaHVuaywgZXJyX2NodW5rKTsKJiM0MzsJCQlyZXR2YWwgPSBTQ1RQX0lFUlJPUl9BQk9SVDsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwogCWNhc2UgU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDoKIAkJaWYgKG50b2hzKHBhcmFtLnAtJmd0O2xlbmd0aCkgIT0gc2l6ZW9mKCpwYXJhbS5haW5kKSkgewogCQkJc2N0cF9wcm9jZXNzX2ludl9wYXJhbWxlbmd0aChhc29jLCBwYXJhbS5wLApAQCAtMjYwMCw2ICYjNDM7MjYwNyw5IEBAIHN0YXRpYyBpbnQgc2N0cF9wcm9jZXNzX3BhcmFtKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJYXNvYy0mZ3Q7cGVlci5pcHY0X2FkZHJlc3MgPSAxOwogCiAJCS8qIEN5Y2xlIHRocm91Z2ggYWRkcmVzcyB0eXBlczsgYXZvaWQgZGl2aWRlIGJ5IDAuICovCiYjNDM7CQlpZiAobnRvaHMocGFyYW0ucC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCXNhdCA9IG50b2hzKHBhcmFtLnAtJmd0O2xlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOwogCQlpZiAoc2F0KQogCQkJc2F0IC89IHNpemVvZihfX3UxNik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQ1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBJbnRlZ2VyIFVuZGVyZmxvdyBpbiBTQ1RQIFBhcmFtZXRlciBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jYC4gSXQmIzM5O3MgZm9jdXNlZCBvbiB0aGUgYFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVNgIHBhcmFtZXRlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGxlbmd0aCBjaGVjay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Z29vZCBjYXRjaCwgYWx3YXlzIGltcG9ydGFudCB0byB2YWxpZGF0ZSBpbnB1dC4mIzM0OwoKRGlnZ2luZyBpbiwgSSBzZWUgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGluIGBzY3RwX3ZlcmlmeV9wYXJhbWAgYW5kIGBzY3RwX3Byb2Nlc3NfcGFyYW1gLiBJbiBgc2N0cF92ZXJpZnlfcGFyYW1gLCBhIHN0cmFpZ2h0Zm9yd2FyZCBsZW5ndGggY2hlY2sgaXMgYWRkZWQ6IGlmIHRoZSBwYXJhbWV0ZXIgbGVuZ3RoIGlzIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIGhlYWRlciwgaXQmIzM5O3MgZmxhZ2dlZCBhcyBpbnZhbGlkLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGJhc2ljIHNhbml0eSBjaGVjayB0byBwcmV2ZW50IHByb2Nlc3NpbmcgY29ycnVwdGVkIGRhdGEuCgpUaGUgcmVhbCBtZWF0IG9mIHRoZSBpc3N1ZSBzZWVtcyB0byBiZSB3aXRoaW4gYHNjdHBfcHJvY2Vzc19wYXJhbWAuIEhlcmUsIHRoZXJlJiMzOTtzIHRoaXMgY2FsY3VsYXRpb246IGBzYXQgPSBudG9ocyhwYXJhbS5wLSZndDtsZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTtgIGFuZCB0aGVuIGBzYXQgLz0gc2l6ZW9mKF9fdTE2KTtgLiBNeSBzcGlkZXIgc2Vuc2VzIGFyZSB0aW5nbGluZy4gSWYgYG50b2hzKHBhcmFtLnAtJmd0O2xlbmd0aClgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHdlJiMzOTtyZSBwb3RlbnRpYWxseSBsb29raW5nIGF0IGFuIGludGVnZXIgdW5kZXJmbG93LiBgc2F0YCBpcyBwcm9iYWJseSBhbiB1bnNpZ25lZCBpbnRlZ2VyLiBUaGF0IHVuZGVyZmxvdyB3b3VsZCByZXN1bHQgaW4gYSBodWdlIHZhbHVlIGZvciBgc2F0YC4gQW5kIHRoZW4gZGl2aWRpbmcgdGhhdCBieSBgc2l6ZW9mKF9fdTE2KWAuLi4gdGhhdCYjMzk7cyBhIHJlY2lwZSBmb3IgYSBtYXNzaXZlIGxvb3Agb3IsIHdvcnNlLCBzb21ldGhpbmcgdW5leHBlY3RlZC4gV2UmIzM5O2QgaGF2ZSBhIHBvdGVudGlhbGx5IHVuYm91bmRlZCBsb29wIG9yIGNhbGN1bGF0aW9uIGJhc2VkIG9uIHRoZSB1bmRlcmZsb3dlZCBudW1iZXIuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyBjb3JyZWN0LCBhbmQgZmluZCBgc2N0cF9wcm9jZXNzX3BhcmFtYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9wcm9jZXNzX3BhcmFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fbWFrZV9jaHVuay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz01Nz1zdGF0aWMgc3RydWN0IHNjdHBfY29va2llX3BhcmFtICpzY3RwX3BhY2tfY29va2llKFxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy02Mi1cdFx0XHRcdFx0Y29uc3QgX191OCAqcmF3X2FkZHJzLCBpbnQgYWRkcnNfbGVuKTtcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzo2MzpzdGF0aWMgaW50IHNjdHBfcHJvY2Vzc19wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy02NC1cdFx0XHQgICAgICB1bmlvbiBzY3RwX3BhcmFtcyBwYXJhbSxcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MjM1Nz1pbnQgc2N0cF9wcm9jZXNzX2luaXQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjM5Ny1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMzk4Olx0XHRpZiAoIXNjdHBfcHJvY2Vzc19wYXJhbShhc29jLCBwYXJhbSwgcGVlcl9hZGRyLCBnZnApKVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIzOTktXHRcdFx0Z290byBjbGVhbl91cDtcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjU0MS0gKi9cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyNTQyOnN0YXRpYyBpbnQgc2N0cF9wcm9jZXNzX3BhcmFtKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI1NDMtXHRcdFx0ICAgICAgdW5pb24gc2N0cF9wYXJhbXMgcGFyYW0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIGBzY3RwX3Byb2Nlc3NfcGFyYW1gIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU0NUUCBwcm90b2NvbCBoYW5kbGVzIHBhcmFtZXRlcnMuIExpbmUgMjYwMCBpbiB0aGUgY29kZSBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIHByb2Nlc3Npbmcgb2YgcGFyYW1ldGVycywgc28gSSYjMzk7bGwgemVybyBpbiB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byBtYWtlIHN1cmUgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRhdGEgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hhdCBzcGVjaWZpYyBwYXJhbWV0ZXIgdHlwZXMgYXJlIGhhbmRsZWQgYW5kIGhvdy4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLWNvbW1lbnRlZCwgYW5kIEkgY2FuIHF1aWNrbHkgZ3Jhc3AgdGhlIGxvZ2ljLCBhbmQgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmFyZ3VtZW50ICYjMzQ7Rmlyc3RMaW5lJiMzNDsgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6ICYjMzQ7MjU4MCYjMzQ7LAogICYjMzQ7TGluZUNvdW50JiMzNDs6ICYjMzQ7NTAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDthcmd1bWVudCBcJiMzNDtGaXJzdExpbmVcJiMzNDsgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzYwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRGVidWdnaW5nIHRoZSBWYXJpYWJsZSAmIzM0O0ZpcnN0TGluZSYjMzQ7KioKCkhtbSwgcmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLi4uIHdhaXQgYSBtaW51dGUuICYjMzQ7Rmlyc3RMaW5lJiMzNDsgaXMgc3VwcG9zZWQgdG8gYmUsIHlvdSBrbm93LCBhIGxpbmUgbnVtYmVyISBBIGxpbmUgbnVtYmVyIGluIGEgdGV4dCBmaWxlLiBBbmQgYmFzZWQgb24gaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQsIGl0IG5lZWRzIHRvIGJlIGFuIGludGVnZXIuIEl0IGhhcyB0byBiZSwgb3RoZXJ3aXNlLCB0aGUgZG93bnN0cmVhbSBvcGVyYXRpb25zIGFyZSBnb2luZyB0byBjb21wbGV0ZWx5IGZhbGwgYXBhcnQuIFRoZSB3aG9sZSBsb2dpYyBoaW5nZXMgb24gdHJlYXRpbmcgdGhhdCB2YXJpYWJsZSBhcyBhIHdob2xlIG51bWJlciDigJMgc29tZXRoaW5nIEkgY2FuIHVzZSBmb3IgaW5kZXhpbmcsIGNhbGN1bGF0aW9ucy4uLiBldmVyeXRoaW5nLiBCdXQgdGhlIGVycm9yIG1lc3NhZ2UsIGNsZWFybHksIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgdHlwZSBkZWNsYXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSB0eXBlIG9mICYjMzQ7Rmlyc3RMaW5lJiMzNDsgaXMgZGVmaW5lZCBjb3JyZWN0bHksIG9yIGlzIGJlaW5nIGNvbnZlcnRlZCBjb3JyZWN0bHksIHRvIGFuIGludGVnZXIuIFRoaXMgaXMgYSBjbGFzc2ljIHR5cGUtbWlzbWF0Y2ggcHJvYmxlbSwgSSYjMzk7dmUgc2VlbiBpdCBhIHRob3VzYW5kIHRpbWVzLiBJJiMzOTtkIGJldHRlciBnbyBhbmQgcXVpY2tseSB0cmFjayBkb3duIHRoZSBkZWNsYXJhdGlvbiBvZiAmIzM0O0ZpcnN0TGluZSYjMzQ7IGFuZCBhbnkgcG9pbnRzIHdoZXJlIGl04oCZcyBiZWluZyBhc3NpZ25lZCBhIHZhbHVlLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3MgKmRlZmluaXRlbHkqIGFuIGludGVnZXIsIG9yIHRoYXQgaXQmIzM5O3MgYmVpbmcgZXhwbGljaXRseSBjYXN0IGFzIG9uZSBpZiBpdCYjMzk7cyBjb21pbmcgZnJvbSBzb21lIG90aGVyIHNvdXJjZS4gVGhpcyBzaG91bGQgYmUgYSBxdWljayBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fbWFrZV9jaHVuay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTgwOlx0XHRcdGJyZWFrO1xuMjU4MTpcdFxuMjU4MjpcdFx0Y2FzZSBTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkU6XG4yNTgzOlx0XHRcdGlmICghbmV0LVx1MDAzZXNjdHAuY29va2llX3ByZXNlcnZlX2VuYWJsZSlcbjI1ODQ6XHRcdFx0XHRicmVhaztcbjI1ODU6XHRcbjI1ODY6XHRcdFx0c3RhbGUgPSBudG9obChwYXJhbS5saWZlLVx1MDAzZWxpZmVzcGFuX2luY3JlbWVudCk7XG4yNTg3Olx0XG4yNTg4Olx0XHRcdC8qIFN1Z2dlc3RlZCBDb29raWUgTGlmZSBzcGFuIGluY3JlbWVudCYjMzk7cyB1bml0IGlzIG1zZWMsXG4yNTg5Olx0XHRcdCAqICgxLzEwMDBzZWMpLlxuMjU5MDpcdFx0XHQgKi9cbjI1OTE6XHRcdFx0YXNvYy1cdTAwM2Vjb29raWVfbGlmZSA9IGt0aW1lX2FkZF9tcyhhc29jLVx1MDAzZWNvb2tpZV9saWZlLCBzdGFsZSk7XG4yNTkyOlx0XHRcdGJyZWFrO1xuMjU5MzpcdFxuMjU5NDpcdFx0Y2FzZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTOlxuMjU5NTpcdFx0XHQvKiBUdXJuIG9mZiB0aGUgZGVmYXVsdCB2YWx1ZXMgZmlyc3Qgc28gd2UmIzM5O2xsIGtub3cgd2hpY2hcbjI1OTY6XHRcdFx0ICogb25lcyBhcmUgcmVhbGx5IHNldCBieSB0aGUgcGVlci5cbjI1OTc6XHRcdFx0ICovXG4yNTk4Olx0XHRcdGFzb2MtXHUwMDNlcGVlci5pcHY0X2FkZHJlc3MgPSAwO1xuMjU5OTpcdFx0XHRhc29jLVx1MDAzZXBlZXIuaXB2Nl9hZGRyZXNzID0gMDtcbjI2MDA6XHRcbjI2MDE6XHRcdFx0LyogQXNzdW1lIHRoYXQgcGVlciBzdXBwb3J0cyB0aGUgYWRkcmVzcyBmYW1pbHlcbjI2MDI6XHRcdFx0ICogYnkgd2hpY2ggaXQgc2VuZHMgYSBwYWNrZXQuXG4yNjAzOlx0XHRcdCAqL1xuMjYwNDpcdFx0XHRpZiAocGVlcl9hZGRyLVx1MDAzZXNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNilcbjI2MDU6XHRcdFx0XHRhc29jLVx1MDAzZXBlZXIuaXB2Nl9hZGRyZXNzID0gMTtcbjI2MDY6XHRcdFx0ZWxzZSBpZiAocGVlcl9hZGRyLVx1MDAzZXNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKVxuMjYwNzpcdFx0XHRcdGFzb2MtXHUwMDNlcGVlci5pcHY0X2FkZHJlc3MgPSAxO1xuMjYwODpcdFxuMjYwOTpcdFx0XHQvKiBDeWNsZSB0aHJvdWdoIGFkZHJlc3MgdHlwZXM7IGF2b2lkIGRpdmlkZSBieSAwLiAqL1xuMjYxMDpcdFx0XHRpZiAobnRvaHMocGFyYW0ucC1cdTAwM2VsZW5ndGgpIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKVxuMjYxMTpcdFx0XHRcdGJyZWFrO1xuMjYxMjpcdFxuMjYxMzpcdFx0XHRzYXQgPSBudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpO1xuMjYxNDpcdFx0XHRpZiAoc2F0KVxuMjYxNTpcdFx0XHRcdHNhdCAvPSBzaXplb2YoX191MTYpO1xuMjYxNjpcdFxuMjYxNzpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzYXQ7ICYjNDM7JiM0MztpKSB7XG4yNjE4Olx0XHRcdFx0c3dpdGNoIChwYXJhbS5zYXQtXHUwMDNldHlwZXNbaV0pIHtcbjI2MTk6XHRcdFx0XHRjYXNlIFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTOlxuMjYyMDpcdFx0XHRcdFx0YXNvYy1cdTAwM2VwZWVyLmlwdjRfYWRkcmVzcyA9IDE7XG4yNjIxOlx0XHRcdFx0XHRicmVhaztcbjI2MjI6XHRcbjI2MjM6XHRcdFx0XHRjYXNlIFNDVFBfUEFSQU1fSVBWNl9BRERSRVNTOlxuMjYyNDpcdFx0XHRcdFx0aWYgKFBGX0lORVQ2ID09IGFzb2MtXHUwMDNlYmFzZS5zay1cdTAwM2Vza19mYW1pbHkpXG4yNjI1Olx0XHRcdFx0XHRcdGFzb2MtXHUwMDNlcGVlci5pcHY2X2FkZHJlc3MgPSAxO1xuMjYyNjpcdFx0XHRcdFx0YnJlYWs7XG4yNjI3Olx0XG4yNjI4Olx0XHRcdFx0ZGVmYXVsdDogLyogSnVzdCBpZ25vcmUgYW55dGhpbmcgZWxzZS4gICovXG4yNjI5Olx0XHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg0NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFJlYWQgaW4gU0NUUCBQYXJhbWV0ZXIgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgU0NUUCBjb2RlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBwYXJhbWV0ZXIgaGFuZGxpbmcuIEl0IHNlZW1zIGxpa2UgdGhlIHZhcmlhYmxlIGBzYXRgIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBlbGVtZW50cywgYW5kIHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBoaW5nZXMgb24gaG93IGBzYXRgIGlzIGNhbGN1bGF0ZWQuIElmIGBudG9ocyhwYXJhbS5wLSZndDtsZW5ndGgpYCBpcyBsZXNzIHRoYW4gYHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcilgLCB0aGF0JiMzOTtzIGEgcHJvYmxlbSwgYmVjYXVzZSBgc2F0YCB1bmRlcmZsb3dzLiBEaXZpZGluZyBpdCBieSBgc2l6ZW9mKF9fdTE2KWAgdGhlbiBjcmVhdGVzIGEgbWFzc2l2ZSwgdW5pbnRlbmRlZCB2YWx1ZSBmb3IgYHNhdGAuCgpUaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgc3Vic2VxdWVudCBsb29wOiBgZm9yIChpID0gMDsgaSAmbHQ7IHNhdDsgJiM0MzsmIzQzO2kpYC4gQmVjYXVzZSBgc2F0YCBpcyBub3cgYW4gZW5vcm1vdXMgbnVtYmVyLCB0aGlzIGxvb3Agd2lsbCBpdGVyYXRlIGZhciBiZXlvbmQgdGhlIGludGVuZGVkIGJvdW5kcywgYXR0ZW1wdGluZyB0byByZWFkIGBwYXJhbS5zYXQtJmd0O3R5cGVzW2ldYC4gSSBrbm93IGBwYXJhbS5zYXRgIHBvaW50cyBkaXJlY3RseSB0byB0aGUgcGFja2V0IGRhdGEsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCBzY2VuYXJpby4KCk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0tBU0FOIHdpbGwgY2F0Y2ggdGhpcywgcmlnaHQ/JiMzNDsuIFJlYWRpbmcgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBidWZmZXIsIHdoaWNoIGlzIGxpa2VseSBhbiBza2Igb3Igc2ltaWxhciwgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGRldGVjdGlvbiBmb3IgS0FTQU4uIE15IG5leHQgdGhvdWdodCBpcyAmIzM0O2lzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkPyYjMzQ7LCBidXQsIG5vLCBiZWNhdXNlIHRoZSBjb2RlIGlzIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQsIG5vdCBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgcmVnaW9uIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBUaGUgYnVmZmVyIGlzIGluaXRpYWxpemVkIHVwIHRvIHRoZSBwYWNrZXQgbGVuZ3RoLCBzbyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaXMgd2hhdCBpdCBpcy4KCkdpdmVuIHRoYXQgdGhlIHBhY2tldCBjb21lcyBmcm9tIHRoZSBuZXR3b3JrLCB0aGUgYnVmZmVyIHNob3VsZCBiZSBpbml0aWFsaXplZCB1cCB0byB0aGUgcGFja2V0IGxlbmd0aC4gU28sIEtBU0FOICpzaG91bGQqIGJlIGFibGUgdG8gZGV0ZWN0IHRoZSBvdXQtb2YtYm91bmRzIHJlYWQuIFRoaXMgaXMgbG9va2luZyBwcm9taXNpbmc7IEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGZsYWcgdGhpcy4KCkkmIzM5O2xsIGNoZWNrIGBzY3RwX3ZlcmlmeV9wYXJhbWAgYXJvdW5kIGxpbmUgMjE2OSwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE1MDpcdHN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCxcbjIxNTE6XHRcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4yMTUyOlx0XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4yMTUzOlx0XHRcdFx0XHRcdCAgdW5pb24gc2N0cF9wYXJhbXMgcGFyYW0sXG4yMTU0Olx0XHRcdFx0XHRcdCAgZW51bSBzY3RwX2NpZCBjaWQsXG4yMTU1Olx0XHRcdFx0XHRcdCAgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxuMjE1NjpcdFx0XHRcdFx0XHQgIHN0cnVjdCBzY3RwX2NodW5rICoqZXJyX2NodW5rKVxuMjE1NzpcdHtcbjIxNTg6XHRcdHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbSAqaG1hY3M7XG4yMTU5Olx0XHRpbnQgcmV0dmFsID0gU0NUUF9JRVJST1JfTk9fRVJST1I7XG4yMTYwOlx0XHRfX3UxNiBuX2VsdCwgaWQgPSAwO1xuMjE2MTpcdFx0aW50IGk7XG4yMTYyOlx0XG4yMTYzOlx0XHQvKiBGSVhNRSAtIFRoaXMgcm91dGluZSBpcyBub3QgbG9va2luZyBhdCBlYWNoIHBhcmFtZXRlciBwZXIgdGhlXG4yMTY0Olx0XHQgKiBjaHVuayB0eXBlLCBpLmUuLCB1bnJlY29nbml6ZWQgcGFyYW1ldGVycyBzaG91bGQgYmUgZnVydGhlclxuMjE2NTpcdFx0ICogaWRlbnRpZmllZCBiYXNlZCBvbiB0aGUgY2h1bmsgaWQuXG4yMTY2Olx0XHQgKi9cbjIxNjc6XHRcbjIxNjg6XHRcdHN3aXRjaCAocGFyYW0ucC1cdTAwM2V0eXBlKSB7XG4yMTY5Olx0XHRjYXNlIFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTOlxuMjE3MDpcdFx0Y2FzZSBTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUzpcbjIxNzE6XHRcdGNhc2UgU0NUUF9QQVJBTV9DT09LSUVfUFJFU0VSVkFUSVZFOlxuMjE3MjpcdFx0Y2FzZSBTQ1RQX1BBUkFNX1NUQVRFX0NPT0tJRTpcbjIxNzM6XHRcdGNhc2UgU0NUUF9QQVJBTV9IRUFSVEJFQVRfSU5GTzpcbjIxNzQ6XHRcdGNhc2UgU0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSUzpcbjIxNzU6XHRcdGNhc2UgU0NUUF9QQVJBTV9FQ05fQ0FQQUJMRTpcbjIxNzY6XHRcdFx0YnJlYWs7XG4yMTc3Olx0XG4yMTc4Olx0XHRjYXNlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVM6XG4yMTc5Olx0XHRcdGlmIChudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHtcbjIxODA6XHRcdFx0XHRzY3RwX3Byb2Nlc3NfaW52X3BhcmFtbGVuZ3RoKGFzb2MsIHBhcmFtLnAsXG4yMTgxOlx0XHRcdFx0XHRcdFx0ICAgICBjaHVuaywgZXJyX2NodW5rKTtcbjIxODI6XHRcdFx0XHRyZXR2YWwgPSBTQ1RQX0lFUlJPUl9BQk9SVDtcbjIxODM6XHRcdFx0fVxuMjE4NDpcdFx0XHRicmVhaztcbjIxODU6XHRcdGNhc2UgU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDpcbjIxODY6XHRcdFx0aWYgKG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSAhPSBzaXplb2YoKnBhcmFtLmFpbmQpKSB7XG4yMTg3Olx0XHRcdFx0c2N0cF9wcm9jZXNzX2ludl9wYXJhbWxlbmd0aChhc29jLCBwYXJhbS5wLFxuMjE4ODpcdFx0XHRcdFx0XHRcdCAgICAgY2h1bmssIGVycl9jaHVuayk7XG4yMTg5Olx0XHRcdFx0cmV0dmFsID0gU0NUUF9JRVJST1JfQUJPUlQ7XG4yMTkwOlx0XHRcdH1cbjIxOTE6XHRcdFx0YnJlYWs7XG4yMTkyOlx0XG4yMTkzOlx0XHRjYXNlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0VYVDpcbjIxOTQ6XHRcdFx0aWYgKCFzY3RwX3ZlcmlmeV9leHRfcGFyYW0obmV0LCBlcCwgcGFyYW0pKVxuMjE5NTpcdFx0XHRcdHJldHVybiBTQ1RQX0lFUlJPUl9BQk9SVDtcbjIxOTY6XHRcdFx0YnJlYWs7XG4yMTk3Olx0XG4yMTk4Olx0XHRjYXNlIFNDVFBfUEFSQU1fU0VUX1BSSU1BUlk6XG4yMTk5Olx0XHRcdGlmICghZXAtXHUwMDNlYXNjb25mX2VuYWJsZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM4OAoJCQkJCQkJb3V0cHV0OiAyNTUKCQkJCQkJCXRob3VnaHRzOiA1NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGJvdW5kcyBjaGVjayBhZGRpdGlvbiDigJMgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBwcmV2ZW50aW5nIGFuIGludGVnZXIgdW5kZXJmbG93IGluIFNDVFAgcGFyYW1ldGVyIGhhbmRsaW5nLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIGBwYXJhbS5zYXQtJmd0O3R5cGVzW2ldYC4gVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoYXQgYHBhcmFtYCBpcyBwYXJ0IG9mIHRoZSByZWNlaXZlZCBjaHVuaywgd2hpY2ggbWVhbnMgYW55IG91dC1vZi1ib3VuZHMgcmVhZCBpcyBnb2luZyB0byBiZSBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIG9uIHRoZSBwYWNrZXQgYnVmZmVyIChgc2tiYCkuIEtBU0FOLCBpbiBpdHMgaW5maW5pdGUgd2lzZG9tLCBpcyAqZGVzaWduZWQqIHRvIHNuaWZmIG91dCB0aGVzZSBraW5kcyBvZiByZWFkcy4gSXQgZG9lc24mIzM5O3QgbWF0dGVyIGlmIGl0JiMzOTtzIHNsYWItb3V0LW9mLWJvdW5kcyBvciBnbG9iYWwtb3V0LW9mLWJvdW5kczsgS0FTQU4gd2lsbCBkZXRlY3QgaXQuCgpJIGRpZCBxdWlja2x5IGNvbnNpZGVyIGlmIHRoaXMgY291bGQgYmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGJ1dCBpdCYjMzk7cyBub3QuIFRoZSBtZW1vcnkgYmVpbmcgYWNjZXNzZWQgaXMgZWl0aGVyOgoKMS4gIE91dC1vZi1ib3VuZHMgb2YgdGhlIGBza2JgLCB3aGljaCBLQVNBTiBjYXRjaGVzLgoyLiAgV2l0aGluIHRoZSBgc2tiYCBidXQgcGFzdCB0aGUgbGVnaXRpbWF0ZSBwYXJhbWV0ZXIgbGVuZ3RoLiBJbiB0aGlzIHNjZW5hcmlvLCBpdCBpcyByZWFkaW5nICpvdGhlciogcGFyYW1ldGVycyBvciBwYWRkaW5nIHdpdGhpbiB0aGUgYHNrYmAuIFdoaWxlIHRoaXMgY2FuIGxlYWQgdG8gbG9naWMgYnVncyAoaW50ZXJwcmV0aW5nIG90aGVyIHBhcmFtZXRlcnMgaW5jb3JyZWN0bHkpLCBpdCYjMzk7cyBub3QgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LgoKVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc3RlbXMgZnJvbSBgbnRvaHMocGFyYW0ucC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcilgLCB3aGljaCBpcyBhIHRleHRib29rIG1pc3NpbmcgbGVuZ3RoIGNoZWNrLiBUaGUgdW5kZXJmbG93IGNhdXNlcyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkLiBTaW5jZSB0aGUgcmVhZCBpcyBndWFyYW50ZWVkIHRvIGJlIHdpdGhpbiB0aGUgYHNrYmAgKm9yKiBvdXQtb2YtYm91bmRzLCBpdCYjMzk7cyBhIEtBU0FOIHByb2JsZW0sIG5vdCBhIEtNU0FOIHByb2JsZW0uIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGhlcmUuCgpUaGVyZWZvcmUsIG5vIEtNU0FOIHNlc3Npb24gaXMgbmVlZGVkLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgZm9yIHRoZSBgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFU2AgcGFyYW1ldGVyIGluIFNDVFAgY2h1bmtzIHRvIHByZXZlbnQgYW4gaW50ZWdlciB1bmRlcmZsb3cuIFdpdGhvdXQgdGhlIGNoZWNrLCB0aGUgY2FsY3VsYXRpb24gYHNhdCA9IG50b2hzKHBhcmFtLnAtJmd0O2xlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCBjYW4gdW5kZXJmbG93LCBsZWFkaW5nIHRvIGEgbGFyZ2UgdW5zaWduZWQgaW50ZWdlciBhbmQgYW4gb3V0LW9mLWJvdW5kcyBsb29wIG9uIHRoZSBwYWNrZXQgYnVmZmVyIChgc2tiYCkuIEtBU0FOIGlzIHRoZSBwcm9wZXIgdG9vbCBmb3IgZGV0ZWN0aW5nIHRoaXMga2luZCBvZiB2dWxuZXJhYmlsaXR5IGJlY2F1c2UgdGhpcyBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBhbmQgbm90IHRoZSBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCBjaGVjayBmb3IgdGhlIGBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTYCBwYXJhbWV0ZXIgaW4gU0NUUCBjaHVua3MgdG8gcHJldmVudCBhbiBpbnRlZ2VyIHVuZGVyZmxvdy4gV2l0aG91dCB0aGlzIGNoZWNrLCBpZiBgcGFyYW0ucC1cdTAwM2VsZW5ndGhgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHRoZSBjYWxjdWxhdGlvbiBgc2F0ID0gbnRvaHMocGFyYW0ucC1cdTAwM2VsZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAgdW5kZXJmbG93cywgcmVzdWx0aW5nIGluIGEgdmVyeSBsYXJnZSB1bnNpZ25lZCBpbnRlZ2VyLiBUaGlzIGNhdXNlcyB0aGUgc3Vic2VxdWVudCBsb29wIHRvIGl0ZXJhdGUgb3V0IG9mIGJvdW5kcywgcmVhZGluZyBmcm9tIGBwYXJhbS5zYXQtXHUwMDNldHlwZXNbaV1gLiBcblxuVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgb24gdGhlIHBhY2tldCBidWZmZXIgKHNrYikuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAoc2xhYi1vdXQtb2YtYm91bmRzIG9yIGdsb2JhbC1vdXQtb2YtYm91bmRzKS4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIEtBU0FOIHdpbGwgZWZmZWN0aXZlbHkgY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIHRoaXMgbWlzc2luZyBsZW5ndGggY2hlY2suJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGZvciB0aGUgYFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVNgIHBhcmFtZXRlciBpbiBTQ1RQIGNodW5rcyB0byBwcmV2ZW50IGFuIGludGVnZXIgdW5kZXJmbG93LiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBwYXJhbS5wLVx1MDAzZWxlbmd0aGAgaXMgbGVzcyB0aGFuIGBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCwgdGhlIGNhbGN1bGF0aW9uIGBzYXQgPSBudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCB1bmRlcmZsb3dzLCByZXN1bHRpbmcgaW4gYSB2ZXJ5IGxhcmdlIHVuc2lnbmVkIGludGVnZXIuIFRoaXMgY2F1c2VzIHRoZSBzdWJzZXF1ZW50IGxvb3AgdG8gaXRlcmF0ZSBvdXQgb2YgYm91bmRzLCByZWFkaW5nIGZyb20gYHBhcmFtLnNhdC1cdTAwM2V0eXBlc1tpXWAuIFxuXG5UaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBvbiB0aGUgcGFja2V0IGJ1ZmZlciAoc2tiKS4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChzbGFiLW91dC1vZi1ib3VuZHMgb3IgZ2xvYmFsLW91dC1vZi1ib3VuZHMpLiBUaGVyZSBpcyBubyBhbGxvY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIGludm9sdmVkIGluIHRoaXMgYnVnLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgS0FTQU4gd2lsbCBlZmZlY3RpdmVseSBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmVzdWx0aW5nIGZyb20gdGhpcyBtaXNzaW5nIGxlbmd0aCBjaGVjay4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6MDQuOTYyNzk0NzYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc5NjAyMzM3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfdmVyaWZ5X2luaXRcIixcbiAgICBcInNjdHBfcHJvY2Vzc19pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGZvciB0aGUgYFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVNgIHBhcmFtZXRlciBpbiBTQ1RQIGNodW5rcyB0byBwcmV2ZW50IGFuIGludGVnZXIgdW5kZXJmbG93LiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBwYXJhbS5wLVxcdTAwM2VsZW5ndGhgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHRoZSBjYWxjdWxhdGlvbiBgc2F0ID0gbnRvaHMocGFyYW0ucC1cXHUwMDNlbGVuZ3RoKSAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcilgIHVuZGVyZmxvd3MsIHJlc3VsdGluZyBpbiBhIHZlcnkgbGFyZ2UgdW5zaWduZWQgaW50ZWdlci4gVGhpcyBjYXVzZXMgdGhlIHN1YnNlcXVlbnQgbG9vcCB0byBpdGVyYXRlIG91dCBvZiBib3VuZHMsIHJlYWRpbmcgZnJvbSBgcGFyYW0uc2F0LVxcdTAwM2V0eXBlc1tpXWAuIFxcblxcblRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IG9uIHRoZSBwYWNrZXQgYnVmZmVyIChza2IpLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKHNsYWItb3V0LW9mLWJvdW5kcyBvciBnbG9iYWwtb3V0LW9mLWJvdW5kcykuIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBLQVNBTiB3aWxsIGVmZmVjdGl2ZWx5IGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSB0aGlzIG1pc3NpbmcgbGVuZ3RoIGNoZWNrLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVuZGVyZmxvdyBvciBkaXZpZGUtYnktemVybyBidWcgd2hlbiBwcm9jZXNzaW5nIHRoZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTIHBhcmFtZXRlciBpbiBTQ1RQIElOSVQgY2h1bmtzLiBJdCBhZGRzIGxlbmd0aCBjaGVja3MgaW4gc2N0cF92ZXJpZnlfcGFyYW0gYW5kIHNjdHBfcHJvY2Vzc19wYXJhbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldHdvcmsgcGFja2V0IHBhcnNpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU2OjA0Ljk2MjgwMTgzM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2NDMxNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjNmY2QzOWE2MTRlY2JmOWNkMmNmY2JhZmRlMWExNTdkZDM1ZDVkYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwOTo1NjowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcXG5pbmRleCAyMzZlMjVhYmM3YTQyLi5lYmY3OTE5Njk0NTRiIDEwMDY0NFxcbi0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuY1xcbisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuY1xcbkBAIC0yMTY5LDEyICsyMTY5LDE5IEBAIHN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0Y2FzZSBTQ1RQX1BBUkFNX0lQVjRfQUREUkVTUzpcXG4gXFx0Y2FzZSBTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUzpcXG4gXFx0Y2FzZSBTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkU6XFxuLVxcdGNhc2UgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUzpcXG4gXFx0Y2FzZSBTQ1RQX1BBUkFNX1NUQVRFX0NPT0tJRTpcXG4gXFx0Y2FzZSBTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPOlxcbiBcXHRjYXNlIFNDVFBfUEFSQU1fVU5SRUNPR05JWkVEX1BBUkFNRVRFUlM6XFxuIFxcdGNhc2UgU0NUUF9QQVJBTV9FQ05fQ0FQQUJMRTpcXG4gXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVM6XFxuK1xcdFxcdGlmIChudG9ocyhwYXJhbS5wLVxcdTAwM2VsZW5ndGgpIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkge1xcbitcXHRcXHRcXHRzY3RwX3Byb2Nlc3NfaW52X3BhcmFtbGVuZ3RoKGFzb2MsIHBhcmFtLnAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgY2h1bmssIGVycl9jaHVuayk7XFxuK1xcdFxcdFxcdHJldHZhbCA9IFNDVFBfSUVSUk9SX0FCT1JUO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQ6XFxuIFxcdFxcdGlmIChudG9ocyhwYXJhbS5wLVxcdTAwM2VsZW5ndGgpICE9IHNpemVvZigqcGFyYW0uYWluZCkpIHtcXG4gXFx0XFx0XFx0c2N0cF9wcm9jZXNzX2ludl9wYXJhbWxlbmd0aChhc29jLCBwYXJhbS5wLFxcbkBAIC0yNjAwLDYgKzI2MDcsOSBAQCBzdGF0aWMgaW50IHNjdHBfcHJvY2Vzc19wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4gXFx0XFx0XFx0YXNvYy1cXHUwMDNlcGVlci5pcHY0X2FkZHJlc3MgPSAxO1xcbiBcXG4gXFx0XFx0LyogQ3ljbGUgdGhyb3VnaCBhZGRyZXNzIHR5cGVzOyBhdm9pZCBkaXZpZGUgYnkgMC4gKi9cXG4rXFx0XFx0aWYgKG50b2hzKHBhcmFtLnAtXFx1MDAzZWxlbmd0aCkgXFx1MDAzYyBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuIFxcdFxcdHNhdCA9IG50b2hzKHBhcmFtLnAtXFx1MDAzZWxlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpO1xcbiBcXHRcXHRpZiAoc2F0KVxcbiBcXHRcXHRcXHRzYXQgLz0gc2l6ZW9mKF9fdTE2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6MDUuNDgwMTk1MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNjMyMzA2OTgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF92ZXJpZnlfaW5pdFwiLFxuICAgIFwic2N0cF9wcm9jZXNzX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1bmRlcmZsb3cgb3IgZGl2aWRlLWJ5LXplcm8gYnVnIHdoZW4gcHJvY2Vzc2luZyB0aGUgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUyBwYXJhbWV0ZXIgaW4gU0NUUCBJTklUIGNodW5rcy4gSXQgYWRkcyBsZW5ndGggY2hlY2tzIGluIHNjdHBfdmVyaWZ5X3BhcmFtIGFuZCBzY3RwX3Byb2Nlc3NfcGFyYW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBuZXR3b3JrIHBhY2tldCBwYXJzaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiM2ZjZDM5YTYxNGVjYmY5Y2QyY2ZjYmFmZGUxYTE1N2RkMzVkNWRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDk6NTY6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcbmluZGV4IDIzNmUyNWFiYzdhNDIuLmViZjc5MTk2OTQ1NGIgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcbisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuY1xuQEAgLTIxNjksMTIgKzIxNjksMTkgQEAgc3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF92ZXJpZnlfcGFyYW0oc3RydWN0IG5ldCAqbmV0LFxuIFx0Y2FzZSBTQ1RQX1BBUkFNX0lQVjRfQUREUkVTUzpcbiBcdGNhc2UgU0NUUF9QQVJBTV9JUFY2X0FERFJFU1M6XG4gXHRjYXNlIFNDVFBfUEFSQU1fQ09PS0lFX1BSRVNFUlZBVElWRTpcbi1cdGNhc2UgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUzpcbiBcdGNhc2UgU0NUUF9QQVJBTV9TVEFURV9DT09LSUU6XG4gXHRjYXNlIFNDVFBfUEFSQU1fSEVBUlRCRUFUX0lORk86XG4gXHRjYXNlIFNDVFBfUEFSQU1fVU5SRUNPR05JWkVEX1BBUkFNRVRFUlM6XG4gXHRjYXNlIFNDVFBfUEFSQU1fRUNOX0NBUEFCTEU6XG4gXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTOlxuK1x0XHRpZiAobnRvaHMocGFyYW0ucC1cdTAwM2VsZW5ndGgpIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7XG4rXHRcdFx0c2N0cF9wcm9jZXNzX2ludl9wYXJhbWxlbmd0aChhc29jLCBwYXJhbS5wLFxuK1x0XHRcdFx0XHRcdCAgICAgY2h1bmssIGVycl9jaHVuayk7XG4rXHRcdFx0cmV0dmFsID0gU0NUUF9JRVJST1JfQUJPUlQ7XG4rXHRcdH1cbitcdFx0YnJlYWs7XG4gXHRjYXNlIFNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQ6XG4gXHRcdGlmIChudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgIT0gc2l6ZW9mKCpwYXJhbS5haW5kKSkge1xuIFx0XHRcdHNjdHBfcHJvY2Vzc19pbnZfcGFyYW1sZW5ndGgoYXNvYywgcGFyYW0ucCxcbkBAIC0yNjAwLDYgKzI2MDcsOSBAQCBzdGF0aWMgaW50IHNjdHBfcHJvY2Vzc19wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcdFx0XHRhc29jLVx1MDAzZXBlZXIuaXB2NF9hZGRyZXNzID0gMTtcbiBcbiBcdFx0LyogQ3ljbGUgdGhyb3VnaCBhZGRyZXNzIHR5cGVzOyBhdm9pZCBkaXZpZGUgYnkgMC4gKi9cbitcdFx0aWYgKG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSlcbitcdFx0XHRicmVhaztcbitcbiBcdFx0c2F0ID0gbnRvaHMocGFyYW0ucC1cdTAwM2VsZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTtcbiBcdFx0aWYgKHNhdClcbiBcdFx0XHRzYXQgLz0gc2l6ZW9mKF9fdTE2KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU2OjA1LjQ4MDE5NzI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkzMzEyMTMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTQ1RQIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIG1vZGlmeWluZyBgbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jYC4gTG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBhIHZpdGFsIGNoZWNrIGZvciB0aGUgbGVuZ3RoIG9mIHRoZSBgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFU2AgcGFyYW1ldGVyIGluIGJvdGggYHNjdHBfdmVyaWZ5X3BhcmFtYCBhbmQgYHNjdHBfcHJvY2Vzc19wYXJhbWAuIFRoaXMgaXMgZ29vZDsgdGhlIGNvZGUncyBnZXR0aW5nIG1vcmUgcm9idXN0LiBTcGVjaWZpY2FsbHksIHRoZSBhZGRlZCBjaGVja3MgYWRkcmVzcyBwb3RlbnRpYWwgaXNzdWVzIGxpa2UgdW5kZXJmbG93IG9yIGEgZGl2aWRlLWJ5LXplcm8gaWYgYW4gaW52YWxpZCBwYXJhbWV0ZXIgbGVuZ3RoIGlzIHByb3ZpZGVkLiBJbiBgc2N0cF92ZXJpZnlfcGFyYW1gLCB0aGV5J3JlIGhhbmRsaW5nIGNhc2VzIHdoZXJlIHRoZSBsZW5ndGggaXMgdG9vIHNob3J0IGFuZCByZXR1cm5pbmcgYW4gZXJyb3IsIGFuZCBpbiBgc2N0cF9wcm9jZXNzX3BhcmFtYCwgdGhleSdyZSBiYWlsaW5nIG91dCBlYXJseSB0byBwcmV2ZW50IHRoYXQgZGl2aWRlLWJ5LXplcm8gZnJvbSBoYXBwZW5pbmcuIFNvbGlkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgcHJlY2lzZWx5IHdoYXQgd2Ugd2FudCB0byBzZWUuXG5cbkdpdmVuIHRoaXMgdHlwZSBvZiBjaGFuZ2UsIGZ1enppbmcgaXMgYW4gYWJzb2x1dGUgbXVzdC4gU2VuZGluZyBtYWxmb3JtZWQgcGFja2V0cyB3aXRoIHRoaXMgcGFyYW1ldGVyIHdpbGwgbm93IGdpdmUgdXMgbmV3IGNvZGUgcGF0aHMgdG8gbG9vayBhdC4gV2UgbmVlZCB0byBleHBsb3JlIHRoZXNlIG5ldyBjaGVja3MgYW5kIHNlZSBob3cgd2VsbCB0aGV5J3JlIGhhbmRsaW5nIGVkZ2UgY2FzZXMuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIHdlIGNhbiBnZXQgYXQgdGhpcyB1c2luZyB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgSVBfU0NUUGAgaXMgbGlrZWx5IHRoZSBtYWluIG9uZSB3ZSdyZSBsb29raW5nIGZvciwgYnV0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgZ28gY2hlY2sgYG5ldC9zY3RwL0tjb25maWdgLiBJJ2QgbXVjaCByYXRoZXIgdmVyaWZ5IHdoYXQgY2FuIGJlIHR1cm5lZCBvbiBvciBvZmYgd2hlbiBJIHN0YXJ0IHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1NjoxMS40MTMzMjE0NjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYzMzczMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9LY29uZmlnLTUtXFxubmV0L3NjdHAvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBfU0NUUFxcbm5ldC9zY3RwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVGhlIFNDVFAgUHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU2OjExLjQ5OTY2NjYwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1OTI0MTI3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNDVFAgUGFyYW1ldGVyIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgSVBfU0NUUGAgY29uZmlndXJhdGlvbiBoZXJlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBgc2N0cF92ZXJpZnlfcGFyYW1gIGFuZCBgc2N0cF9wcm9jZXNzX3BhcmFtYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGhhbmRsZSBTQ1RQIHBhcmFtZXRlcnMuIFRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8ga25vdyBpcyB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljYWxseSBkZWZpbmVkIG9yIGlmIHRoZXkgYXJlIHBvdGVudGlhbGx5IHZhcmlhYmxlLiBMZXQncyBzZWUuLi4gYHNjdHBfdmVyaWZ5X3BhcmFtYCBpcyBzdGF0aWMuIEFscmlnaHQsIGFuZCBgc2N0cF9wcm9jZXNzX3BhcmFtYCBpcyBhbHNvIHN0YXRpYy4gVGhpcyBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgKnVzZWQqLCBJIHNob3VsZCBjaGVjayB0aGUgY2FsbGluZyBjb250ZXh0cy4gVGltZSB0byBkaXZlIGludG8gYG5ldC9zY3RwL3NtX21ha2VfY2h1bmsuY2AuIFRoYXQgZmlsZSBzaG91bGQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gaG93IHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGludm9rZWQgd2l0aGluIHRoZSBTQ1RQIHN0YXRlIG1hY2hpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6MTcuMDkyMDgyMjIyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTI1MTA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3ZlcmlmeV9wYXJhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTIwOTc9c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9wcm9jZXNzX3Vua19wYXJhbShcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMTQ5LSAqL1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMTUwOnN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjE1MS1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz0yMjkxPWludCBzY3RwX3ZlcmlmeV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIzMzQtXFx0c2N0cF93YWxrX3BhcmFtcyhwYXJhbSwgcGVlcl9pbml0KSB7XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjIzMzU6XFx0XFx0cmVzdWx0ID0gc2N0cF92ZXJpZnlfcGFyYW0obmV0LCBlcCwgYXNvYywgcGFyYW0sIGNpZCxcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjMzNi1cXHRcXHRcXHRcXHRcXHQgICBjaHVuaywgZXJycCk7XFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MjU0Mj1zdGF0aWMgaW50IHNjdHBfcHJvY2Vzc19wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yNzQ2LVxcdFxcdC8qIEFueSB1bnJlY29nbml6ZWQgcGFyYW1ldGVycyBzaG91bGQgaGF2ZSBiZWVuIGNhdWdodFxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyNzQ3OlxcdFxcdCAqIGFuZCBoYW5kbGVkIGJ5IHNjdHBfdmVyaWZ5X3BhcmFtKCkgd2hpY2ggc2hvdWxkIGJlXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI3NDgtXFx0XFx0ICogY2FsbGVkIHByaW9yIHRvIHRoaXMgcm91dGluZS4gIFNpbXBseSBsb2cgdGhlIGVycm9yXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU2OjE3LjE5NzMzNzY1MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTM1NDU4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgYXMgdGhvdWdoIGl0IHdlcmUgbXkgdHJhaW4gb2YgdGhvdWdodDpcblxuKipEaXZpbmcgaW50byBTQ1RQIFBhcmFtZXRlciBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBgc2N0cF92ZXJpZnlfaW5pdGAgaXMgdGhlIGZ1bmN0aW9uIHdlJ3JlIHN0YXJ0aW5nIHdpdGguIFRoYXQncyBhIGdvb2QgZW50cnkgcG9pbnQuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBzY3RwX3ZlcmlmeV9pbml0YCBpcyBjYWxsaW5nIGBzY3RwX3ZlcmlmeV9wYXJhbWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgdG8gZW5zdXJlIGFueSBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzIGFyZSB2YWxpZC4gTm93LCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGFuZCBsaWtlbHkgd2hlcmUgYW55IHBvdGVudGlhbCBpc3N1ZXMgbWlnaHQgYmUgc3RlbW1pbmcgZnJvbSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgcGFyYW1ldGVyIHByb2Nlc3NpbmcgYWN0dWFsbHkgKmhhcHBlbnMqLiBMZXQncyBnbyBhaGVhZCBhbmQgZGlnIGludG8gYHNjdHBfcHJvY2Vzc19wYXJhbWAuIFRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhay4gVW5kZXJzdGFuZGluZyB0aGUgcHJvY2Vzc2luZyBzdGVwcyBvZiBgc2N0cF9wcm9jZXNzX3BhcmFtYCBpcyB2aXRhbCB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBhcmUgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU2OjIwLjIxMDg4NTgwM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjAzMTQzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3Byb2Nlc3NfcGFyYW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvc21fbWFrZV9jaHVuay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz01Nz1zdGF0aWMgc3RydWN0IHNjdHBfY29va2llX3BhcmFtICpzY3RwX3BhY2tfY29va2llKFxcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTYyLVxcdFxcdFxcdFxcdFxcdGNvbnN0IF9fdTggKnJhd19hZGRycywgaW50IGFkZHJzX2xlbik7XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjYzOnN0YXRpYyBpbnQgc2N0cF9wcm9jZXNzX3BhcmFtKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy02NC1cXHRcXHRcXHQgICAgICB1bmlvbiBzY3RwX3BhcmFtcyBwYXJhbSxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz0yMzU3PWludCBzY3RwX3Byb2Nlc3NfaW5pdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIzOTctXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjIzOTg6XFx0XFx0aWYgKCFzY3RwX3Byb2Nlc3NfcGFyYW0oYXNvYywgcGFyYW0sIHBlZXJfYWRkciwgZ2ZwKSlcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjM5OS1cXHRcXHRcXHRnb3RvIGNsZWFuX3VwO1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI1NDEtICovXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjI1NDI6c3RhdGljIGludCBzY3RwX3Byb2Nlc3NfcGFyYW0oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI1NDMtXFx0XFx0XFx0ICAgICAgdW5pb24gc2N0cF9wYXJhbXMgcGFyYW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU2OjIwLjI5MjkyMjY2NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTIyNzA2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgc2N0cF92ZXJpZnlfaW5pdGAgYW5kIGBzY3RwX3Byb2Nlc3NfaW5pdGAqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgc2N0cF92ZXJpZnlfaW5pdGAgYW5kIGBzY3RwX3Byb2Nlc3NfaW5pdGAuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzLiBCdXQgSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlLiBBcmUgdGhleSBleHRlcm5hbGx5IHZpc2libGUsIG9yIGFyZSB0aGV5IGludGVybmFsIHRvIHRoaXMgbW9kdWxlPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhleSdyZSBleHBvcnRlZCBvciBpZiB0aGV5J3JlIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGRpc3RpbmN0aW9uIGlzIGNydWNpYWwuIEl0IHRlbGxzIG1lIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgYW5kLCB0aGVyZWZvcmUsIGhvdyB0aGV5IG1pZ2h0IGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGlzIFNDVFAgaW1wbGVtZW50YXRpb24uIEtub3dpbmcgdGhlaXIgc2NvcGUgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyB1bmRlcnN0YW5kaW5nIHRoZWlyIHJvbGVzIGFuZCBpbXBhY3QuIExldCdzIGRpZyBpbiBhbmQgZmluZCB0aG9zZSBkZWNsYXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1NjoyMy40NDUxOTU2NzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzk2NTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfdmVyaWZ5X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvc21fbWFrZV9jaHVuay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz0yMTUwPXN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMjkwLS8qIFZlcmlmeSB0aGUgSU5JVCBwYWNrZXQgYmVmb3JlIHdlIHByb2Nlc3MgaXQuICAqL1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMjkxOmludCBzY3RwX3ZlcmlmeV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMjkyLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIGVudW0gc2N0cF9jaWQgY2lkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1NjoyMy41MDc5OTk5MjZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxMzk1MDc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIGBzY3RwX3ZlcmlmeV9pbml0YCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzY3RwX3ZlcmlmeV9pbml0YCBmdW5jdGlvbi4gUmlnaHQsIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0J3MgZGVjbGFyZWQgYHN0YXRpY2Agb3Igbm90LiBMZXQgbWUganVzdCBjb25maXJtLi4uIFl1cCwgZGVmaW5pdGVseSBub3Qgc3RhdGljLiBTbyBpdCdzIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBkZWZpbmluZyBjb21waWxhdGlvbiB1bml0LiBUaGF0IG1lYW5zIGl0IGxpa2VseSBwbGF5cyBhIGNyaXRpY2FsIHJvbGUgaW4gbW9kdWxlIGxpbmtpbmcgb3IgY3Jvc3Mtb2JqZWN0IGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIFNDVFAgY29kZWJhc2UuIEludGVyZXN0aW5nIGltcGxpY2F0aW9ucyBhcmlzZSBmcm9tIHRoaXMgbm9uLXN0YXRpYyBuYXR1cmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHdoZW4gZGVidWdnaW5nLCBhbmQgYWxzbyB3aGVuIGxvb2tpbmcgZm9yIG90aGVyIGNhbGxpbmcgZnVuY3Rpb25zIHRvIGtub3cgd2h5IHRoaXMgaXMgcmVxdWlyZWQsIGFuZCB3aGF0IGNvbnRleHQgaXMgbmVlZGVkLiBPa2F5LCB1bmRlcnN0b29kLCBtb3Zpbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NzEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1NjoyNi40MjE5NTUwNThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NjkxOTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfcHJvY2Vzc19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MjI5MT1pbnQgc2N0cF92ZXJpZnlfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMzU2LSAqL1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMzU3OmludCBzY3RwX3Byb2Nlc3NfaW5pdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMzU4LVxcdFxcdCAgICAgIGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqcGVlcl9hZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1NjoyNi40OTE2NTExNDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4NDI1NTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTQ1RQIElOSVQgQ2h1bmsgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgc2N0cF9wcm9jZXNzX2luaXRgIGlzbid0IHN0YXRpYywgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBNeSBrZXkgZm9jdXMgcG9pbnRzIGZvciB0aGlzIHBhdGNoIGFyZSB0aGVyZWZvcmUgYHNjdHBfdmVyaWZ5X2luaXRgIGFuZCBgc2N0cF9wcm9jZXNzX2luaXRgLiBUaGUgY29uZmlnIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgaXMgYElQX1NDVFBgLlxuXG5UaGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5OiBhbiB1bmRlcmZsb3cgb3IgZGl2aWRlLWJ5LXplcm8gdGhhdCBjb3VsZCBvY2N1ciBkdXJpbmcgdGhlIHBhcnNpbmcgb2YgdGhlIGBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTYCBwYXJhbWV0ZXIgd2l0aGluIFNDVFAgSU5JVCBjaHVua3MuIEl0IGRvZXMgdGhpcyBieSBpbmNvcnBvcmF0aW5nIGxlbmd0aCBjaGVja3Mgd2l0aGluIGBzY3RwX3ZlcmlmeV9wYXJhbWAgYW5kIGBzY3RwX3Byb2Nlc3NfcGFyYW1gLiBUaGlzIG1vZGlmaWNhdGlvbiByZXByZXNlbnRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldHdvcmsgcGFja2V0IHBhcnNpbmcgbG9naWMsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbkknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIEkndmUgbWlzc2VkLiBJdCBzZWVtcyBgSVBfU0NUUGAgaXMgdGhlIGNvcmUgb25lLCB0aG91Z2guXG5cblRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM1OCwiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6MzEuNjc1OTA5OTkxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MzUxMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF92ZXJpZnlfaW5pdFwiLFxuICAgIFwic2N0cF9wcm9jZXNzX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1bmRlcmZsb3cgb3IgZGl2aWRlLWJ5LXplcm8gYnVnIHdoZW4gcHJvY2Vzc2luZyB0aGUgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUyBwYXJhbWV0ZXIgaW4gU0NUUCBJTklUIGNodW5rcy4gSXQgYWRkcyBsZW5ndGggY2hlY2tzIGluIHNjdHBfdmVyaWZ5X3BhcmFtIGFuZCBzY3RwX3Byb2Nlc3NfcGFyYW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBuZXR3b3JrIHBhY2tldCBwYXJzaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX3ZlcmlmeV9pbml0XCIsXG4gICAgXCJzY3RwX3Byb2Nlc3NfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVuZGVyZmxvdyBvciBkaXZpZGUtYnktemVybyBidWcgd2hlbiBwcm9jZXNzaW5nIHRoZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTIHBhcmFtZXRlciBpbiBTQ1RQIElOSVQgY2h1bmtzLiBJdCBhZGRzIGxlbmd0aCBjaGVja3MgaW4gc2N0cF92ZXJpZnlfcGFyYW0gYW5kIHNjdHBfcHJvY2Vzc19wYXJhbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldHdvcmsgcGFja2V0IHBhcnNpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU2OjMxLjgwMzI3MDE2OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzExMTk3NDQ2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1NjozMS44MDM4OTQ3NzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzExMTkxMTQ3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgZm9yIHRoZSBgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFU2AgcGFyYW1ldGVyIGluIFNDVFAgY2h1bmtzIHRvIHByZXZlbnQgYW4gaW50ZWdlciB1bmRlcmZsb3cuIFdpdGhvdXQgdGhpcyBjaGVjaywgaWYgYHBhcmFtLnAtXFx1MDAzZWxlbmd0aGAgaXMgbGVzcyB0aGFuIGBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCwgdGhlIGNhbGN1bGF0aW9uIGBzYXQgPSBudG9ocyhwYXJhbS5wLVxcdTAwM2VsZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAgdW5kZXJmbG93cywgcmVzdWx0aW5nIGluIGEgdmVyeSBsYXJnZSB1bnNpZ25lZCBpbnRlZ2VyLiBUaGlzIGNhdXNlcyB0aGUgc3Vic2VxdWVudCBsb29wIHRvIGl0ZXJhdGUgb3V0IG9mIGJvdW5kcywgcmVhZGluZyBmcm9tIGBwYXJhbS5zYXQtXFx1MDAzZXR5cGVzW2ldYC4gXFxuXFxuVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgb24gdGhlIHBhY2tldCBidWZmZXIgKHNrYikuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAoc2xhYi1vdXQtb2YtYm91bmRzIG9yIGdsb2JhbC1vdXQtb2YtYm91bmRzKS4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIEtBU0FOIHdpbGwgZWZmZWN0aXZlbHkgY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIHRoaXMgbWlzc2luZyBsZW5ndGggY2hlY2suXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjNmY2QzOWE2MTRlY2JmOWNkMmNmY2JhZmRlMWExNTdkZDM1ZDVkYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA5OjU2OjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jXG5pbmRleCAyMzZlMjVhYmM3YTQyLi5lYmY3OTE5Njk0NTRiIDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jXG4rKysgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcbkBAIC0yMTY5LDEyICsyMTY5LDE5IEBAIHN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGNhc2UgU0NUUF9QQVJBTV9JUFY0X0FERFJFU1M6XG4gXHRjYXNlIFNDVFBfUEFSQU1fSVBWNl9BRERSRVNTOlxuIFx0Y2FzZSBTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkU6XG4tXHRjYXNlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVM6XG4gXHRjYXNlIFNDVFBfUEFSQU1fU1RBVEVfQ09PS0lFOlxuIFx0Y2FzZSBTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPOlxuIFx0Y2FzZSBTQ1RQX1BBUkFNX1VOUkVDT0dOSVpFRF9QQVJBTUVURVJTOlxuIFx0Y2FzZSBTQ1RQX1BBUkFNX0VDTl9DQVBBQkxFOlxuIFx0XHRicmVhaztcbitcbitcdGNhc2UgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUzpcbitcdFx0aWYgKG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkge1xuK1x0XHRcdHNjdHBfcHJvY2Vzc19pbnZfcGFyYW1sZW5ndGgoYXNvYywgcGFyYW0ucCxcbitcdFx0XHRcdFx0XHQgICAgIGNodW5rLCBlcnJfY2h1bmspO1xuK1x0XHRcdHJldHZhbCA9IFNDVFBfSUVSUk9SX0FCT1JUO1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EOlxuIFx0XHRpZiAobnRvaHMocGFyYW0ucC1cdTAwM2VsZW5ndGgpICE9IHNpemVvZigqcGFyYW0uYWluZCkpIHtcbiBcdFx0XHRzY3RwX3Byb2Nlc3NfaW52X3BhcmFtbGVuZ3RoKGFzb2MsIHBhcmFtLnAsXG5AQCAtMjYwMCw2ICsyNjA3LDkgQEAgc3RhdGljIGludCBzY3RwX3Byb2Nlc3NfcGFyYW0oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXHRcdFx0YXNvYy1cdTAwM2VwZWVyLmlwdjRfYWRkcmVzcyA9IDE7XG4gXG4gXHRcdC8qIEN5Y2xlIHRocm91Z2ggYWRkcmVzcyB0eXBlczsgYXZvaWQgZGl2aWRlIGJ5IDAuICovXG4rXHRcdGlmIChudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpXG4rXHRcdFx0YnJlYWs7XG4rXG4gXHRcdHNhdCA9IG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7XG4gXHRcdGlmIChzYXQpXG4gXHRcdFx0c2F0IC89IHNpemVvZihfX3UxNik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1NjozMS44MDM4OTYyMzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODIzMTQxMzM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBVbmRlcmZsb3cgaW4gU0NUUCBQYXJhbWV0ZXIgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNgLiBJdCdzIGZvY3VzZWQgb24gdGhlIGBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTYCBwYXJhbWV0ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgYSBsZW5ndGggY2hlY2suIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcImdvb2QgY2F0Y2gsIGFsd2F5cyBpbXBvcnRhbnQgdG8gdmFsaWRhdGUgaW5wdXQuXCJcblxuRGlnZ2luZyBpbiwgSSBzZWUgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGluIGBzY3RwX3ZlcmlmeV9wYXJhbWAgYW5kIGBzY3RwX3Byb2Nlc3NfcGFyYW1gLiBJbiBgc2N0cF92ZXJpZnlfcGFyYW1gLCBhIHN0cmFpZ2h0Zm9yd2FyZCBsZW5ndGggY2hlY2sgaXMgYWRkZWQ6IGlmIHRoZSBwYXJhbWV0ZXIgbGVuZ3RoIGlzIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIGhlYWRlciwgaXQncyBmbGFnZ2VkIGFzIGludmFsaWQuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0J3MgYSBiYXNpYyBzYW5pdHkgY2hlY2sgdG8gcHJldmVudCBwcm9jZXNzaW5nIGNvcnJ1cHRlZCBkYXRhLlxuXG5UaGUgcmVhbCBtZWF0IG9mIHRoZSBpc3N1ZSBzZWVtcyB0byBiZSB3aXRoaW4gYHNjdHBfcHJvY2Vzc19wYXJhbWAuIEhlcmUsIHRoZXJlJ3MgdGhpcyBjYWxjdWxhdGlvbjogYHNhdCA9IG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7YCBhbmQgdGhlbiBgc2F0IC89IHNpemVvZihfX3UxNik7YC4gTXkgc3BpZGVyIHNlbnNlcyBhcmUgdGluZ2xpbmcuIElmIGBudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aClgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHdlJ3JlIHBvdGVudGlhbGx5IGxvb2tpbmcgYXQgYW4gaW50ZWdlciB1bmRlcmZsb3cuIGBzYXRgIGlzIHByb2JhYmx5IGFuIHVuc2lnbmVkIGludGVnZXIuIFRoYXQgdW5kZXJmbG93IHdvdWxkIHJlc3VsdCBpbiBhIGh1Z2UgdmFsdWUgZm9yIGBzYXRgLiBBbmQgdGhlbiBkaXZpZGluZyB0aGF0IGJ5IGBzaXplb2YoX191MTYpYC4uLiB0aGF0J3MgYSByZWNpcGUgZm9yIGEgbWFzc2l2ZSBsb29wIG9yLCB3b3JzZSwgc29tZXRoaW5nIHVuZXhwZWN0ZWQuIFdlJ2QgaGF2ZSBhIHBvdGVudGlhbGx5IHVuYm91bmRlZCBsb29wIG9yIGNhbGN1bGF0aW9uIGJhc2VkIG9uIHRoZSB1bmRlcmZsb3dlZCBudW1iZXIuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3MgY29ycmVjdCwgYW5kIGZpbmQgYHNjdHBfcHJvY2Vzc19wYXJhbWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1Njo0MC4wMzUzMTM3ODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjg2OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfcHJvY2Vzc19wYXJhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTU3PXN0YXRpYyBzdHJ1Y3Qgc2N0cF9jb29raWVfcGFyYW0gKnNjdHBfcGFja19jb29raWUoXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtNjItXFx0XFx0XFx0XFx0XFx0Y29uc3QgX191OCAqcmF3X2FkZHJzLCBpbnQgYWRkcnNfbGVuKTtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6NjM6c3RhdGljIGludCBzY3RwX3Byb2Nlc3NfcGFyYW0oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTY0LVxcdFxcdFxcdCAgICAgIHVuaW9uIHNjdHBfcGFyYW1zIHBhcmFtLFxcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTIzNTc9aW50IHNjdHBfcHJvY2Vzc19pbml0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjM5Ny1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjM5ODpcXHRcXHRpZiAoIXNjdHBfcHJvY2Vzc19wYXJhbShhc29jLCBwYXJhbSwgcGVlcl9hZGRyLCBnZnApKVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMzk5LVxcdFxcdFxcdGdvdG8gY2xlYW5fdXA7XFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjU0MS0gKi9cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjU0MjpzdGF0aWMgaW50IHNjdHBfcHJvY2Vzc19wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjU0My1cXHRcXHRcXHQgICAgICB1bmlvbiBzY3RwX3BhcmFtcyBwYXJhbSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6NDAuMDk3MDA1MDdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMzYyMTgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgc2N0cF9wcm9jZXNzX3BhcmFtYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU0NUUCBwcm90b2NvbCBoYW5kbGVzIHBhcmFtZXRlcnMuIExpbmUgMjYwMCBpbiB0aGUgY29kZSBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIHByb2Nlc3Npbmcgb2YgcGFyYW1ldGVycywgc28gSSdsbCB6ZXJvIGluIHRoZXJlLiBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHRvIHBheSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hhdCBzcGVjaWZpYyBwYXJhbWV0ZXIgdHlwZXMgYXJlIGhhbmRsZWQgYW5kIGhvdy4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtY29tbWVudGVkLCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgbG9naWMsIGFuZCBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTUsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1Njo0My4zMzA2Mjk2NDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMTAsIkVycm9yIjoiYXJndW1lbnQgXCJGaXJzdExpbmVcIiBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnQiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogXCIyNTgwXCIsXG4gIFwiTGluZUNvdW50XCI6IFwiNTBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJhcmd1bWVudCBcXFwiRmlyc3RMaW5lXFxcIiBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnRcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6NDMuMzMwNjY2NzQ5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODcxNDA0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEZWJ1Z2dpbmcgdGhlIFZhcmlhYmxlIFwiRmlyc3RMaW5lXCIqKlxuXG5IbW0sIHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLi4uIHdhaXQgYSBtaW51dGUuIFwiRmlyc3RMaW5lXCIgaXMgc3VwcG9zZWQgdG8gYmUsIHlvdSBrbm93LCBhIGxpbmUgbnVtYmVyISBBIGxpbmUgbnVtYmVyIGluIGEgdGV4dCBmaWxlLiBBbmQgYmFzZWQgb24gaG93IGl0J3MgYmVpbmcgdXNlZCwgaXQgbmVlZHMgdG8gYmUgYW4gaW50ZWdlci4gSXQgaGFzIHRvIGJlLCBvdGhlcndpc2UsIHRoZSBkb3duc3RyZWFtIG9wZXJhdGlvbnMgYXJlIGdvaW5nIHRvIGNvbXBsZXRlbHkgZmFsbCBhcGFydC4gVGhlIHdob2xlIGxvZ2ljIGhpbmdlcyBvbiB0cmVhdGluZyB0aGF0IHZhcmlhYmxlIGFzIGEgd2hvbGUgbnVtYmVyIOKAkyBzb21ldGhpbmcgSSBjYW4gdXNlIGZvciBpbmRleGluZywgY2FsY3VsYXRpb25zLi4uIGV2ZXJ5dGhpbmcuIEJ1dCB0aGUgZXJyb3IgbWVzc2FnZSwgY2xlYXJseSwgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSB0eXBlIGRlY2xhcmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIHR5cGUgb2YgXCJGaXJzdExpbmVcIiBpcyBkZWZpbmVkIGNvcnJlY3RseSwgb3IgaXMgYmVpbmcgY29udmVydGVkIGNvcnJlY3RseSwgdG8gYW4gaW50ZWdlci4gVGhpcyBpcyBhIGNsYXNzaWMgdHlwZS1taXNtYXRjaCBwcm9ibGVtLCBJJ3ZlIHNlZW4gaXQgYSB0aG91c2FuZCB0aW1lcy4gSSdkIGJldHRlciBnbyBhbmQgcXVpY2tseSB0cmFjayBkb3duIHRoZSBkZWNsYXJhdGlvbiBvZiBcIkZpcnN0TGluZVwiIGFuZCBhbnkgcG9pbnRzIHdoZXJlIGl04oCZcyBiZWluZyBhc3NpZ25lZCBhIHZhbHVlLiBHb3R0YSBtYWtlIHN1cmUgaXQncyAqZGVmaW5pdGVseSogYW4gaW50ZWdlciwgb3IgdGhhdCBpdCdzIGJlaW5nIGV4cGxpY2l0bHkgY2FzdCBhcyBvbmUgaWYgaXQncyBjb21pbmcgZnJvbSBzb21lIG90aGVyIHNvdXJjZS4gVGhpcyBzaG91bGQgYmUgYSBxdWljayBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NjAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6NDYuNTE3ODE4MTMzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjAyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvc21fbWFrZV9jaHVuay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1ODA6XFx0XFx0XFx0YnJlYWs7XFxuMjU4MTpcXHRcXG4yNTgyOlxcdFxcdGNhc2UgU0NUUF9QQVJBTV9DT09LSUVfUFJFU0VSVkFUSVZFOlxcbjI1ODM6XFx0XFx0XFx0aWYgKCFuZXQtXFx1MDAzZXNjdHAuY29va2llX3ByZXNlcnZlX2VuYWJsZSlcXG4yNTg0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI1ODU6XFx0XFxuMjU4NjpcXHRcXHRcXHRzdGFsZSA9IG50b2hsKHBhcmFtLmxpZmUtXFx1MDAzZWxpZmVzcGFuX2luY3JlbWVudCk7XFxuMjU4NzpcXHRcXG4yNTg4OlxcdFxcdFxcdC8qIFN1Z2dlc3RlZCBDb29raWUgTGlmZSBzcGFuIGluY3JlbWVudCdzIHVuaXQgaXMgbXNlYyxcXG4yNTg5OlxcdFxcdFxcdCAqICgxLzEwMDBzZWMpLlxcbjI1OTA6XFx0XFx0XFx0ICovXFxuMjU5MTpcXHRcXHRcXHRhc29jLVxcdTAwM2Vjb29raWVfbGlmZSA9IGt0aW1lX2FkZF9tcyhhc29jLVxcdTAwM2Vjb29raWVfbGlmZSwgc3RhbGUpO1xcbjI1OTI6XFx0XFx0XFx0YnJlYWs7XFxuMjU5MzpcXHRcXG4yNTk0OlxcdFxcdGNhc2UgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUzpcXG4yNTk1OlxcdFxcdFxcdC8qIFR1cm4gb2ZmIHRoZSBkZWZhdWx0IHZhbHVlcyBmaXJzdCBzbyB3ZSdsbCBrbm93IHdoaWNoXFxuMjU5NjpcXHRcXHRcXHQgKiBvbmVzIGFyZSByZWFsbHkgc2V0IGJ5IHRoZSBwZWVyLlxcbjI1OTc6XFx0XFx0XFx0ICovXFxuMjU5ODpcXHRcXHRcXHRhc29jLVxcdTAwM2VwZWVyLmlwdjRfYWRkcmVzcyA9IDA7XFxuMjU5OTpcXHRcXHRcXHRhc29jLVxcdTAwM2VwZWVyLmlwdjZfYWRkcmVzcyA9IDA7XFxuMjYwMDpcXHRcXG4yNjAxOlxcdFxcdFxcdC8qIEFzc3VtZSB0aGF0IHBlZXIgc3VwcG9ydHMgdGhlIGFkZHJlc3MgZmFtaWx5XFxuMjYwMjpcXHRcXHRcXHQgKiBieSB3aGljaCBpdCBzZW5kcyBhIHBhY2tldC5cXG4yNjAzOlxcdFxcdFxcdCAqL1xcbjI2MDQ6XFx0XFx0XFx0aWYgKHBlZXJfYWRkci1cXHUwMDNlc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KVxcbjI2MDU6XFx0XFx0XFx0XFx0YXNvYy1cXHUwMDNlcGVlci5pcHY2X2FkZHJlc3MgPSAxO1xcbjI2MDY6XFx0XFx0XFx0ZWxzZSBpZiAocGVlcl9hZGRyLVxcdTAwM2VzYS5zYV9mYW1pbHkgPT0gQUZfSU5FVClcXG4yNjA3OlxcdFxcdFxcdFxcdGFzb2MtXFx1MDAzZXBlZXIuaXB2NF9hZGRyZXNzID0gMTtcXG4yNjA4OlxcdFxcbjI2MDk6XFx0XFx0XFx0LyogQ3ljbGUgdGhyb3VnaCBhZGRyZXNzIHR5cGVzOyBhdm9pZCBkaXZpZGUgYnkgMC4gKi9cXG4yNjEwOlxcdFxcdFxcdGlmIChudG9ocyhwYXJhbS5wLVxcdTAwM2VsZW5ndGgpIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSlcXG4yNjExOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI2MTI6XFx0XFxuMjYxMzpcXHRcXHRcXHRzYXQgPSBudG9ocyhwYXJhbS5wLVxcdTAwM2VsZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTtcXG4yNjE0OlxcdFxcdFxcdGlmIChzYXQpXFxuMjYxNTpcXHRcXHRcXHRcXHRzYXQgLz0gc2l6ZW9mKF9fdTE2KTtcXG4yNjE2OlxcdFxcbjI2MTc6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNhdDsgKytpKSB7XFxuMjYxODpcXHRcXHRcXHRcXHRzd2l0Y2ggKHBhcmFtLnNhdC1cXHUwMDNldHlwZXNbaV0pIHtcXG4yNjE5OlxcdFxcdFxcdFxcdGNhc2UgU0NUUF9QQVJBTV9JUFY0X0FERFJFU1M6XFxuMjYyMDpcXHRcXHRcXHRcXHRcXHRhc29jLVxcdTAwM2VwZWVyLmlwdjRfYWRkcmVzcyA9IDE7XFxuMjYyMTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNjIyOlxcdFxcbjI2MjM6XFx0XFx0XFx0XFx0Y2FzZSBTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUzpcXG4yNjI0OlxcdFxcdFxcdFxcdFxcdGlmIChQRl9JTkVUNiA9PSBhc29jLVxcdTAwM2ViYXNlLnNrLVxcdTAwM2Vza19mYW1pbHkpXFxuMjYyNTpcXHRcXHRcXHRcXHRcXHRcXHRhc29jLVxcdTAwM2VwZWVyLmlwdjZfYWRkcmVzcyA9IDE7XFxuMjYyNjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNjI3OlxcdFxcbjI2Mjg6XFx0XFx0XFx0XFx0ZGVmYXVsdDogLyogSnVzdCBpZ25vcmUgYW55dGhpbmcgZWxzZS4gICovXFxuMjYyOTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6NDYuNTE4OTQxNzgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyODg2NDQ0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBSZWFkIGluIFNDVFAgUGFyYW1ldGVyIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBTQ1RQIGNvZGUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHBhcmFtZXRlciBoYW5kbGluZy4gSXQgc2VlbXMgbGlrZSB0aGUgdmFyaWFibGUgYHNhdGAgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLCBhbmQgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGhpbmdlcyBvbiBob3cgYHNhdGAgaXMgY2FsY3VsYXRlZC4gSWYgYG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKWAgaXMgbGVzcyB0aGFuIGBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCwgdGhhdCdzIGEgcHJvYmxlbSwgYmVjYXVzZSBgc2F0YCB1bmRlcmZsb3dzLiBEaXZpZGluZyBpdCBieSBgc2l6ZW9mKF9fdTE2KWAgdGhlbiBjcmVhdGVzIGEgbWFzc2l2ZSwgdW5pbnRlbmRlZCB2YWx1ZSBmb3IgYHNhdGAuXG5cblRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoZSBzdWJzZXF1ZW50IGxvb3A6IGBmb3IgKGkgPSAwOyBpIFx1MDAzYyBzYXQ7ICsraSlgLiBCZWNhdXNlIGBzYXRgIGlzIG5vdyBhbiBlbm9ybW91cyBudW1iZXIsIHRoaXMgbG9vcCB3aWxsIGl0ZXJhdGUgZmFyIGJleW9uZCB0aGUgaW50ZW5kZWQgYm91bmRzLCBhdHRlbXB0aW5nIHRvIHJlYWQgYHBhcmFtLnNhdC1cdTAwM2V0eXBlc1tpXWAuIEkga25vdyBgcGFyYW0uc2F0YCBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIHBhY2tldCBkYXRhLCB3aGljaCBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgc2NlbmFyaW8uXG5cbk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIktBU0FOIHdpbGwgY2F0Y2ggdGhpcywgcmlnaHQ/XCIuIFJlYWRpbmcgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBidWZmZXIsIHdoaWNoIGlzIGxpa2VseSBhbiBza2Igb3Igc2ltaWxhciwgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGRldGVjdGlvbiBmb3IgS0FTQU4uIE15IG5leHQgdGhvdWdodCBpcyBcImlzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkP1wiLCBidXQsIG5vLCBiZWNhdXNlIHRoZSBjb2RlIGlzIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQsIG5vdCBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgcmVnaW9uIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBUaGUgYnVmZmVyIGlzIGluaXRpYWxpemVkIHVwIHRvIHRoZSBwYWNrZXQgbGVuZ3RoLCBzbyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaXMgd2hhdCBpdCBpcy5cblxuR2l2ZW4gdGhhdCB0aGUgcGFja2V0IGNvbWVzIGZyb20gdGhlIG5ldHdvcmssIHRoZSBidWZmZXIgc2hvdWxkIGJlIGluaXRpYWxpemVkIHVwIHRvIHRoZSBwYWNrZXQgbGVuZ3RoLiBTbywgS0FTQU4gKnNob3VsZCogYmUgYWJsZSB0byBkZXRlY3QgdGhlIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhpcyBpcyBsb29raW5nIHByb21pc2luZzsgS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gZmxhZyB0aGlzLlxuXG5JJ2xsIGNoZWNrIGBzY3RwX3ZlcmlmeV9wYXJhbWAgYXJvdW5kIGxpbmUgMjE2OSwganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQ0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6NTIuODA3NTg5MzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTUwOlxcdHN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCxcXG4yMTUxOlxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbjIxNTI6XFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4yMTUzOlxcdFxcdFxcdFxcdFxcdFxcdCAgdW5pb24gc2N0cF9wYXJhbXMgcGFyYW0sXFxuMjE1NDpcXHRcXHRcXHRcXHRcXHRcXHQgIGVudW0gc2N0cF9jaWQgY2lkLFxcbjIxNTU6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXFxuMjE1NjpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY3RwX2NodW5rICoqZXJyX2NodW5rKVxcbjIxNTc6XFx0e1xcbjIxNTg6XFx0XFx0c3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICpobWFjcztcXG4yMTU5OlxcdFxcdGludCByZXR2YWwgPSBTQ1RQX0lFUlJPUl9OT19FUlJPUjtcXG4yMTYwOlxcdFxcdF9fdTE2IG5fZWx0LCBpZCA9IDA7XFxuMjE2MTpcXHRcXHRpbnQgaTtcXG4yMTYyOlxcdFxcbjIxNjM6XFx0XFx0LyogRklYTUUgLSBUaGlzIHJvdXRpbmUgaXMgbm90IGxvb2tpbmcgYXQgZWFjaCBwYXJhbWV0ZXIgcGVyIHRoZVxcbjIxNjQ6XFx0XFx0ICogY2h1bmsgdHlwZSwgaS5lLiwgdW5yZWNvZ25pemVkIHBhcmFtZXRlcnMgc2hvdWxkIGJlIGZ1cnRoZXJcXG4yMTY1OlxcdFxcdCAqIGlkZW50aWZpZWQgYmFzZWQgb24gdGhlIGNodW5rIGlkLlxcbjIxNjY6XFx0XFx0ICovXFxuMjE2NzpcXHRcXG4yMTY4OlxcdFxcdHN3aXRjaCAocGFyYW0ucC1cXHUwMDNldHlwZSkge1xcbjIxNjk6XFx0XFx0Y2FzZSBTQ1RQX1BBUkFNX0lQVjRfQUREUkVTUzpcXG4yMTcwOlxcdFxcdGNhc2UgU0NUUF9QQVJBTV9JUFY2X0FERFJFU1M6XFxuMjE3MTpcXHRcXHRjYXNlIFNDVFBfUEFSQU1fQ09PS0lFX1BSRVNFUlZBVElWRTpcXG4yMTcyOlxcdFxcdGNhc2UgU0NUUF9QQVJBTV9TVEFURV9DT09LSUU6XFxuMjE3MzpcXHRcXHRjYXNlIFNDVFBfUEFSQU1fSEVBUlRCRUFUX0lORk86XFxuMjE3NDpcXHRcXHRjYXNlIFNDVFBfUEFSQU1fVU5SRUNPR05JWkVEX1BBUkFNRVRFUlM6XFxuMjE3NTpcXHRcXHRjYXNlIFNDVFBfUEFSQU1fRUNOX0NBUEFCTEU6XFxuMjE3NjpcXHRcXHRcXHRicmVhaztcXG4yMTc3OlxcdFxcbjIxNzg6XFx0XFx0Y2FzZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTOlxcbjIxNzk6XFx0XFx0XFx0aWYgKG50b2hzKHBhcmFtLnAtXFx1MDAzZWxlbmd0aCkgXFx1MDAzYyBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7XFxuMjE4MDpcXHRcXHRcXHRcXHRzY3RwX3Byb2Nlc3NfaW52X3BhcmFtbGVuZ3RoKGFzb2MsIHBhcmFtLnAsXFxuMjE4MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGNodW5rLCBlcnJfY2h1bmspO1xcbjIxODI6XFx0XFx0XFx0XFx0cmV0dmFsID0gU0NUUF9JRVJST1JfQUJPUlQ7XFxuMjE4MzpcXHRcXHRcXHR9XFxuMjE4NDpcXHRcXHRcXHRicmVhaztcXG4yMTg1OlxcdFxcdGNhc2UgU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDpcXG4yMTg2OlxcdFxcdFxcdGlmIChudG9ocyhwYXJhbS5wLVxcdTAwM2VsZW5ndGgpICE9IHNpemVvZigqcGFyYW0uYWluZCkpIHtcXG4yMTg3OlxcdFxcdFxcdFxcdHNjdHBfcHJvY2Vzc19pbnZfcGFyYW1sZW5ndGgoYXNvYywgcGFyYW0ucCxcXG4yMTg4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgY2h1bmssIGVycl9jaHVuayk7XFxuMjE4OTpcXHRcXHRcXHRcXHRyZXR2YWwgPSBTQ1RQX0lFUlJPUl9BQk9SVDtcXG4yMTkwOlxcdFxcdFxcdH1cXG4yMTkxOlxcdFxcdFxcdGJyZWFrO1xcbjIxOTI6XFx0XFxuMjE5MzpcXHRcXHRjYXNlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0VYVDpcXG4yMTk0OlxcdFxcdFxcdGlmICghc2N0cF92ZXJpZnlfZXh0X3BhcmFtKG5ldCwgZXAsIHBhcmFtKSlcXG4yMTk1OlxcdFxcdFxcdFxcdHJldHVybiBTQ1RQX0lFUlJPUl9BQk9SVDtcXG4yMTk2OlxcdFxcdFxcdGJyZWFrO1xcbjIxOTc6XFx0XFxuMjE5ODpcXHRcXHRjYXNlIFNDVFBfUEFSQU1fU0VUX1BSSU1BUlk6XFxuMjE5OTpcXHRcXHRcXHRpZiAoIWVwLVxcdTAwM2Vhc2NvbmZfZW5hYmxlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1Njo1Mi44MDc3NjA3NloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDExNTIxODExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGJvdW5kcyBjaGVjayBhZGRpdGlvbiDigJMgc3BlY2lmaWNhbGx5LCBpdCdzIHByZXZlbnRpbmcgYW4gaW50ZWdlciB1bmRlcmZsb3cgaW4gU0NUUCBwYXJhbWV0ZXIgaGFuZGxpbmcuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gYHBhcmFtLnNhdC1cdTAwM2V0eXBlc1tpXWAuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IGBwYXJhbWAgaXMgcGFydCBvZiB0aGUgcmVjZWl2ZWQgY2h1bmssIHdoaWNoIG1lYW5zIGFueSBvdXQtb2YtYm91bmRzIHJlYWQgaXMgZ29pbmcgdG8gYmUgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCBvbiB0aGUgcGFja2V0IGJ1ZmZlciAoYHNrYmApLiBLQVNBTiwgaW4gaXRzIGluZmluaXRlIHdpc2RvbSwgaXMgKmRlc2lnbmVkKiB0byBzbmlmZiBvdXQgdGhlc2Uga2luZHMgb2YgcmVhZHMuIEl0IGRvZXNuJ3QgbWF0dGVyIGlmIGl0J3Mgc2xhYi1vdXQtb2YtYm91bmRzIG9yIGdsb2JhbC1vdXQtb2YtYm91bmRzOyBLQVNBTiB3aWxsIGRldGVjdCBpdC5cblxuSSBkaWQgcXVpY2tseSBjb25zaWRlciBpZiB0aGlzIGNvdWxkIGJlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBidXQgaXQncyBub3QuIFRoZSBtZW1vcnkgYmVpbmcgYWNjZXNzZWQgaXMgZWl0aGVyOlxuXG4xLiAgT3V0LW9mLWJvdW5kcyBvZiB0aGUgYHNrYmAsIHdoaWNoIEtBU0FOIGNhdGNoZXMuXG4yLiAgV2l0aGluIHRoZSBgc2tiYCBidXQgcGFzdCB0aGUgbGVnaXRpbWF0ZSBwYXJhbWV0ZXIgbGVuZ3RoLiBJbiB0aGlzIHNjZW5hcmlvLCBpdCBpcyByZWFkaW5nICpvdGhlciogcGFyYW1ldGVycyBvciBwYWRkaW5nIHdpdGhpbiB0aGUgYHNrYmAuIFdoaWxlIHRoaXMgY2FuIGxlYWQgdG8gbG9naWMgYnVncyAoaW50ZXJwcmV0aW5nIG90aGVyIHBhcmFtZXRlcnMgaW5jb3JyZWN0bHkpLCBpdCdzIG5vdCBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gYG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHdoaWNoIGlzIGEgdGV4dGJvb2sgbWlzc2luZyBsZW5ndGggY2hlY2suIFRoZSB1bmRlcmZsb3cgY2F1c2VzIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQuIFNpbmNlIHRoZSByZWFkIGlzIGd1YXJhbnRlZWQgdG8gYmUgd2l0aGluIHRoZSBgc2tiYCAqb3IqIG91dC1vZi1ib3VuZHMsIGl0J3MgYSBLQVNBTiBwcm9ibGVtLCBub3QgYSBLTVNBTiBwcm9ibGVtLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBoZXJlLlxuXG5UaGVyZWZvcmUsIG5vIEtNU0FOIHNlc3Npb24gaXMgbmVlZGVkLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgZm9yIHRoZSBgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFU2AgcGFyYW1ldGVyIGluIFNDVFAgY2h1bmtzIHRvIHByZXZlbnQgYW4gaW50ZWdlciB1bmRlcmZsb3cuIFdpdGhvdXQgdGhlIGNoZWNrLCB0aGUgY2FsY3VsYXRpb24gYHNhdCA9IG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcilgIGNhbiB1bmRlcmZsb3csIGxlYWRpbmcgdG8gYSBsYXJnZSB1bnNpZ25lZCBpbnRlZ2VyIGFuZCBhbiBvdXQtb2YtYm91bmRzIGxvb3Agb24gdGhlIHBhY2tldCBidWZmZXIgKGBza2JgKS4gS0FTQU4gaXMgdGhlIHByb3BlciB0b29sIGZvciBkZXRlY3RpbmcgdGhpcyBraW5kIG9mIHZ1bG5lcmFiaWxpdHkgYmVjYXVzZSB0aGlzIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IGFuZCBub3QgdGhlIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mzg4LCJPdXRwdXRUb2tlbnMiOjI1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU3OjAyLjkyMjk4MjI3NloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCBjaGVjayBmb3IgdGhlIGBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTYCBwYXJhbWV0ZXIgaW4gU0NUUCBjaHVua3MgdG8gcHJldmVudCBhbiBpbnRlZ2VyIHVuZGVyZmxvdy4gV2l0aG91dCB0aGlzIGNoZWNrLCBpZiBgcGFyYW0ucC1cXHUwMDNlbGVuZ3RoYCBpcyBsZXNzIHRoYW4gYHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcilgLCB0aGUgY2FsY3VsYXRpb24gYHNhdCA9IG50b2hzKHBhcmFtLnAtXFx1MDAzZWxlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCB1bmRlcmZsb3dzLCByZXN1bHRpbmcgaW4gYSB2ZXJ5IGxhcmdlIHVuc2lnbmVkIGludGVnZXIuIFRoaXMgY2F1c2VzIHRoZSBzdWJzZXF1ZW50IGxvb3AgdG8gaXRlcmF0ZSBvdXQgb2YgYm91bmRzLCByZWFkaW5nIGZyb20gYHBhcmFtLnNhdC1cXHUwMDNldHlwZXNbaV1gLiBcXG5cXG5UaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBvbiB0aGUgcGFja2V0IGJ1ZmZlciAoc2tiKS4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChzbGFiLW91dC1vZi1ib3VuZHMgb3IgZ2xvYmFsLW91dC1vZi1ib3VuZHMpLiBUaGVyZSBpcyBubyBhbGxvY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIGludm9sdmVkIGluIHRoaXMgYnVnLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgS0FTQU4gd2lsbCBlZmZlY3RpdmVseSBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmVzdWx0aW5nIGZyb20gdGhpcyBtaXNzaW5nIGxlbmd0aCBjaGVjay5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGZvciB0aGUgYFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVNgIHBhcmFtZXRlciBpbiBTQ1RQIGNodW5rcyB0byBwcmV2ZW50IGFuIGludGVnZXIgdW5kZXJmbG93LiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBwYXJhbS5wLVxcdTAwM2VsZW5ndGhgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHRoZSBjYWxjdWxhdGlvbiBgc2F0ID0gbnRvaHMocGFyYW0ucC1cXHUwMDNlbGVuZ3RoKSAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcilgIHVuZGVyZmxvd3MsIHJlc3VsdGluZyBpbiBhIHZlcnkgbGFyZ2UgdW5zaWduZWQgaW50ZWdlci4gVGhpcyBjYXVzZXMgdGhlIHN1YnNlcXVlbnQgbG9vcCB0byBpdGVyYXRlIG91dCBvZiBib3VuZHMsIHJlYWRpbmcgZnJvbSBgcGFyYW0uc2F0LVxcdTAwM2V0eXBlc1tpXWAuIFxcblxcblRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IG9uIHRoZSBwYWNrZXQgYnVmZmVyIChza2IpLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKHNsYWItb3V0LW9mLWJvdW5kcyBvciBnbG9iYWwtb3V0LW9mLWJvdW5kcykuIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBLQVNBTiB3aWxsIGVmZmVjdGl2ZWx5IGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSB0aGlzIG1pc3NpbmcgbGVuZ3RoIGNoZWNrLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow52j6l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 09:39:32 +0000 UTC FinishedAt: 2026-08-18 09:57:03 +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": "21040c7f931502070dcc66bb0f1aeed07dec032b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "21040c7f931502070dcc66bb0f1aeed07dec032b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "f69c1d1f-9805-4051-8bbb-0d65b8aeb908" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_verify_init", "sctp_process_init" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX3ZlcmlmeV9pbml0JiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19pbml0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCBjaGVjayBmb3IgdGhlIGBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTYCBwYXJhbWV0ZXIgaW4gU0NUUCBjaHVua3MgdG8gcHJldmVudCBhbiBpbnRlZ2VyIHVuZGVyZmxvdy4gV2l0aG91dCB0aGlzIGNoZWNrLCBpZiBgcGFyYW0ucC1cdTAwM2VsZW5ndGhgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHRoZSBjYWxjdWxhdGlvbiBgc2F0ID0gbnRvaHMocGFyYW0ucC1cdTAwM2VsZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAgdW5kZXJmbG93cywgcmVzdWx0aW5nIGluIGEgdmVyeSBsYXJnZSB1bnNpZ25lZCBpbnRlZ2VyLiBUaGlzIGNhdXNlcyB0aGUgc3Vic2VxdWVudCBsb29wIHRvIGl0ZXJhdGUgb3V0IG9mIGJvdW5kcywgcmVhZGluZyBmcm9tIGBwYXJhbS5zYXQtXHUwMDNldHlwZXNbaV1gLiBcblxuVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgb24gdGhlIHBhY2tldCBidWZmZXIgKHNrYikuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAoc2xhYi1vdXQtb2YtYm91bmRzIG9yIGdsb2JhbC1vdXQtb2YtYm91bmRzKS4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIEtBU0FOIHdpbGwgZWZmZWN0aXZlbHkgY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIHRoaXMgbWlzc2luZyBsZW5ndGggY2hlY2suJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVuZGVyZmxvdyBvciBkaXZpZGUtYnktemVybyBidWcgd2hlbiBwcm9jZXNzaW5nIHRoZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTIHBhcmFtZXRlciBpbiBTQ1RQIElOSVQgY2h1bmtzLiBJdCBhZGRzIGxlbmd0aCBjaGVja3MgaW4gc2N0cF92ZXJpZnlfcGFyYW0gYW5kIHNjdHBfcHJvY2Vzc19wYXJhbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldHdvcmsgcGFja2V0IHBhcnNpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiM2ZjZDM5YTYxNGVjYmY5Y2QyY2ZjYmFmZGUxYTE1N2RkMzVkNWRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDk6NTY6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jXG5pbmRleCAyMzZlMjVhYmM3YTQyLi5lYmY3OTE5Njk0NTRiIDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcbkBAIC0yMTY5LDEyICYjNDM7MjE2OSwxOSBAQCBzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3ZlcmlmeV9wYXJhbShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRjYXNlIFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTOlxuIFx0Y2FzZSBTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUzpcbiBcdGNhc2UgU0NUUF9QQVJBTV9DT09LSUVfUFJFU0VSVkFUSVZFOlxuLVx0Y2FzZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTOlxuIFx0Y2FzZSBTQ1RQX1BBUkFNX1NUQVRFX0NPT0tJRTpcbiBcdGNhc2UgU0NUUF9QQVJBTV9IRUFSVEJFQVRfSU5GTzpcbiBcdGNhc2UgU0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSUzpcbiBcdGNhc2UgU0NUUF9QQVJBTV9FQ05fQ0FQQUJMRTpcbiBcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUzpcbiYjNDM7XHRcdGlmIChudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHtcbiYjNDM7XHRcdFx0c2N0cF9wcm9jZXNzX2ludl9wYXJhbWxlbmd0aChhc29jLCBwYXJhbS5wLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGNodW5rLCBlcnJfY2h1bmspO1xuJiM0MztcdFx0XHRyZXR2YWwgPSBTQ1RQX0lFUlJPUl9BQk9SVDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EOlxuIFx0XHRpZiAobnRvaHMocGFyYW0ucC1cdTAwM2VsZW5ndGgpICE9IHNpemVvZigqcGFyYW0uYWluZCkpIHtcbiBcdFx0XHRzY3RwX3Byb2Nlc3NfaW52X3BhcmFtbGVuZ3RoKGFzb2MsIHBhcmFtLnAsXG5AQCAtMjYwMCw2ICYjNDM7MjYwNyw5IEBAIHN0YXRpYyBpbnQgc2N0cF9wcm9jZXNzX3BhcmFtKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuIFx0XHRcdGFzb2MtXHUwMDNlcGVlci5pcHY0X2FkZHJlc3MgPSAxO1xuIFxuIFx0XHQvKiBDeWNsZSB0aHJvdWdoIGFkZHJlc3MgdHlwZXM7IGF2b2lkIGRpdmlkZSBieSAwLiAqL1xuJiM0MztcdFx0aWYgKG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRzYXQgPSBudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpO1xuIFx0XHRpZiAoc2F0KVxuIFx0XHRcdHNhdCAvPSBzaXplb2YoX191MTYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF92ZXJpZnlfaW5pdCYjMzQ7LAogICAgJiMzNDtzY3RwX3Byb2Nlc3NfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1bmRlcmZsb3cgb3IgZGl2aWRlLWJ5LXplcm8gYnVnIHdoZW4gcHJvY2Vzc2luZyB0aGUgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUyBwYXJhbWV0ZXIgaW4gU0NUUCBJTklUIGNodW5rcy4gSXQgYWRkcyBsZW5ndGggY2hlY2tzIGluIHNjdHBfdmVyaWZ5X3BhcmFtIGFuZCBzY3RwX3Byb2Nlc3NfcGFyYW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBuZXR3b3JrIHBhY2tldCBwYXJzaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjNmY2QzOWE2MTRlY2JmOWNkMmNmY2JhZmRlMWExNTdkZDM1ZDVkYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDA5OjU2OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCmluZGV4IDIzNmUyNWFiYzdhNDIuLmViZjc5MTk2OTQ1NGIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKQEAgLTIxNjksMTIgJiM0MzsyMTY5LDE5IEBAIHN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCwKIAljYXNlIFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTOgogCWNhc2UgU0NUUF9QQVJBTV9JUFY2X0FERFJFU1M6CiAJY2FzZSBTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkU6Ci0JY2FzZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTOgogCWNhc2UgU0NUUF9QQVJBTV9TVEFURV9DT09LSUU6CiAJY2FzZSBTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPOgogCWNhc2UgU0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSUzoKIAljYXNlIFNDVFBfUEFSQU1fRUNOX0NBUEFCTEU6CiAJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVM6CiYjNDM7CQlpZiAobnRvaHMocGFyYW0ucC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHsKJiM0MzsJCQlzY3RwX3Byb2Nlc3NfaW52X3BhcmFtbGVuZ3RoKGFzb2MsIHBhcmFtLnAsCiYjNDM7CQkJCQkJICAgICBjaHVuaywgZXJyX2NodW5rKTsKJiM0MzsJCQlyZXR2YWwgPSBTQ1RQX0lFUlJPUl9BQk9SVDsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwogCWNhc2UgU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDoKIAkJaWYgKG50b2hzKHBhcmFtLnAtJmd0O2xlbmd0aCkgIT0gc2l6ZW9mKCpwYXJhbS5haW5kKSkgewogCQkJc2N0cF9wcm9jZXNzX2ludl9wYXJhbWxlbmd0aChhc29jLCBwYXJhbS5wLApAQCAtMjYwMCw2ICYjNDM7MjYwNyw5IEBAIHN0YXRpYyBpbnQgc2N0cF9wcm9jZXNzX3BhcmFtKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJYXNvYy0mZ3Q7cGVlci5pcHY0X2FkZHJlc3MgPSAxOwogCiAJCS8qIEN5Y2xlIHRocm91Z2ggYWRkcmVzcyB0eXBlczsgYXZvaWQgZGl2aWRlIGJ5IDAuICovCiYjNDM7CQlpZiAobnRvaHMocGFyYW0ucC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCXNhdCA9IG50b2hzKHBhcmFtLnAtJmd0O2xlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOwogCQlpZiAoc2F0KQogCQkJc2F0IC89IHNpemVvZihfX3UxNik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0NUUCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIG1vZGlmeWluZyBgbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jYC4gTG9va3MgbGlrZSB0aGV5JiMzOTtyZSBhZGRpbmcgYSB2aXRhbCBjaGVjayBmb3IgdGhlIGxlbmd0aCBvZiB0aGUgYFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVNgIHBhcmFtZXRlciBpbiBib3RoIGBzY3RwX3ZlcmlmeV9wYXJhbWAgYW5kIGBzY3RwX3Byb2Nlc3NfcGFyYW1gLiBUaGlzIGlzIGdvb2Q7IHRoZSBjb2RlJiMzOTtzIGdldHRpbmcgbW9yZSByb2J1c3QuIFNwZWNpZmljYWxseSwgdGhlIGFkZGVkIGNoZWNrcyBhZGRyZXNzIHBvdGVudGlhbCBpc3N1ZXMgbGlrZSB1bmRlcmZsb3cgb3IgYSBkaXZpZGUtYnktemVybyBpZiBhbiBpbnZhbGlkIHBhcmFtZXRlciBsZW5ndGggaXMgcHJvdmlkZWQuIEluIGBzY3RwX3ZlcmlmeV9wYXJhbWAsIHRoZXkmIzM5O3JlIGhhbmRsaW5nIGNhc2VzIHdoZXJlIHRoZSBsZW5ndGggaXMgdG9vIHNob3J0IGFuZCByZXR1cm5pbmcgYW4gZXJyb3IsIGFuZCBpbiBgc2N0cF9wcm9jZXNzX3BhcmFtYCwgdGhleSYjMzk7cmUgYmFpbGluZyBvdXQgZWFybHkgdG8gcHJldmVudCB0aGF0IGRpdmlkZS1ieS16ZXJvIGZyb20gaGFwcGVuaW5nLiBTb2xpZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIHByZWNpc2VseSB3aGF0IHdlIHdhbnQgdG8gc2VlLgoKR2l2ZW4gdGhpcyB0eXBlIG9mIGNoYW5nZSwgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0LiBTZW5kaW5nIG1hbGZvcm1lZCBwYWNrZXRzIHdpdGggdGhpcyBwYXJhbWV0ZXIgd2lsbCBub3cgZ2l2ZSB1cyBuZXcgY29kZSBwYXRocyB0byBsb29rIGF0LiBXZSBuZWVkIHRvIGV4cGxvcmUgdGhlc2UgbmV3IGNoZWNrcyBhbmQgc2VlIGhvdyB3ZWxsIHRoZXkmIzM5O3JlIGhhbmRsaW5nIGVkZ2UgY2FzZXMuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGdldCBhdCB0aGlzIHVzaW5nIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgSVBfU0NUUGAgaXMgbGlrZWx5IHRoZSBtYWluIG9uZSB3ZSYjMzk7cmUgbG9va2luZyBmb3IsIGJ1dCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBnbyBjaGVjayBgbmV0L3NjdHAvS2NvbmZpZ2AuIEkmIzM5O2QgbXVjaCByYXRoZXIgdmVyaWZ5IHdoYXQgY2FuIGJlIHR1cm5lZCBvbiBvciBvZmYgd2hlbiBJIHN0YXJ0IHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NDVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL0tjb25maWctNS1cbm5ldC9zY3RwL0tjb25maWc6NjptZW51Y29uZmlnIElQX1NDVFBcbm5ldC9zY3RwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBTQ1RQIFByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0NUUCBQYXJhbWV0ZXIgVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYElQX1NDVFBgIGNvbmZpZ3VyYXRpb24gaGVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYHNjdHBfdmVyaWZ5X3BhcmFtYCBhbmQgYHNjdHBfcHJvY2Vzc19wYXJhbWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBoYW5kbGUgU0NUUCBwYXJhbWV0ZXJzLiBUaGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIGtub3cgaXMgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpY2FsbHkgZGVmaW5lZCBvciBpZiB0aGV5IGFyZSBwb3RlbnRpYWxseSB2YXJpYWJsZS4gTGV0JiMzOTtzIHNlZS4uLiBgc2N0cF92ZXJpZnlfcGFyYW1gIGlzIHN0YXRpYy4gQWxyaWdodCwgYW5kIGBzY3RwX3Byb2Nlc3NfcGFyYW1gIGlzIGFsc28gc3RhdGljLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSAqdXNlZCosIEkgc2hvdWxkIGNoZWNrIHRoZSBjYWxsaW5nIGNvbnRleHRzLiBUaW1lIHRvIGRpdmUgaW50byBgbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jYC4gVGhhdCBmaWxlIHNob3VsZCBnaXZlIG1lIGluc2lnaHQgaW50byBob3cgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCB3aXRoaW4gdGhlIFNDVFAgc3RhdGUgbWFjaGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX3ZlcmlmeV9wYXJhbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MjA5Nz1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3Byb2Nlc3NfdW5rX3BhcmFtKFxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMTQ5LSAqL1xubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjIxNTA6c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF92ZXJpZnlfcGFyYW0oc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIxNTEtXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz0yMjkxPWludCBzY3RwX3ZlcmlmeV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMzM0LVx0c2N0cF93YWxrX3BhcmFtcyhwYXJhbSwgcGVlcl9pbml0KSB7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjMzNTpcdFx0cmVzdWx0ID0gc2N0cF92ZXJpZnlfcGFyYW0obmV0LCBlcCwgYXNvYywgcGFyYW0sIGNpZCxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMzM2LVx0XHRcdFx0XHQgICBjaHVuaywgZXJycCk7XG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTI1NDI9c3RhdGljIGludCBzY3RwX3Byb2Nlc3NfcGFyYW0oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI3NDYtXHRcdC8qIEFueSB1bnJlY29nbml6ZWQgcGFyYW1ldGVycyBzaG91bGQgaGF2ZSBiZWVuIGNhdWdodFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjI3NDc6XHRcdCAqIGFuZCBoYW5kbGVkIGJ5IHNjdHBfdmVyaWZ5X3BhcmFtKCkgd2hpY2ggc2hvdWxkIGJlXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjc0OC1cdFx0ICogY2FsbGVkIHByaW9yIHRvIHRoaXMgcm91dGluZS4gIFNpbXBseSBsb2cgdGhlIGVycm9yXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwNAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyB0aG91Z2ggaXQgd2VyZSBteSB0cmFpbiBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byBTQ1RQIFBhcmFtZXRlciBWZXJpZmljYXRpb24qKgoKT2theSwgc28gYHNjdHBfdmVyaWZ5X2luaXRgIGlzIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aC4gVGhhdCYjMzk7cyBhIGdvb2QgZW50cnkgcG9pbnQuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBzY3RwX3ZlcmlmeV9pbml0YCBpcyBjYWxsaW5nIGBzY3RwX3ZlcmlmeV9wYXJhbWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgdG8gZW5zdXJlIGFueSBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzIGFyZSB2YWxpZC4gTm93LCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGFuZCBsaWtlbHkgd2hlcmUgYW55IHBvdGVudGlhbCBpc3N1ZXMgbWlnaHQgYmUgc3RlbW1pbmcgZnJvbSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgcGFyYW1ldGVyIHByb2Nlc3NpbmcgYWN0dWFsbHkgKmhhcHBlbnMqLiBMZXQmIzM5O3MgZ28gYWhlYWQgYW5kIGRpZyBpbnRvIGBzY3RwX3Byb2Nlc3NfcGFyYW1gLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBVbmRlcnN0YW5kaW5nIHRoZSBwcm9jZXNzaW5nIHN0ZXBzIG9mIGBzY3RwX3Byb2Nlc3NfcGFyYW1gIGlzIHZpdGFsIHRvIHNlZSBleGFjdGx5IGhvdyB0aGVzZSBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjdHBfcHJvY2Vzc19wYXJhbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9NTc9c3RhdGljIHN0cnVjdCBzY3RwX2Nvb2tpZV9wYXJhbSAqc2N0cF9wYWNrX2Nvb2tpZShcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtNjItXHRcdFx0XHRcdGNvbnN0IF9fdTggKnJhd19hZGRycywgaW50IGFkZHJzX2xlbik7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6NjM6c3RhdGljIGludCBzY3RwX3Byb2Nlc3NfcGFyYW0oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtNjQtXHRcdFx0ICAgICAgdW5pb24gc2N0cF9wYXJhbXMgcGFyYW0sXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTIzNTc9aW50IHNjdHBfcHJvY2Vzc19pbml0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIzOTctXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjM5ODpcdFx0aWYgKCFzY3RwX3Byb2Nlc3NfcGFyYW0oYXNvYywgcGFyYW0sIHBlZXJfYWRkciwgZ2ZwKSlcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMzk5LVx0XHRcdGdvdG8gY2xlYW5fdXA7XG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI1NDEtICovXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjU0MjpzdGF0aWMgaW50IHNjdHBfcHJvY2Vzc19wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yNTQzLVx0XHRcdCAgICAgIHVuaW9uIHNjdHBfcGFyYW1zIHBhcmFtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHNjdHBfdmVyaWZ5X2luaXRgIGFuZCBgc2N0cF9wcm9jZXNzX2luaXRgKioKCk9rYXksIHNvIEkgc2VlIGBzY3RwX3ZlcmlmeV9pbml0YCBhbmQgYHNjdHBfcHJvY2Vzc19pbml0YC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuIEJ1dCBJIG5lZWQgdG8ga25vdyB0aGUgc2NvcGUuIEFyZSB0aGV5IGV4dGVybmFsbHkgdmlzaWJsZSwgb3IgYXJlIHRoZXkgaW50ZXJuYWwgdG8gdGhpcyBtb2R1bGU/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGV5JiMzOTtyZSBleHBvcnRlZCBvciBpZiB0aGV5JiMzOTtyZSBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCBkaXN0aW5jdGlvbiBpcyBjcnVjaWFsLiBJdCB0ZWxscyBtZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIGFuZCwgdGhlcmVmb3JlLCBob3cgdGhleSBtaWdodCBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhpcyBTQ1RQIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZWlyIHNjb3BlIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZHMgdW5kZXJzdGFuZGluZyB0aGVpciByb2xlcyBhbmQgaW1wYWN0LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaW5kIHRob3NlIGRlY2xhcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF92ZXJpZnlfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MjE1MD1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3ZlcmlmeV9wYXJhbShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIyOTAtLyogVmVyaWZ5IHRoZSBJTklUIHBhY2tldCBiZWZvcmUgd2UgcHJvY2VzcyBpdC4gICovXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjI5MTppbnQgc2N0cF92ZXJpZnlfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMjkyLVx0XHQgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBlbnVtIHNjdHBfY2lkIGNpZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBgc2N0cF92ZXJpZnlfaW5pdGAgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzY3RwX3ZlcmlmeV9pbml0YCBmdW5jdGlvbi4gUmlnaHQsIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgIG9yIG5vdC4gTGV0IG1lIGp1c3QgY29uZmlybS4uLiBZdXAsIGRlZmluaXRlbHkgbm90IHN0YXRpYy4gU28gaXQmIzM5O3MgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgaXRzIGRlZmluaW5nIGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQgbWVhbnMgaXQgbGlrZWx5IHBsYXlzIGEgY3JpdGljYWwgcm9sZSBpbiBtb2R1bGUgbGlua2luZyBvciBjcm9zcy1vYmplY3QgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgU0NUUCBjb2RlYmFzZS4gSW50ZXJlc3RpbmcgaW1wbGljYXRpb25zIGFyaXNlIGZyb20gdGhpcyBub24tc3RhdGljIG5hdHVyZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHdoZW4gZGVidWdnaW5nLCBhbmQgYWxzbyB3aGVuIGxvb2tpbmcgZm9yIG90aGVyIGNhbGxpbmcgZnVuY3Rpb25zIHRvIGtub3cgd2h5IHRoaXMgaXMgcmVxdWlyZWQsIGFuZCB3aGF0IGNvbnRleHQgaXMgbmVlZGVkLiBPa2F5LCB1bmRlcnN0b29kLCBtb3Zpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjdHBfcHJvY2Vzc19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fbWFrZV9jaHVuay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz0yMjkxPWludCBzY3RwX3ZlcmlmeV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMzU2LSAqL1xubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjIzNTc6aW50IHNjdHBfcHJvY2Vzc19pbml0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjM1OC1cdFx0ICAgICAgY29uc3QgdW5pb24gc2N0cF9hZGRyICpwZWVyX2FkZHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNTgKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNDVFAgSU5JVCBDaHVuayBQYXRjaCoqCgpPa2F5LCBzbyBgc2N0cF9wcm9jZXNzX2luaXRgIGlzbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gTXkga2V5IGZvY3VzIHBvaW50cyBmb3IgdGhpcyBwYXRjaCBhcmUgdGhlcmVmb3JlIGBzY3RwX3ZlcmlmeV9pbml0YCBhbmQgYHNjdHBfcHJvY2Vzc19pbml0YC4gVGhlIGNvbmZpZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGlzIGBJUF9TQ1RQYC4KClRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHk6IGFuIHVuZGVyZmxvdyBvciBkaXZpZGUtYnktemVybyB0aGF0IGNvdWxkIG9jY3VyIGR1cmluZyB0aGUgcGFyc2luZyBvZiB0aGUgYFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVNgIHBhcmFtZXRlciB3aXRoaW4gU0NUUCBJTklUIGNodW5rcy4gSXQgZG9lcyB0aGlzIGJ5IGluY29ycG9yYXRpbmcgbGVuZ3RoIGNoZWNrcyB3aXRoaW4gYHNjdHBfdmVyaWZ5X3BhcmFtYCBhbmQgYHNjdHBfcHJvY2Vzc19wYXJhbWAuIFRoaXMgbW9kaWZpY2F0aW9uIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbmV0d29yayBwYWNrZXQgcGFyc2luZyBsb2dpYywgd2hpY2ggbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIEkmIzM5O3ZlIG1pc3NlZC4gSXQgc2VlbXMgYElQX1NDVFBgIGlzIHRoZSBjb3JlIG9uZSwgdGhvdWdoLgoKVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfdmVyaWZ5X2luaXQmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdW5kZXJmbG93IG9yIGRpdmlkZS1ieS16ZXJvIGJ1ZyB3aGVuIHByb2Nlc3NpbmcgdGhlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVMgcGFyYW1ldGVyIGluIFNDVFAgSU5JVCBjaHVua3MuIEl0IGFkZHMgbGVuZ3RoIGNoZWNrcyBpbiBzY3RwX3ZlcmlmeV9wYXJhbSBhbmQgc2N0cF9wcm9jZXNzX3BhcmFtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbmV0d29yayBwYWNrZXQgcGFyc2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfdmVyaWZ5X2luaXQmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdW5kZXJmbG93IG9yIGRpdmlkZS1ieS16ZXJvIGJ1ZyB3aGVuIHByb2Nlc3NpbmcgdGhlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVMgcGFyYW1ldGVyIGluIFNDVFAgSU5JVCBjaHVua3MuIEl0IGFkZHMgbGVuZ3RoIGNoZWNrcyBpbiBzY3RwX3ZlcmlmeV9wYXJhbSBhbmQgc2N0cF9wcm9jZXNzX3BhcmFtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbmV0d29yayBwYWNrZXQgcGFyc2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGZvciB0aGUgYFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVNgIHBhcmFtZXRlciBpbiBTQ1RQIGNodW5rcyB0byBwcmV2ZW50IGFuIGludGVnZXIgdW5kZXJmbG93LiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBwYXJhbS5wLVx1MDAzZWxlbmd0aGAgaXMgbGVzcyB0aGFuIGBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCwgdGhlIGNhbGN1bGF0aW9uIGBzYXQgPSBudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCB1bmRlcmZsb3dzLCByZXN1bHRpbmcgaW4gYSB2ZXJ5IGxhcmdlIHVuc2lnbmVkIGludGVnZXIuIFRoaXMgY2F1c2VzIHRoZSBzdWJzZXF1ZW50IGxvb3AgdG8gaXRlcmF0ZSBvdXQgb2YgYm91bmRzLCByZWFkaW5nIGZyb20gYHBhcmFtLnNhdC1cdTAwM2V0eXBlc1tpXWAuIFxuXG5UaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBvbiB0aGUgcGFja2V0IGJ1ZmZlciAoc2tiKS4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChzbGFiLW91dC1vZi1ib3VuZHMgb3IgZ2xvYmFsLW91dC1vZi1ib3VuZHMpLiBUaGVyZSBpcyBubyBhbGxvY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIGludm9sdmVkIGluIHRoaXMgYnVnLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgS0FTQU4gd2lsbCBlZmZlY3RpdmVseSBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmVzdWx0aW5nIGZyb20gdGhpcyBtaXNzaW5nIGxlbmd0aCBjaGVjay4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjNmY2QzOWE2MTRlY2JmOWNkMmNmY2JhZmRlMWExNTdkZDM1ZDVkYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDA5OjU2OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCmluZGV4IDIzNmUyNWFiYzdhNDIuLmViZjc5MTk2OTQ1NGIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKQEAgLTIxNjksMTIgJiM0MzsyMTY5LDE5IEBAIHN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCwKIAljYXNlIFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTOgogCWNhc2UgU0NUUF9QQVJBTV9JUFY2X0FERFJFU1M6CiAJY2FzZSBTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkU6Ci0JY2FzZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTOgogCWNhc2UgU0NUUF9QQVJBTV9TVEFURV9DT09LSUU6CiAJY2FzZSBTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPOgogCWNhc2UgU0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSUzoKIAljYXNlIFNDVFBfUEFSQU1fRUNOX0NBUEFCTEU6CiAJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVM6CiYjNDM7CQlpZiAobnRvaHMocGFyYW0ucC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHsKJiM0MzsJCQlzY3RwX3Byb2Nlc3NfaW52X3BhcmFtbGVuZ3RoKGFzb2MsIHBhcmFtLnAsCiYjNDM7CQkJCQkJICAgICBjaHVuaywgZXJyX2NodW5rKTsKJiM0MzsJCQlyZXR2YWwgPSBTQ1RQX0lFUlJPUl9BQk9SVDsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwogCWNhc2UgU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDoKIAkJaWYgKG50b2hzKHBhcmFtLnAtJmd0O2xlbmd0aCkgIT0gc2l6ZW9mKCpwYXJhbS5haW5kKSkgewogCQkJc2N0cF9wcm9jZXNzX2ludl9wYXJhbWxlbmd0aChhc29jLCBwYXJhbS5wLApAQCAtMjYwMCw2ICYjNDM7MjYwNyw5IEBAIHN0YXRpYyBpbnQgc2N0cF9wcm9jZXNzX3BhcmFtKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJYXNvYy0mZ3Q7cGVlci5pcHY0X2FkZHJlc3MgPSAxOwogCiAJCS8qIEN5Y2xlIHRocm91Z2ggYWRkcmVzcyB0eXBlczsgYXZvaWQgZGl2aWRlIGJ5IDAuICovCiYjNDM7CQlpZiAobnRvaHMocGFyYW0ucC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCXNhdCA9IG50b2hzKHBhcmFtLnAtJmd0O2xlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOwogCQlpZiAoc2F0KQogCQkJc2F0IC89IHNpemVvZihfX3UxNik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQ1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBJbnRlZ2VyIFVuZGVyZmxvdyBpbiBTQ1RQIFBhcmFtZXRlciBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jYC4gSXQmIzM5O3MgZm9jdXNlZCBvbiB0aGUgYFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVNgIHBhcmFtZXRlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGxlbmd0aCBjaGVjay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Z29vZCBjYXRjaCwgYWx3YXlzIGltcG9ydGFudCB0byB2YWxpZGF0ZSBpbnB1dC4mIzM0OwoKRGlnZ2luZyBpbiwgSSBzZWUgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGluIGBzY3RwX3ZlcmlmeV9wYXJhbWAgYW5kIGBzY3RwX3Byb2Nlc3NfcGFyYW1gLiBJbiBgc2N0cF92ZXJpZnlfcGFyYW1gLCBhIHN0cmFpZ2h0Zm9yd2FyZCBsZW5ndGggY2hlY2sgaXMgYWRkZWQ6IGlmIHRoZSBwYXJhbWV0ZXIgbGVuZ3RoIGlzIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIGhlYWRlciwgaXQmIzM5O3MgZmxhZ2dlZCBhcyBpbnZhbGlkLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGJhc2ljIHNhbml0eSBjaGVjayB0byBwcmV2ZW50IHByb2Nlc3NpbmcgY29ycnVwdGVkIGRhdGEuCgpUaGUgcmVhbCBtZWF0IG9mIHRoZSBpc3N1ZSBzZWVtcyB0byBiZSB3aXRoaW4gYHNjdHBfcHJvY2Vzc19wYXJhbWAuIEhlcmUsIHRoZXJlJiMzOTtzIHRoaXMgY2FsY3VsYXRpb246IGBzYXQgPSBudG9ocyhwYXJhbS5wLSZndDtsZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTtgIGFuZCB0aGVuIGBzYXQgLz0gc2l6ZW9mKF9fdTE2KTtgLiBNeSBzcGlkZXIgc2Vuc2VzIGFyZSB0aW5nbGluZy4gSWYgYG50b2hzKHBhcmFtLnAtJmd0O2xlbmd0aClgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHdlJiMzOTtyZSBwb3RlbnRpYWxseSBsb29raW5nIGF0IGFuIGludGVnZXIgdW5kZXJmbG93LiBgc2F0YCBpcyBwcm9iYWJseSBhbiB1bnNpZ25lZCBpbnRlZ2VyLiBUaGF0IHVuZGVyZmxvdyB3b3VsZCByZXN1bHQgaW4gYSBodWdlIHZhbHVlIGZvciBgc2F0YC4gQW5kIHRoZW4gZGl2aWRpbmcgdGhhdCBieSBgc2l6ZW9mKF9fdTE2KWAuLi4gdGhhdCYjMzk7cyBhIHJlY2lwZSBmb3IgYSBtYXNzaXZlIGxvb3Agb3IsIHdvcnNlLCBzb21ldGhpbmcgdW5leHBlY3RlZC4gV2UmIzM5O2QgaGF2ZSBhIHBvdGVudGlhbGx5IHVuYm91bmRlZCBsb29wIG9yIGNhbGN1bGF0aW9uIGJhc2VkIG9uIHRoZSB1bmRlcmZsb3dlZCBudW1iZXIuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyBjb3JyZWN0LCBhbmQgZmluZCBgc2N0cF9wcm9jZXNzX3BhcmFtYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9wcm9jZXNzX3BhcmFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fbWFrZV9jaHVuay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz01Nz1zdGF0aWMgc3RydWN0IHNjdHBfY29va2llX3BhcmFtICpzY3RwX3BhY2tfY29va2llKFxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy02Mi1cdFx0XHRcdFx0Y29uc3QgX191OCAqcmF3X2FkZHJzLCBpbnQgYWRkcnNfbGVuKTtcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzo2MzpzdGF0aWMgaW50IHNjdHBfcHJvY2Vzc19wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy02NC1cdFx0XHQgICAgICB1bmlvbiBzY3RwX3BhcmFtcyBwYXJhbSxcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MjM1Nz1pbnQgc2N0cF9wcm9jZXNzX2luaXQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjM5Ny1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMzk4Olx0XHRpZiAoIXNjdHBfcHJvY2Vzc19wYXJhbShhc29jLCBwYXJhbSwgcGVlcl9hZGRyLCBnZnApKVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIzOTktXHRcdFx0Z290byBjbGVhbl91cDtcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjU0MS0gKi9cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyNTQyOnN0YXRpYyBpbnQgc2N0cF9wcm9jZXNzX3BhcmFtKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI1NDMtXHRcdFx0ICAgICAgdW5pb24gc2N0cF9wYXJhbXMgcGFyYW0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIGBzY3RwX3Byb2Nlc3NfcGFyYW1gIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU0NUUCBwcm90b2NvbCBoYW5kbGVzIHBhcmFtZXRlcnMuIExpbmUgMjYwMCBpbiB0aGUgY29kZSBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIHByb2Nlc3Npbmcgb2YgcGFyYW1ldGVycywgc28gSSYjMzk7bGwgemVybyBpbiB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byBtYWtlIHN1cmUgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRhdGEgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hhdCBzcGVjaWZpYyBwYXJhbWV0ZXIgdHlwZXMgYXJlIGhhbmRsZWQgYW5kIGhvdy4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLWNvbW1lbnRlZCwgYW5kIEkgY2FuIHF1aWNrbHkgZ3Jhc3AgdGhlIGxvZ2ljLCBhbmQgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmFyZ3VtZW50ICYjMzQ7Rmlyc3RMaW5lJiMzNDsgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6ICYjMzQ7MjU4MCYjMzQ7LAogICYjMzQ7TGluZUNvdW50JiMzNDs6ICYjMzQ7NTAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDthcmd1bWVudCBcJiMzNDtGaXJzdExpbmVcJiMzNDsgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzYwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRGVidWdnaW5nIHRoZSBWYXJpYWJsZSAmIzM0O0ZpcnN0TGluZSYjMzQ7KioKCkhtbSwgcmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLi4uIHdhaXQgYSBtaW51dGUuICYjMzQ7Rmlyc3RMaW5lJiMzNDsgaXMgc3VwcG9zZWQgdG8gYmUsIHlvdSBrbm93LCBhIGxpbmUgbnVtYmVyISBBIGxpbmUgbnVtYmVyIGluIGEgdGV4dCBmaWxlLiBBbmQgYmFzZWQgb24gaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQsIGl0IG5lZWRzIHRvIGJlIGFuIGludGVnZXIuIEl0IGhhcyB0byBiZSwgb3RoZXJ3aXNlLCB0aGUgZG93bnN0cmVhbSBvcGVyYXRpb25zIGFyZSBnb2luZyB0byBjb21wbGV0ZWx5IGZhbGwgYXBhcnQuIFRoZSB3aG9sZSBsb2dpYyBoaW5nZXMgb24gdHJlYXRpbmcgdGhhdCB2YXJpYWJsZSBhcyBhIHdob2xlIG51bWJlciDigJMgc29tZXRoaW5nIEkgY2FuIHVzZSBmb3IgaW5kZXhpbmcsIGNhbGN1bGF0aW9ucy4uLiBldmVyeXRoaW5nLiBCdXQgdGhlIGVycm9yIG1lc3NhZ2UsIGNsZWFybHksIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgdHlwZSBkZWNsYXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSB0eXBlIG9mICYjMzQ7Rmlyc3RMaW5lJiMzNDsgaXMgZGVmaW5lZCBjb3JyZWN0bHksIG9yIGlzIGJlaW5nIGNvbnZlcnRlZCBjb3JyZWN0bHksIHRvIGFuIGludGVnZXIuIFRoaXMgaXMgYSBjbGFzc2ljIHR5cGUtbWlzbWF0Y2ggcHJvYmxlbSwgSSYjMzk7dmUgc2VlbiBpdCBhIHRob3VzYW5kIHRpbWVzLiBJJiMzOTtkIGJldHRlciBnbyBhbmQgcXVpY2tseSB0cmFjayBkb3duIHRoZSBkZWNsYXJhdGlvbiBvZiAmIzM0O0ZpcnN0TGluZSYjMzQ7IGFuZCBhbnkgcG9pbnRzIHdoZXJlIGl04oCZcyBiZWluZyBhc3NpZ25lZCBhIHZhbHVlLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3MgKmRlZmluaXRlbHkqIGFuIGludGVnZXIsIG9yIHRoYXQgaXQmIzM5O3MgYmVpbmcgZXhwbGljaXRseSBjYXN0IGFzIG9uZSBpZiBpdCYjMzk7cyBjb21pbmcgZnJvbSBzb21lIG90aGVyIHNvdXJjZS4gVGhpcyBzaG91bGQgYmUgYSBxdWljayBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fbWFrZV9jaHVuay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTgwOlx0XHRcdGJyZWFrO1xuMjU4MTpcdFxuMjU4MjpcdFx0Y2FzZSBTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkU6XG4yNTgzOlx0XHRcdGlmICghbmV0LVx1MDAzZXNjdHAuY29va2llX3ByZXNlcnZlX2VuYWJsZSlcbjI1ODQ6XHRcdFx0XHRicmVhaztcbjI1ODU6XHRcbjI1ODY6XHRcdFx0c3RhbGUgPSBudG9obChwYXJhbS5saWZlLVx1MDAzZWxpZmVzcGFuX2luY3JlbWVudCk7XG4yNTg3Olx0XG4yNTg4Olx0XHRcdC8qIFN1Z2dlc3RlZCBDb29raWUgTGlmZSBzcGFuIGluY3JlbWVudCYjMzk7cyB1bml0IGlzIG1zZWMsXG4yNTg5Olx0XHRcdCAqICgxLzEwMDBzZWMpLlxuMjU5MDpcdFx0XHQgKi9cbjI1OTE6XHRcdFx0YXNvYy1cdTAwM2Vjb29raWVfbGlmZSA9IGt0aW1lX2FkZF9tcyhhc29jLVx1MDAzZWNvb2tpZV9saWZlLCBzdGFsZSk7XG4yNTkyOlx0XHRcdGJyZWFrO1xuMjU5MzpcdFxuMjU5NDpcdFx0Y2FzZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTOlxuMjU5NTpcdFx0XHQvKiBUdXJuIG9mZiB0aGUgZGVmYXVsdCB2YWx1ZXMgZmlyc3Qgc28gd2UmIzM5O2xsIGtub3cgd2hpY2hcbjI1OTY6XHRcdFx0ICogb25lcyBhcmUgcmVhbGx5IHNldCBieSB0aGUgcGVlci5cbjI1OTc6XHRcdFx0ICovXG4yNTk4Olx0XHRcdGFzb2MtXHUwMDNlcGVlci5pcHY0X2FkZHJlc3MgPSAwO1xuMjU5OTpcdFx0XHRhc29jLVx1MDAzZXBlZXIuaXB2Nl9hZGRyZXNzID0gMDtcbjI2MDA6XHRcbjI2MDE6XHRcdFx0LyogQXNzdW1lIHRoYXQgcGVlciBzdXBwb3J0cyB0aGUgYWRkcmVzcyBmYW1pbHlcbjI2MDI6XHRcdFx0ICogYnkgd2hpY2ggaXQgc2VuZHMgYSBwYWNrZXQuXG4yNjAzOlx0XHRcdCAqL1xuMjYwNDpcdFx0XHRpZiAocGVlcl9hZGRyLVx1MDAzZXNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNilcbjI2MDU6XHRcdFx0XHRhc29jLVx1MDAzZXBlZXIuaXB2Nl9hZGRyZXNzID0gMTtcbjI2MDY6XHRcdFx0ZWxzZSBpZiAocGVlcl9hZGRyLVx1MDAzZXNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKVxuMjYwNzpcdFx0XHRcdGFzb2MtXHUwMDNlcGVlci5pcHY0X2FkZHJlc3MgPSAxO1xuMjYwODpcdFxuMjYwOTpcdFx0XHQvKiBDeWNsZSB0aHJvdWdoIGFkZHJlc3MgdHlwZXM7IGF2b2lkIGRpdmlkZSBieSAwLiAqL1xuMjYxMDpcdFx0XHRpZiAobnRvaHMocGFyYW0ucC1cdTAwM2VsZW5ndGgpIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKVxuMjYxMTpcdFx0XHRcdGJyZWFrO1xuMjYxMjpcdFxuMjYxMzpcdFx0XHRzYXQgPSBudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpO1xuMjYxNDpcdFx0XHRpZiAoc2F0KVxuMjYxNTpcdFx0XHRcdHNhdCAvPSBzaXplb2YoX191MTYpO1xuMjYxNjpcdFxuMjYxNzpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzYXQ7ICYjNDM7JiM0MztpKSB7XG4yNjE4Olx0XHRcdFx0c3dpdGNoIChwYXJhbS5zYXQtXHUwMDNldHlwZXNbaV0pIHtcbjI2MTk6XHRcdFx0XHRjYXNlIFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTOlxuMjYyMDpcdFx0XHRcdFx0YXNvYy1cdTAwM2VwZWVyLmlwdjRfYWRkcmVzcyA9IDE7XG4yNjIxOlx0XHRcdFx0XHRicmVhaztcbjI2MjI6XHRcbjI2MjM6XHRcdFx0XHRjYXNlIFNDVFBfUEFSQU1fSVBWNl9BRERSRVNTOlxuMjYyNDpcdFx0XHRcdFx0aWYgKFBGX0lORVQ2ID09IGFzb2MtXHUwMDNlYmFzZS5zay1cdTAwM2Vza19mYW1pbHkpXG4yNjI1Olx0XHRcdFx0XHRcdGFzb2MtXHUwMDNlcGVlci5pcHY2X2FkZHJlc3MgPSAxO1xuMjYyNjpcdFx0XHRcdFx0YnJlYWs7XG4yNjI3Olx0XG4yNjI4Olx0XHRcdFx0ZGVmYXVsdDogLyogSnVzdCBpZ25vcmUgYW55dGhpbmcgZWxzZS4gICovXG4yNjI5Olx0XHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg0NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFJlYWQgaW4gU0NUUCBQYXJhbWV0ZXIgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgU0NUUCBjb2RlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBwYXJhbWV0ZXIgaGFuZGxpbmcuIEl0IHNlZW1zIGxpa2UgdGhlIHZhcmlhYmxlIGBzYXRgIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBlbGVtZW50cywgYW5kIHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBoaW5nZXMgb24gaG93IGBzYXRgIGlzIGNhbGN1bGF0ZWQuIElmIGBudG9ocyhwYXJhbS5wLSZndDtsZW5ndGgpYCBpcyBsZXNzIHRoYW4gYHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcilgLCB0aGF0JiMzOTtzIGEgcHJvYmxlbSwgYmVjYXVzZSBgc2F0YCB1bmRlcmZsb3dzLiBEaXZpZGluZyBpdCBieSBgc2l6ZW9mKF9fdTE2KWAgdGhlbiBjcmVhdGVzIGEgbWFzc2l2ZSwgdW5pbnRlbmRlZCB2YWx1ZSBmb3IgYHNhdGAuCgpUaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgc3Vic2VxdWVudCBsb29wOiBgZm9yIChpID0gMDsgaSAmbHQ7IHNhdDsgJiM0MzsmIzQzO2kpYC4gQmVjYXVzZSBgc2F0YCBpcyBub3cgYW4gZW5vcm1vdXMgbnVtYmVyLCB0aGlzIGxvb3Agd2lsbCBpdGVyYXRlIGZhciBiZXlvbmQgdGhlIGludGVuZGVkIGJvdW5kcywgYXR0ZW1wdGluZyB0byByZWFkIGBwYXJhbS5zYXQtJmd0O3R5cGVzW2ldYC4gSSBrbm93IGBwYXJhbS5zYXRgIHBvaW50cyBkaXJlY3RseSB0byB0aGUgcGFja2V0IGRhdGEsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCBzY2VuYXJpby4KCk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0tBU0FOIHdpbGwgY2F0Y2ggdGhpcywgcmlnaHQ/JiMzNDsuIFJlYWRpbmcgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBidWZmZXIsIHdoaWNoIGlzIGxpa2VseSBhbiBza2Igb3Igc2ltaWxhciwgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGRldGVjdGlvbiBmb3IgS0FTQU4uIE15IG5leHQgdGhvdWdodCBpcyAmIzM0O2lzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkPyYjMzQ7LCBidXQsIG5vLCBiZWNhdXNlIHRoZSBjb2RlIGlzIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQsIG5vdCBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgcmVnaW9uIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBUaGUgYnVmZmVyIGlzIGluaXRpYWxpemVkIHVwIHRvIHRoZSBwYWNrZXQgbGVuZ3RoLCBzbyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaXMgd2hhdCBpdCBpcy4KCkdpdmVuIHRoYXQgdGhlIHBhY2tldCBjb21lcyBmcm9tIHRoZSBuZXR3b3JrLCB0aGUgYnVmZmVyIHNob3VsZCBiZSBpbml0aWFsaXplZCB1cCB0byB0aGUgcGFja2V0IGxlbmd0aC4gU28sIEtBU0FOICpzaG91bGQqIGJlIGFibGUgdG8gZGV0ZWN0IHRoZSBvdXQtb2YtYm91bmRzIHJlYWQuIFRoaXMgaXMgbG9va2luZyBwcm9taXNpbmc7IEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGZsYWcgdGhpcy4KCkkmIzM5O2xsIGNoZWNrIGBzY3RwX3ZlcmlmeV9wYXJhbWAgYXJvdW5kIGxpbmUgMjE2OSwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE1MDpcdHN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCxcbjIxNTE6XHRcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4yMTUyOlx0XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4yMTUzOlx0XHRcdFx0XHRcdCAgdW5pb24gc2N0cF9wYXJhbXMgcGFyYW0sXG4yMTU0Olx0XHRcdFx0XHRcdCAgZW51bSBzY3RwX2NpZCBjaWQsXG4yMTU1Olx0XHRcdFx0XHRcdCAgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxuMjE1NjpcdFx0XHRcdFx0XHQgIHN0cnVjdCBzY3RwX2NodW5rICoqZXJyX2NodW5rKVxuMjE1NzpcdHtcbjIxNTg6XHRcdHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbSAqaG1hY3M7XG4yMTU5Olx0XHRpbnQgcmV0dmFsID0gU0NUUF9JRVJST1JfTk9fRVJST1I7XG4yMTYwOlx0XHRfX3UxNiBuX2VsdCwgaWQgPSAwO1xuMjE2MTpcdFx0aW50IGk7XG4yMTYyOlx0XG4yMTYzOlx0XHQvKiBGSVhNRSAtIFRoaXMgcm91dGluZSBpcyBub3QgbG9va2luZyBhdCBlYWNoIHBhcmFtZXRlciBwZXIgdGhlXG4yMTY0Olx0XHQgKiBjaHVuayB0eXBlLCBpLmUuLCB1bnJlY29nbml6ZWQgcGFyYW1ldGVycyBzaG91bGQgYmUgZnVydGhlclxuMjE2NTpcdFx0ICogaWRlbnRpZmllZCBiYXNlZCBvbiB0aGUgY2h1bmsgaWQuXG4yMTY2Olx0XHQgKi9cbjIxNjc6XHRcbjIxNjg6XHRcdHN3aXRjaCAocGFyYW0ucC1cdTAwM2V0eXBlKSB7XG4yMTY5Olx0XHRjYXNlIFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTOlxuMjE3MDpcdFx0Y2FzZSBTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUzpcbjIxNzE6XHRcdGNhc2UgU0NUUF9QQVJBTV9DT09LSUVfUFJFU0VSVkFUSVZFOlxuMjE3MjpcdFx0Y2FzZSBTQ1RQX1BBUkFNX1NUQVRFX0NPT0tJRTpcbjIxNzM6XHRcdGNhc2UgU0NUUF9QQVJBTV9IRUFSVEJFQVRfSU5GTzpcbjIxNzQ6XHRcdGNhc2UgU0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSUzpcbjIxNzU6XHRcdGNhc2UgU0NUUF9QQVJBTV9FQ05fQ0FQQUJMRTpcbjIxNzY6XHRcdFx0YnJlYWs7XG4yMTc3Olx0XG4yMTc4Olx0XHRjYXNlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVM6XG4yMTc5Olx0XHRcdGlmIChudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHtcbjIxODA6XHRcdFx0XHRzY3RwX3Byb2Nlc3NfaW52X3BhcmFtbGVuZ3RoKGFzb2MsIHBhcmFtLnAsXG4yMTgxOlx0XHRcdFx0XHRcdFx0ICAgICBjaHVuaywgZXJyX2NodW5rKTtcbjIxODI6XHRcdFx0XHRyZXR2YWwgPSBTQ1RQX0lFUlJPUl9BQk9SVDtcbjIxODM6XHRcdFx0fVxuMjE4NDpcdFx0XHRicmVhaztcbjIxODU6XHRcdGNhc2UgU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDpcbjIxODY6XHRcdFx0aWYgKG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSAhPSBzaXplb2YoKnBhcmFtLmFpbmQpKSB7XG4yMTg3Olx0XHRcdFx0c2N0cF9wcm9jZXNzX2ludl9wYXJhbWxlbmd0aChhc29jLCBwYXJhbS5wLFxuMjE4ODpcdFx0XHRcdFx0XHRcdCAgICAgY2h1bmssIGVycl9jaHVuayk7XG4yMTg5Olx0XHRcdFx0cmV0dmFsID0gU0NUUF9JRVJST1JfQUJPUlQ7XG4yMTkwOlx0XHRcdH1cbjIxOTE6XHRcdFx0YnJlYWs7XG4yMTkyOlx0XG4yMTkzOlx0XHRjYXNlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0VYVDpcbjIxOTQ6XHRcdFx0aWYgKCFzY3RwX3ZlcmlmeV9leHRfcGFyYW0obmV0LCBlcCwgcGFyYW0pKVxuMjE5NTpcdFx0XHRcdHJldHVybiBTQ1RQX0lFUlJPUl9BQk9SVDtcbjIxOTY6XHRcdFx0YnJlYWs7XG4yMTk3Olx0XG4yMTk4Olx0XHRjYXNlIFNDVFBfUEFSQU1fU0VUX1BSSU1BUlk6XG4yMTk5Olx0XHRcdGlmICghZXAtXHUwMDNlYXNjb25mX2VuYWJsZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM4OAoJCQkJCQkJb3V0cHV0OiAyNTUKCQkJCQkJCXRob3VnaHRzOiA1NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGJvdW5kcyBjaGVjayBhZGRpdGlvbiDigJMgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBwcmV2ZW50aW5nIGFuIGludGVnZXIgdW5kZXJmbG93IGluIFNDVFAgcGFyYW1ldGVyIGhhbmRsaW5nLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIGBwYXJhbS5zYXQtJmd0O3R5cGVzW2ldYC4gVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoYXQgYHBhcmFtYCBpcyBwYXJ0IG9mIHRoZSByZWNlaXZlZCBjaHVuaywgd2hpY2ggbWVhbnMgYW55IG91dC1vZi1ib3VuZHMgcmVhZCBpcyBnb2luZyB0byBiZSBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIG9uIHRoZSBwYWNrZXQgYnVmZmVyIChgc2tiYCkuIEtBU0FOLCBpbiBpdHMgaW5maW5pdGUgd2lzZG9tLCBpcyAqZGVzaWduZWQqIHRvIHNuaWZmIG91dCB0aGVzZSBraW5kcyBvZiByZWFkcy4gSXQgZG9lc24mIzM5O3QgbWF0dGVyIGlmIGl0JiMzOTtzIHNsYWItb3V0LW9mLWJvdW5kcyBvciBnbG9iYWwtb3V0LW9mLWJvdW5kczsgS0FTQU4gd2lsbCBkZXRlY3QgaXQuCgpJIGRpZCBxdWlja2x5IGNvbnNpZGVyIGlmIHRoaXMgY291bGQgYmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGJ1dCBpdCYjMzk7cyBub3QuIFRoZSBtZW1vcnkgYmVpbmcgYWNjZXNzZWQgaXMgZWl0aGVyOgoKMS4gIE91dC1vZi1ib3VuZHMgb2YgdGhlIGBza2JgLCB3aGljaCBLQVNBTiBjYXRjaGVzLgoyLiAgV2l0aGluIHRoZSBgc2tiYCBidXQgcGFzdCB0aGUgbGVnaXRpbWF0ZSBwYXJhbWV0ZXIgbGVuZ3RoLiBJbiB0aGlzIHNjZW5hcmlvLCBpdCBpcyByZWFkaW5nICpvdGhlciogcGFyYW1ldGVycyBvciBwYWRkaW5nIHdpdGhpbiB0aGUgYHNrYmAuIFdoaWxlIHRoaXMgY2FuIGxlYWQgdG8gbG9naWMgYnVncyAoaW50ZXJwcmV0aW5nIG90aGVyIHBhcmFtZXRlcnMgaW5jb3JyZWN0bHkpLCBpdCYjMzk7cyBub3QgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LgoKVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc3RlbXMgZnJvbSBgbnRvaHMocGFyYW0ucC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcilgLCB3aGljaCBpcyBhIHRleHRib29rIG1pc3NpbmcgbGVuZ3RoIGNoZWNrLiBUaGUgdW5kZXJmbG93IGNhdXNlcyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkLiBTaW5jZSB0aGUgcmVhZCBpcyBndWFyYW50ZWVkIHRvIGJlIHdpdGhpbiB0aGUgYHNrYmAgKm9yKiBvdXQtb2YtYm91bmRzLCBpdCYjMzk7cyBhIEtBU0FOIHByb2JsZW0sIG5vdCBhIEtNU0FOIHByb2JsZW0uIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGhlcmUuCgpUaGVyZWZvcmUsIG5vIEtNU0FOIHNlc3Npb24gaXMgbmVlZGVkLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgZm9yIHRoZSBgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFU2AgcGFyYW1ldGVyIGluIFNDVFAgY2h1bmtzIHRvIHByZXZlbnQgYW4gaW50ZWdlciB1bmRlcmZsb3cuIFdpdGhvdXQgdGhlIGNoZWNrLCB0aGUgY2FsY3VsYXRpb24gYHNhdCA9IG50b2hzKHBhcmFtLnAtJmd0O2xlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCBjYW4gdW5kZXJmbG93LCBsZWFkaW5nIHRvIGEgbGFyZ2UgdW5zaWduZWQgaW50ZWdlciBhbmQgYW4gb3V0LW9mLWJvdW5kcyBsb29wIG9uIHRoZSBwYWNrZXQgYnVmZmVyIChgc2tiYCkuIEtBU0FOIGlzIHRoZSBwcm9wZXIgdG9vbCBmb3IgZGV0ZWN0aW5nIHRoaXMga2luZCBvZiB2dWxuZXJhYmlsaXR5IGJlY2F1c2UgdGhpcyBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBhbmQgbm90IHRoZSBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCBjaGVjayBmb3IgdGhlIGBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTYCBwYXJhbWV0ZXIgaW4gU0NUUCBjaHVua3MgdG8gcHJldmVudCBhbiBpbnRlZ2VyIHVuZGVyZmxvdy4gV2l0aG91dCB0aGlzIGNoZWNrLCBpZiBgcGFyYW0ucC1cdTAwM2VsZW5ndGhgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHRoZSBjYWxjdWxhdGlvbiBgc2F0ID0gbnRvaHMocGFyYW0ucC1cdTAwM2VsZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAgdW5kZXJmbG93cywgcmVzdWx0aW5nIGluIGEgdmVyeSBsYXJnZSB1bnNpZ25lZCBpbnRlZ2VyLiBUaGlzIGNhdXNlcyB0aGUgc3Vic2VxdWVudCBsb29wIHRvIGl0ZXJhdGUgb3V0IG9mIGJvdW5kcywgcmVhZGluZyBmcm9tIGBwYXJhbS5zYXQtXHUwMDNldHlwZXNbaV1gLiBcblxuVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgb24gdGhlIHBhY2tldCBidWZmZXIgKHNrYikuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAoc2xhYi1vdXQtb2YtYm91bmRzIG9yIGdsb2JhbC1vdXQtb2YtYm91bmRzKS4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIEtBU0FOIHdpbGwgZWZmZWN0aXZlbHkgY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIHRoaXMgbWlzc2luZyBsZW5ndGggY2hlY2suJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGZvciB0aGUgYFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVNgIHBhcmFtZXRlciBpbiBTQ1RQIGNodW5rcyB0byBwcmV2ZW50IGFuIGludGVnZXIgdW5kZXJmbG93LiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBwYXJhbS5wLVx1MDAzZWxlbmd0aGAgaXMgbGVzcyB0aGFuIGBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCwgdGhlIGNhbGN1bGF0aW9uIGBzYXQgPSBudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCB1bmRlcmZsb3dzLCByZXN1bHRpbmcgaW4gYSB2ZXJ5IGxhcmdlIHVuc2lnbmVkIGludGVnZXIuIFRoaXMgY2F1c2VzIHRoZSBzdWJzZXF1ZW50IGxvb3AgdG8gaXRlcmF0ZSBvdXQgb2YgYm91bmRzLCByZWFkaW5nIGZyb20gYHBhcmFtLnNhdC1cdTAwM2V0eXBlc1tpXWAuIFxuXG5UaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBvbiB0aGUgcGFja2V0IGJ1ZmZlciAoc2tiKS4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChzbGFiLW91dC1vZi1ib3VuZHMgb3IgZ2xvYmFsLW91dC1vZi1ib3VuZHMpLiBUaGVyZSBpcyBubyBhbGxvY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIGludm9sdmVkIGluIHRoaXMgYnVnLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgS0FTQU4gd2lsbCBlZmZlY3RpdmVseSBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmVzdWx0aW5nIGZyb20gdGhpcyBtaXNzaW5nIGxlbmd0aCBjaGVjay4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6MDQuOTYyNzk0NzYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc5NjAyMzM3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfdmVyaWZ5X2luaXRcIixcbiAgICBcInNjdHBfcHJvY2Vzc19pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGZvciB0aGUgYFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVNgIHBhcmFtZXRlciBpbiBTQ1RQIGNodW5rcyB0byBwcmV2ZW50IGFuIGludGVnZXIgdW5kZXJmbG93LiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBwYXJhbS5wLVxcdTAwM2VsZW5ndGhgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHRoZSBjYWxjdWxhdGlvbiBgc2F0ID0gbnRvaHMocGFyYW0ucC1cXHUwMDNlbGVuZ3RoKSAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcilgIHVuZGVyZmxvd3MsIHJlc3VsdGluZyBpbiBhIHZlcnkgbGFyZ2UgdW5zaWduZWQgaW50ZWdlci4gVGhpcyBjYXVzZXMgdGhlIHN1YnNlcXVlbnQgbG9vcCB0byBpdGVyYXRlIG91dCBvZiBib3VuZHMsIHJlYWRpbmcgZnJvbSBgcGFyYW0uc2F0LVxcdTAwM2V0eXBlc1tpXWAuIFxcblxcblRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IG9uIHRoZSBwYWNrZXQgYnVmZmVyIChza2IpLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKHNsYWItb3V0LW9mLWJvdW5kcyBvciBnbG9iYWwtb3V0LW9mLWJvdW5kcykuIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBLQVNBTiB3aWxsIGVmZmVjdGl2ZWx5IGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSB0aGlzIG1pc3NpbmcgbGVuZ3RoIGNoZWNrLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVuZGVyZmxvdyBvciBkaXZpZGUtYnktemVybyBidWcgd2hlbiBwcm9jZXNzaW5nIHRoZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTIHBhcmFtZXRlciBpbiBTQ1RQIElOSVQgY2h1bmtzLiBJdCBhZGRzIGxlbmd0aCBjaGVja3MgaW4gc2N0cF92ZXJpZnlfcGFyYW0gYW5kIHNjdHBfcHJvY2Vzc19wYXJhbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldHdvcmsgcGFja2V0IHBhcnNpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU2OjA0Ljk2MjgwMTgzM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2NDMxNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjNmY2QzOWE2MTRlY2JmOWNkMmNmY2JhZmRlMWExNTdkZDM1ZDVkYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwOTo1NjowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcXG5pbmRleCAyMzZlMjVhYmM3YTQyLi5lYmY3OTE5Njk0NTRiIDEwMDY0NFxcbi0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuY1xcbisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuY1xcbkBAIC0yMTY5LDEyICsyMTY5LDE5IEBAIHN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0Y2FzZSBTQ1RQX1BBUkFNX0lQVjRfQUREUkVTUzpcXG4gXFx0Y2FzZSBTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUzpcXG4gXFx0Y2FzZSBTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkU6XFxuLVxcdGNhc2UgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUzpcXG4gXFx0Y2FzZSBTQ1RQX1BBUkFNX1NUQVRFX0NPT0tJRTpcXG4gXFx0Y2FzZSBTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPOlxcbiBcXHRjYXNlIFNDVFBfUEFSQU1fVU5SRUNPR05JWkVEX1BBUkFNRVRFUlM6XFxuIFxcdGNhc2UgU0NUUF9QQVJBTV9FQ05fQ0FQQUJMRTpcXG4gXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVM6XFxuK1xcdFxcdGlmIChudG9ocyhwYXJhbS5wLVxcdTAwM2VsZW5ndGgpIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkge1xcbitcXHRcXHRcXHRzY3RwX3Byb2Nlc3NfaW52X3BhcmFtbGVuZ3RoKGFzb2MsIHBhcmFtLnAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgY2h1bmssIGVycl9jaHVuayk7XFxuK1xcdFxcdFxcdHJldHZhbCA9IFNDVFBfSUVSUk9SX0FCT1JUO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQ6XFxuIFxcdFxcdGlmIChudG9ocyhwYXJhbS5wLVxcdTAwM2VsZW5ndGgpICE9IHNpemVvZigqcGFyYW0uYWluZCkpIHtcXG4gXFx0XFx0XFx0c2N0cF9wcm9jZXNzX2ludl9wYXJhbWxlbmd0aChhc29jLCBwYXJhbS5wLFxcbkBAIC0yNjAwLDYgKzI2MDcsOSBAQCBzdGF0aWMgaW50IHNjdHBfcHJvY2Vzc19wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4gXFx0XFx0XFx0YXNvYy1cXHUwMDNlcGVlci5pcHY0X2FkZHJlc3MgPSAxO1xcbiBcXG4gXFx0XFx0LyogQ3ljbGUgdGhyb3VnaCBhZGRyZXNzIHR5cGVzOyBhdm9pZCBkaXZpZGUgYnkgMC4gKi9cXG4rXFx0XFx0aWYgKG50b2hzKHBhcmFtLnAtXFx1MDAzZWxlbmd0aCkgXFx1MDAzYyBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuIFxcdFxcdHNhdCA9IG50b2hzKHBhcmFtLnAtXFx1MDAzZWxlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpO1xcbiBcXHRcXHRpZiAoc2F0KVxcbiBcXHRcXHRcXHRzYXQgLz0gc2l6ZW9mKF9fdTE2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6MDUuNDgwMTk1MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNjMyMzA2OTgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF92ZXJpZnlfaW5pdFwiLFxuICAgIFwic2N0cF9wcm9jZXNzX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1bmRlcmZsb3cgb3IgZGl2aWRlLWJ5LXplcm8gYnVnIHdoZW4gcHJvY2Vzc2luZyB0aGUgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUyBwYXJhbWV0ZXIgaW4gU0NUUCBJTklUIGNodW5rcy4gSXQgYWRkcyBsZW5ndGggY2hlY2tzIGluIHNjdHBfdmVyaWZ5X3BhcmFtIGFuZCBzY3RwX3Byb2Nlc3NfcGFyYW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBuZXR3b3JrIHBhY2tldCBwYXJzaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiM2ZjZDM5YTYxNGVjYmY5Y2QyY2ZjYmFmZGUxYTE1N2RkMzVkNWRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDk6NTY6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcbmluZGV4IDIzNmUyNWFiYzdhNDIuLmViZjc5MTk2OTQ1NGIgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcbisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuY1xuQEAgLTIxNjksMTIgKzIxNjksMTkgQEAgc3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF92ZXJpZnlfcGFyYW0oc3RydWN0IG5ldCAqbmV0LFxuIFx0Y2FzZSBTQ1RQX1BBUkFNX0lQVjRfQUREUkVTUzpcbiBcdGNhc2UgU0NUUF9QQVJBTV9JUFY2X0FERFJFU1M6XG4gXHRjYXNlIFNDVFBfUEFSQU1fQ09PS0lFX1BSRVNFUlZBVElWRTpcbi1cdGNhc2UgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUzpcbiBcdGNhc2UgU0NUUF9QQVJBTV9TVEFURV9DT09LSUU6XG4gXHRjYXNlIFNDVFBfUEFSQU1fSEVBUlRCRUFUX0lORk86XG4gXHRjYXNlIFNDVFBfUEFSQU1fVU5SRUNPR05JWkVEX1BBUkFNRVRFUlM6XG4gXHRjYXNlIFNDVFBfUEFSQU1fRUNOX0NBUEFCTEU6XG4gXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTOlxuK1x0XHRpZiAobnRvaHMocGFyYW0ucC1cdTAwM2VsZW5ndGgpIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7XG4rXHRcdFx0c2N0cF9wcm9jZXNzX2ludl9wYXJhbWxlbmd0aChhc29jLCBwYXJhbS5wLFxuK1x0XHRcdFx0XHRcdCAgICAgY2h1bmssIGVycl9jaHVuayk7XG4rXHRcdFx0cmV0dmFsID0gU0NUUF9JRVJST1JfQUJPUlQ7XG4rXHRcdH1cbitcdFx0YnJlYWs7XG4gXHRjYXNlIFNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQ6XG4gXHRcdGlmIChudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgIT0gc2l6ZW9mKCpwYXJhbS5haW5kKSkge1xuIFx0XHRcdHNjdHBfcHJvY2Vzc19pbnZfcGFyYW1sZW5ndGgoYXNvYywgcGFyYW0ucCxcbkBAIC0yNjAwLDYgKzI2MDcsOSBAQCBzdGF0aWMgaW50IHNjdHBfcHJvY2Vzc19wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcdFx0XHRhc29jLVx1MDAzZXBlZXIuaXB2NF9hZGRyZXNzID0gMTtcbiBcbiBcdFx0LyogQ3ljbGUgdGhyb3VnaCBhZGRyZXNzIHR5cGVzOyBhdm9pZCBkaXZpZGUgYnkgMC4gKi9cbitcdFx0aWYgKG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSlcbitcdFx0XHRicmVhaztcbitcbiBcdFx0c2F0ID0gbnRvaHMocGFyYW0ucC1cdTAwM2VsZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTtcbiBcdFx0aWYgKHNhdClcbiBcdFx0XHRzYXQgLz0gc2l6ZW9mKF9fdTE2KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU2OjA1LjQ4MDE5NzI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkzMzEyMTMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTQ1RQIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIG1vZGlmeWluZyBgbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jYC4gTG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBhIHZpdGFsIGNoZWNrIGZvciB0aGUgbGVuZ3RoIG9mIHRoZSBgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFU2AgcGFyYW1ldGVyIGluIGJvdGggYHNjdHBfdmVyaWZ5X3BhcmFtYCBhbmQgYHNjdHBfcHJvY2Vzc19wYXJhbWAuIFRoaXMgaXMgZ29vZDsgdGhlIGNvZGUncyBnZXR0aW5nIG1vcmUgcm9idXN0LiBTcGVjaWZpY2FsbHksIHRoZSBhZGRlZCBjaGVja3MgYWRkcmVzcyBwb3RlbnRpYWwgaXNzdWVzIGxpa2UgdW5kZXJmbG93IG9yIGEgZGl2aWRlLWJ5LXplcm8gaWYgYW4gaW52YWxpZCBwYXJhbWV0ZXIgbGVuZ3RoIGlzIHByb3ZpZGVkLiBJbiBgc2N0cF92ZXJpZnlfcGFyYW1gLCB0aGV5J3JlIGhhbmRsaW5nIGNhc2VzIHdoZXJlIHRoZSBsZW5ndGggaXMgdG9vIHNob3J0IGFuZCByZXR1cm5pbmcgYW4gZXJyb3IsIGFuZCBpbiBgc2N0cF9wcm9jZXNzX3BhcmFtYCwgdGhleSdyZSBiYWlsaW5nIG91dCBlYXJseSB0byBwcmV2ZW50IHRoYXQgZGl2aWRlLWJ5LXplcm8gZnJvbSBoYXBwZW5pbmcuIFNvbGlkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgcHJlY2lzZWx5IHdoYXQgd2Ugd2FudCB0byBzZWUuXG5cbkdpdmVuIHRoaXMgdHlwZSBvZiBjaGFuZ2UsIGZ1enppbmcgaXMgYW4gYWJzb2x1dGUgbXVzdC4gU2VuZGluZyBtYWxmb3JtZWQgcGFja2V0cyB3aXRoIHRoaXMgcGFyYW1ldGVyIHdpbGwgbm93IGdpdmUgdXMgbmV3IGNvZGUgcGF0aHMgdG8gbG9vayBhdC4gV2UgbmVlZCB0byBleHBsb3JlIHRoZXNlIG5ldyBjaGVja3MgYW5kIHNlZSBob3cgd2VsbCB0aGV5J3JlIGhhbmRsaW5nIGVkZ2UgY2FzZXMuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIHdlIGNhbiBnZXQgYXQgdGhpcyB1c2luZyB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgSVBfU0NUUGAgaXMgbGlrZWx5IHRoZSBtYWluIG9uZSB3ZSdyZSBsb29raW5nIGZvciwgYnV0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgZ28gY2hlY2sgYG5ldC9zY3RwL0tjb25maWdgLiBJJ2QgbXVjaCByYXRoZXIgdmVyaWZ5IHdoYXQgY2FuIGJlIHR1cm5lZCBvbiBvciBvZmYgd2hlbiBJIHN0YXJ0IHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1NjoxMS40MTMzMjE0NjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYzMzczMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9LY29uZmlnLTUtXFxubmV0L3NjdHAvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBfU0NUUFxcbm5ldC9zY3RwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVGhlIFNDVFAgUHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU2OjExLjQ5OTY2NjYwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1OTI0MTI3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNDVFAgUGFyYW1ldGVyIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgSVBfU0NUUGAgY29uZmlndXJhdGlvbiBoZXJlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBgc2N0cF92ZXJpZnlfcGFyYW1gIGFuZCBgc2N0cF9wcm9jZXNzX3BhcmFtYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGhhbmRsZSBTQ1RQIHBhcmFtZXRlcnMuIFRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8ga25vdyBpcyB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljYWxseSBkZWZpbmVkIG9yIGlmIHRoZXkgYXJlIHBvdGVudGlhbGx5IHZhcmlhYmxlLiBMZXQncyBzZWUuLi4gYHNjdHBfdmVyaWZ5X3BhcmFtYCBpcyBzdGF0aWMuIEFscmlnaHQsIGFuZCBgc2N0cF9wcm9jZXNzX3BhcmFtYCBpcyBhbHNvIHN0YXRpYy4gVGhpcyBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgKnVzZWQqLCBJIHNob3VsZCBjaGVjayB0aGUgY2FsbGluZyBjb250ZXh0cy4gVGltZSB0byBkaXZlIGludG8gYG5ldC9zY3RwL3NtX21ha2VfY2h1bmsuY2AuIFRoYXQgZmlsZSBzaG91bGQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gaG93IHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGludm9rZWQgd2l0aGluIHRoZSBTQ1RQIHN0YXRlIG1hY2hpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6MTcuMDkyMDgyMjIyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTI1MTA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3ZlcmlmeV9wYXJhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTIwOTc9c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9wcm9jZXNzX3Vua19wYXJhbShcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMTQ5LSAqL1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMTUwOnN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjE1MS1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz0yMjkxPWludCBzY3RwX3ZlcmlmeV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIzMzQtXFx0c2N0cF93YWxrX3BhcmFtcyhwYXJhbSwgcGVlcl9pbml0KSB7XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjIzMzU6XFx0XFx0cmVzdWx0ID0gc2N0cF92ZXJpZnlfcGFyYW0obmV0LCBlcCwgYXNvYywgcGFyYW0sIGNpZCxcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjMzNi1cXHRcXHRcXHRcXHRcXHQgICBjaHVuaywgZXJycCk7XFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MjU0Mj1zdGF0aWMgaW50IHNjdHBfcHJvY2Vzc19wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yNzQ2LVxcdFxcdC8qIEFueSB1bnJlY29nbml6ZWQgcGFyYW1ldGVycyBzaG91bGQgaGF2ZSBiZWVuIGNhdWdodFxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyNzQ3OlxcdFxcdCAqIGFuZCBoYW5kbGVkIGJ5IHNjdHBfdmVyaWZ5X3BhcmFtKCkgd2hpY2ggc2hvdWxkIGJlXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI3NDgtXFx0XFx0ICogY2FsbGVkIHByaW9yIHRvIHRoaXMgcm91dGluZS4gIFNpbXBseSBsb2cgdGhlIGVycm9yXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU2OjE3LjE5NzMzNzY1MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTM1NDU4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgYXMgdGhvdWdoIGl0IHdlcmUgbXkgdHJhaW4gb2YgdGhvdWdodDpcblxuKipEaXZpbmcgaW50byBTQ1RQIFBhcmFtZXRlciBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBgc2N0cF92ZXJpZnlfaW5pdGAgaXMgdGhlIGZ1bmN0aW9uIHdlJ3JlIHN0YXJ0aW5nIHdpdGguIFRoYXQncyBhIGdvb2QgZW50cnkgcG9pbnQuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBzY3RwX3ZlcmlmeV9pbml0YCBpcyBjYWxsaW5nIGBzY3RwX3ZlcmlmeV9wYXJhbWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgdG8gZW5zdXJlIGFueSBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzIGFyZSB2YWxpZC4gTm93LCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGFuZCBsaWtlbHkgd2hlcmUgYW55IHBvdGVudGlhbCBpc3N1ZXMgbWlnaHQgYmUgc3RlbW1pbmcgZnJvbSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgcGFyYW1ldGVyIHByb2Nlc3NpbmcgYWN0dWFsbHkgKmhhcHBlbnMqLiBMZXQncyBnbyBhaGVhZCBhbmQgZGlnIGludG8gYHNjdHBfcHJvY2Vzc19wYXJhbWAuIFRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhay4gVW5kZXJzdGFuZGluZyB0aGUgcHJvY2Vzc2luZyBzdGVwcyBvZiBgc2N0cF9wcm9jZXNzX3BhcmFtYCBpcyB2aXRhbCB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBhcmUgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU2OjIwLjIxMDg4NTgwM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjAzMTQzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3Byb2Nlc3NfcGFyYW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvc21fbWFrZV9jaHVuay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz01Nz1zdGF0aWMgc3RydWN0IHNjdHBfY29va2llX3BhcmFtICpzY3RwX3BhY2tfY29va2llKFxcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTYyLVxcdFxcdFxcdFxcdFxcdGNvbnN0IF9fdTggKnJhd19hZGRycywgaW50IGFkZHJzX2xlbik7XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjYzOnN0YXRpYyBpbnQgc2N0cF9wcm9jZXNzX3BhcmFtKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy02NC1cXHRcXHRcXHQgICAgICB1bmlvbiBzY3RwX3BhcmFtcyBwYXJhbSxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz0yMzU3PWludCBzY3RwX3Byb2Nlc3NfaW5pdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIzOTctXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjIzOTg6XFx0XFx0aWYgKCFzY3RwX3Byb2Nlc3NfcGFyYW0oYXNvYywgcGFyYW0sIHBlZXJfYWRkciwgZ2ZwKSlcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjM5OS1cXHRcXHRcXHRnb3RvIGNsZWFuX3VwO1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI1NDEtICovXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjI1NDI6c3RhdGljIGludCBzY3RwX3Byb2Nlc3NfcGFyYW0oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI1NDMtXFx0XFx0XFx0ICAgICAgdW5pb24gc2N0cF9wYXJhbXMgcGFyYW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU2OjIwLjI5MjkyMjY2NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTIyNzA2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgc2N0cF92ZXJpZnlfaW5pdGAgYW5kIGBzY3RwX3Byb2Nlc3NfaW5pdGAqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgc2N0cF92ZXJpZnlfaW5pdGAgYW5kIGBzY3RwX3Byb2Nlc3NfaW5pdGAuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzLiBCdXQgSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlLiBBcmUgdGhleSBleHRlcm5hbGx5IHZpc2libGUsIG9yIGFyZSB0aGV5IGludGVybmFsIHRvIHRoaXMgbW9kdWxlPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhleSdyZSBleHBvcnRlZCBvciBpZiB0aGV5J3JlIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGRpc3RpbmN0aW9uIGlzIGNydWNpYWwuIEl0IHRlbGxzIG1lIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgYW5kLCB0aGVyZWZvcmUsIGhvdyB0aGV5IG1pZ2h0IGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGlzIFNDVFAgaW1wbGVtZW50YXRpb24uIEtub3dpbmcgdGhlaXIgc2NvcGUgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyB1bmRlcnN0YW5kaW5nIHRoZWlyIHJvbGVzIGFuZCBpbXBhY3QuIExldCdzIGRpZyBpbiBhbmQgZmluZCB0aG9zZSBkZWNsYXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1NjoyMy40NDUxOTU2NzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzk2NTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfdmVyaWZ5X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvc21fbWFrZV9jaHVuay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz0yMTUwPXN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMjkwLS8qIFZlcmlmeSB0aGUgSU5JVCBwYWNrZXQgYmVmb3JlIHdlIHByb2Nlc3MgaXQuICAqL1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMjkxOmludCBzY3RwX3ZlcmlmeV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMjkyLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIGVudW0gc2N0cF9jaWQgY2lkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1NjoyMy41MDc5OTk5MjZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxMzk1MDc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIGBzY3RwX3ZlcmlmeV9pbml0YCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzY3RwX3ZlcmlmeV9pbml0YCBmdW5jdGlvbi4gUmlnaHQsIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0J3MgZGVjbGFyZWQgYHN0YXRpY2Agb3Igbm90LiBMZXQgbWUganVzdCBjb25maXJtLi4uIFl1cCwgZGVmaW5pdGVseSBub3Qgc3RhdGljLiBTbyBpdCdzIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBkZWZpbmluZyBjb21waWxhdGlvbiB1bml0LiBUaGF0IG1lYW5zIGl0IGxpa2VseSBwbGF5cyBhIGNyaXRpY2FsIHJvbGUgaW4gbW9kdWxlIGxpbmtpbmcgb3IgY3Jvc3Mtb2JqZWN0IGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIFNDVFAgY29kZWJhc2UuIEludGVyZXN0aW5nIGltcGxpY2F0aW9ucyBhcmlzZSBmcm9tIHRoaXMgbm9uLXN0YXRpYyBuYXR1cmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHdoZW4gZGVidWdnaW5nLCBhbmQgYWxzbyB3aGVuIGxvb2tpbmcgZm9yIG90aGVyIGNhbGxpbmcgZnVuY3Rpb25zIHRvIGtub3cgd2h5IHRoaXMgaXMgcmVxdWlyZWQsIGFuZCB3aGF0IGNvbnRleHQgaXMgbmVlZGVkLiBPa2F5LCB1bmRlcnN0b29kLCBtb3Zpbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NzEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1NjoyNi40MjE5NTUwNThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NjkxOTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfcHJvY2Vzc19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MjI5MT1pbnQgc2N0cF92ZXJpZnlfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMzU2LSAqL1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMzU3OmludCBzY3RwX3Byb2Nlc3NfaW5pdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMzU4LVxcdFxcdCAgICAgIGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqcGVlcl9hZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1NjoyNi40OTE2NTExNDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4NDI1NTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTQ1RQIElOSVQgQ2h1bmsgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgc2N0cF9wcm9jZXNzX2luaXRgIGlzbid0IHN0YXRpYywgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBNeSBrZXkgZm9jdXMgcG9pbnRzIGZvciB0aGlzIHBhdGNoIGFyZSB0aGVyZWZvcmUgYHNjdHBfdmVyaWZ5X2luaXRgIGFuZCBgc2N0cF9wcm9jZXNzX2luaXRgLiBUaGUgY29uZmlnIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgaXMgYElQX1NDVFBgLlxuXG5UaGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5OiBhbiB1bmRlcmZsb3cgb3IgZGl2aWRlLWJ5LXplcm8gdGhhdCBjb3VsZCBvY2N1ciBkdXJpbmcgdGhlIHBhcnNpbmcgb2YgdGhlIGBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTYCBwYXJhbWV0ZXIgd2l0aGluIFNDVFAgSU5JVCBjaHVua3MuIEl0IGRvZXMgdGhpcyBieSBpbmNvcnBvcmF0aW5nIGxlbmd0aCBjaGVja3Mgd2l0aGluIGBzY3RwX3ZlcmlmeV9wYXJhbWAgYW5kIGBzY3RwX3Byb2Nlc3NfcGFyYW1gLiBUaGlzIG1vZGlmaWNhdGlvbiByZXByZXNlbnRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldHdvcmsgcGFja2V0IHBhcnNpbmcgbG9naWMsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbkknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIEkndmUgbWlzc2VkLiBJdCBzZWVtcyBgSVBfU0NUUGAgaXMgdGhlIGNvcmUgb25lLCB0aG91Z2guXG5cblRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM1OCwiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6MzEuNjc1OTA5OTkxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MzUxMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF92ZXJpZnlfaW5pdFwiLFxuICAgIFwic2N0cF9wcm9jZXNzX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1bmRlcmZsb3cgb3IgZGl2aWRlLWJ5LXplcm8gYnVnIHdoZW4gcHJvY2Vzc2luZyB0aGUgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUyBwYXJhbWV0ZXIgaW4gU0NUUCBJTklUIGNodW5rcy4gSXQgYWRkcyBsZW5ndGggY2hlY2tzIGluIHNjdHBfdmVyaWZ5X3BhcmFtIGFuZCBzY3RwX3Byb2Nlc3NfcGFyYW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBuZXR3b3JrIHBhY2tldCBwYXJzaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX3ZlcmlmeV9pbml0XCIsXG4gICAgXCJzY3RwX3Byb2Nlc3NfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVuZGVyZmxvdyBvciBkaXZpZGUtYnktemVybyBidWcgd2hlbiBwcm9jZXNzaW5nIHRoZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTIHBhcmFtZXRlciBpbiBTQ1RQIElOSVQgY2h1bmtzLiBJdCBhZGRzIGxlbmd0aCBjaGVja3MgaW4gc2N0cF92ZXJpZnlfcGFyYW0gYW5kIHNjdHBfcHJvY2Vzc19wYXJhbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldHdvcmsgcGFja2V0IHBhcnNpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU2OjMxLjgwMzI3MDE2OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzExMTk3NDQ2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1NjozMS44MDM4OTQ3NzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzExMTkxMTQ3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgZm9yIHRoZSBgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFU2AgcGFyYW1ldGVyIGluIFNDVFAgY2h1bmtzIHRvIHByZXZlbnQgYW4gaW50ZWdlciB1bmRlcmZsb3cuIFdpdGhvdXQgdGhpcyBjaGVjaywgaWYgYHBhcmFtLnAtXFx1MDAzZWxlbmd0aGAgaXMgbGVzcyB0aGFuIGBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCwgdGhlIGNhbGN1bGF0aW9uIGBzYXQgPSBudG9ocyhwYXJhbS5wLVxcdTAwM2VsZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAgdW5kZXJmbG93cywgcmVzdWx0aW5nIGluIGEgdmVyeSBsYXJnZSB1bnNpZ25lZCBpbnRlZ2VyLiBUaGlzIGNhdXNlcyB0aGUgc3Vic2VxdWVudCBsb29wIHRvIGl0ZXJhdGUgb3V0IG9mIGJvdW5kcywgcmVhZGluZyBmcm9tIGBwYXJhbS5zYXQtXFx1MDAzZXR5cGVzW2ldYC4gXFxuXFxuVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgb24gdGhlIHBhY2tldCBidWZmZXIgKHNrYikuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAoc2xhYi1vdXQtb2YtYm91bmRzIG9yIGdsb2JhbC1vdXQtb2YtYm91bmRzKS4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIEtBU0FOIHdpbGwgZWZmZWN0aXZlbHkgY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIHRoaXMgbWlzc2luZyBsZW5ndGggY2hlY2suXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjNmY2QzOWE2MTRlY2JmOWNkMmNmY2JhZmRlMWExNTdkZDM1ZDVkYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA5OjU2OjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jXG5pbmRleCAyMzZlMjVhYmM3YTQyLi5lYmY3OTE5Njk0NTRiIDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jXG4rKysgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcbkBAIC0yMTY5LDEyICsyMTY5LDE5IEBAIHN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGNhc2UgU0NUUF9QQVJBTV9JUFY0X0FERFJFU1M6XG4gXHRjYXNlIFNDVFBfUEFSQU1fSVBWNl9BRERSRVNTOlxuIFx0Y2FzZSBTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkU6XG4tXHRjYXNlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVM6XG4gXHRjYXNlIFNDVFBfUEFSQU1fU1RBVEVfQ09PS0lFOlxuIFx0Y2FzZSBTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPOlxuIFx0Y2FzZSBTQ1RQX1BBUkFNX1VOUkVDT0dOSVpFRF9QQVJBTUVURVJTOlxuIFx0Y2FzZSBTQ1RQX1BBUkFNX0VDTl9DQVBBQkxFOlxuIFx0XHRicmVhaztcbitcbitcdGNhc2UgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUzpcbitcdFx0aWYgKG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkge1xuK1x0XHRcdHNjdHBfcHJvY2Vzc19pbnZfcGFyYW1sZW5ndGgoYXNvYywgcGFyYW0ucCxcbitcdFx0XHRcdFx0XHQgICAgIGNodW5rLCBlcnJfY2h1bmspO1xuK1x0XHRcdHJldHZhbCA9IFNDVFBfSUVSUk9SX0FCT1JUO1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EOlxuIFx0XHRpZiAobnRvaHMocGFyYW0ucC1cdTAwM2VsZW5ndGgpICE9IHNpemVvZigqcGFyYW0uYWluZCkpIHtcbiBcdFx0XHRzY3RwX3Byb2Nlc3NfaW52X3BhcmFtbGVuZ3RoKGFzb2MsIHBhcmFtLnAsXG5AQCAtMjYwMCw2ICsyNjA3LDkgQEAgc3RhdGljIGludCBzY3RwX3Byb2Nlc3NfcGFyYW0oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXHRcdFx0YXNvYy1cdTAwM2VwZWVyLmlwdjRfYWRkcmVzcyA9IDE7XG4gXG4gXHRcdC8qIEN5Y2xlIHRocm91Z2ggYWRkcmVzcyB0eXBlczsgYXZvaWQgZGl2aWRlIGJ5IDAuICovXG4rXHRcdGlmIChudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aCkgXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpXG4rXHRcdFx0YnJlYWs7XG4rXG4gXHRcdHNhdCA9IG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7XG4gXHRcdGlmIChzYXQpXG4gXHRcdFx0c2F0IC89IHNpemVvZihfX3UxNik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1NjozMS44MDM4OTYyMzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODIzMTQxMzM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBVbmRlcmZsb3cgaW4gU0NUUCBQYXJhbWV0ZXIgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNgLiBJdCdzIGZvY3VzZWQgb24gdGhlIGBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTYCBwYXJhbWV0ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgYSBsZW5ndGggY2hlY2suIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcImdvb2QgY2F0Y2gsIGFsd2F5cyBpbXBvcnRhbnQgdG8gdmFsaWRhdGUgaW5wdXQuXCJcblxuRGlnZ2luZyBpbiwgSSBzZWUgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGluIGBzY3RwX3ZlcmlmeV9wYXJhbWAgYW5kIGBzY3RwX3Byb2Nlc3NfcGFyYW1gLiBJbiBgc2N0cF92ZXJpZnlfcGFyYW1gLCBhIHN0cmFpZ2h0Zm9yd2FyZCBsZW5ndGggY2hlY2sgaXMgYWRkZWQ6IGlmIHRoZSBwYXJhbWV0ZXIgbGVuZ3RoIGlzIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIGhlYWRlciwgaXQncyBmbGFnZ2VkIGFzIGludmFsaWQuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0J3MgYSBiYXNpYyBzYW5pdHkgY2hlY2sgdG8gcHJldmVudCBwcm9jZXNzaW5nIGNvcnJ1cHRlZCBkYXRhLlxuXG5UaGUgcmVhbCBtZWF0IG9mIHRoZSBpc3N1ZSBzZWVtcyB0byBiZSB3aXRoaW4gYHNjdHBfcHJvY2Vzc19wYXJhbWAuIEhlcmUsIHRoZXJlJ3MgdGhpcyBjYWxjdWxhdGlvbjogYHNhdCA9IG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7YCBhbmQgdGhlbiBgc2F0IC89IHNpemVvZihfX3UxNik7YC4gTXkgc3BpZGVyIHNlbnNlcyBhcmUgdGluZ2xpbmcuIElmIGBudG9ocyhwYXJhbS5wLVx1MDAzZWxlbmd0aClgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHdlJ3JlIHBvdGVudGlhbGx5IGxvb2tpbmcgYXQgYW4gaW50ZWdlciB1bmRlcmZsb3cuIGBzYXRgIGlzIHByb2JhYmx5IGFuIHVuc2lnbmVkIGludGVnZXIuIFRoYXQgdW5kZXJmbG93IHdvdWxkIHJlc3VsdCBpbiBhIGh1Z2UgdmFsdWUgZm9yIGBzYXRgLiBBbmQgdGhlbiBkaXZpZGluZyB0aGF0IGJ5IGBzaXplb2YoX191MTYpYC4uLiB0aGF0J3MgYSByZWNpcGUgZm9yIGEgbWFzc2l2ZSBsb29wIG9yLCB3b3JzZSwgc29tZXRoaW5nIHVuZXhwZWN0ZWQuIFdlJ2QgaGF2ZSBhIHBvdGVudGlhbGx5IHVuYm91bmRlZCBsb29wIG9yIGNhbGN1bGF0aW9uIGJhc2VkIG9uIHRoZSB1bmRlcmZsb3dlZCBudW1iZXIuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3MgY29ycmVjdCwgYW5kIGZpbmQgYHNjdHBfcHJvY2Vzc19wYXJhbWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1Njo0MC4wMzUzMTM3ODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjg2OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfcHJvY2Vzc19wYXJhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTU3PXN0YXRpYyBzdHJ1Y3Qgc2N0cF9jb29raWVfcGFyYW0gKnNjdHBfcGFja19jb29raWUoXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtNjItXFx0XFx0XFx0XFx0XFx0Y29uc3QgX191OCAqcmF3X2FkZHJzLCBpbnQgYWRkcnNfbGVuKTtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6NjM6c3RhdGljIGludCBzY3RwX3Byb2Nlc3NfcGFyYW0oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTY0LVxcdFxcdFxcdCAgICAgIHVuaW9uIHNjdHBfcGFyYW1zIHBhcmFtLFxcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTIzNTc9aW50IHNjdHBfcHJvY2Vzc19pbml0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjM5Ny1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjM5ODpcXHRcXHRpZiAoIXNjdHBfcHJvY2Vzc19wYXJhbShhc29jLCBwYXJhbSwgcGVlcl9hZGRyLCBnZnApKVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMzk5LVxcdFxcdFxcdGdvdG8gY2xlYW5fdXA7XFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjU0MS0gKi9cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjU0MjpzdGF0aWMgaW50IHNjdHBfcHJvY2Vzc19wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjU0My1cXHRcXHRcXHQgICAgICB1bmlvbiBzY3RwX3BhcmFtcyBwYXJhbSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6NDAuMDk3MDA1MDdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMzYyMTgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgc2N0cF9wcm9jZXNzX3BhcmFtYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU0NUUCBwcm90b2NvbCBoYW5kbGVzIHBhcmFtZXRlcnMuIExpbmUgMjYwMCBpbiB0aGUgY29kZSBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIHByb2Nlc3Npbmcgb2YgcGFyYW1ldGVycywgc28gSSdsbCB6ZXJvIGluIHRoZXJlLiBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHRvIHBheSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hhdCBzcGVjaWZpYyBwYXJhbWV0ZXIgdHlwZXMgYXJlIGhhbmRsZWQgYW5kIGhvdy4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtY29tbWVudGVkLCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgbG9naWMsIGFuZCBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTUsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1Njo0My4zMzA2Mjk2NDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMTAsIkVycm9yIjoiYXJndW1lbnQgXCJGaXJzdExpbmVcIiBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnQiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogXCIyNTgwXCIsXG4gIFwiTGluZUNvdW50XCI6IFwiNTBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJhcmd1bWVudCBcXFwiRmlyc3RMaW5lXFxcIiBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnRcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6NDMuMzMwNjY2NzQ5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODcxNDA0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEZWJ1Z2dpbmcgdGhlIFZhcmlhYmxlIFwiRmlyc3RMaW5lXCIqKlxuXG5IbW0sIHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLi4uIHdhaXQgYSBtaW51dGUuIFwiRmlyc3RMaW5lXCIgaXMgc3VwcG9zZWQgdG8gYmUsIHlvdSBrbm93LCBhIGxpbmUgbnVtYmVyISBBIGxpbmUgbnVtYmVyIGluIGEgdGV4dCBmaWxlLiBBbmQgYmFzZWQgb24gaG93IGl0J3MgYmVpbmcgdXNlZCwgaXQgbmVlZHMgdG8gYmUgYW4gaW50ZWdlci4gSXQgaGFzIHRvIGJlLCBvdGhlcndpc2UsIHRoZSBkb3duc3RyZWFtIG9wZXJhdGlvbnMgYXJlIGdvaW5nIHRvIGNvbXBsZXRlbHkgZmFsbCBhcGFydC4gVGhlIHdob2xlIGxvZ2ljIGhpbmdlcyBvbiB0cmVhdGluZyB0aGF0IHZhcmlhYmxlIGFzIGEgd2hvbGUgbnVtYmVyIOKAkyBzb21ldGhpbmcgSSBjYW4gdXNlIGZvciBpbmRleGluZywgY2FsY3VsYXRpb25zLi4uIGV2ZXJ5dGhpbmcuIEJ1dCB0aGUgZXJyb3IgbWVzc2FnZSwgY2xlYXJseSwgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSB0eXBlIGRlY2xhcmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIHR5cGUgb2YgXCJGaXJzdExpbmVcIiBpcyBkZWZpbmVkIGNvcnJlY3RseSwgb3IgaXMgYmVpbmcgY29udmVydGVkIGNvcnJlY3RseSwgdG8gYW4gaW50ZWdlci4gVGhpcyBpcyBhIGNsYXNzaWMgdHlwZS1taXNtYXRjaCBwcm9ibGVtLCBJJ3ZlIHNlZW4gaXQgYSB0aG91c2FuZCB0aW1lcy4gSSdkIGJldHRlciBnbyBhbmQgcXVpY2tseSB0cmFjayBkb3duIHRoZSBkZWNsYXJhdGlvbiBvZiBcIkZpcnN0TGluZVwiIGFuZCBhbnkgcG9pbnRzIHdoZXJlIGl04oCZcyBiZWluZyBhc3NpZ25lZCBhIHZhbHVlLiBHb3R0YSBtYWtlIHN1cmUgaXQncyAqZGVmaW5pdGVseSogYW4gaW50ZWdlciwgb3IgdGhhdCBpdCdzIGJlaW5nIGV4cGxpY2l0bHkgY2FzdCBhcyBvbmUgaWYgaXQncyBjb21pbmcgZnJvbSBzb21lIG90aGVyIHNvdXJjZS4gVGhpcyBzaG91bGQgYmUgYSBxdWljayBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NjAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6NDYuNTE3ODE4MTMzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjAyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvc21fbWFrZV9jaHVuay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1ODA6XFx0XFx0XFx0YnJlYWs7XFxuMjU4MTpcXHRcXG4yNTgyOlxcdFxcdGNhc2UgU0NUUF9QQVJBTV9DT09LSUVfUFJFU0VSVkFUSVZFOlxcbjI1ODM6XFx0XFx0XFx0aWYgKCFuZXQtXFx1MDAzZXNjdHAuY29va2llX3ByZXNlcnZlX2VuYWJsZSlcXG4yNTg0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI1ODU6XFx0XFxuMjU4NjpcXHRcXHRcXHRzdGFsZSA9IG50b2hsKHBhcmFtLmxpZmUtXFx1MDAzZWxpZmVzcGFuX2luY3JlbWVudCk7XFxuMjU4NzpcXHRcXG4yNTg4OlxcdFxcdFxcdC8qIFN1Z2dlc3RlZCBDb29raWUgTGlmZSBzcGFuIGluY3JlbWVudCdzIHVuaXQgaXMgbXNlYyxcXG4yNTg5OlxcdFxcdFxcdCAqICgxLzEwMDBzZWMpLlxcbjI1OTA6XFx0XFx0XFx0ICovXFxuMjU5MTpcXHRcXHRcXHRhc29jLVxcdTAwM2Vjb29raWVfbGlmZSA9IGt0aW1lX2FkZF9tcyhhc29jLVxcdTAwM2Vjb29raWVfbGlmZSwgc3RhbGUpO1xcbjI1OTI6XFx0XFx0XFx0YnJlYWs7XFxuMjU5MzpcXHRcXG4yNTk0OlxcdFxcdGNhc2UgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUzpcXG4yNTk1OlxcdFxcdFxcdC8qIFR1cm4gb2ZmIHRoZSBkZWZhdWx0IHZhbHVlcyBmaXJzdCBzbyB3ZSdsbCBrbm93IHdoaWNoXFxuMjU5NjpcXHRcXHRcXHQgKiBvbmVzIGFyZSByZWFsbHkgc2V0IGJ5IHRoZSBwZWVyLlxcbjI1OTc6XFx0XFx0XFx0ICovXFxuMjU5ODpcXHRcXHRcXHRhc29jLVxcdTAwM2VwZWVyLmlwdjRfYWRkcmVzcyA9IDA7XFxuMjU5OTpcXHRcXHRcXHRhc29jLVxcdTAwM2VwZWVyLmlwdjZfYWRkcmVzcyA9IDA7XFxuMjYwMDpcXHRcXG4yNjAxOlxcdFxcdFxcdC8qIEFzc3VtZSB0aGF0IHBlZXIgc3VwcG9ydHMgdGhlIGFkZHJlc3MgZmFtaWx5XFxuMjYwMjpcXHRcXHRcXHQgKiBieSB3aGljaCBpdCBzZW5kcyBhIHBhY2tldC5cXG4yNjAzOlxcdFxcdFxcdCAqL1xcbjI2MDQ6XFx0XFx0XFx0aWYgKHBlZXJfYWRkci1cXHUwMDNlc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KVxcbjI2MDU6XFx0XFx0XFx0XFx0YXNvYy1cXHUwMDNlcGVlci5pcHY2X2FkZHJlc3MgPSAxO1xcbjI2MDY6XFx0XFx0XFx0ZWxzZSBpZiAocGVlcl9hZGRyLVxcdTAwM2VzYS5zYV9mYW1pbHkgPT0gQUZfSU5FVClcXG4yNjA3OlxcdFxcdFxcdFxcdGFzb2MtXFx1MDAzZXBlZXIuaXB2NF9hZGRyZXNzID0gMTtcXG4yNjA4OlxcdFxcbjI2MDk6XFx0XFx0XFx0LyogQ3ljbGUgdGhyb3VnaCBhZGRyZXNzIHR5cGVzOyBhdm9pZCBkaXZpZGUgYnkgMC4gKi9cXG4yNjEwOlxcdFxcdFxcdGlmIChudG9ocyhwYXJhbS5wLVxcdTAwM2VsZW5ndGgpIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSlcXG4yNjExOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI2MTI6XFx0XFxuMjYxMzpcXHRcXHRcXHRzYXQgPSBudG9ocyhwYXJhbS5wLVxcdTAwM2VsZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTtcXG4yNjE0OlxcdFxcdFxcdGlmIChzYXQpXFxuMjYxNTpcXHRcXHRcXHRcXHRzYXQgLz0gc2l6ZW9mKF9fdTE2KTtcXG4yNjE2OlxcdFxcbjI2MTc6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNhdDsgKytpKSB7XFxuMjYxODpcXHRcXHRcXHRcXHRzd2l0Y2ggKHBhcmFtLnNhdC1cXHUwMDNldHlwZXNbaV0pIHtcXG4yNjE5OlxcdFxcdFxcdFxcdGNhc2UgU0NUUF9QQVJBTV9JUFY0X0FERFJFU1M6XFxuMjYyMDpcXHRcXHRcXHRcXHRcXHRhc29jLVxcdTAwM2VwZWVyLmlwdjRfYWRkcmVzcyA9IDE7XFxuMjYyMTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNjIyOlxcdFxcbjI2MjM6XFx0XFx0XFx0XFx0Y2FzZSBTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUzpcXG4yNjI0OlxcdFxcdFxcdFxcdFxcdGlmIChQRl9JTkVUNiA9PSBhc29jLVxcdTAwM2ViYXNlLnNrLVxcdTAwM2Vza19mYW1pbHkpXFxuMjYyNTpcXHRcXHRcXHRcXHRcXHRcXHRhc29jLVxcdTAwM2VwZWVyLmlwdjZfYWRkcmVzcyA9IDE7XFxuMjYyNjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNjI3OlxcdFxcbjI2Mjg6XFx0XFx0XFx0XFx0ZGVmYXVsdDogLyogSnVzdCBpZ25vcmUgYW55dGhpbmcgZWxzZS4gICovXFxuMjYyOTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6NDYuNTE4OTQxNzgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyODg2NDQ0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBSZWFkIGluIFNDVFAgUGFyYW1ldGVyIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBTQ1RQIGNvZGUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHBhcmFtZXRlciBoYW5kbGluZy4gSXQgc2VlbXMgbGlrZSB0aGUgdmFyaWFibGUgYHNhdGAgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLCBhbmQgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGhpbmdlcyBvbiBob3cgYHNhdGAgaXMgY2FsY3VsYXRlZC4gSWYgYG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKWAgaXMgbGVzcyB0aGFuIGBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCwgdGhhdCdzIGEgcHJvYmxlbSwgYmVjYXVzZSBgc2F0YCB1bmRlcmZsb3dzLiBEaXZpZGluZyBpdCBieSBgc2l6ZW9mKF9fdTE2KWAgdGhlbiBjcmVhdGVzIGEgbWFzc2l2ZSwgdW5pbnRlbmRlZCB2YWx1ZSBmb3IgYHNhdGAuXG5cblRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoZSBzdWJzZXF1ZW50IGxvb3A6IGBmb3IgKGkgPSAwOyBpIFx1MDAzYyBzYXQ7ICsraSlgLiBCZWNhdXNlIGBzYXRgIGlzIG5vdyBhbiBlbm9ybW91cyBudW1iZXIsIHRoaXMgbG9vcCB3aWxsIGl0ZXJhdGUgZmFyIGJleW9uZCB0aGUgaW50ZW5kZWQgYm91bmRzLCBhdHRlbXB0aW5nIHRvIHJlYWQgYHBhcmFtLnNhdC1cdTAwM2V0eXBlc1tpXWAuIEkga25vdyBgcGFyYW0uc2F0YCBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIHBhY2tldCBkYXRhLCB3aGljaCBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgc2NlbmFyaW8uXG5cbk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIktBU0FOIHdpbGwgY2F0Y2ggdGhpcywgcmlnaHQ/XCIuIFJlYWRpbmcgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBidWZmZXIsIHdoaWNoIGlzIGxpa2VseSBhbiBza2Igb3Igc2ltaWxhciwgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGRldGVjdGlvbiBmb3IgS0FTQU4uIE15IG5leHQgdGhvdWdodCBpcyBcImlzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkP1wiLCBidXQsIG5vLCBiZWNhdXNlIHRoZSBjb2RlIGlzIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQsIG5vdCBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgcmVnaW9uIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBUaGUgYnVmZmVyIGlzIGluaXRpYWxpemVkIHVwIHRvIHRoZSBwYWNrZXQgbGVuZ3RoLCBzbyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaXMgd2hhdCBpdCBpcy5cblxuR2l2ZW4gdGhhdCB0aGUgcGFja2V0IGNvbWVzIGZyb20gdGhlIG5ldHdvcmssIHRoZSBidWZmZXIgc2hvdWxkIGJlIGluaXRpYWxpemVkIHVwIHRvIHRoZSBwYWNrZXQgbGVuZ3RoLiBTbywgS0FTQU4gKnNob3VsZCogYmUgYWJsZSB0byBkZXRlY3QgdGhlIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhpcyBpcyBsb29raW5nIHByb21pc2luZzsgS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gZmxhZyB0aGlzLlxuXG5JJ2xsIGNoZWNrIGBzY3RwX3ZlcmlmeV9wYXJhbWAgYXJvdW5kIGxpbmUgMjE2OSwganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQ0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NTY6NTIuODA3NTg5MzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTUwOlxcdHN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfdmVyaWZ5X3BhcmFtKHN0cnVjdCBuZXQgKm5ldCxcXG4yMTUxOlxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbjIxNTI6XFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4yMTUzOlxcdFxcdFxcdFxcdFxcdFxcdCAgdW5pb24gc2N0cF9wYXJhbXMgcGFyYW0sXFxuMjE1NDpcXHRcXHRcXHRcXHRcXHRcXHQgIGVudW0gc2N0cF9jaWQgY2lkLFxcbjIxNTU6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXFxuMjE1NjpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY3RwX2NodW5rICoqZXJyX2NodW5rKVxcbjIxNTc6XFx0e1xcbjIxNTg6XFx0XFx0c3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICpobWFjcztcXG4yMTU5OlxcdFxcdGludCByZXR2YWwgPSBTQ1RQX0lFUlJPUl9OT19FUlJPUjtcXG4yMTYwOlxcdFxcdF9fdTE2IG5fZWx0LCBpZCA9IDA7XFxuMjE2MTpcXHRcXHRpbnQgaTtcXG4yMTYyOlxcdFxcbjIxNjM6XFx0XFx0LyogRklYTUUgLSBUaGlzIHJvdXRpbmUgaXMgbm90IGxvb2tpbmcgYXQgZWFjaCBwYXJhbWV0ZXIgcGVyIHRoZVxcbjIxNjQ6XFx0XFx0ICogY2h1bmsgdHlwZSwgaS5lLiwgdW5yZWNvZ25pemVkIHBhcmFtZXRlcnMgc2hvdWxkIGJlIGZ1cnRoZXJcXG4yMTY1OlxcdFxcdCAqIGlkZW50aWZpZWQgYmFzZWQgb24gdGhlIGNodW5rIGlkLlxcbjIxNjY6XFx0XFx0ICovXFxuMjE2NzpcXHRcXG4yMTY4OlxcdFxcdHN3aXRjaCAocGFyYW0ucC1cXHUwMDNldHlwZSkge1xcbjIxNjk6XFx0XFx0Y2FzZSBTQ1RQX1BBUkFNX0lQVjRfQUREUkVTUzpcXG4yMTcwOlxcdFxcdGNhc2UgU0NUUF9QQVJBTV9JUFY2X0FERFJFU1M6XFxuMjE3MTpcXHRcXHRjYXNlIFNDVFBfUEFSQU1fQ09PS0lFX1BSRVNFUlZBVElWRTpcXG4yMTcyOlxcdFxcdGNhc2UgU0NUUF9QQVJBTV9TVEFURV9DT09LSUU6XFxuMjE3MzpcXHRcXHRjYXNlIFNDVFBfUEFSQU1fSEVBUlRCRUFUX0lORk86XFxuMjE3NDpcXHRcXHRjYXNlIFNDVFBfUEFSQU1fVU5SRUNPR05JWkVEX1BBUkFNRVRFUlM6XFxuMjE3NTpcXHRcXHRjYXNlIFNDVFBfUEFSQU1fRUNOX0NBUEFCTEU6XFxuMjE3NjpcXHRcXHRcXHRicmVhaztcXG4yMTc3OlxcdFxcbjIxNzg6XFx0XFx0Y2FzZSBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTOlxcbjIxNzk6XFx0XFx0XFx0aWYgKG50b2hzKHBhcmFtLnAtXFx1MDAzZWxlbmd0aCkgXFx1MDAzYyBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7XFxuMjE4MDpcXHRcXHRcXHRcXHRzY3RwX3Byb2Nlc3NfaW52X3BhcmFtbGVuZ3RoKGFzb2MsIHBhcmFtLnAsXFxuMjE4MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGNodW5rLCBlcnJfY2h1bmspO1xcbjIxODI6XFx0XFx0XFx0XFx0cmV0dmFsID0gU0NUUF9JRVJST1JfQUJPUlQ7XFxuMjE4MzpcXHRcXHRcXHR9XFxuMjE4NDpcXHRcXHRcXHRicmVhaztcXG4yMTg1OlxcdFxcdGNhc2UgU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDpcXG4yMTg2OlxcdFxcdFxcdGlmIChudG9ocyhwYXJhbS5wLVxcdTAwM2VsZW5ndGgpICE9IHNpemVvZigqcGFyYW0uYWluZCkpIHtcXG4yMTg3OlxcdFxcdFxcdFxcdHNjdHBfcHJvY2Vzc19pbnZfcGFyYW1sZW5ndGgoYXNvYywgcGFyYW0ucCxcXG4yMTg4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgY2h1bmssIGVycl9jaHVuayk7XFxuMjE4OTpcXHRcXHRcXHRcXHRyZXR2YWwgPSBTQ1RQX0lFUlJPUl9BQk9SVDtcXG4yMTkwOlxcdFxcdFxcdH1cXG4yMTkxOlxcdFxcdFxcdGJyZWFrO1xcbjIxOTI6XFx0XFxuMjE5MzpcXHRcXHRjYXNlIFNDVFBfUEFSQU1fU1VQUE9SVEVEX0VYVDpcXG4yMTk0OlxcdFxcdFxcdGlmICghc2N0cF92ZXJpZnlfZXh0X3BhcmFtKG5ldCwgZXAsIHBhcmFtKSlcXG4yMTk1OlxcdFxcdFxcdFxcdHJldHVybiBTQ1RQX0lFUlJPUl9BQk9SVDtcXG4yMTk2OlxcdFxcdFxcdGJyZWFrO1xcbjIxOTc6XFx0XFxuMjE5ODpcXHRcXHRjYXNlIFNDVFBfUEFSQU1fU0VUX1BSSU1BUlk6XFxuMjE5OTpcXHRcXHRcXHRpZiAoIWVwLVxcdTAwM2Vhc2NvbmZfZW5hYmxlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo1Njo1Mi44MDc3NjA3NloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDExNTIxODExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGJvdW5kcyBjaGVjayBhZGRpdGlvbiDigJMgc3BlY2lmaWNhbGx5LCBpdCdzIHByZXZlbnRpbmcgYW4gaW50ZWdlciB1bmRlcmZsb3cgaW4gU0NUUCBwYXJhbWV0ZXIgaGFuZGxpbmcuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gYHBhcmFtLnNhdC1cdTAwM2V0eXBlc1tpXWAuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IGBwYXJhbWAgaXMgcGFydCBvZiB0aGUgcmVjZWl2ZWQgY2h1bmssIHdoaWNoIG1lYW5zIGFueSBvdXQtb2YtYm91bmRzIHJlYWQgaXMgZ29pbmcgdG8gYmUgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCBvbiB0aGUgcGFja2V0IGJ1ZmZlciAoYHNrYmApLiBLQVNBTiwgaW4gaXRzIGluZmluaXRlIHdpc2RvbSwgaXMgKmRlc2lnbmVkKiB0byBzbmlmZiBvdXQgdGhlc2Uga2luZHMgb2YgcmVhZHMuIEl0IGRvZXNuJ3QgbWF0dGVyIGlmIGl0J3Mgc2xhYi1vdXQtb2YtYm91bmRzIG9yIGdsb2JhbC1vdXQtb2YtYm91bmRzOyBLQVNBTiB3aWxsIGRldGVjdCBpdC5cblxuSSBkaWQgcXVpY2tseSBjb25zaWRlciBpZiB0aGlzIGNvdWxkIGJlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBidXQgaXQncyBub3QuIFRoZSBtZW1vcnkgYmVpbmcgYWNjZXNzZWQgaXMgZWl0aGVyOlxuXG4xLiAgT3V0LW9mLWJvdW5kcyBvZiB0aGUgYHNrYmAsIHdoaWNoIEtBU0FOIGNhdGNoZXMuXG4yLiAgV2l0aGluIHRoZSBgc2tiYCBidXQgcGFzdCB0aGUgbGVnaXRpbWF0ZSBwYXJhbWV0ZXIgbGVuZ3RoLiBJbiB0aGlzIHNjZW5hcmlvLCBpdCBpcyByZWFkaW5nICpvdGhlciogcGFyYW1ldGVycyBvciBwYWRkaW5nIHdpdGhpbiB0aGUgYHNrYmAuIFdoaWxlIHRoaXMgY2FuIGxlYWQgdG8gbG9naWMgYnVncyAoaW50ZXJwcmV0aW5nIG90aGVyIHBhcmFtZXRlcnMgaW5jb3JyZWN0bHkpLCBpdCdzIG5vdCBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gYG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHdoaWNoIGlzIGEgdGV4dGJvb2sgbWlzc2luZyBsZW5ndGggY2hlY2suIFRoZSB1bmRlcmZsb3cgY2F1c2VzIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQuIFNpbmNlIHRoZSByZWFkIGlzIGd1YXJhbnRlZWQgdG8gYmUgd2l0aGluIHRoZSBgc2tiYCAqb3IqIG91dC1vZi1ib3VuZHMsIGl0J3MgYSBLQVNBTiBwcm9ibGVtLCBub3QgYSBLTVNBTiBwcm9ibGVtLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBoZXJlLlxuXG5UaGVyZWZvcmUsIG5vIEtNU0FOIHNlc3Npb24gaXMgbmVlZGVkLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgZm9yIHRoZSBgU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFU2AgcGFyYW1ldGVyIGluIFNDVFAgY2h1bmtzIHRvIHByZXZlbnQgYW4gaW50ZWdlciB1bmRlcmZsb3cuIFdpdGhvdXQgdGhlIGNoZWNrLCB0aGUgY2FsY3VsYXRpb24gYHNhdCA9IG50b2hzKHBhcmFtLnAtXHUwMDNlbGVuZ3RoKSAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcilgIGNhbiB1bmRlcmZsb3csIGxlYWRpbmcgdG8gYSBsYXJnZSB1bnNpZ25lZCBpbnRlZ2VyIGFuZCBhbiBvdXQtb2YtYm91bmRzIGxvb3Agb24gdGhlIHBhY2tldCBidWZmZXIgKGBza2JgKS4gS0FTQU4gaXMgdGhlIHByb3BlciB0b29sIGZvciBkZXRlY3RpbmcgdGhpcyBraW5kIG9mIHZ1bG5lcmFiaWxpdHkgYmVjYXVzZSB0aGlzIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IGFuZCBub3QgdGhlIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mzg4LCJPdXRwdXRUb2tlbnMiOjI1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjU3OjAyLjkyMjk4MjI3NloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCBjaGVjayBmb3IgdGhlIGBTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTYCBwYXJhbWV0ZXIgaW4gU0NUUCBjaHVua3MgdG8gcHJldmVudCBhbiBpbnRlZ2VyIHVuZGVyZmxvdy4gV2l0aG91dCB0aGlzIGNoZWNrLCBpZiBgcGFyYW0ucC1cXHUwMDNlbGVuZ3RoYCBpcyBsZXNzIHRoYW4gYHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcilgLCB0aGUgY2FsY3VsYXRpb24gYHNhdCA9IG50b2hzKHBhcmFtLnAtXFx1MDAzZWxlbmd0aCkgLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpYCB1bmRlcmZsb3dzLCByZXN1bHRpbmcgaW4gYSB2ZXJ5IGxhcmdlIHVuc2lnbmVkIGludGVnZXIuIFRoaXMgY2F1c2VzIHRoZSBzdWJzZXF1ZW50IGxvb3AgdG8gaXRlcmF0ZSBvdXQgb2YgYm91bmRzLCByZWFkaW5nIGZyb20gYHBhcmFtLnNhdC1cXHUwMDNldHlwZXNbaV1gLiBcXG5cXG5UaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBvbiB0aGUgcGFja2V0IGJ1ZmZlciAoc2tiKS4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChzbGFiLW91dC1vZi1ib3VuZHMgb3IgZ2xvYmFsLW91dC1vZi1ib3VuZHMpLiBUaGVyZSBpcyBubyBhbGxvY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIGludm9sdmVkIGluIHRoaXMgYnVnLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgS0FTQU4gd2lsbCBlZmZlY3RpdmVseSBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmVzdWx0aW5nIGZyb20gdGhpcyBtaXNzaW5nIGxlbmd0aCBjaGVjay5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGZvciB0aGUgYFNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVNgIHBhcmFtZXRlciBpbiBTQ1RQIGNodW5rcyB0byBwcmV2ZW50IGFuIGludGVnZXIgdW5kZXJmbG93LiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBwYXJhbS5wLVxcdTAwM2VsZW5ndGhgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHRoZSBjYWxjdWxhdGlvbiBgc2F0ID0gbnRvaHMocGFyYW0ucC1cXHUwMDNlbGVuZ3RoKSAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcilgIHVuZGVyZmxvd3MsIHJlc3VsdGluZyBpbiBhIHZlcnkgbGFyZ2UgdW5zaWduZWQgaW50ZWdlci4gVGhpcyBjYXVzZXMgdGhlIHN1YnNlcXVlbnQgbG9vcCB0byBpdGVyYXRlIG91dCBvZiBib3VuZHMsIHJlYWRpbmcgZnJvbSBgcGFyYW0uc2F0LVxcdTAwM2V0eXBlc1tpXWAuIFxcblxcblRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IG9uIHRoZSBwYWNrZXQgYnVmZmVyIChza2IpLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKHNsYWItb3V0LW9mLWJvdW5kcyBvciBnbG9iYWwtb3V0LW9mLWJvdW5kcykuIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBLQVNBTiB3aWxsIGVmZmVjdGl2ZWx5IGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSB0aGlzIG1pc3NpbmcgbGVuZ3RoIGNoZWNrLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow52j6l[1] Phase: Succeeded StartedAt: 2026-08-18 09:57:13 +0000 UTC FinishedAt: 2026-08-18 09:57:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 09:57:13 +0000 UTC FinishedAt: 2026-08-18 09:57:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2] Phase: Succeeded StartedAt: 2026-08-18 09:57:13 +0000 UTC FinishedAt: 2026-08-18 13:37:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 09:57:13 +0000 UTC FinishedAt: 2026-08-18 13:37:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 09:57:13 +0000 UTC FinishedAt: 2026-08-18 09:57:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 09:57:13 +0000 UTC FinishedAt: 2026-08-18 09:57:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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-workflow52j6l/series-workflow52j6l-convert-artifact-339117242/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 09:57:23 +0000 UTC FinishedAt: 2026-08-18 10:13:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 09:57:23 +0000 UTC FinishedAt: 2026-08-18 10:13:57 +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:*a40697a6-c28e-4998-b134-8015d55cbbbc,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-workflow52j6l/series-workflow52j6l-convert-artifact-339117242/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": "e9106b60-e82e-46cc-be62-85813215e395", "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-workflow52j6l/series-workflow52j6l-build-action-1316207208/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 09:57:23 +0000 UTC FinishedAt: 2026-08-18 10:13:47 +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:*a40697a6-c28e-4998-b134-8015d55cbbbc,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-workflow52j6l/series-workflow52j6l-convert-artifact-339117242/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": "e9106b60-e82e-46cc-be62-85813215e395", "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-workflow52j6l/series-workflow52j6l-build-action-1316207208/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:13:57 +0000 UTC FinishedAt: 2026-08-18 10:13:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:13:57 +0000 UTC FinishedAt: 2026-08-18 10:13:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:13:57 +0000 UTC FinishedAt: 2026-08-18 10:14:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:13:57 +0000 UTC FinishedAt: 2026-08-18 10:14:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-workflow52j6l/series-workflow52j6l-convert-artifact-182977557/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:14:07 +0000 UTC FinishedAt: 2026-08-18 10:16:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:14:07 +0000 UTC FinishedAt: 2026-08-18 10:16:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e9106b60-e82e-46cc-be62-85813215e395,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-workflow52j6l/series-workflow52j6l-build-action-1316207208/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-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:16:14 +0000 UTC FinishedAt: 2026-08-18 10:16:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:16:14 +0000 UTC FinishedAt: 2026-08-18 10:16:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:16:14 +0000 UTC FinishedAt: 2026-08-18 10:34:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:16:14 +0000 UTC FinishedAt: 2026-08-18 10:34:00 +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:*a40697a6-c28e-4998-b134-8015d55cbbbc,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-workflow52j6l/series-workflow52j6l-convert-artifact-182977557/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": "539580c1-eda4-4d4c-bcbf-5fb105c8c5d9", "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-workflow52j6l/series-workflow52j6l-build-action-297183905/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:16:14 +0000 UTC FinishedAt: 2026-08-18 10:33:50 +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:*a40697a6-c28e-4998-b134-8015d55cbbbc,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-workflow52j6l/series-workflow52j6l-convert-artifact-182977557/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": "539580c1-eda4-4d4c-bcbf-5fb105c8c5d9", "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-workflow52j6l/series-workflow52j6l-build-action-297183905/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:34:00 +0000 UTC FinishedAt: 2026-08-18 10:34:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:34:00 +0000 UTC FinishedAt: 2026-08-18 10:34:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:34:00 +0000 UTC FinishedAt: 2026-08-18 10:36:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:34:00 +0000 UTC FinishedAt: 2026-08-18 10:35:56 +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:*539580c1-eda4-4d4c-bcbf-5fb105c8c5d9,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-workflow52j6l/series-workflow52j6l-build-action-297183905/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-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:36:06 +0000 UTC FinishedAt: 2026-08-18 13:37:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:36:06 +0000 UTC FinishedAt: 2026-08-18 13:37:48 +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":["sctp_verify_init","sctp_process_init"],"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:*e9106b60-e82e-46cc-be62-85813215e395,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*539580c1-eda4-4d4c-bcbf-5fb105c8c5d9,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-workflow52j6l/series-workflow52j6l-build-action-1316207208/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-workflow52j6l/series-workflow52j6l-build-action-297183905/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:36:06 +0000 UTC FinishedAt: 2026-08-18 10:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:36:06 +0000 UTC FinishedAt: 2026-08-18 10:36:11 +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":["sctp_verify_init","sctp_process_init"],"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-workflow52j6l/series-workflow52j6l-convert-artifact-3494956538/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:36:06 +0000 UTC FinishedAt: 2026-08-18 10:36:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:36:06 +0000 UTC FinishedAt: 2026-08-18 10:36:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:36:06 +0000 UTC FinishedAt: 2026-08-18 10:36:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:36:16 +0000 UTC FinishedAt: 2026-08-18 13:37:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52j6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_verify_init","sctp_process_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"f69c1d1f-9805-4051-8bbb-0d65b8aeb908","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-08-18 10:36:16 +0000 UTC FinishedAt: 2026-08-18 13:37:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e9106b60-e82e-46cc-be62-85813215e395,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*539580c1-eda4-4d4c-bcbf-5fb105c8c5d9,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-workflow52j6l/series-workflow52j6l-build-action-1316207208/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-workflow52j6l/series-workflow52j6l-build-action-297183905/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-workflow52j6l/series-workflow52j6l-convert-artifact-3494956538/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,}